Как 100 000 раз в секунду выбирать правильный рекламный...

Post on 06-Jan-2017

139 Views

Category:

Engineering

7 Downloads

Preview:

Click to see full reader

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/ )● Используйте особенности своих данных

Выводы

● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс

Выводы

● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс● Мониторинг внутренностей системы полезен

Выводы

● Полезно знать алгоритмы ( http://e-maxx.ru/ )● Используйте особенности своих данных● Latency vs throughput: найдите баланс● Мониторинг внутренностей системы полезен● Не допускайте перегрузок

Спасибо!

Павел Бейзман

Data-Centric Alliance

p.beizman@datacentric.ru

Skype: pavel.b.beyzman

Вопросы?

top related