awesome-everything EN
↑ Обратно к восхождению

Инженерная практика

Feature flags: выкатить тёмным, раскатать и вывести из эксплуатации

Суть Практический проект — соберите маленькую систему флагов со sticky-rollout и kill switch, выкатите фичу тёмной, раскатайте её, затем пройдите жизненный цикл и выведите флаг из эксплуатации с доказательствами на каждом шаге.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 240 min

Читать про флаги — не то же самое, что прожить полный жизненный цикл. Соберите маленький сервис с флагами, выкатите фичу тёмной, раскатайте её sticky-процентом с готовым kill switch, затем сделайте то, что большинство команд пропускает — выведите флаг из эксплуатации и удалите его мёртвую ветку, доказывая каждый шаг.

Цель

Превратите ментальную модель юнита в воспроизводимый цикл: выкатить тёмным, раскатать sticky, включить kill switch по требованию и провести флаг через полный жизненный цикл до вывода из эксплуатации — чтобы дисциплина, предотвращающая flag debt, стала мышечной памятью.

Проект
0 из 7
Цель

Соберите маленький HTTP-сервис с минимальным слоем feature flags, выкатите одну фичу тёмной, проведите её через sticky percentage rollout с рабочим kill switch, затем пройдите полный жизненный цикл вывода из эксплуатации — доказывая разделение deploy/release, stickiness, fail-open вычисление и чистое удаление с доказательствами на каждом шаге.

Требования
Критерии приёмки
  • Лог/таблица раскатки, показывающая отданную долю на 1/5/25/100%, совпадающую с целью, плюс доказательство, что фиксированная выборка пользователей оставалась на одном варианте между запросами (доказывая stickiness, а не порозыгрышную случайность).
  • Демонстрация kill switch: подсистема выключается за секунды после переключения, а принудительный сбой источника флагов показывает, что сервис всё ещё отдаёт по последнему известному конфигу, а не падает (fail-open проверен, а не предположен).
  • Запись реестра флагов на каждый флаг с типом, владельцем и сроком/тикетом на удаление для release-флага.
  • Diff (или PR), удаляющий release-флаг и его мёртвую ветку, с grep/поиском, показывающим ноль оставшихся ссылок, и закрытым тикетом на чистку — жизненный цикл завершён, а не оставлен на 100%.
Senior-стретч
  • Добавьте слоистые/атрибутные правила targeting (plan == enterprise, betaOptIn == true, затем sticky-rollout) и продемонстрируйте приоритет first-match short-circuit на тест-кейсах.
  • Добавьте детектор застойных флагов: скрипт, перечисляющий флаги, отдающие одно значение более ~30 дней, и пропускающий типизированные как постоянные ops/kill switch — ваш Piranha-lite.
  • Добавьте CI-гейт, роняющий сборку, когда release-флаг просрочил срок или не имеет тикета на удаление, чтобы flag debt не накапливался молча.
  • Добавьте авто-остановку по метрикам: подключите раскатку к чтению error rate и автоматически выключайте флаг, если шаг ramp пробивает порог, затем опишите, как это превращает откат из человеческого решения в гардрейл.
Итог

Это цикл, который вы прогоняете на каждом флаговом релизе: выкатить тёмным, чтобы deploy и release были разными событиями, раскатать sticky по стабильному хешу, чтобы пользователи не мигали, держать kill switch подключённым к локальному конфигу с безопасным дефолтом, чтобы источник флагов никогда не был жёсткой зависимостью, типизировать каждый флаг с владельцем и сроком, и завершить жизненный цикл, удалив release-флаг и его мёртвую ветку на 100%. Один проход end-to-end на игрушечном сервисе делает продовую дисциплину — ту самую, что спасла бы Knight Capital, — автоматической.

Продолжить восхождение ↑Безвинные постмортемы: превращать аварии в системы, что чинишь, а не в людей, кого винишь
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.