Upload
-
View
322
Download
1
Embed Size (px)
Citation preview
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
Как «скачать»весь myTargetи не лопнуть
Иванков МихаилProduct Director & CTO
PlarinAPIШНИК
myTarget
РЕКОМЕНДОВАННЫЙРАЗРАБОТЧИК
2013—2016
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКНемного статистикиЕжедневно мы «скачиваем» очень много из myTarget
~650 GbДанных в день(без учета проекций)
>3000Клиентов myTargetв “realtime”
~19 млн.Запросов к АПИ
ежедневно(без учета проекций)
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКА вот и RPSRPS – request per second (количество запросов в секунду)
227 RPS*В декабре 2014 года (полтора года назад) это было всего 29 RPS
3 секундыСреднее регулярное обновление одного клиента
* При этом мы не нарушаем ни одного правила по RPS в соответствии с /api/v1/throttling.json
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это былоPython и восстание процессоров
Сначала был Python 2.7
Amazon r3.2xlarge8 vCPU, 61 Gb Memory
50-70 Load Average*
* Число блокирующих процессов в очереди на исполнение в определенный временной интервал. Блокирующий процесс — это процесс, который ожидает ресурсов для продолжения работы.
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это былоПотоки рождают новые потоки
Немножко Python
for tm_client in user._tm_clients: if tm_client.is_blocked or not tm_client.is_active:
continue if tm_client._id not in self.threads:
if tm_client.is_agency: target_method = self.agency_cycle
else: target_method = self.client_cycle
thread = threading.Thread(target=target_method, args=[tm_client._id])thread.name = tm_client.usernamethread.daemon = Truethread.start() self.threads[tm_client._id] = thread
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это былоС увеличением клиентов это превращалось в бардак
Теория и практика мультипоточного программирования
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это сталоРазум прояснился, наступил мир
Java, Vert.X, ReactiveX, AsyncHttpMongoDB 3.x, WiredTiger*
*Кстати, в этом году мы перешли на MongoDB Professional с коммерческой поддержкой и улучшили в целом инфраструктуру баз данных, бэкапы, репликацию и шардинг
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это сталоВсего один сервер!
Результаты Java
Amazon c3.xlarge4 vCPU, 7,5 Gb Memory
0.75 Load Average
Это всего один сервер из 20, который обрабатывает 3000 клиентов myTarget
с запасом прочности в 300-500%
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это сталоГрафики всегда полезны
Мы очень волновались перед запуском нового апдейтера и попросили коллег из myTargetпоследить за результатами
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККак это сталоКстати, в детстве у Тома Круза были кривые зубы
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКЧто еще можно улучшить?Ну, кроме того, что бы переписать все «с нуля»
Использовать новые фильтры myTarget для Banners
В начале декабря появились новые фильтры, позволяющие более точно выбирать баннеры, которые необходимо обновить.
GET /api/v1/banners/{banner_id}.json
1. Получение баннеров, в которых изменились свойства:updated__gte=YYYY-MM-DD HH:MM:SS
2. Получение баннеров, в которых изменилась статистика:last_stats_updated__gte=YY-MM-DD HH:MM:SSс фильтром fields=id
С полученными ID в GET /api/v1/statistics/{object_type}/{object_id}/{stat_type}/{date_from}-{date_to}.json
Подробнее: https://target.my.com/doc/api/detailed/#resource_banners
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКЧто еще можно улучшить?Ну, кроме того, что бы использовать Java
Использовать триггеры в Campaigns
GET /api/v1/campaigns/{campaign_id}.json
Поле last_stats_updated сигнализирует о том, нужно ли опрашивать новую статистику или нет.
P.s. Учтите, это поле полезно при отставшем «чаржинге» myTarget
Подробнее: https://target.my.com/doc/api/detailed/#object_campaignstat
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКЧто еще можно улучшить?Для некоторых методов можно настроить Nginx
Если вы делаете очень много запросов и не хотите их контролировать самостоятельно, можно настроить Nginx как прокси с ограничениями, а так же это даст хорошие возможности для логирования
http { limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;... server {...
location /statistics {proxy_pass https://target.my.com/$request_uri;
limit_req zone=one burst=200;}
}}
Подробнее: http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИККакие результаты?Быстрее, выше, сильнее
Все это привело к тому, что 1 клиент myTarget обновляется в среднем 3 секунды с минимальным количеством запросов (ранее было 40 секунд)
Полная загрузка данных (full update) по агентскому кабинету с 100 клиентами, в каждом по 100 кампаний (включая всю доступную статистику за все время, внешний вид баннеров, настройки РК и т.д.) – от 3 до 5 минут.
Один сервер с 4 vCPU и 8 GB MEM!
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКНемного полезногоСравнительная таблица запросов к /api/v1/statistics/banners/
Запросы полной статистики к /api/v1/statistics/banners/
Количество баннеров(в 1 запросе)
Почасовая статистика(скорость ответа в секундах)
Дневная статистика(скорость ответа в секундах)
Вся 30 дней
14 дней
5 дней
1 день
Вся 30 дней
14 дней
5 дней
1 день
3000 - - - - - - - - 20 18
1500 - - - - - 16 - 16 11 10
750 - - - - 12 9 13 8 6 4
500 - - - - 8 7 8 5 4 4
100 14 14 9 3 2 1 2 1 1 1
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКНемного полезногоСравнительная таблица запросов к /api/v1/statistics/campaigns/
Запросы полной статистики к /api/v1/statistics/campaigns/
Количество кампаний(в 1 запросе)
Почасовая статистика(скорость ответа в секундах)
Дневная статистика(скорость ответа в секундах)
Вся 30 дней
14 дней
5 дней
1 день
Вся 30 дней
14 дней
5 дней
1 день
150 - - - 10 4 3 2 2 1 1
75 19 20 13 5 2 1 1 1 1 1
50 14 14 9 4 2 1 1 1 1 1
25 7 7 5 2 1 1 1 1 1 1
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКЧто бы хотелось по улучшениям в APIЛучшее не всегда враг хорошего
1. Добавить в кампании такие же фильтры, как и в баннерыСократит объем данных и нагрузку
2. Push статистики сразу же, после ее измененияИдеальный случай, количество запросов упадет к нулю
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКРаботаем с проекциямиТеперь это отдельный сервис внутри Plarin
~84 GBДанных в день
>15 000Кампаний, которым
требуются актуальные цены
~1 150 000Запросов к АПИ
ежедневно(примерно 13 кампаний
в секунду)
При этом около 90% запросов проекций только для получения оптимальной цены.
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКРаботаем с проекциямиСервис отселили отдельно
Раньше это было частью основного апдейтера, но часто обновления блокировали таймауты по 15 минут, ошибки 500 и т.д.
Мы этот сервис вынесли в отдельный.
Java, AsyncHttpMongoDB 3.x, WiredTiger
Amazon c3.xlarge4 vCPU, 7,5 Gb Memory
0.105 Load Average
Запас прочности – 1000-2000%
15 000 кампаний по 13 в секунду это 20 минут на полный цикл.
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКРаботаем с проекциямиИ тут математика
Исходные 84 Gb в день на самом деле оказывается больше, так как ответы приходят запакованными в gzip, в среднем по 40кб.
Каждый ответ распаковывается примерно в 400кб и содержит в себе > 2000 точек.
Итого: 6 Gb хранения на 15 000 кампаний.
Что мы делаем:1) Урезаем количество точек, оставляя из повторяющихся охватов только один с
минимальной ценой2) Отдельно вычисляем и храним минимальную и максимальную цены, а так же
оптимальную цену для каждой рекламной кампании
В итоге в каждой проекции остается 12 кб, и 51 точка вместо 2 000+
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКЧто бы хотелось по улучшениям в APIЛучшее не всегда враг хорошего
1. Ограничить количество точек в ответе, оставив по 1 точке на каждый % охвата
2. Возвращать верные лимиты для запрашиваемого пакета, не менее минимальной цены и не более максимальной цены
3. Сделать доступным в запросах передачу только ID существующей кампании, без указания всего таргетинга
4. Расширить метод, когда для нескольких кампаний можно получить только оптимальную цену одним запросом, а лучше вынести оптимальную цену в объект Campaign (90% запросов к проекциям только для получения оптимальной цены)
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКПроблемные местаЛучшее не всегда враг хорошего
User.jsonЧасто забираем, другой возможности нет определить остатки бюджетов на аккаунте и статус клиента (активный, заблокированный)
КонверсииСейчас не забираем, и по прежнему не можем определить у какой кампании есть конверсии, а у какой нет. При добавления запроса на все кампании в день прибавится 3-5 млн запросов.
В самом ответе конверсий не хватает ID целей т.к. они могут поменяться, не к чему привязаться.
РемаркетингЧасто забираем, т.к. не можем определить когда любой из списков изменился, а когда нет (6 списков, 16 запросов в секунду, более 8 млн запросов в день) - 42% от всех запросов.
Мы делаем это в цикле группой по 10 клиентов и обновление всех клиентов за один цикл – 10 минут.
99.9% ответов ремаркетинг списков без изменений по сравнению с предыдущим.
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКРешениеЛучшее не всегда враг хорошего
Новый метод - updated_objects, который решит все проблемы
Может содержать в себе информацию о времени последнего изменения:
1. Свойств кампаний или статистики кампаний2. Свойств баннеров или статистики баннеров3. Списков ремаркетинг групп4. Наличие конверсий в РК
Это позволит фактически дергать только один метод и существенно сократить запросы к другим методам, совершая их только тогда, когда это действительно актуально.
p.s. Ну или, хотя бы, новый метод для ремаркетинг групп и вынос количества конверсий в Campaigns.
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
APIШНИКНемного статистики в сравнении с прошлымРост показателей
4 400
11 0004 000
15 000
2014 ДЕКАБРЬ 2016 МАРТ
АКТИВНЫЕ КАМПАНИИОстановленные Запущенные
25 000
90 000
2015 ИЮЛЬ 2016 МАРТ
POSTBACK КОНВЕРСИИВсегоконверсийвдень
Plarin – единая система управления рекламой ВКонтакте и myTarget Михаил Иванков, 2016
Спасибо за вниманиеИванков МихаилProduct Director & CTO, Plarin
PlarinЕдиная система управления таргетированной рекламойВКонтакте и myTarget
Все презентации Plarin в Facebookhttps://www.facebook.com/plarin.net
РЕКОМЕНДОВАННЫЙРАЗРАБОТЧИК
2013—2016