Гайды

Feature flags: LaunchDarkly и переключатели в коде

Типы флагов, SDK и контекст, технический долг, безопасные дефолты и GitOps.

~8 мин чтения

Feature flags: LaunchDarkly и переключатели в коде

Feature flags позволяют включать функции без нового деплоя, катить canary по проценту пользователей, kill switch при инциденте. LaunchDarkly и аналоги дают UI, таргетинг, аудит; для простых случаев — config + env или open-source Unleash, Flagsmith. Деплой — GitOps с Argo CD; микросервисы — паттерны микросервисной архитектуры.


1. Типы флагов

ТипПример
ReleaseНовый UI для 5% пользователей
OpsОтключить тяжёлый эксперимент
PermissionBeta для сегмента (осторожно с безопасностью)

2. Клиент SDK

Инициализация с ключом окружения, user context (ключ стабильный, без PII в ключе), кэширование значений, streaming обновлений.

Контекст оценки обычно включает: стабильный key пользователя или сессии, kind (user/organization), атрибуты для таргетинга (тариф, регион, версия приложения). Не передавайте в провайдер пароли и токены.

Упрощённый псевдокод (идея для любого SDK):

ts
const client = ldClient(process.env.LD_SDK_KEY!);
await client.waitForInitialization({ timeout: 5 });
const showNewCheckout = await client.variation(
  "new-checkout",
  { key: user.id, kind: "user", email: user.email },
  false // значение по умолчанию при сбое сети
);

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


3. Технический долг

Удаляйте мертвые флаги; иначе код превращается в лабиринт if flagX.


4. Консистентность

На одной странице фронт и бэк могут читать разные версии флага — продумайте UX для короткого рассинхрона.


5. Серверные vs клиентские флаги

Сервер решает критичные ветки (цены, лимиты, доступ к API); клиент — только отображение. Не полагайтесь на «скрытый» UI: клиентский бандл всё равно раскрываем.


6. Процесс в команде

Владелец флага, срок жизни, задача на удаление после раскатки. В PR — ссылка на тикет флага; в релиз-нотах — какие флаги изменились.


7. OpenFeature и смена провайдера

OpenFeature — открытый API поверх LaunchDarkly, Unleash, Flagsmith и др.: один интерфейс в коде, провайдер подключается конфигурацией. Упрощает миграцию между вендорами и единообразие в полирепозитории (одинаковые хуки/обёртки на фронте и бэке).


8. Чек-лист

  • Флаги по умолчанию безопасное значение при сбое SDK.
  • Аудит кто включил флаг в прод.
  • Не хранить секреты в payload флагов.
  • Rate limit и кэш SDK, чтобы не DDoS-ить свой же сервис флагов.
  • Регрессионные тесты для обоих состояний флага (on/off).

Дальше: тег «Feature flags»