Как 100 000 раз в секунду выбирать правильный рекламный...
TRANSCRIPT
Как 100 000 раз в секунду выбирать правильный рекламный материал? Programmatic-платформа Exebid.DCA изнутри
Павел БейзманData-Centric AllianceАрхитектор высоконагруженных систем
Что такое programmatic-платформа?
Exebid.DCA DSP
Что такое programmatic-платформа?
Exebid.DCA DSP
Рекламодатели
Что такое programmatic-платформа?
Биржа
Биржа
Биржа
Exebid.DCA DSP
Рекламодатели
Что такое programmatic-платформа?
Биржа
Биржа
Биржа
Exebid.DCA DSP
Рекламодатели
Data managementplatform
Что такое programmatic-платформа?
Predictions
Биржа
Биржа
Биржа
Exebid.DCA DSP
Рекламодатели
Data managementplatform
Что такое programmatic-платформа?
• 100 000 запросов в секунду
Что такое programmatic-платформа?
• 100 000 запросов в секунду• 10 000 рекламных материалов
Что такое programmatic-платформа?
• 100 000 запросов в секунду• 10 000 рекламных материалов• Рост неравномерный
Что такое programmatic-платформа?
• 100 000 запросов в секунду• 10 000 рекламных материалов• Рост неравномерный• 50 мc на ответ
Таргетинги
Таргетинги: наивная реализация
● Проверяем по очереди каждую кампанию и каждый таргетинг
Таргетинги: наивная реализация
● Проверяем по очереди каждую кампанию и каждый таргетинг
● Линейная зависимость от количества кампаний
Таргетинги: наивная реализация
● Проверяем по очереди каждую кампанию и каждый таргетинг
● Линейная зависимость от количества кампаний● Деградация производительности
Таргетинги: оптимизированная реализация
● Множество кампаний - битовая маска
Таргетинги: оптимизированная реализация
● Множество кампаний - битовая маска
Пример:
Пример: белый список доменов
Пример: белый список доменов
Пример: белый список доменов
Пример: белый список доменов
Пример: белый список доменов
Result:
Таргетинг на подстроку в URL
● Хеш-таблицы не подойдут
Таргетинг на подстроку в URL
● Хеш-таблицы не подойдут● Алгоритм Ахо-Корасик
Алгоритм Ахо-Корасик
● Дано: произвольный набор строк
Алгоритм Ахо-Корасик
● Дано: произвольный набор строк● Требуется: быстро находить в текстах все вхождения строк
из набора
catzcatphonephoto
catzcatphonephoto
Подсчет вероятности клика● Для каждого баннера делаем запрос к предиктору
Подсчет вероятности клика● Для каждого баннера делаем запрос к предиктору
Три группы параметров:● Параметры сайта или приложения
Запросы к предиктору
Три группы параметров:● Параметры сайта или приложения● Параметры пользователя
Запросы к предиктору
Три группы параметров:● Параметры сайта или приложения● Параметры пользователя● Параметры рекламного материала
Запросы к предиктору
● Vowpal Wabbit: текстовый формат
Запросы к предиктору
|c windows |d 269557783 |e windows-7 |f between |g p-33662 |h s-34629 |l 2017370-1502020 |o 14 |a 373470 |b ethernet |i 0 |j null |k desktop |m 2017370-1485997 |n 4 |p 0 |q lc:0.0092 li:1.13 lm:0.07 |r 1671 |s 2484 |t 8408 |u 12491 |v 300x250
● Параметры пользователя и сайта генерим один раз
Запросы к предиктору
● Параметры пользователя и сайта генерим один раз● Оптимизация перевода из числа в строку
Запросы к предиктору
● Параметры пользователя и сайта генерим один раз● Оптимизация перевода из числа в строку
Запросы к предиктору
Смотрим на данные
Остальные 0 - 10000
Конвертация числа в строку
ns
Конвертация числа в строку
ns
Запросы к предиктору: обработка ответов
void process_responses() { while (!stopped()) { wait_for_data(); process_data(); }}
Запросы к предиктору: обработка ответов
void process_responses() { while (!stopped()) { sleep(milliseconds(1)); process_data(); }}
Перегрузка
Считаем загруженность потокаvoid process_responses() { while (!stopped()) { Time before_sleep = now(); sleep(milliseconds(1)); totalSleepTime_ += now() - before_sleep; process_data(); }}
Считаем загруженность потокаvoid process_responses() { while (!stopped()) { Time before_sleep = now(); sleep(milliseconds(1)); totalSleepTime_ += now() - before_sleep; process_data(); }}
Загруженность потоков
Predictor
Router
Aerospike
Загруженность потока
● Выше 95% - опасность
Загруженность потока
● Выше 95% - опасность● Режем часть трафика
Загруженность потока
● Выше 95% - опасность● Режем часть трафика● Гарантированно отвечаем за 50 мс
Выводы
● Полезно знать алгоритмы
Выводы
● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных
Выводы
● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс
Выводы
● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс● Мониторинг внутренностей системы полезен
Выводы
● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс● Мониторинг внутренностей системы полезен● Не допускайте перегрузок
Спасибо!
Павел Бейзман
Data-Centric Alliance
Skype: pavel.b.beyzman
Вопросы?