Мы — группа разработки Targetix, и мы занимаемся разработкой всего, что имеет отношение к автоматизированным системам закупки рекламы на просторах интернета. Сразу оговорюсь, что статья ознакомительная, пробежимся по верхам, а детальные разборы отдельных моментов to be continued…
Когда-то, в далёком 2010 году, всё началось с контекстного таргетинга и OpenX, сейчас мы имеем полное семейство самостоятельно разработанных технологий.
Каркас нашей DSP (платформа покупки рекламы) написан на C# .NET. Да, мы любим подискутировать о смысле написания столь сложной платформы на вин-системе, да мы любим windows. Вначале мы подняли коробочный IIS сервер и работали с ним. Время шло линейно, нагрузки росли экспоненциально, для ускорения работы внедрили Katana Framework, но отказались и от него в пользу самописного веб-сервера, который по бенчмаркам дал прирост к производительности на 2 порядка. Теперь время отклика DSP менее 10 миллисекунд, при нагрузке в 7000 запросов в секунду на один сервер.
SSP (платформа для веб-издателей). Служит для показа рекламы на партнёрских сайтах и взаимодействует с нашей и сторонними DSP. Так же использует C# .NET и платформу Windows, но уже есть первые попытки переехать на Linux (ненавистниками). Это стало возможным с выходом новой версии ASP.NET 5 (с новым кроссплатформенным .NET).
DMP (платформа обработки данных) родилась в слиянии больших данных, модных технологий, желания сделать что-то серьёзное и лени. Здесь Python и Java пытаются вырвать друг у друга ресурсы кластеров Apache Spark. Python — потому что это основной язык, для работы с данными (привет R). Java — потому что нативен для Spark'а и прост для разработчиков C#.
Здесь мы твикали исходный код MongoDB для наших целей. Страдали. Переезжали на Couchbase. Плевались. Теперь обосновались на Aerospike (ещё как и основная база DSP с подготовленными данными) и HBase. Подняли Solr, Kafka, Hive, Flume для обработки данных на все случаи жизни. Счастливы.
Всё поделили на 3 кластера: web-page аналитика, обработка first-party data и огромный кластер обработки и исследования логов. Казалось бы технологии уже немаленькие, а информации, особенно русскоязычной, катастрофически не хватало, тут мы рады поделиться с вами россыпью шишек и ссадин.
Есть два TradingDesk'a — Targetix Studio и Hybrid. Кстати в Hybrid вы можете запустить свою рекламу с бюджетом всего в 500р, а вам ещё дадут 1.4К пробных денег (это меня наши менеджеры попросили написать). А Targetix Studio служит большим рекламным агентствам, имеет огромное количество настроек и индивидуального консультанта для крупных компаний.
Основа тут по-прежнему C#, но тут больше вотчина наших front-end гуру. Передний конец пользовательских приложений решили разрабатывать в формате одностраничного приложения. Поскольку существует огромное количество js-фреймворков и библиотек, способных удовлетворить любые фантазии, мы решили велосипед не изобретать и использовать некоторые из них. В ходе
- knockout.js — реализующий MVVM-pattern фреймворк с простой и понятной декларативной привязкой событий к элементам, который не накладывает ограничений на проектирование архитектуры приложения;
- require.js — для простого и удобного подключения модулей;
- routie.js — для организации маршрутизации по разделам одностраничного приложения;
- underscore.js — удобная работа с данными;
- jquery.js — библиотека, которая не нуждается в представлении.
В конце пути хотели получить продукт гибкий и масштабируемый с хорошо структурированным кодом (ибо код подобных проектов имеет неприятную особенность разрастаться).
Приложение разрабатывается отдельным проектом от бэкенда, взаимодействие с которым осуществляется через API, которое реализует выдачу требуемых данные в формате JSON.
Наш опыт не ограничивается лишь программным уровнем. Мы — молодая компания и свои шишки набивали сами. Находимся не в мегаполисе, а в славном городе Тамбове, поодаль от столичной суеты. Сами смогли организовать школу, в которой обучали замечательных ребят, которые теперь являются частью нашего коллектива. Организуем конференции для обмена знаниями и наработками в нашей сфере деятельности. Пробуем самые разные методы развития, потому что мы молодые и нам интересно работать.
Галопом по Европам получилось, дальше будем делиться опытом подробнее и по пунктам. Увидимся в следующей статье.
Комментарии (26)
c4simba
26.06.2015 14:36Какого рода данные обрабатываются в DMP? На сколько я понимаю DMP должен отдавать данные DSP исходя из которых принимается решение об отдачи рекламы (по этим данным производится таргетирование).
Я посмотрел интерфейс Hybrid — в тестовом режиме увидел только гео-таргетирование.Alvaro
26.06.2015 14:42В тестовом режиме доступна только ремаркетинговая кампания(ретаргетинг). А так данных много: соцдем, аудитории, контекстные таргетинги и т.д.
c4simba
26.06.2015 15:02А откуда берется соцдем? Каким то образом получаются из соцсетей? Или исходя из статистик посещений сайтов?
Alvaro
26.06.2015 15:11Источников несколько. Сторонние поставщики(aidata, tbh), интеграция с mail.ru и их DSP, небольшой процент своих данных(посещения, поведение).
Nester
26.06.2015 15:29А каким образом интеграция с _DSP_ mail.ru даёт вашей DMP данные о соц.деме?
Получается, мейл вам просто дарит или продает свои данные про соц.дем?vkhudyakov
26.06.2015 15:38Мы синхронизируем нашу DMP и DMP MyTarget для кроссканального ретаргетинга. Не DSP.
Nester
26.06.2015 16:07Погодите, вы говорили о том, откуда получаете соц.дем. Уточнили, что за счет интеграции с Mail.ru, сейчас уточнили про «синхронизацию». Расскажите подробнее, как интеграция с mail.ru позволяет вам получать соц.дем для таргетинга в системе, про которую написано в исходном посте?
vkhudyakov
26.06.2015 15:28В тестовом режиме вы можете запустить ремаркетинговую кампанию. Геотаргетинг в ней — это можно сказать дополнительная «плюшка» к таргетингу по аудиториям. Для сбора аудитории вы сначала устанавливаете SmartPixel на свой сайт. Затем можно сегментировать аудиторию своего сайта по посещенным страницам, разделам, совершенным действиям.
В аудиторной кампании, которая становится доступной при пополнении от 500 руб. уже есть таргетинги по данным, которые мы получаем от сторонних DMP и храним в своей. Это такие данные, как: пол, интересы, ключевые слова (по истории посещений и в меньшей мере поисковым запросам).Nester
26.06.2015 16:09Все пытаюсь разобраться, простите)
есть таргетинги по данным, которые мы получаем от сторонних DMP и храним в своей
В том числе от Mail.ru?Alvaro
26.06.2015 16:30Мой первый комментарий был не совсем корректен. Именно DSP не работает с mail.ru. С mail.ru работает Hybrid, где можно создавать соответствующие кампании.
Nester
26.06.2015 16:54Спасибо за пояснение!
Правда, я еще больше запутался)
Вы пишете Именно DSP не работает с mail.ru. С mail.ru работает Hybrid
При этом у вас на схеме сначала идет Hybrid, после которого идет стрелочка к DSP. То есть это — не ваша DSP, а, например, Mail.ru?Alvaro
26.06.2015 16:58Схема показывает именно нашу DSP. Но есть то, что схема не показывает(решили не усложнять). Hybrid(как TradingDesk) работает как с нашей DSP, так и с TradingDesk mail.ru(а через неё с их DSP). То есть на схеме не хватает Trading Desk mail.ru, с которой взаимодействует Hybrid.
Nester
26.06.2015 18:02А в случае работы с DMP и DSP mail.ru — как именно работают технологии Hybrid (Targetix)?
Как эту интеграцию делали? Там ведь напрямую крайне трудно обеспечить взаимодействие.
Имхо это же очень важная и интересная часть.Alvaro
26.06.2015 18:07Я думаю, процессу интеграции с mail.ru мы посвятим одну из статей. Вкратце скажу, что у нас всё-таки больше интеграция с TradingDesk(копирование инвентаря) и отдельно стоит синхронизация аудиторий.
dcheklov
26.06.2015 17:50DMP — это комплексная штука. DMP отвечает за хранение готовых профилей, хранение raw-data и обработка данных. Что касается обработки данных. Во-первых данные ретаргетинга — здесь работают batch-процессор и stream-процессор. Пример обработки ретаргетинговых данных — клиент хочет собрать пользователей, посещавших страницы, и наложить на эти страницы regex-паттерн, собрать пользователей, пришедших из поиска по определенным запросам. Кластер для работы с 1st-party данными (ретаргетинговые данные) изолирован от всех других.
Во-вторых: мы предоставляем возможность собрать аудиторию по ключевым словам. Здесь мы от поставщиков данных получаем огромное количество кликстрима, каждую страницу анализируем на ключевые слова, а затем смотрим, кто из пользователей сталкивался с заданными ключевыми словами.
В третьих: мы логируем все показы и клики рекламы. На основе этой информации мы можем собирать аудитории, которые видели рекламу, но не кликнули, затем пересечь этих пользователей с каким-нибудь сегментом (н-р интересовались космосом) и результирующую аудиторию отправить в рекламную кампанию.
Это только небольшой список того, за что отвечает DMP. Также мы строим look alike аудитории, проводим исследования на основе логов (например найти статистическую взаимосвязь между какой-то информацией о пользователе и ctr или конверсией). Построение кастомных аудиторий, прогнозирование kpi рекламной кампании и тд
В итоге, любая собранная нами в результате обработки данных аудитория отправляется в Aerospike, и там эту информацию использует DSP.
Nester
26.06.2015 15:36Это очень круто что вы и DCA делитесь своим опытом!
В свою очередь подкину, что еще по этой теме на Хабре же выходило интервью Segmento/Rutarget с Кириллом Сафоновым про разработку системы и очень классно если таких материалов будет 10-20.
Я бы послушал еще ребят из Аудиториус, AiData, AmberData, Vi.
Manowar
26.06.2015 20:22>>Теперь время отклика DSP менее 10 миллисекунд, при нагрузке в 7000 запросов в секунду на один сервер.
А можете более подробно рассказать про архитектуру и как добились такой производительности:
— как вы интегрированы со сторонними DMP? Некоторые из них сами по себе имеют латенси больше 10мс. Или вы подтягиваете из данные в свою DMP?
— где хоститесь, в облаке или на реальном железе?
— какой мощности сервер выдает 7000 запросов от SSP?
Еще интересно услышать про DSP:
— какой сложности таргетинги поддерживаете
— как управляете и синхронизируете бюджеты компаний, боритесь с перетратами/недотратамиdcheklov
29.06.2015 12:25— Со сторонними DMP интегрируемся путем копирования всех данных к себе в кластер.
— Хостимся на реальных серверах. Когда создавали кластер (2-3 года назад) облака не давали такой производительности как сейчас, а если и давали то инстансы стоили столько же, сколько покупка железа.
— Сервер приложения — 2x Xeon E5 2620 по 6 ядер на каждый, 64 ГБ ОЗУ. Сервер базы данных — 1x Xeon E5 2620, 200 ГБ ОЗУ. Следует отметить, недавно проводили тесты на более крутом железе, производительность выше в 1.7 раз, тогда как стоимость сервера- в 3 раза. Поэтому продолжаем сидеть на попсовом 2620.
— По поводу таргетингов. Как-то сложно оценить их сложность, пожалуй, самый сложный — это предсказание (предиктор) вероятности совершения действия пользователем
— Все управляется через базу, информация на каждой ноде обновляется каждую 1-2 мс. Перекруты бюджета кампании большая редкость. По факту все в рамках среднестатистических показателей отрасли (Adwords, Директ и тд)
Don_Eric
26.06.2015 20:50Очень круто!
Думаю вам стоит попробовать добавить фреймворк Orleans, наподобие того что сделали тут:
habrahabr.ru/company/dca/blog/260845
c4simba
29.06.2015 12:40А какие СУБД используете для DMP и DSP? В DSP надо ведь очень быстро обработать запрос от SSP и принять решение какой баннер показать.
dcheklov
29.06.2015 13:45Все профили пользователей хранятся в Aerospike. Это, пожалуй, единственное решение на рынке, которое стабильно держит лэтанси не зависимо от количество запросов и хранимых данных. Также в DSP многие данные хранятся в оперативной памяти и подгружаются по мере необходимости.
progchip666
Какая та уж очень ознакомительная статья получилось. Я конечно понимаю что краткость — сестра таланта…
Но лично мне интереснее было бы на эту тему что то более подробное почитать.
Alvaro
Подробнее будет, надо же было с чего-то начинать. И, кстати, вам про что было бы интересно почитать: DMP, DSP, SSP, Trading Desk?