Sobes.tech
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 МБ/сек

Жүйе архитектурасы

  1. Деректер жинау:

    • Сайттарда жеңіл агенттер немесе SDK пайдалану оқиғаларды жіберу үшін.
    • Протоколдар: HTTP/2, gRPC немесе Kafka Producer жоғары өткізу қабілеттілігі үшін.
  2. Қабылдау және буферлеу:

    • Таралған хабарламалар брокерін пайдалану (мысалы, Apache Kafka) тұрақты қабылдау және буферлеу үшін.
    • Сайт немесе баннер бойынша бөлу (партиционирование) масштабтау үшін.
  3. Өңдеу:

    • Apache Flink, Kafka Streams немесе Go тілінде жеке қызметтер арқылы ағынды өңдеу.
    • Түймелерді жеткізу кепілдігімен өңдеу (exactly-once немесе at-least-once).
    • Көрсетілімдерді аздап жоғалтуға болады (0.01%), өңдеу кезінде компромисс қолдану.
  4. Сақтау:

    • Биллинг үшін транзакциялық қолдау көрсететін дерекқор (мысалы, PostgreSQL, CockroachDB).
    • Аналитика үшін OLAP сақтау немесе бағанды дерекқор (ClickHouse, Druid) жылдам агрегаттау үшін.
  5. Деректерді көрсету:

    • Жинақталған деректерді кэштеу, жеке кабинетте жылдам қол жеткізу үшін.
    • Деректерді жаңарту уақыты 10 секундтан аспауы керек.

Масштабтау және сенімділік

  • Барлық компоненттерді горизонтальды масштабтау.
  • Брокерлер мен дерекқорларды репликациялау және резервтеу.
  • Деректер жоғалту мен кідірістерді бақылау және ескерту жүйелері.

Қорытынды

  • Жүйе шыдауы керек шамамен 12 миллион оқиға/сек шектеуінде.
  • Қабылдау және өңдеу үшін таралған технологияларды пайдалану.
  • Түймелер үшін жеткізу кепілдігін қамтамасыз ету және көрсетілімдер үшін минималды жоғалту.
  • Аналитиканы жақын уақыттық режимде жаңарту, кідірісі 10 секундтан аспауы керек.