GH GambleHub

Habar nobatlary: Kafka we RabbitMQ

Habar nobatlary: Kafka, RabbitMQ

(Bölüm: Tehnologiýalar we infrastruktura)

Gysgaça gysgaça

Habar nobatlary - iGaming-de waka gönükdirilen arhitekturanyň (EDA) binýady. Olar nyrhlaryň, tölegleriň, antifrodyň, CRM-leriň, bellikleriň we analitikleriň mikroservislerini baglanyşdyrýarlar. Iş ýüzünde köplenç iki derejeli çözgütler duş gelýär:
  • Apache Kafka - paýlanan wakalar magazineurnaly (log), partiýa arkaly akymlary gaýtadan işlemäge, köpeltmäge we gorizontal skeylinge gönükdirilendir.
  • RabbitMQ - çeýe marşrutlaşdyrma (exchanges/bindings), ileri tutulýan ugurlar, TTL, tassyklamalar we nobatlaryň nusgawy wezipeleri bilen AMQP nobatlarynyň brokeri.

Iki gural hem kämillik ýaşyna ýetdi, ýöne dürli meseleleri çözýär: Kafka - masştably akymlar we analitikler üçin, RabbitMQ - meseleleriň operatiw orkestri, RPC we dürli ugurlar üçin.

Nirede iGaming üçin amatly

Kafka - haçan saýlamaly:
  • Wakalaryň ýokary TPS (nyrhlar, oýun wakalary, telemetriýa) we partiýa arkaly gorizontal skeýl gerek.
  • Sowuk/gyzgyn re-konsum (lentaly maglumatlary gaýtadan okamak), agregatlar üçin retenşn we kompakşn (balans, oýunçynyň ýagdaýy) möhümdir.
  • Realtime-agregatlar üçin akym prosesleri (Kafka Streams/ksqlDB/Flink) gerek: ýaryşlaryň ýolbaşçylary, jogapkär oýnuň çäkleri, froda garşy signallar.
RabbitMQ - haçan saýlamaly:
  • Klassiki wezipe nobatlary gerek: KYC-barlag, yza süýşürilen/gaýtadan tölegler, e-poçta/SMS/push, webhooks PSP-e ibermek.
  • Çeýe marşrut (topic/direct/fanout), ileri tutulýan ugurlar, TTL, delay, dead-letter we RPC-patternleri.
  • Berk per-consumer çäklendirmeleri (prefetch/QoS), ýönekeý ýük dolandyryşy we çalt retralar talap edilýär.

Halfarym netije: Wakalar we analitika üçin Kafka + Orkestr we integrasiýa üçin RabbitMQ.

Maglumat modeli we ugrukdyrylyşy

Kafka

Topikler → partiýa bölünýär, her biri tertipli log.
Habar açary partiýany kesgitleýär → açaryň çägindäki tertiplilik.
Konsumerler ofset boýunça okaýarlar, konsumerler topary gaýtadan işlemegi giňeldýärler.
Wagt/göwrüm boýunça retenşn; log compaction açaryň iň soňky wersiýasyny saklaýar.

RabbitMQ

Exchanges (direct/fanout/topic/headers) + bindings → habarlar queues-e girýär.
Tassyklamalar (ack/nack/requeue), publisher confirms, priorities, TTL, dead-letter (DLX/DLQ).
Quorum queues (Raft) ýokary elýeterlilik üçin; RAM tygşytlamak üçin lazy queues.

Eltip bermegiň kepillikleri we ýol görkezijiligi

At-most-once: retraýsyz; ýitgiler töwekgelçiligi, iň az gijä galmak.
At-least-once: standart → dublikatlar bolup biler → dempotent hendlerler (haýyş/geleşik açary, upsert, dedup-tablisasy, outbox).
Exactly-once: Kafka-da bir topar dempotent öndüriji + geleşik topikleri + ylalaşylan sarp etmek gazanylýar, ýöne köplenç has gymmat we has kyn; RabbitMQ - çäkli we süňkli. Hakyky töleg/stawka akymlarynda at-least-once + berk idempotentlik ulanylýar.

Idempotentlik tejribesi:
  • Waka/topar üçin özboluşly idempotency-keys (UUID/ULID).
  • Hyzmatyň DB-sinde Outbox-pattern + Change Data Capture (Debezium) → "goşa ýazgynyň" öňüni almak.
  • Dedup po (key, created_at) TTL bilen aýratyn gutuda.

