Перейти к основному содержимому

Как мы обеспечиваем уверенный переход на трек релизов "Latest" в dbt Cloud

· 9 мин. чтения
Michelle Ark
Chenyu Li
Colin Rogers
"Версия без номера" теперь называется "последний" релизный трек

Этот пост в блоге был обновлён 4 декабря 2024 года, чтобы переименовать "версию без номера" в "последний" релизный трек, что позволяет вводить менее частые релизные треки. Узнайте больше о Релизных треках и о том, как их использовать.

С момента появления dbt Cloud пользователи должны были выбирать версию dbt Core для использования в своих задачах и средах. Это имело смысл в первые дни, когда минорные версии dbt Core часто включали изменения, нарушающие совместимость. Это обеспечивало ясность в том, какую версию базового времени выполнения они получали.

Однако это имело свою цену. Хотя обновление версии dbt в проекте казалось простым, как выбор из выпадающего списка, на самом деле требовались усилия для тестирования совместимости новой версии с существующими проектами, зависимостями пакетов и адаптерами. С другой стороны, откладывание этого означало отказ от доступа к новым функциям и исправлениям ошибок в dbt.

Но теперь это в прошлом. Сегодня мы готовы объявить о доступности новой опции в dbt Cloud: трек релизов "Latest".

Для клиентов это означает меньше затрат на обслуживание, более быстрый доступ к исправлениям ошибок и функциям, и больше времени для сосредоточения на самом важном: создании надежных продуктов данных. Это будет нашей стабильной основой для улучшений и инноваций в dbt Cloud.

Но мы хотели пойти дальше, чем просто сделать эту опцию доступной для вас. В этом блоге мы стремимся пролить свет на обширную работу, которую мы проделали, чтобы использование трека релизов "Latest" было стабильным и надежным опытом для тысяч клиентов, которые ежедневно полагаются на dbt Cloud.

Как мы безопасно внедряем обновления dbt в Cloud

Мы внедрили строгий, лучший в своем классе набор тестов и контрольных механизмов, чтобы гарантировать, что все изменения в dbt под капотом полностью проверены перед их развертыванием для клиентов dbt Cloud.

Этот конвейер на самом деле действует с января! Именно так мы уже поставляем непрерывные изменения сотням клиентов, которые выбрали трек релизов "Latest", пока он был в бета-версии и предварительном просмотре. За это время этот процесс позволил нам предотвратить множество регрессий до их развертывания для клиентов.

Мы очень уверены в надежности этого процесса. Мы также знаем, что нам нужно продолжать строить доверие со временем. Мы делимся деталями этой работы в духе прозрачности и для укрепления этого доверия.

Любое новое изменение в dbt-core и адаптерах проходит следующие шаги, прежде чем оно станет доступным для клиентов в dbt Cloud:

Тестирование и конвейер развертыванияТестирование и конвейер развертывания

Шаг 1: Модульные и функциональные тесты в dbt Core + адаптерах

Первым делом идет батарея из тысяч тестов, которые мы запускаем десятки раз в день. Ни одно изменение, ни в dbt-core, ни в адаптерах платформ данных, поддерживаемых dbt Cloud, не сливается, пока не пройдет этот полный набор тестов.

Здесь модульные тесты проверяют внутренние компоненты в изоляции друг от друга, а функциональные тесты представляют крайние случаи ожидаемого поведения в известных условиях.

Для адаптеров тесты также гарантируют, что полная матрица функций платформ данных продолжает работать как ожидалось: разбиение на разделы в BigQuery + стратегии инкрементного обновления, типы данных Snowflake + контракты моделей, ключи сортировки Redshift и так далее.

Шаг 2: Smoke-тестирование

Далее мы создаем образ Docker с установленными последними изменениями dbt вместе с каждым адаптером, поддерживаемым в dbt Cloud. Мы запускаем дополнительный набор сквозных тестов на этом образе по матрице поддерживаемых адаптеров, тестовых проектов, представляющих реальную сложность, популярных сторонних пакетов и типичных рабочих процессов пользователей dbt. Таким образом, этот этап тестирования также гарантирует, что последняя версия dbt не нарушает совместимость с часто используемыми пакетами dbt.

