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.
- 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.
- 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.
- 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).
- 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.
- Partiýa ýeterlik; NVMe diskleri; 10/25G tory; JVM-iň GC sazlamalary.
- Dogry group management, 'max. poll. interval. ms ', arka gapda partiýany duruzmak.
- Batçlarda Publisher confirms; kanallary gaýtadan ulanmak.
- '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.