Sobes.tech
Senior

Stel dat we een groot advertentienetwerk zijn. We plaatsen banners op partnerwebsites over de hele wereld. We moeten een systeem ontwerpen voor het verzamelen en verwerken van gebeurtenissen in realtime. Deze gegevens zijn cruciaal voor twee doelen: Facturering: Geld afschrijven van adverteerders voor klikken. Analyse: Het tonen van de huidige campagneprestaties (CTR, vertoningen) in het dashboard. Invoerdata (voor het berekenen van de belasting) U moet zelf de vereiste capaciteit inschatten (RPS, verkeer, opslag), op basis van de volgende metrics: Partnernetwerk: 500.000 actieve sites. Verkeer: Gemiddeld krijgt elke site 2 paginaweergaven per seconde. Advertentiebanners: Op elke pagina worden 3 banners tegelijk weergegeven. Conversie: De gemiddelde CTR (Click-Through Rate) is 1%. Onregelmatigheid: Piekbelasting (avonduren) is 4 keer hoger dan gemiddeld. Grootte van gebeurtenis: Het object van de gebeurtenis (Banner ID, Site ID, UserID, Timestamp, type gebeurtenis) weegt ongeveer 500 bytes. Technische vereisten Near Real-Time: Gegevens in de analytische interface moeten verschijnen met een vertraging van niet meer dan 10 seconden. Betrouwbaarheid: Het verlies van klikken is niet acceptabel (dit betekent direct verlies van geld). Verlies van vertoningen (impressions) is acceptabel tot 0,01%. Schaalbaarheid: Het systeem moet gemakkelijk uitbreidbaar zijn naarmate het aantal platforms toeneemt.

sobes.tech AI

Antwoord van AI

Для проектирования системы сбора и обработки событий в реальном времени для крупной рекламной сети с указанными параметрами, рассмотрим ключевые аспекты:

Оценка нагрузки

  • Активных сайтов: 500,000
  • Просмотры страниц в секунду на сайте: 2
  • Баннеры на странице: 3
  • CTR: 1%
  • Пиковая нагрузка: ×4
  • Размер события: 500 байт

Расчёт событий в секунду (RPS):

  • Просмотры страниц: 500,000 × 2 = 1,000,000 в секунду
  • Показов баннеров: 1,000,000 × 3 = 3,000,000 показов в секунду
  • Клики: 3,000,000 × 1% = 30,000 кликов в секунду

Пиковая нагрузка: 3,000,000 × 4 = 12,000,000 показов и 30,000 × 4 = 120,000 кликов в секунду.

Трафик данных

  • Показ: 500 байт × 12,000,000 = ~6 ГБ/сек
  • Клик: 500 байт × 120,000 = ~60 МБ/сек

Архитектура системы

  1. Сбор данных:

    • Использовать легковесные агенты или SDK на сайтах для отправки событий.
    • Протоколы: HTTP/2, gRPC или Kafka Producer для высокой пропускной способности.
  2. Приём и буферизация:

    • Использовать распределённый брокер сообщений (например, Apache Kafka) для устойчивого приёма и буферизации событий.
    • Настроить партиционирование по ID сайта или баннера для масштабируемости.
  3. Обработка:

    • Потоковая обработка с помощью систем типа Apache Flink, Kafka Streams или собственного сервиса на Go.
    • Клики обрабатывать с гарантией доставки (exactly-once или at-least-once).
    • Показов можно допускать небольшую потерю (0.01%), использовать компромиссы в обработке.
  4. Хранение:

    • Для биллинга — база данных с транзакционной поддержкой (например, PostgreSQL, CockroachDB).
    • Для аналитики — OLAP-хранилище или колоночная БД (ClickHouse, Druid) для быстрых агрегаций.
  5. Отображение данных:

    • Кэширование агрегированных данных для быстрого доступа в личном кабинете.
    • Обновление данных с задержкой не более 10 секунд.

Масштабируемость и надёжность

  • Горизонтальное масштабирование всех компонентов.
  • Репликация и резервирование брокеров и баз данных.
  • Мониторинг и алерты на потерю данных и задержки.

Итог

  • Система должна выдерживать до 12 млн событий в секунду на пике.
  • Использовать распределённые технологии для приёма и обработки.
  • Обеспечить гарантии доставки для кликов и минимальные потери для показов.
  • Обеспечить near real-time обновление аналитики с задержкой до 10 секунд.