Обзор концептов
Все ключевые понятия можно. связаны в единую систему. Три диаграммы ниже показывают, как они работают вместе.
Как устроен флаг
Один и тот же флаг живёт во всех окружениях. На каждом окружении — независимые правила активации.
graph LR
F["Флаг<br/><b>new-checkout</b>"]
ENV1["Development<br/>ON, <b>100%</b>"]
ENV2["Production<br/>ON, <b>25%</b><br/>Premium-сегмент"]
F --> ENV1
F --> ENV2
В Development флаг включён для всех. В Production — только для Premium-пользователей с роллаутом 25%. Изменение правил на одном окружении не затрагивает другие.
Из чего состоят правила активации
Задача: флаг new-checkout должен включаться для пользователей с country=RU И plan=premium, ИЛИ для бета-тестеров, ИЛИ для QA-инженеров. Раскатка — на 25%.
flowchart TD
A["Флаг <b>включён</b>?"] -->|нет| X["<b>false</b>"]
A -->|да| B["Контекст совпал?<br/>country=RU <b>И</b> plan=premium"]
B -->|да| D["Хеш от userId<br/><b>меньше</b> 25%?"]
B -->|нет| C1["Входит в сегмент<br/><b>Бета-тестеры</b>?"]
C1 -->|да| D
C1 -->|нет| C2["Входит в сегмент<br/><b>QA-инженеры</b>?"]
C2 -->|да| D
C2 -->|нет| X
D -->|да| Y["<b>true</b>"]
D -->|нет| X
- Контекст — AND: все атрибуты должны совпасть. Не совпали — идём дальше.
- Сегменты — OR: проверяем каждый по очереди. Достаточно одного совпадения.
- Роллаут — MurmurHash32 от
flagKey + userId. Хеш меньше процента → true.
Как SDK оценивает флаг
Приложение передаёт контекст в SDK. SDK забирает правила с платформы и оценивает флаг локально — без задержек сети.
flowchart LR
APP[Приложение]
CTX["Контекст<br/>country=RU<br/>plan=premium"]
SDK[SDK]
RULES[(Правила активации<br/>AND + OR + 25%)]
RESULT["<b>true</b> / <b>false</b>"]
APP -->|передаёт| CTX
CTX -->|передаётся в| SDK
SDK -->|загружает по API-ключу| RULES
SDK -->|возвращает| RESULT
SDK вызывает isEnabled("new-checkout", ctx), проверяет контекст по правилам, затем сверяет хеш с процентом роллаута. Сервер хранит только правила — контекст не покидает ваше приложение.
Флаг
Именованная точка переключения в коде. Поддерживает два типа:
| Тип | Для чего | Пример |
|---|---|---|
| RELEASE | Постепенная раскатка | new-checkout — новый процесс оформления заказа, включается с 1% до 100% |
| KILLSWITCH | Аварийное отключение | kill-payment-gw — платёжный шлюз упал, админ выключает его мгновенно |
Подробнее: Флаги
Правила активации
Определяют, кто увидит фичу на конкретном окружении. Включают состояние (ON/OFF), контекстные условия, сегменты и процентный роллаут.
Подробнее: Правила активации
Сегмент
Переиспользуемая группа пользователей, объединённая общими признаками. Вместо дублирования правил на каждом флаге — создаёте сегмент один раз.
Примеры: «Premium-подписчики», «Пользователи из России», «Бета-тестеры».
Подробнее: Сегменты
Контекст
Атрибуты пользователя или запроса, которые SDK передаёт при оценке флага:
MozhnoContext ctx = MozhnoContext.builder()
.userId("user-123")
.addProperty("country", "RU")
.addProperty("plan", "premium")
.build();
boolean enabled = client.isEnabled("new-checkout", ctx);Подробнее: Таргетинг
Окружение
Логически изолированный контекст для флагов. При создании проекта автоматически создаются Development и Production. Можно добавлять свои (например, Staging). Лимит Community — 3 окружения на проект.
Подробнее: Окружения
API-ключ
Ключ доступа SDK к платформе. Привязан к окружению и проекту. Два типа: SERVER (серверные SDK) и FRONTEND (браузерные/мобильные SDK).
Подробнее: API-ключи
Что дальше?
- Флаги — типы флагов и жизненный цикл
- Контексты — атрибуты, whitelist и операторы
- Правила активации — как настраивать таргетинг
- Окружения — изоляция и лимиты