Skip to content

Обзор концептов

Все ключевые понятия можно. связаны в единую систему. Три диаграммы ниже показывают, как они работают вместе.

Как устроен флаг

Один и тот же флаг живёт во всех окружениях. На каждом окружении — независимые правила активации.

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 передаёт при оценке флага:

java
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-ключи

Что дальше?

Released under the AGPL v3.0 License.