Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №90, Алексей Жиряков (онла...

Moscow Python Meetup №90, Алексей Жиряков (онлайн-кинотеатр KION, TechLead Backend команды витрины). Remote Config и АБ-эксперименты

Расскажем о том, как KION мы создали свой Remote Config и разбивалку для проведения АБ экспериментов (аналог firebase).

Видео: https://moscowpython.ru/meetup/90/remote-config/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Moscow Python Meetup

April 26, 2024
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. О себе Алексей Жиряков Руководитель направления бекенд команды витрины в

    KION Знаю что такое контроль хвостовой рекурсии Больше 10 лет в медиа ИТ Люблю Python и комедии В качестве хобби написал распределенную поисковую систему
  2. Для чего нужен Remote Config? Получение конфигов Без деплоя А/Б

    эксперименты Фиче Флаги Конфиги для контуров
  3. Почему свой продукт? Долгая разработка фич по запросу - Минусы

    сторонних решений Не все решения поддерживают многовариативность тестов У А/B разбивалок нет функциональности remote config Заточены под веб сервисы + Плюсы сторонних решений Готовая визуализация Прогнозирование результатов Сбор метрик поведения пользователя (интеграция с сервисами метриками) Срок реализации Лимиты
  4. Фичи A/B эксперименты Изменение конфигурации устройств в реальном времени Независимые

    неймспейсы Ролевая модель в рамках одного неймспейса Система нотификации в телеграм Наследование конфигов
  5. Фичи Вариативность конфигов по версии, модели, ОС Разделение параметров по

    продуктовым командам Создание своих вариаций Полное кеширование данных, высокая скорость ответа Поэтапная раскатка Белые/черные списки
  6. Namespaces Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая

    команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Blender
  7. Remote config PARAMETER value is_json is_numeric description CORE name description

    parameters configs CONFIG name parameters core experiments EXPERIMENT name description configs coverage filters SPEC_PARAM name description filters parameters 1 M M M M M M M M M
  8. Remote config EXPERIMENT Model = [Samsung, LG] OS = [SmartTV]

    Version = [1 : 4.5] ClientId = 123456 CORE CONFIG CORE CONFIG SPECIAL PARAMETER Model = [Samsung, LG] OS = [SmartTV] Version = [1 : 4.5] ClientId = 123456 PARAMS PARAMS PARAMS
  9. Как собирается конфиг? Попадает ли клиент в контрольную группу? Есть

    ли дефолтные параметры? Есть ли эксп для такого клиента? Попадает ли клиент в покрытие экспа? В какой вариант экспа попал клиент? Есть ли спец параметры для такого клиента? client_id = 68398456 OS = AndroidTV model = IP_TV version = 1.45.19 "params": {}, "experiments": [], "parameters_hash": str
  10. Как собирается конфиг? { "var_1": CRD_1, "var_2": CRD_2 } {

    "var_2": CND_1, "var_3": CND_2 } { "var_3": CRE_1, "var_4": CRE_2 } { "var_4": SP_1, "var_5": SP_2 } { "var_5": CNE_1, "var_6": CNE_2 } Core default Config default Core exp Special param Config exp { "var_1": CRD_1, "var_2": CND_1, "var_3": CRE_1, "var_4": SP_1, "var_5": SP_2 } = + + + +
  11. АБ эксперименты EXPERIMENT IF Hash(Client_id + соль покрытия) % 100

    < покрытие: return True Попадает ли клиент в покрытие эксперимента? Model OS Version Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442
  12. АБ эксперименты EXPERIMENT N = Hash(Client_id + соль конфигов) %

    100 IF N in [0:50]: return Config_1 IF N in [50:100]: return Config_2 Какой конфиг вернется клиенту? CONFIG [0:50] CONFIG [50:100] 50% 50% Model OS Version Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442
  13. АБ эксперименты EXPERIMENT N = Hash(Client_id + соль конфигов) %

    150 IF N in [0:50]: return Config_1 IF N in [50:150]: return Config_2 CONFIG [0:50] CONFIG [100:150] CONFIG [50:150] 33,33% 66,66% Model OS Version Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442 Какой конфиг вернется клиенту?
  14. АБ эксперименты EXPERIMENT N = Hash(Client_id + соль конфигов) %

    150 IF N in [0:50]: return Config_1 IF N in [50:100]: return Config_2 IF N in [100:150]: return Config_3 CONFIG [0:50] CONFIG [100:150] CONFIG [50:100] 33,33% 33,33% 33,33% Model OS Version Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442 Какой конфиг вернется клиенту?
  15. АБ эксперименты EXPERIMENT Black list White list Model OS Version

    Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442
  16. АБ эксперименты EXPERIMENT CORE CONFIG PARAMS CORE CONFIG PARAMS Black

    list White list Model OS Version Покрытие Соль покрытия Соль конфигов Запуск Остановка = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442 = 01.01.24 22:00 = 01.02.24 22:00