Разработка сервиса для организации показов таргетированной рекламы
Бизнес составляющая проекта
Проект представляет собой сервис, при помощи которого пользователи (рекламодатели) могут управлять кампаниями таргетированной рекламы. Рекламодатели имеют возможность настройки рекламной кампании таким образом, чтобы рекламные объявления показывались только целевой аудитории. Это достигается путем реализации возможности детальной настройки по широкому списку параметров.
Каждый рекламодатель имеет доступ к следующим разделам:
- Создание и настройки рекламной кампании. Настройка происходит по таким характеристикам как пол, возраст, регион, интересы и т.п.
- Просмотр статистической информации. Результаты можно фильтровать и группировать по показам, кликам, по информации о выигравшим ставкам для каждого рекламного объявления.
Сервис работает таким образом, что объявления показываются в зависимости от предпочтений пользователя или истории его запросов. Данная информация анализируется и принимается решение, какое объявление следует демонстрировать.
Техническое описание проекта
Приложение имеет классическую клиент-серверную архитектуру. Взаимодействие клиента с приложением осуществляется через веб-интерфейс. С помощью веб-интерфейса клиент настраивает параметры для фильтрации пользователей, которым данная реклама может быть интересной, а также просматривает статистику по каждому рекламному объявлению.
Серверная часть отвечает за мгновенную покупку рекламных мест, передачу рекламы для показа на выкупленных местах, а также за сбор статистики и информации по рекламным объявлениям и сохранение их в базах данных (MySQL, ClickHouse). Ниже, на Рисунке 1 схематично представлена структура приложения.
Серверная часть проекта представляет собой Java приложение — обработчик, основная задача которого принимать запросы от SSP (Sell Side platform) — RTB-платформ. В SSP владельцы рекламных площадок регистрируют свободные места. Если какой-то пользователь посещает рекламную площадку и планируется демонстрировать рекламное место, которое подходит под настроенные параметры — SSP присылает обработчику запрос и тот должен оперативно принять решение о ставке и отправить свой ответ SSP.
Обработчик должен работать быстро (отвечать быстро на запросы SSP) — поэтому написан на Java без использования фреймворков. Он работает с базой MySQL, где хранится информация по рекламным объявлениям, а также с базой ClickHouse — куда попадает статистика. В обработчике активно используется многопоточность: как уже устоявшиеся подходы с synchronized, так и новые с java concurrent.
Так как система может быть распределенной, то есть одновременно может работать несколько обработчиков с различными SSP. Для синхронизации работы обработчиков используется компонент, который находится в каждом из них. Синхронизация этого компонента происходит через базу данных. Такой подход работы увеличивает отказоустойчивость системы — если один из обработчиков откажет, то компонент на одном из еще работающих, автоматически начнет работу, и продолжит синхронизировать оставшиеся обработчики.
Обязанности команды ДжазТим
- Разработка новой функциональности компонентов, отвечающих за работу обработчика.
- Рефакторинг и улучшение существующей функциональности.
- Работа над архитектурой компонентов и их дальнейшая реализация.
Используемые технологии
Infrastructure: Jira, Confluence, SVN.
Stack: Java 8, Sun HttpServer, Netty, MySQL, ClickHouse, java.util.concurrent.
Особенности проекта
- Выполнение работы в соответствии с полным соблюдением scrum-процессов.
- Все задачи должны были быть реализованы с уклоном на повышение производительности.
- Работа велась силами распределенной команды, члены которой находились в разных часовых поясах.
Результат проекта
- Успешно пройдены все стадии разработки компонентов и их функциональности, начиная от архитектуры и заканчивая багфиксом, unit и интеграционным тестированием.
- Сервис полноценно функционирует и решает поставленные перед ним бизнес-задачи.
Достижения компании на проекте
- Значительно расширили функциональность приложения.
- Оптимизировали работу обработчика, ускорили обработку запросов, оптимизировали работу с базой данных.
- Разработан с нуля модуль синхронизации распределенных серверов — архитектура компонента с реализацией функциональности.
- Все требования заказчика были выполнены качественно и в срок.
Свяжитесь с нами, чтобы обсудить Ваш IT-проект