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