Эта широта тестирования обеспечивает раннее обнаружение любых регрессий, которые могли быть введены нашими изменениями в dbt-core, изменениями от поддерживающих адаптеры или любыми их зависимостями и драйверами — используя точно установленные версии, которые будут развернуты в dbt Cloud. Это критически важно для защиты от изменений, нарушающих совместимость, в стороннем программном обеспечении.

Шаг 3: Тесты сервисов dbt Cloud

Прежде чем новая версия образа станет доступной, мы убеждаемся, что все изменения dbt совместимы с каждым сервисом dbt Cloud, который зависит от функциональности Core, включая такие области, как Cloud IDE, Cloud CLI, запланированные запуски задач, CI и тестирование соединений.

Для каждого сервиса dbt Cloud мы запускаем набор тестов, который состоит из:

  • Модульных и интеграционных тестов, специфичных для поведения каждого сервиса dbt Cloud
  • Сквозного тестирования безголового браузера для наших приложений с более тяжелым интерфейсом
  • Совместимости каждого адаптера с этим сервисом

Этот шаг обеспечивает дополнительную глубину тестирования взаимодействия между dbt Core и специфической функциональностью приложений dbt Cloud, охватывая такие случаи, как линтинг SQL с эфемерной ссылкой или разрешение межпроектных ссылок в многопроектных развертываниях "dbt Mesh".

Шаг 4: Канареечное развертывание

Как только все вышеупомянутые тесты пройдены, мы развертываем последнюю версию для небольшой подгруппы (5%) аккаунтов, включая наш собственный проект внутренней аналитики.

Эти "канареечные" развертывания постоянно мониторятся по набору точных метрик наблюдаемости. Метрики, которые мы отслеживаем, включают общие показатели ошибок и отмены задач, чтобы убедиться, что они не отклоняются от наших ожиданий относительно стабильной базы. Любая аномалия немедленно предупреждает нас, и мы можем отключить канареечное развертывание за считанные секунды, сохраняя все аккаунты на последней стабильной версии.

Шаг 5: Постепенное развертывание

Как только канареечное развертывание доказало свою стабильность в течение как минимум 24 часов, мы отмечаем его как готовое для обновления всех аккаунтов при их следующем запланированном развертывании dbt Cloud.

к сведению

Даже при наличии надежной системы тестирования, развертывания и мониторинга, никогда не будет невозможно, чтобы изменение, нарушающее совместимость, прошло — как и в любом другом SaaS-приложении.

Если это произойдет, мы обязуемся как можно быстрее выявить и откатить любые изменения, нарушающие совместимость. В рамках новой модели тестирования и развертывания в dbt Cloud мы можем откатить ошибочные релизы менее чем за час.

Все инциденты анализируются, чтобы убедиться, что мы не только выявляем и исправляем коренные причины, но и оперативно внедряем тестирование, автоматизацию и контроль качества, чтобы гарантировать, что та же проблема никогда не повторится.

Результатом этого процесса является то, что, когда вы выбираете трек релизов "Latest" в dbt Cloud, время между улучшением в dbt Core и его безопасным доступом в ваших проектах составляет считанные дни — вместо месяцев ожидания следующего релиза dbt Core, плюс любое дополнительное время, которое могло потребоваться для фактического выполнения обновления.

Мы рады сообщить, что на момент написания (2 мая 2024 года), с момента бета-запуска трека релизов "Latest" в dbt Cloud в марте, у нас не было ни одной функциональной регрессии, достигшей клиентов, в то время как мы также ежедневно поставляем множество улучшений функциональности dbt. Это основа, на которой мы намерены строить в обозримом будущем.

Стабильность как функция

Строгий конвейер тестирования в dbt Cloud имеет решающее значение, но для реальной постоянной стабильности требовались более глубокие изменения в самом фреймворке dbt. Мы серьезно относимся к нашей ответственности как к хранителям dbt Core, а также к экосистеме с открытым исходным кодом вокруг него.

Мы выбрали более длительный цикл релизов для предстоящего выпуска dbt Core v1.8, чтобы пересмотреть некоторые из "сделать позже" проектных решений, которые мы принимали в прошлом — в частности, в отношении совместимости адаптеров, управления изменениями поведения и артефактов метаданных.

Разделение интерфейса адаптера

