Лекция

Двадцать пять тем о том, как довозят версию

Код одинаковый. Дефект в нём один и тот же независимо от того, каким способом его довезли до пользователей. Способ выката не уменьшает вероятность ошибки — он управляет двумя другими величинами: скольких людей ошибка затронет и через сколько минут её заметят.

Отсюда предмет лекции. Не «как настроить инструмент», а инженерия самого выката: чем отличаются четыре способа довезти версию, что каждый из них ловит и чего не ловит, сколько стоит безопасность в минутах задержки и откуда берётся число, по которому принимается решение вернуться.

1%
видит общий мониторинг, когда канарейка на 5% трафика отдаёт 20% ошибок
45 мин
распространение конфигурации Azure Front Door после аварий — было 5–10 минут
734 дня
медианный срок жизни флага функций в Kubernetes
7 из 8
исправных серверов Knight Capital, с которых сняли новый код — и авария стала хуже

Главная мысль, вокруг которой собрано всё остальное

Критерий отката — метрика, порог, окно наблюдения и имя того, кто имеет право не откатывать, — назначается до выката. В момент, когда всё горит, человек, который смотрит на графики, уже заинтересован в том, чтобы выкат состоялся. Критерий, обсуждаемый в этот момент, всегда оказывается мягче, чем был бы назначен заранее.

Что берётся готовым из соседних лекций

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

Двадцать пять тем, семьдесят пять проверочных вопросов. Все цифры — из первоисточников: определения Комиссии по ценным бумагам и биржам США, разбора аварий от самой Microsoft, справочника API Kubernetes, главы Google SRE Workbook, заметки Мартина Фаулера, работы по флагам функций, ГОСТ Р 57580.1 и методического документа ФСТЭК.

Тема 1 из 25 · Два события и четыре способа

Развёртывание и релиз — два разных события

Различие, без которого не работает ничего дальше. Два слова, которые в разговоре сливаются в одно, обозначают два события, и они могут быть разнесены во времени.

deployment
Развёртывание

Новый код физически оказался на серверах и запущен. Техническое событие: файлы на месте, процесс поднят, проба готовности отвечает.

release
Релиз

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

По умолчанию это одно событие: выкатил — значит включил. Флаг функций их разделяет: код едет, поведение спит. Отсюда прямое следствие, ради которого различие и вводится — выключить функцию можно, не выкатывая ничего.

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

Рассуждение, а не цитата первоисточника

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

Чем развёртывание отличается от релиза?
Развёртывание — физический факт: код на серверах и запущен. Релиз — доступность нового поведения пользователям. Среда тут ни при чём: оба события происходят в бою. По умолчанию они совпадают, и разносит их флаг функций.
Почему разнесение этих двух событий меняет время возврата?
Когда код уже на серверах, а поведение выключено флагом, возврат не требует нового цикла сборки и доставки: достаточно изменить значение в конфигурации. Автоматизм тут ни при чём — переключение всё равно делает человек или правило.
Команда завела флаг, который скрывает новый раздел в интерфейсе. Фоновая задача при этом продолжает писать записи нового формата в общую таблицу. Что здесь не так?
Граница флага проходит не там, где кажется. Интерфейс скрыт, но данные нового формата уже в базе, и выключение флага их не уберёт. Разделение развёртывания и релиза держится только на том, что флаг гасит поведение полностью.
Бесплатный доступ

Дальше нужен аккаунт

Прогресс и монеты сохранятся.