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: тот же прикладной код, флаги из локального файла.