Интерфейс адаптера — то есть, как dbt Core фактически подключается к сторонней платформе данных — исторически был некоторой болью. Поддерживающие адаптеры часто были вынуждены вносить реактивные изменения, когда происходило обновление dbt Core.

Чтобы решить эту проблему, мы выпустили новый набор интерфейсов, которые полностью независимы от библиотеки dbt-core: dbt-adapters==1.0.0. С этого момента любые изменения в dbt-adapters будут обратно и вперед совместимыми. Это также отделяет обслуживание адаптеров от регулярного цикла релизов dbt Core — что означает, что поддерживающие адаптеры получают полный контроль над тем, когда они выпускают реализации новых функций, поддерживаемых адаптерами.

Обратите внимание, что адаптеры, работающие в dbt Cloud, должны быть перенесены на новую разделенную архитектуру в качестве основы для поддержки нового трека релизов "Latest".

Управление изменениями поведения: стабильность как функция

Мы все хотим преимуществ стабильного, активно поддерживаемого продукта. Иногда команда dbt Labs видит возможность для изменения поведения по умолчанию, которое, по нашему мнению, более разумно, более безопасно, более полезно — просто лучше в каком-то смысле — но которое будет изменением для пользователей, привыкших к существующему поведению.

Чтобы удовлетворить обе группы в этих сценариях, мы расширили dbt, чтобы поддерживать флаги поведения на уровне проекта. Эти флаги могут использоваться для включения или отключения изменений в поведении по умолчанию. С этого момента изменения в функциональности dbt, несовместимые с предыдущими версиями, будут реализованы за флагом с значением по умолчанию, сохраняющим старое поведение. Через несколько месяцев новое поведение станет стандартным — но только после некоторой проактивной коммуникации с клиентами и внешними поддерживающими пакетами.

Те же флаги изменения поведения естественным образом распространятся на пакеты dbt, которые по сути являются просто проектами dbt. Это позволяет поддерживающим пакеты гарантировать, что поведение не изменится неожиданно в результате изменений в dbt Core. Для получения более подробной информации ознакомьтесь с нашей пользовательской документацией по устаревшим поведениям, а также с нашей документацией для участников для безопасного введения изменений в поведении.

Стабильность для артефактов метаданных

Наконец, мы пересмотрели наш процесс вокруг интерфейсов артефактов. Это рабочие лошадки многих интеграций в экосистеме dbt: тех, которые поддерживаются dbt Labs, сторонними поставщиками или просто самодельными в конкретной организации. Хотя эти схемы были версионированы и хорошо определены с момента выхода dbt Core v1.0, они изменялись во многих минорных релизах с тех пор.

Теперь мы формализовали наши лучшие практики разработки, чтобы сильно предпочитать незначительные эволюции схемы вместо крупных изменений, нарушающих совместимость. Мы также внедрили проверки, чтобы гарантировать, что мы не вводим непреднамеренно изменения, нарушающие совместимость, в артефакты, тем самым избегая сбоев в интеграциях по всей экосистеме.

Наше обязательство

В заключение, мы вкладываем много новых усилий в наши обязательства перед клиентами dbt Cloud, сообществом dbt и широкой экосистемой:

  • Непрерывные обновления: Трек релизов "Latest" в dbt Cloud упрощает процесс обновления, гарантируя, что у вас всегда есть последние функции и исправления ошибок без затрат на обслуживание.
  • Строгий новый процесс тестирования и развертывания: Наш новый конвейер тестирования гарантирует, что каждое обновление тщательно проверяется на соответствие задокументированным интерфейсам, поддерживаемым в Cloud адаптерам и популярным пакетам, прежде чем оно достигнет вас. Этот процесс минимизирует риск регрессий — и уже успешно полностью предотвращает их для сотен клиентов на протяжении нескольких месяцев.
  • Обязательство к стабильности: Мы пересмотрели наши подходы к интерфейсам адаптеров, управлению изменениями поведения и артефактам метаданных, чтобы предоставить вам больше стабильности и контроля.

По мере того, как мы продолжаем улучшать dbt Cloud, наше обязательство остается твердым: предоставлять стабильную, надежную платформу, которая позволяет нашим пользователям тратить меньше времени на обслуживание и сосредоточиться на создании ценности.

Comments

Loading