Skip to content

Роллаут

Роллаут (rollout) — процесс постепенного включения фичи для всё большего числа пользователей. можно. поддерживает процентный роллаут с детерминированным распределением на основе MurmurHash32.

Как работает процентный роллаут

Процентный роллаут — это поле percentage (0–100) в настройках стратегии флага. При оценке флага SDK вычисляет:

hash = MurmurHash32(flagKey + (userId || sessionId)) % 100
if hash < percentage → enabled

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

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% выявляет проблемы с минимальными последствиями.

Совмещение с таргетингом

Правила таргетинга и процентный роллаут работают вместе:

  1. Сначала проверяются контекстные правила (AND-логика)
  2. Затем проверяются сегменты (OR-логика)
  3. Если не сработало ни то, ни другое — применяется процентный роллаут
  4. Если процентный роллаут не задан — возвращается true

Пример: Internal + 10% external:

ПриоритетТипКонфигурация
1Контекстное правилоemail contains "@company.com"
Процентный роллаут10% по userId
По умолчаниюfalse

Все сотрудники получают фичу (правило совпало), и 10% внешних пользователей тоже получают. Остальные 90% внешних — нет.

Откат (Rollback)

Мгновенный откат

Отключите стратегию (enabled: false) или установите процент в 0:

bash
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:

java
if (!client.isEnabled("payment-gateway-killswitch")) {
    throw new ServiceUnavailableException();
}

Kill Switch всегда включён; когда его выключают в панели, isEnabled() возвращает false — функциональность мгновенно блокируется.

Роллаут по окружениям

Разные окружения имеют независимые настройки роллаута:

ОкружениеПроцентПравила
dev100%Без ограничений
staging100%Сегмент «Тестировщики»
production1% → 100%Поэтапная раскатка

Это позволяет тестировать фичу на staging и dev без ограничений, одновременно проводя осторожный роллаут на production.

Что дальше?

Released under the AGPL v3.0 License.