02 Архитектура

 

Платформа — это Go-монорепозиторий из трёх приложений и набора инфраструктурных сервисов. Стек поднимается одним docker compose up -d из каталога dist/.

Приложения

Админка (admin)

Веб-панель управления на QOR5. Через неё создаются и настраиваются рекламодатели, кампании, группы, баннеры, сети, площадки, юниты и пользователи, а также отображается встроенный дашборд Grafana. Загруженные изображения хранятся в S3-совместимом объектном хранилище.

  • Порт: 8072 (8082 внутри контейнера).
  • Конфиг: dist/admin/configs/config.yaml.
  • Команды образа: serve (запуск), migrate (миграции БД), user (создать пользователя или сменить пароль).
  • Зависит от PostgreSQL, ClickHouse и S3.

Рекламный сервер (server)

Сервер показа рекламы. Работает как конвейер плагинов Route → Input → Stages → Output: загрузка кандидатов, проверка лимитов и бюджетов, таргетинг, взвешенный выбор (rotation) и медиация. Сервер не хранит состояние в процессе, поэтому его можно масштабировать горизонтально.

  • Порт: 8071 (8081 внутри).
  • Конфиг: dist/server/configs/config.yaml — здесь описаны пайплайны маршрутов /dsp, /native, /banner, /inapp, /tracker, /postback.
  • Использует PostgreSQL (кэшируемые репозитории баннеров, плейсментов и юнитов), Redis Cluster (кэш) и публикует события в Kafka.

Аналитика (analytics)

Планировщик и воркер агрегаций на базе dagu. По расписанию раз в час (1 * * * *) запускает агрегацию данных в ClickHouse по таблицам requests, impressions, clicks, responses и складывает результат в часовые витрины для дашбордов.

  • Порт: 8088 (8080 внутри).
  • Конфиг: dist/analytics/configs/config.yaml; DAG-и — dist/analytics/dagu/dags/*.yaml.
  • Читает события из Kafka через Kafka Engine ClickHouse, пишет агрегаты в analytics.*_hour.

Поток событий

Рекламный сервер ──► Kafka (request, impression, click, response, conversion, win)
                              │
                              ▼
                    ClickHouse (сырые таблицы)
                              │
                    dagu-агрегации (раз в час)
                              │
                              ▼
                 ClickHouse (*_hour) ──► Grafana / админка

Инфраструктура

  • Kafka — шина событий платформы: кластер из трёх брокеров в режиме KRaft (kafka1, kafka2, kafka3, kafka-init, kafka-ui). Топики создаются сервисом kafka-init. Kafka UI — на порту 8090.
  • PostgreSQL — основное хранилище данных админки и сервера. Порт 6432.
  • ClickHouse — хранилище событий и агрегатов для аналитики. Порты 8123 (HTTP) и 9000 (native).
  • Redis Cluster — кэш сервера показа. Порты 7001–7006.
  • S3 — объектное хранилище для загружаемых изображений (Yandex Object Storage, MinIO, AWS S3 и другие).
  • Grafana — дашборды. Порт 3001.
  • ch-ui — веб-клиент ClickHouse для ручных запросов. Порт 3488.
  • Prometheus и Loki — метрики и логи (порты 9090 и 3100), собираются через Promtail.

SDK

Для интеграции рекламы в приложения есть SDK:

  • Web / JS — server/static/js/coffee.js (window.adsCoffee.render(...)).
  • Android — sdk/android/ (модуль coffeesdk).

Подробнее — в разделе Интеграция рекламы.