Роллаут
Роллаут (rollout) — процесс постепенного включения фичи для всё большего числа пользователей. можно. поддерживает процентный роллаут с детерминированным распределением на основе MurmurHash32.
Как работает процентный роллаут
Процентный роллаут — это поле percentage (0–100) в настройках стратегии флага. При оценке флага SDK вычисляет:
hash = MurmurHash32(flagKey + (userId || sessionId)) % 100
if hash < percentage → enabledMurmurHash32 гарантирует детерминированность: один и тот же пользователь всегда получает одинаковый результат для одного флага при неизменном проценте. Пользователь не «прыгает» между включённым и выключенным состоянием.
graph LR
Eval[Оценка флага] --> Hash[MurmurHash32<br/>flagKey + userId]
Hash --> Bucket{hash % 100<br/>< percentage?}
Bucket -->|Да| True[Включён]
Bucket -->|Нет| False[По умолчанию]
Пошаговая стратегия раскатки
graph LR
S0["0%<br/>Выключено"] -->|Проверка| S1["1%<br/>Канареечный"]
S1 -->|Мониторинг 30 мин| S2["5%<br/>Расширенный"]
S2 -->|Мониторинг 2 часа| S3["25%<br/>Четверть"]
S3 -->|Мониторинг 1 день| S4["50%<br/>Половина"]
S4 -->|Мониторинг 1 день| S5["100%<br/>Все"]
Этапы роллаута
| Этап | Процент | Длительность | Что проверять |
|---|---|---|---|
| 0% — Подготовка | 0% | Перед запуском | Флаг создан, стратегия настроена, код задеплоен |
| 1% — Канареечный | 1% | 30 минут | Ошибки, latency, расход памяти. Если аномалии — откат |
| 5% — Расширенный | 5% | 2 часа | Стабильность метрик, бизнес-показатели |
| 25% — Четверть | 25% | 1 день | Поведение на разнообразной аудитории |
| 50% — Половина | 50% | 1 день | Сравнение метрик со старым вариантом |
| 100% — Все | 100% | — | Фича полностью включена |
Совет: Не пропускайте этапы. Даже «безопасная» фича может вызвать непредвиденный рост нагрузки. Канареечный деплой на 1% выявляет проблемы с минимальными последствиями.
Совмещение с таргетингом
Правила таргетинга и процентный роллаут работают вместе:
- Сначала проверяются контекстные правила (AND-логика)
- Затем проверяются сегменты (OR-логика)
- Если не сработало ни то, ни другое — применяется процентный роллаут
- Если процентный роллаут не задан — возвращается
true
Пример: Internal + 10% external:
| Приоритет | Тип | Конфигурация |
|---|---|---|
| 1 | Контекстное правило | email contains "@company.com" |
| — | Процентный роллаут | 10% по userId |
| — | По умолчанию | false |
Все сотрудники получают фичу (правило совпало), и 10% внешних пользователей тоже получают. Остальные 90% внешних — нет.
Откат (Rollback)
Мгновенный откат
Отключите стратегию (enabled: false) или установите процент в 0:
curl -X PUT "http://localhost:8080/api/v1/flags/42/strategies" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"flagId": 42, "environmentId": 3, "enabled": false}'Kill Switch — экстренный откат
Для критических ситуаций используйте флаг типа KILLSWITCH:
if (!client.isEnabled("payment-gateway-killswitch")) {
throw new ServiceUnavailableException();
}Kill Switch всегда включён; когда его выключают в панели, isEnabled() возвращает false — функциональность мгновенно блокируется.
Роллаут по окружениям
Разные окружения имеют независимые настройки роллаута:
| Окружение | Процент | Правила |
|---|---|---|
| dev | 100% | Без ограничений |
| staging | 100% | Сегмент «Тестировщики» |
| production | 1% → 100% | Поэтапная раскатка |
Это позволяет тестировать фичу на staging и dev без ограничений, одновременно проводя осторожный роллаут на production.
Что дальше?
- Таргетинг — настройка правил и сегментов
- Работа с флагами — жизненный цикл и командный процесс
- Аудит — отслеживание всех изменений роллаута