Senior
Айтайық, біз ірі жарнама желісіміз. Біз серіктес сайттарда баннерлер орналастырамыз бүкіл әлем бойынша. Бізге оқиғаларды жинау және өңдеу жүйесін жобалау қажет. Бұл деректер екі мақсат үшін өте маңызды: Шоттан алу: Кликтер үшін жарнама берушілерден ақша алу. Аналитика: Науқанның ағымдағы тиімділігін көрсету (CTR, көрсетілімдер) жеке кабинетте. Бастапқы деректер (жүктемені бағалау үшін) Сіз өзіңіз бағалау керек қажетті қуаттылықты (RPS, трафик, сақтау орны), келесі метрикаларға негізделген: Серіктестік желі: 500,000 белсенді сайт. Трафик: Әр сайтта орта есеппен 2 бет қарау секундына. Рекламалық блоктар: Әр бетте бір уақытта 3 баннер көрсетіледі. Конверсия: Орташа CTR (Click-Through Rate) 1% құрайды. Әрекетсіздік: Шамамен 4 есе жоғары пиковая жүктеме (кешкі уақытта). Оқиға көлемі: Оқиға объектісі (баннер ID, сайт ID, UserID, Timestamp, оқиға түрі) шамамен 500 байт. Техникалық талаптар Жақын уақыттық нақты уақыт: Аналитикалық интерфейсте деректер 10 секундтан аспайтын кешігуімен пайда болуы керек. Сенімділік: Кликтердің жоғалуы қабылданбайды (бұл тікелей ақша жоғалту). Көрсетілімдердің жоғалуы (impressions) 0.01% шегінде рұқсат етілген. Кеңейтілімділік: Жүйе платформалардың саны өскен сайын оңай кеңейтілуі керек.
sobes.tech AI
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) тұрақты қабылдау және буферлеу үшін.
- Сайт немесе баннер бойынша бөлу (партиционирование) масштабтау үшін.
-
Өңдеу:
- Apache Flink, Kafka Streams немесе Go тілінде жеке қызметтер арқылы ағынды өңдеу.
- Түймелерді жеткізу кепілдігімен өңдеу (exactly-once немесе at-least-once).
- Көрсетілімдерді аздап жоғалтуға болады (0.01%), өңдеу кезінде компромисс қолдану.
-
Сақтау:
- Биллинг үшін транзакциялық қолдау көрсететін дерекқор (мысалы, PostgreSQL, CockroachDB).
- Аналитика үшін OLAP сақтау немесе бағанды дерекқор (ClickHouse, Druid) жылдам агрегаттау үшін.
-
Деректерді көрсету:
- Жинақталған деректерді кэштеу, жеке кабинетте жылдам қол жеткізу үшін.
- Деректерді жаңарту уақыты 10 секундтан аспауы керек.
Масштабтау және сенімділік
- Барлық компоненттерді горизонтальды масштабтау.
- Брокерлер мен дерекқорларды репликациялау және резервтеу.
- Деректер жоғалту мен кідірістерді бақылау және ескерту жүйелері.
Қорытынды
- Жүйе шыдауы керек шамамен 12 миллион оқиға/сек шектеуінде.
- Қабылдау және өңдеу үшін таралған технологияларды пайдалану.
- Түймелер үшін жеткізу кепілдігін қамтамасыз ету және көрсетілімдер үшін минималды жоғалту.
- Аналитиканы жақын уақыттық режимде жаңарту, кідірісі 10 секундтан аспауы керек.