Наша компания начинала свой путь как рекламная сеть, разрабатывая контекстные технологии для медийной рекламы. В начале 2013 года мы запустили свою DSP и уже через полгода поняли, что ее архитектура и платформа разработки нас не устраивает.
Инвентарь и управление рекламными кампаниями были реализованы на старом добром OpenX, биддер выступал как отдельное приложение, также написанный на PHP в связке с веб-сервером Lighty. Основные проблемы в развитии подобной архитектуры заключались в низкой производительности PHP и отсутствии возможностей параллельного программирования. Ну a OpenX говорит сам за себя — в серьезном проекте его использовать крайне нежелательно, даже в качестве управления инвентарем. Самой главной проблемой, вытекающей из вышеперечисленных, была низкая скорость разработки, и, главное, — низкая производительность биддера.
Новую DSP Targetix Alliance мы разрабатывали практически с нуля, и основное требование, которое мы выдвигали для себя — горизонтальная масштабируемость и высокая производительность. Масштабируемость должна быть обеспечена в 3 направлениях:
1. Увеличение количества обрабатываемых rtb-аукционов.
2. Увеличение количества объявлений.
3. Возможность работы в нескольких дата-центрах.
Немного слов о новой архитектуре, которая заслуживает отдельного кейса на конференциях по Highload. Биддер и остальные модули DSP работают на Windows, а среда разработки - .NET. Думаю, многим было бы интересно узнать тонкости разработки высоконагруженных приложений на данной платформе. Почему мы выбрали именно эти технологии? Все просто, почти вся команда, в том числе и я, очень хорошо знают возможности .NET и программируют на C# несколько лет. Также большинство технологий DSP к тому моменту уже было реализовано на данной платформе.
Помимо самого биддера, мы обновили ряд технологий, позволяющих закупать рекламу намного эффективнее. В первую очередь, это фреймворк машинного обучения, который используется в алгоритмах прогнозирования CTR и конверсии, построении look alike моделей и рекомендательной системы. Главное изменение — это возможность обучаться параллельно на нескольких серверах. А также значительно увеличили производительность солвера на биде.