Таргетинг
Таргетинг определяет, какие пользователи увидят фичу. можно. использует контекстные правила (constraints), сегменты и процентный роллаут для точного управления аудиторией.
Как работает таргетинг
При оценке флага SDK последовательно проверяет:
- Флаг включён? — если флаг (или стратегия) выключен, вернуть
false - Контекстные правила — все заданные правила должны совпасть (логическое И)
- Сегменты — хотя бы один сегмент должен совпасть (логическое ИЛИ)
- Если заданы и правила, и сегменты — достаточно совпадения любого из них (ИЛИ)
- Процентный роллаут — детерминированное распределение через MurmurHash32
- По умолчанию — если ничего не задано, вернуть
true
graph TD
CTX[Контекст запроса] --> EN{Флаг включён?}
EN -->|Нет| FALSE[false]
EN -->|Да| HAS_RULES{Есть контекстные<br/>правила?}
HAS_RULES -->|Да| EVAL_RULES[Проверка всех правил<br/>AND-логика]
HAS_RULES -->|Нет| HAS_SEG{Есть сегменты?}
EVAL_RULES --> RULES_OK{Все правила<br/>совпали?}
RULES_OK -->|Нет| HAS_SEG
RULES_OK -->|Да| PCT[Процентный роллаут]
HAS_SEG -->|Да| EVAL_SEG[Проверка сегментов<br/>OR-логика]
HAS_SEG -->|Нет| PCT
EVAL_SEG --> SEG_OK{Хотя бы один<br/>сегмент совпал?}
SEG_OK -->|Нет| HAS_RULES
SEG_OK -->|Да| PCT
PCT --> TRUE[true]
Контекстные правила
Каждое правило — это сравнение поля контекста со значением через оператор. Все правила внутри стратегии объединяются логическим И.
{
"field": "country",
"operator": "in",
"values": ["RU", "BY", "KZ"]
}Тип контекста (contextType) определяет, как оператор интерпретирует значение. Полная матрица совместимости операторов и типов — Контексты.
Сегменты
Сегмент — переиспользуемая группа пользователей со своим набором контекстных правил. Внутри сегмента все правила — AND-логика. Стратегия может ссылаться на несколько сегментов — достаточно совпадения любого из них (OR-логика). Подробнее — Сегменты.
Преимущества сегментов
| Преимущество | Описание |
|---|---|
| Единая точка правды | Изменили сегмент — все флаги автоматически обновились |
| DRY | Не повторяете одни и те же правила на каждом флаге |
| Аудит | Видно, кто и когда изменил состав сегмента |
Процентный роллаут
Детерминированное распределение через хеширование:
hash = MurmurHash32(flagKey + идентификатор) % 100
if hash < percentage → enabledОдин и тот же идентификатор всегда получает одинаковый результат для одного флага. В качестве идентификатора используется userId, затем sessionId; если не передан ни один — SDK использует автоматически сгенерированный стабильный anonymousId.
Важно: Если опция
stickyAnonIdотключена и идентификатор не передан, хеш считается только по ключу флага — все анонимные пользователи попадают в одну группу (либо все получают фичу, либо никто). SDK выводит предупреждение в лог. Подробнее — Роллаут.
При 100% роллауте фича включена для всех; при 0% — выключена.
Как сочетаются условия и сегменты
Одна стратегия может содержать и контекстные условия, и сегменты одновременно:
- Достаточно пройти хотя бы что-то одно — условия ИЛИ любой из сегментов
- Не пройдено ни условий, ни сегментов → флаг возвращает
false(роллаут не применяется) - Пройдено → применяется процентный роллаут
Что дальше?
- Роллаут — процентная раскатка и стратегии
- Сегменты — переиспользуемые группы пользователей
- Флаги — типы флагов и жизненный цикл
- SDK: Обзор — как SDK оценивает правила локально