Mesaj növbələri: Kafka və RabbitMQ
Mesaj növbələri: Kafka, RabbitMQ
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
Mesaj növbələri - iGaming-də hadisə yönümlü arxitekturanın (EDA) təməlidir. Onlar bahis mikroservisləri, ödənişlər, antifrod, CRM, notifikasiya və analitikləri birləşdirirlər. Praktikada ən çox iki sinif həllər var:- Apache Kafka - paylanmış hadisə jurnalı (log), axın emalı, replikasiya və partisiyalar vasitəsilə üfüqi skeylinqə yönəlib.
- RabbitMQ çevik marşrutlaşdırma (exchanges/bindings), prioritetlər, TTL, təsdiqlər və klassik növbə tapşırıqları ilə AMQP növbə brokeridir.
Hər iki alət yetkin, lakin müxtəlif problemləri həll edir: Kafka - ölçülə bilən axınlar və analitiklər üçün, RabbitMQ - tapşırıqların operativ orkestri, RPC və müxtəlif marşrutlaşdırma üçün.
Harada iGaming uyğun
Kafka - seçmək zaman:- Yüksək TPS hadisələrinə (bahislər, oyun hadisələri, telemetriya) və partiyalar vasitəsilə üfüqi skeylə ehtiyacınız var.
- Aqreqatlar üçün soyuq/isti re-konsum (lent məlumatlarının təkrar oxunması), retenşn və kompakşn (balans, oyunçu vəziyyəti) vacibdir.
- realtime aqreqatları üçün axın prosesləri (Kafka Streams/ksqlDB/Flink) lazımdır: turnirin liderləri, məsuliyyətli oyunun limitləri, antifrod siqnalları.
- Klassik vəzifə növbələri lazımdır: KYC-yoxlama, gecikmiş/təkrar ödənişlər, e-mail/SMS/push, PSP-yə webhooks.
- Çevik marşrutlaşdırma (topic/direct/fanout), prioritetlər, TTL, delay, dead-letter və RPC nümunələri.
- Ciddi per-consumer məhdudiyyətləri (prefetch/QoS), sadə yük nəzarəti və sürətli retrajlar tələb olunur.
Tez-tez nəticə: Hadisə və analitika üçün Kafka + Orkestr və inteqrasiya üçün RabbitMQ.
Data modeli və marşrutlaşdırma
Kafka
Topiklər → partiyaya bölünür, hər biri nizamlı bir log.
Mesaj açarı partiyanı müəyyən edir → açar daxilində nizam.
Konsumerlər offset oxuyur, konsumer qrupları emalı genişləndirir.
Retenshn vaxt/həcm; log compaction açarın ən son versiyasını saxlayır.
RabbitMQ
Exchanges (direct/fanout/topic/headers) + bindings → mesajlar queues daxil.
Təsdiq (ack/nack/requeue), publisher confirms, priorities, TTL, dead-letter (DLX/DLQ).
Quorum queues (Raft) yüksək mövcudluğu üçün; RAM qənaət üçün lazy queues.
Çatdırılma və idempotentlik zəmanətləri
At-most-once: retrajsız; itki riski, minimum gecikmə.
At-least-once: standart default → dublikatlar mümkündür → idempotent hendlers (sorğu/əməliyyat açarı, upsert, dedup-cədvəl, outbox).
Exactly-once: Kafka-da bir dəstə idempotent prodüser + əməliyyat topikləri + razılaşdırılmış istehlak əldə edilir, lakin daha bahalı və daha çətin; RabbitMQ - məhdud və sümüklü. Real ödəniş/mərc axınlarında at-least-once + ciddi idempotentlik tətbiq olunur.
- Unikal idempotency-keys (UUID/ULID) hadisə/komanda üçün.
- DB xidmətində Outbox-pattern + Change Data Capture (Debezium) → «ikiqat yazının» qarşısının alınması.
- Dedup po (key, created_at) TTL ilə ayrı bir store.
Sifariş/Mesaj qaydası
Kafka partiya daxilində nizam-intizama zəmanət verir. Açarı elə seçin ki, mahiyyətin bütün "həyatı 'bir açarda olsun (məsələn, balans üçün 'player _ id').
RabbitMQ sifariş ciddi təkrar çatdırılması/bir neçə konsumer zəmanət deyil; Sifariş üçün kritik paylaynlar - Kafka və ya single-active consumer və serial axını vasitəsilə daha yaxşıdır.
Top və növbələrin dizaynı
Kafka:- Qranulyarlıq: 'domain. event '(məsələn,' payments. deposit. created`).
- Açarlar: 'player _ id', 'account _ id', 'bet _ id' sifariş üçün.
- Partiya = N hədəf TPS (qayda: 1 partiya ≈ X mesaj/san/konsumer); artım üçün ehtiyat qoymaq.
- Retenshn: hadisələr - saat/gün; kompakşn - «hallar» üçün.
- Domenlər üzrə Exchanges: 'payments. direct`, `risk. topic`.
- İstehlakçılar üçün növbələr: 'kyc. checker. q`, `psp. webhooks. retry. q`.
- Hər iş növbəsi üçün DLQ; backoff üçün delay.
- Prefetch paralelliyi təyin edir, quorum növbələri HA üçün.
Səhvlər, retralar və DLQ
Səhvləri təsnif edin: müvəqqəti (şəbəkə/PSP 5xx) → retray; ölümcül (validasiya, sxem) → dərhal DLQ.
Exponential backoff + jitter, retraj limiti, «poison-pill» aşkarlanması.
Ayrı-ayrı retry-queues (5s, 1m, 5m, 1h).
DLQ prosessor: alert, trace, əl təhlili, patch ilə reinject.
Məlumat müqaviləsi və sxemlər
Euro/Protobuf + Schema Registry istifadə edin (Kafka üçün - de-fakto standart).
Version: backward-compatible dəyişikliklər (isteğe bağlı sahələr əlavə), sındırıcı miqrasiya qadağa.
PII sahələri - şifrələmə/tokenizasiya; GDPR və yerli qaydalara riayət edin.
Monitorinq, müşahidə və SLO
Prodüser/konsumerlərin metrikası: lag, throughput, səhvlər, retrajlar, emal vaxtı.
Log + Trace (korrelyasiya ID: 'trace _ id', 'message _ id').
SLO: p99-gizli nəşr/çatdırılma, məqbul consumer lag, fayllardan sonra bərpa vaxtı.
DLQ artımı, lag artımı, partiyalar/kvorum azalması üçün alertlər.
Təhlükəsizlik və uyğunluq
Tranzitdə TLS, gizli şifrələmə (SOPS/Vault), ACL/RBAC ilə məhdudlaşır.
Həssas domenlər üçün ayrı-ayrı topiklər/növbələr (ödənişlər, KYC).
Audit-log nəşrlər/abunələr, koddan kənar açarların saxlanması.
Regional tələblər (EU/Türkiyə/LatAm): retenshn, saxlama lokalizasiyası, maskalanma.
Yüksək mövcudluq, arıza müqaviməti və DR
Kafka:- Klaster 3-5 broker minimum; replication. factor ≥ 3.
- min. insync. replicas və acks = bütün güclü qeydlər üçün.
- DR üçün cross-regional replikasiyalar (MirrorMaker-2).
- HA üçün quorum queues, kvorum ilə cüt/tək nod.
- Federation/Shovel üçün ara DPC replikasiya, DR ssenariləri.
- Soyuq/isti stand, keçid testləri.
Performans və sazlama
Kafka (prodüser):- `linger. ms` и `batch. batching üçün 'size;' compression. type` (lz4/zstd).
- 'acks = all', lakin gizli izləmək; tyun 'max. in. flight. requests. per. connection 'idempotentlik ilə.
- Kifayət qədər partiyalar; NVMe diskləri; 10/25G şəbəkəsi; GC-JVM parametrləri.
- Düzgün group management, 'max. poll. interval. ms ', backoff partiyalar fasilə.
- Publisher confirms batches; channels yenidən istifadə.
- emal vaxtına görə 'prefetch' (məsələn, 50-300); böyük bacclogs üçün lazy queues.
- Qaynar növbələri nodlara çatdırın; tyun TSR/fayl deskriptorları.
iGaming üçün standart nümunələr
Domen hadisələrinin etibarlı yayımı üçün Outbox + Kafka (depozit depozit yerləşdirilib).
İnteqrasiya üçün sinxron sorğular üçün RabbitMQ RPC (KYC sənəd yoxlama, bonus hesablanması).
Saga-pattern: kompensasiya addımları ilə hadisələr (Kafka) və komandalar (RabbitMQ) vasitəsilə orkestr.
Fan-out bildirişləri: bir hadisədən → CRM, antifrod, analitika.
Proqressiv gecikmələr və DLQ ilə Smart-retry PSP vebhuk.
Miqrasiya və hibrid arxitekturalar
«Əməliyyat» üçün RabbitMQ ilə başlayın, hadisələr və analitika üçün Kafka əlavə edin.
Postları təkrarlayın: tam sabitləşməyə qədər xidmət → outbox → konnektor (Kafka + RabbitMQ).
Tədricən analitik/axın toplama abunəçilərini Kafka Streams/ksqlDB-yə köçürün.
Mini check-list seçimi
1. Yük/TPS> on minlərlə/saniyə? → Kafka.
2. Bir jurnal kimi retenshn və təkrar oxumaq lazımdır? → Kafka.
3. Çevik marşrutlaşdırma, prioritetlər, gecikmiş çatdırılma, RPC? → RabbitMQ.
4. Sərt açar qaydası və üfüqi skeyl → Kafka (açar/partiya).
5. Paralelliyi idarə edən sadə tapşırıqlar/work-kyu → RabbitMQ.
6. İdeal olaraq - kombinasiya: Kafka (hadisələr) + RabbitMQ (orkestr).
Minimum konfiqurasiya nümunələri
Nümunə: RabbitMQ-da saxlanılan retrajlar və DLQ (policy vasitəsilə)
İş növbəsi: 'psp. webhooks. q`
Retras növbəsi: 'psp. webhooks. retry. 1m. q '(TTL = 60s, DLX geri iş göstərir)
DLQ: `psp. webhooks. dlq`
Siyasətçilər (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 '→ monitorinq və əl təhlili.
Nümunə: bahislər üçün Kafka topik
Topik: 'bets. placed. v1 ', partiyalar: 24, RF = 3, retenshn 7 gün.
Mesaj açarı: 'player _ id' və ya 'bet _ id' (sifariş üçün daha vacib olanı seçin).
Схема: Protobuf/Avro с `bet_id`, `player_id`, `stake`, `odds`, `ts`, `idempotency_key`.
Test və keyfiyyət
Contract testləri prodüser/məsləhətçi + sxemlərin yoxlanılması (Schema Registry).
Chaos testləri: nod düşməsi, şəbəkə gecikmələri, split-brain.
Hədəf TPS, p99 yoxlama, lag böyüməsi və bərpa ilə yükləmə keçidləri.
Nəticələr
Kafka - hadisələr və axın əsas: açar qaydası, retenshn/kompakşn, yüksək TPS, real vaxt analitikası.
RabbitMQ - tapşırıqların əməliyyat növbəsi: çevik marşrutlaşdırma, təsdiqləmə, prioritetlər, retralar/DLQ, RPC.
iGaming-də ən yaxşı təcrübə tamamlayıcı istifadədir: Kafka-da hadisələr və analitika, vahid sxem standartları, idempotentlik, monitorinq və ciddi SLO ilə RabbitMQ-da inteqrasiya/orkestr vəzifələri.