Skip to content

oneflag-sdk

Провайдер OpenFeature для сервера OneFlag.

Какую задачу решает

Приложению нужно значение флага здесь и сейчас, причём быстро и надёжно. Наивная реализация обращается к серверу на каждый вызов, и тогда флаг превращается в источник задержек и точку отказа.

SDK решает это тремя приёмами, которые используют зрелые системы управления флагами:

  1. Снимок конфигурации. При инициализации забирается вся конфигурация окружения одним запросом.
  2. Локальная оценка. Значение вычисляется в процессе приложения, обращений к сети при вызове нет.
  3. Живое обновление. Изменения приходят потоком Server-Sent Events, поэтому снимок не устаревает, а перезапуск не нужен.

Почему не просто «получить флаг по HTTP»

ПодходЗадержка вызоваПоведение при недоступном сервереТрафик
Запрос на каждый вызовсетевая задержкаприложение ломается или ждёт таймаутвысокий
Опрос по таймерунулеваяработает на устаревшем снимкепостоянный
Снимок и поток измененийнулеваяработает на последнем снимкетолько при изменениях

Согласованность с сервером

Правила разрешения значения (выключенный флаг, правила таргетинга, процентная выкатка, вариант по умолчанию) вынесены в класс FlagEvaluator, который используют и сервер OneFlag, и этот SDK. Если бы каждая сторона считала флаги своим кодом, значение в дашборде рано или поздно разошлось бы со значением в приложении, а такие расхождения ищут неделями.

Поведение при сбоях

  • Сервер недоступен при старте: провайдер переходит в состояние ERROR, клиент OpenFeature отдаёт переданные значения по умолчанию. Приложение продолжает работать.
  • Поток изменений оборвался: клиент переподключается сам и передаёт Last-Event-ID, поэтому события не теряются.
  • Поток недоступен вовсе: снимок уже загружен, флаги считаются локально, живое обновление просто не работает.

Флаги не должны ронять приложение, поэтому методы оценки не выбрасывают исключений ни в одном из этих случаев.

Ограничения

  • HTTPS не поддерживается: нужен обратный прокси.
  • Снимок обновляется целиком; частичных обновлений по одному флагу нет. Для конфигураций из тысяч флагов это означает лишний трафик при частых правках.

Альтернатива без сервера

Если сервер OneFlag не нужен, возьмите провайдер JsonFileProvider из библиотеки openfeature: тот же прикладной код, флаги из локального файла.