Senior
Gəlin, böyük bir reklam şəbəkəsi olduğumuzu fərz edək. Biz bütün dünyada tərəfdaş saytlarında bannerlər yerləşdiririk. Real vaxt rejimində hadisələrin toplanması və işlənməsi üçün bir sistem dizayn etməliyik. Bu məlumatlar iki məqsəd üçün çox vacibdir: Fakturalama: Kliklər üçün reklamverənlərdən pul tutulması. Analitika: Kampaniyaların hazırkı effektivliyini (CTR, göstərimlər) şəxsi paneldə göstərmək. Giriş məlumatları (yükü hesablamaq üçün) Özünüz tələb olunan gücü qiymətləndirməlisiniz (RPS, trafik, saxlama), aşağıdakı metriklərə əsaslanaraq: Tərəfdaş şəbəkəsi: 500,000 aktiv sayt. Trafik: Orta hesabla hər sayt 2 səhifə baxışı alır saniyədə. Reklam blokları: Hər səhifədə eyni vaxtda 3 banner göstərilir. Konversiya: Orta CTR (Click-Through Rate) 1%. Qeyri-bərabərlik: Pik yük (axşam saatları) orta ilə müqayisədə 4 dəfə çoxdur. Hadisənin ölçüsü: Hadisə obyekti (Banner ID, Sayt ID, UserID, Timestamp, hadisə növü) təxminən 500 bayt çəkir. Texniki tələblər Near Real-Time: Analitik interfeysində məlumatlar ən çox 10 saniyə gecikmə ilə görünməlidir. Etibarlılıq: Kliklərin itirilməsi qəbul edilmir (bu birbaşa pul itkisi deməkdir). Göstərimlərin itirilməsi 0.01%-ə qədər qəbul edilir. Ölçüləbilərlik: Sistem platformaların sayındakı artımla asanlıqla genişləndirilməlidir.
sobes.tech Süni İntellekt
AI-dan cavab
Для проектирования системы сбора и обработки событий в реальном времени для крупной рекламной сети с указанными параметрами, рассмотрим ключевые аспекты:
Оценка нагрузки
- Активных сайтов: 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 секунд.