Senior
Supponiamo di essere una grande rete pubblicitaria. Posizioniamo banner sui siti partner in tutto il mondo. Dobbiamo progettare un sistema di raccolta e elaborazione degli eventi in tempo reale. Questi dati sono critici per due scopi: Fatturazione: Deduzione di denaro dagli inserzionisti per clic. Analisi: Visualizzazione dell'efficacia attuale delle campagne (CTR, impressioni) nel pannello di controllo. Dati di input (per il calcolo del carico) Devi stimare autonomamente le capacità richieste (RPS, traffico, archiviazione), sulla base delle seguenti metriche: Rete partner: 500.000 siti attivi. Traffico: In media, ogni sito riceve 2 visualizzazioni di pagina al secondo. Blocchi pubblicitari: Su ogni pagina vengono visualizzati 3 banner contemporaneamente. Conversione: La CTR media è del 1%. Irregolarità: Il carico di picco (ore serali) è 4 volte superiore alla media. Dimensione dell'evento: L'oggetto dell'evento (ID banner, ID sito, UserID, Timestamp, tipo di evento) pesa circa 500 byte. Requisiti tecnici Near Real-Time: I dati nell'interfaccia analitica devono apparire con un ritardo non superiore a 10 secondi. Affidabilità: La perdita di clic non è accettabile (questo comporta una perdita di denaro). La perdita di impressioni è ammessa fino allo 0,01%. Scalabilità: Il sistema deve poter essere facilmente espanso con la crescita del numero di piattaforme.
sobes.tech AI
Risposta dell'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 МБ/сек
Архитектура системы
-
Сбор данных:
- Использовать легковесные агенты или SDK на сайтах для отправки событий.
- Протоколы: HTTP/2, gRPC или Kafka Producer для высокой пропускной способности.
-
Приём и буферизация:
- Использовать распределённый брокер сообщений (например, Apache Kafka) для устойчивого приёма и буферизации событий.
- Настроить партиционирование по ID сайта или баннера для масштабируемости.
-
Обработка:
- Потоковая обработка с помощью систем типа Apache Flink, Kafka Streams или собственного сервиса на Go.
- Клики обрабатывать с гарантией доставки (exactly-once или at-least-once).
- Показов можно допускать небольшую потерю (0.01%), использовать компромиссы в обработке.
-
Хранение:
- Для биллинга — база данных с транзакционной поддержкой (например, PostgreSQL, CockroachDB).
- Для аналитики — OLAP-хранилище или колоночная БД (ClickHouse, Druid) для быстрых агрегаций.
-
Отображение данных:
- Кэширование агрегированных данных для быстрого доступа в личном кабинете.
- Обновление данных с задержкой не более 10 секунд.
Масштабируемость и надёжность
- Горизонтальное масштабирование всех компонентов.
- Репликация и резервирование брокеров и баз данных.
- Мониторинг и алерты на потерю данных и задержки.
Итог
- Система должна выдерживать до 12 млн событий в секунду на пике.
- Использовать распределённые технологии для приёма и обработки.
- Обеспечить гарантии доставки для кликов и минимальные потери для показов.
- Обеспечить near real-time обновление аналитики с задержкой до 10 секунд.