Гайды
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 | Отключить тяжёлый эксперимент |
| Permission | Beta для сегмента (осторожно с безопасностью) |
2. Клиент SDK
Инициализация с ключом окружения, user context (ключ стабильный, без PII в ключе), кэширование значений, streaming обновлений.
Контекст оценки обычно включает: стабильный key пользователя или сессии, kind (user/organization), атрибуты для таргетинга (тариф, регион, версия приложения). Не передавайте в провайдер пароли и токены.
Упрощённый псевдокод (идея для любого SDK):
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»