Здравствуйте.
Мы — группа разработки Targetix, и мы занимаемся разработкой всего, что имеет отношение к автоматизированным системам закупки рекламы на просторах интернета. Сразу оговорюсь, что статья ознакомительная, пробежимся по верхам, а детальные разборы отдельных моментов to be continued…
image

Когда-то, в далёком 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)


  1. progchip666
    26.06.2015 14:10

    Какая та уж очень ознакомительная статья получилось. Я конечно понимаю что краткость — сестра таланта…
    Но лично мне интереснее было бы на эту тему что то более подробное почитать.


    1. Alvaro
      26.06.2015 14:44

      Подробнее будет, надо же было с чего-то начинать. И, кстати, вам про что было бы интересно почитать: DMP, DSP, SSP, Trading Desk?


  1. c4simba
    26.06.2015 14:36

    Какого рода данные обрабатываются в DMP? На сколько я понимаю DMP должен отдавать данные DSP исходя из которых принимается решение об отдачи рекламы (по этим данным производится таргетирование).

    Я посмотрел интерфейс Hybrid — в тестовом режиме увидел только гео-таргетирование.


    1. Alvaro
      26.06.2015 14:42

      В тестовом режиме доступна только ремаркетинговая кампания(ретаргетинг). А так данных много: соцдем, аудитории, контекстные таргетинги и т.д.


      1. c4simba
        26.06.2015 15:02

        А откуда берется соцдем? Каким то образом получаются из соцсетей? Или исходя из статистик посещений сайтов?


        1. Alvaro
          26.06.2015 15:11

          Источников несколько. Сторонние поставщики(aidata, tbh), интеграция с mail.ru и их DSP, небольшой процент своих данных(посещения, поведение).


          1. Nester
            26.06.2015 15:29

            А каким образом интеграция с _DSP_ mail.ru даёт вашей DMP данные о соц.деме?
            Получается, мейл вам просто дарит или продает свои данные про соц.дем?


            1. vkhudyakov
              26.06.2015 15:38

              Мы синхронизируем нашу DMP и DMP MyTarget для кроссканального ретаргетинга. Не DSP.


              1. Nester
                26.06.2015 16:07

                Погодите, вы говорили о том, откуда получаете соц.дем. Уточнили, что за счет интеграции с Mail.ru, сейчас уточнили про «синхронизацию». Расскажите подробнее, как интеграция с mail.ru позволяет вам получать соц.дем для таргетинга в системе, про которую написано в исходном посте?


                1. vkhudyakov
                  26.06.2015 16:22

                  От Mail.ru мы не получаем соцдем. Сейчас мы используем соцдем Aidata.


    1. vkhudyakov
      26.06.2015 15:28

      В тестовом режиме вы можете запустить ремаркетинговую кампанию. Геотаргетинг в ней — это можно сказать дополнительная «плюшка» к таргетингу по аудиториям. Для сбора аудитории вы сначала устанавливаете SmartPixel на свой сайт. Затем можно сегментировать аудиторию своего сайта по посещенным страницам, разделам, совершенным действиям.

      В аудиторной кампании, которая становится доступной при пополнении от 500 руб. уже есть таргетинги по данным, которые мы получаем от сторонних DMP и храним в своей. Это такие данные, как: пол, интересы, ключевые слова (по истории посещений и в меньшей мере поисковым запросам).


      1. Nester
        26.06.2015 16:09

        Все пытаюсь разобраться, простите)

        есть таргетинги по данным, которые мы получаем от сторонних DMP и храним в своей

        В том числе от Mail.ru?


        1. Alvaro
          26.06.2015 16:30

          Мой первый комментарий был не совсем корректен. Именно DSP не работает с mail.ru. С mail.ru работает Hybrid, где можно создавать соответствующие кампании.


          1. Nester
            26.06.2015 16:54

            Спасибо за пояснение!
            Правда, я еще больше запутался)
            Вы пишете Именно DSP не работает с mail.ru. С mail.ru работает Hybrid
            При этом у вас на схеме сначала идет Hybrid, после которого идет стрелочка к DSP. То есть это — не ваша DSP, а, например, Mail.ru?


            1. Alvaro
              26.06.2015 16:58

              Схема показывает именно нашу DSP. Но есть то, что схема не показывает(решили не усложнять). Hybrid(как TradingDesk) работает как с нашей DSP, так и с TradingDesk mail.ru(а через неё с их DSP). То есть на схеме не хватает Trading Desk mail.ru, с которой взаимодействует Hybrid.


              1. Nester
                26.06.2015 18:02

                А в случае работы с DMP и DSP mail.ru — как именно работают технологии Hybrid (Targetix)?
                Как эту интеграцию делали? Там ведь напрямую крайне трудно обеспечить взаимодействие.

                Имхо это же очень важная и интересная часть.


                1. Alvaro
                  26.06.2015 18:07

                  Я думаю, процессу интеграции с mail.ru мы посвятим одну из статей. Вкратце скажу, что у нас всё-таки больше интеграция с TradingDesk(копирование инвентаря) и отдельно стоит синхронизация аудиторий.


        1. vkhudyakov
          26.06.2015 16:31

          Нет. С Mail.Ru не так.


          1. Nester
            26.06.2015 16:54

            Спасибо


    1. dcheklov
      26.06.2015 17:50

      DMP — это комплексная штука. DMP отвечает за хранение готовых профилей, хранение raw-data и обработка данных. Что касается обработки данных. Во-первых данные ретаргетинга — здесь работают batch-процессор и stream-процессор. Пример обработки ретаргетинговых данных — клиент хочет собрать пользователей, посещавших страницы, и наложить на эти страницы regex-паттерн, собрать пользователей, пришедших из поиска по определенным запросам. Кластер для работы с 1st-party данными (ретаргетинговые данные) изолирован от всех других.

      Во-вторых: мы предоставляем возможность собрать аудиторию по ключевым словам. Здесь мы от поставщиков данных получаем огромное количество кликстрима, каждую страницу анализируем на ключевые слова, а затем смотрим, кто из пользователей сталкивался с заданными ключевыми словами.

      В третьих: мы логируем все показы и клики рекламы. На основе этой информации мы можем собирать аудитории, которые видели рекламу, но не кликнули, затем пересечь этих пользователей с каким-нибудь сегментом (н-р интересовались космосом) и результирующую аудиторию отправить в рекламную кампанию.

      Это только небольшой список того, за что отвечает DMP. Также мы строим look alike аудитории, проводим исследования на основе логов (например найти статистическую взаимосвязь между какой-то информацией о пользователе и ctr или конверсией). Построение кастомных аудиторий, прогнозирование kpi рекламной кампании и тд

      В итоге, любая собранная нами в результате обработки данных аудитория отправляется в Aerospike, и там эту информацию использует DSP.


  1. Nester
    26.06.2015 15:36

    Это очень круто что вы и DCA делитесь своим опытом!
    В свою очередь подкину, что еще по этой теме на Хабре же выходило интервью Segmento/Rutarget с Кириллом Сафоновым про разработку системы и очень классно если таких материалов будет 10-20.

    Я бы послушал еще ребят из Аудиториус, AiData, AmberData, Vi.


  1. Manowar
    26.06.2015 20:22

    >>Теперь время отклика DSP менее 10 миллисекунд, при нагрузке в 7000 запросов в секунду на один сервер.

    А можете более подробно рассказать про архитектуру и как добились такой производительности:
    — как вы интегрированы со сторонними DMP? Некоторые из них сами по себе имеют латенси больше 10мс. Или вы подтягиваете из данные в свою DMP?
    — где хоститесь, в облаке или на реальном железе?
    — какой мощности сервер выдает 7000 запросов от SSP?

    Еще интересно услышать про DSP:
    — какой сложности таргетинги поддерживаете
    — как управляете и синхронизируете бюджеты компаний, боритесь с перетратами/недотратами


    1. 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, Директ и тд)


  1. Don_Eric
    26.06.2015 20:50

    Очень круто!
    Думаю вам стоит попробовать добавить фреймворк Orleans, наподобие того что сделали тут:
    habrahabr.ru/company/dca/blog/260845


  1. c4simba
    29.06.2015 12:40

    А какие СУБД используете для DMP и DSP? В DSP надо ведь очень быстро обработать запрос от SSP и принять решение какой баннер показать.


    1. dcheklov
      29.06.2015 13:45

      Все профили пользователей хранятся в Aerospike. Это, пожалуй, единственное решение на рынке, которое стабильно держит лэтанси не зависимо от количество запросов и хранимых данных. Также в DSP многие данные хранятся в оперативной памяти и подгружаются по мере необходимости.