Slide 1

Slide 1 text

Remote Config и АБ эксперименты

Slide 2

Slide 2 text

О себе Алексей Жиряков Руководитель направления бекенд команды витрины в KION Знаю что такое контроль хвостовой рекурсии Больше 10 лет в медиа ИТ Люблю Python и комедии В качестве хобби написал распределенную поисковую систему

Slide 3

Slide 3 text

О чем поговорим Remote Config А/B эксперименты Контуры конфигов Как обсчитывать

Slide 4

Slide 4 text

Что такое Remote Config и зачем он нужен? User

Slide 5

Slide 5 text

Как выглядит Config

Slide 6

Slide 6 text

Для чего нужен Remote Config? Получение конфигов Без деплоя А/Б эксперименты Фиче Флаги Конфиги для контуров

Slide 7

Slide 7 text

Почему свой продукт? Санкционные риски Отсутствие лимитов Основные причины Вариативность Только нужный функционал

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Фичи A/B эксперименты Изменение конфигурации устройств в реальном времени Независимые неймспейсы Ролевая модель в рамках одного неймспейса Система нотификации в телеграм Наследование конфигов

Slide 10

Slide 10 text

Фичи Вариативность конфигов по версии, модели, ОС Разделение параметров по продуктовым командам Создание своих вариаций Полное кеширование данных, высокая скорость ответа Поэтапная раскатка Белые/черные списки

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Namespaces Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Продуктовая команда Blender

Slide 13

Slide 13 text

Remote config

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Как собирается конфиг? { "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 } = + + + +

Slide 18

Slide 18 text

АБ эксперименты АБ Эксперименты

Slide 19

Slide 19 text

АБ эксперименты Попадает ли клиент в покрытие эксперимента? Какой конфиг вернется клиенту?

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

АБ эксперименты 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

Slide 22

Slide 22 text

АБ эксперименты 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 Какой конфиг вернется клиенту?

Slide 23

Slide 23 text

АБ эксперименты 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 Какой конфиг вернется клиенту?

Slide 24

Slide 24 text

АБ эксперименты EXPERIMENT Black list White list Model OS Version Покрытие Соль покрытия Соль конфигов = [Samsung, LG] = [SmartTV] = [1 : 4.5] = 50% = 2ef761ad = a3f45442

Slide 25

Slide 25 text

АБ эксперименты 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

Slide 26

Slide 26 text

АБ эксперименты Заведение параметров

Slide 27

Slide 27 text

Параметры

Slide 28

Slide 28 text

Параметры

Slide 29

Slide 29 text

Параметры

Slide 30

Slide 30 text

Нотификация

Slide 31

Slide 31 text

Вопросы? @AlexeyZhi