Sargyt/Habar tertibi

Kafka partiýanyň içinde tertip-düzgüni kepillendirýär. Açary, mazmunyň ähli "durmuşy" bir açarda bolar ýaly saýlaň (mysal üçin, balans üçin 'player _ id').
RabbitMQ gaýtadan eltilende/birnäçe konsumerlerde prosedura berk kepillendirilmeýär; tertipli paýlaýjylar - Kafka ýa-da ýeke-täk işjeň ulanyjy we akymy seriýallaşdyrmak arkaly has gowudyr.

Topikleri we nobatlary dizaýn etmek

Kafka:
  • Granulýasiýa: 'domain. event '(mysal üçin' payments. deposit. created`).
  • Açarlar: 'player _ id', 'account _ id', 'bet _ id'.
  • Partisiýa = N maksatly TPS boýunça (düzgün: 1 partiýa ≈ X habar/sek/konsumer); ösüş üçin ätiýaçlyk goýmak.
  • Retenşn: wakalar - sagatlar/günler; kompakşn - "ýagdaýlar" üçin.
RabbitMQ:
  • Domen boýunça alyş-çalyş: 'payments. direct`, `risk. topic`.
  • Sarp edijiler üçin nobatlar: 'kyc. checker. q`, `psp. webhooks. retry. q`.
  • Her iş nobaty üçin DLQ; backoff üçin delay.
  • Prefetch paralelligi kesgitleýär, kuorum nobatlary - HA üçin.

Ýalňyşlyklar, retralar we DLQ

Hatalary klassifikasiýa ediň: wagtlaýyn (tor/PSP 5xx) → retralar; öldüriji (tassyklama, shema) → birbada DLQ.
Exponential backoff + jitter, retraýlaryň çäkleri, "poison-pill" detektiw.
Aýry-aýry retry-queues ädimlerde (5s, 1m, 5m, 1h).
DLQ-prosessor: alert, trace, el derňewi, patch bilen re-injekt.

Maglumatlaryň şertnamasy we shemalary

Euro/Protobuf + Schema Registry ulanyň (Kafka üçin - de-fakto standartı).
Wersiýalaşdyrmak: backward-compatible üýtgeşmeler (goşmaça meýdanlary goşmak), döwýän göçmeleri gadagan etmek.
PII meýdanlary - şifrlemek/tokenizasiýa; GDPR we ýerli kadalary berjaý ediň.

Gözegçilik, gözegçilik we SLO

Öndürijileriň/konsumerleriň ölçegleri: lag, throughput, ýalňyşlyklar, retralar, gaýtadan işlemek wagty.
Logi + Trace (korrelasiýa ID: 'trace _ id', 'message _ id').
SLO: p99-neşiriň/gowşuryşyň gizlinligi, kabul ederlikli ulanyjy lag, feýlden soň dikeldiş wagty.
DLQ-iň ýokarlanmagy, lag-dan ýokary bolmagy, partiýanyň/kworumyň peselmegi üçin alertler.

Howpsuzlyk we laýyklyk

Tranzitde TLS, gizlin şifrlemek (SOPS/Vault), ACL/RBAC bilen çäklendirilen.
Duýgur domenler üçin aýratyn topikler/nobatlar (tölegler, KYC).
Neşirleriň/abuna ýazylmalaryň audit-log, açarlary kod daşynda saklamak.
Sebitleýin talaplar (EU/Türkiýe/LatAm): retenşn, saklamagyň lokalizasiýasy, maskalanmagy.

Ýokary elýeterlilik, näsazlyga çydamlylyk we DR

Kafka:
  • Iň az 3-5 dellal topary; replication. factor ≥ 3.
  • min. insync. güýçli ýazgylar üçin replicas & acks = all.
  • DR üçin sebitleýin köpeltmeler (MirrorMaker-2).
RabbitMQ:
  • HA üçin quorum queues, kworum bilen jübüt/tak nod.
  • Federation/Shovel üçin DPC replikasiýa, DR-ssenariler.
  • Sowuk/ýyly stend, geçiş synaglary.

Öndürijilik we sazlama

Kafka (prodýuser):
  • `linger. ms` и `batch. size 'batching;' compression. type` (lz4/zstd).
  • 'acks = all', ýöne gizlinligi yzarlamak; tyun 'max. in. flight. requests. per. connection 'idempotentlik bilen.
Kafka (broker/topiki):
  • Partiýa ýeterlik; NVMe diskleri; 10/25G tory; JVM-iň GC sazlamalary.
Kafka (konsumer):
  • Dogry group management, 'max. poll. interval. ms ', arka gapda partiýany duruzmak.
RabbitMQ (prodýuser):
  • Batçlarda Publisher confirms; kanallary gaýtadan ulanmak.
RabbitMQ (nobatlar/konsumerler):
  • 'prefetch' (mysal üçin 50-300) gaýtadan işlemek wagty; uly bellikler üçin lazy queues.
  • Nodalara gyzgyn nobatlary ýaýratmak; tyun TSR/faýl deskriptorlary.

iGaming üçin nusgalar

Domen wakalaryny ygtybarly çap etmek üçin Outbox + Kafka (nyrh ýerleşdirildi, goýum hasaplandy).
Integrasiýalara sinhron soraglar üçin RabbitMQ RPC (KYC resminamasyny barlamak, bonus hasaplamak).
Saga-pattern: wakalar (Kafka) we kompensasiýa ädimleri bilen toparlar (RabbitMQ) arkaly orkestr.
Habarnamalaryň Fan-out: bir wakadan → CRM, anti-frod, analitika.
Progressiw gijikdirmeler we DLQ bilen Smart-retry PSP webhook.

Migrasiýa we gibrid arhitektura

"Operasiýa" üçin RabbitMQ bilen başlaň, wakalar we analitikler üçin Kafka goşuň.
Neşirleri köpeldiň: hyzmat → outbox → konnektor iki tarapa (Kafka + RabbitMQ) doly durnuklaşýança.
Analitika/akym agregasiýalarynyň abonentlerini Kafka Streams/ksqlDB-e kem-kemden geçiriň.

Saýlawyň kiçi barlag sanawy

1. Ýük/TPS> on müňlerçe/sekunt? → Kafka.
2. Retrenşn we magazineurnaldan okamak gerek? → Kafka.
3. Çeýe marşrut, ileri tutulýan ugurlar, gijikdirilen gowşuryş, RPC? → RabbitMQ.
4. Açar boýunça berk tertip we gorizontal skeýl → Kafka (açar/partiýa).
5. Parallelizmi dolandyrýan ýönekeý meseleler/work-kyu → RabbitMQ.
6. Iň gowusy - kombinasiýa: Kafka (wakalar) + RabbitMQ (orkestr).

Iň az konfigurasiýa mysallary

Mysal: RabbitMQ-da tussag edilen retralar we DLQ (syýasat arkaly)

Iş nobaty: 'psp. webhooks. q`

Retraýlaryň nobaty: 'psp. webhooks. retry. 1m. q '(TTL = 60s, DLX iş ýerini görkezýär)

DLQ: `psp. webhooks. dlq`

Syýasatlar (konseptual):
  • `psp. webhooks. q` → `x-dead-letter-exchange=psp. retry. exchange`
  • `psp. webhooks. retry. 1m. q` → `x-message-ttl=60000`, `x-dead-letter-exchange=psp. work. exchange`
  • `psp. webhooks. dlq '→ gözegçilik we el derňewi.

Mysal: jedeller üçin Kafka topik

Topik: 'bets. placed. v1 ', partiýa: 24, RF = 3, retenşn 7 gün.
Habar açary: 'player _ id' ýa-da 'bet _ id' (sargyt üçin has möhümini saýlaň).
Схема: Protobuf/Avro с `bet_id`, `player_id`, `stake`, `odds`, `ts`, `idempotency_key`.

Synag we hili

Contract-testler prodýuser/konsumer + shemalary barlamak (Schema Registry).
Chaos synaglary: nodyň ýykylmagy, toruň gijikdirilmegi, bölünen brain.
Maksatly TPS ýüklemek, p99 barlagy, lag ösüşi we dikeldiş.

Netijeler

Kafka - wakalaryň we akymyň esasy: açar boýunça tertiplilik, retenşn/kompakşn, ýokary TPS, hakyky wagtda analitika.
RabbitMQ - wezipeleriň iş nobaty: çeýe marşrut, tassyklamalar, ileri tutulýan ugurlar, retralar/DLQ, RPC.
iGaming-de iň oňat tejribe - jemleýji ulanmak: Kafka-da wakalar we analitika, RabbitMQ-da integrasiýa/orkestr meseleleri, shemalaryň ýeke-täk standartlary, idempotentlik, gözegçilik we berk SLO.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.