Event-Streaming və real vaxt məlumatları
(Bölmə: Texnologiya və Infrastruktur)
Qısa xülasə
Event-Streaming hadisələrin göründüyü anda emalı və çatdırılmasıdır. iGaming üçün bu, bahislərə, depozitlərə, antifrod siqnallarına, məsuliyyətli oyun limitlərinə, turnir cədvəllərinə və şəxsi offerlərə ani reaksiya deməkdir. Əsas kərpiclər: hadisə şinası (Kafka/Pulsar), axın mühərriki (Flink/ksqlDB/Spark Structured Streaming), əməliyyat DB-dən CDC (Debezium), onlayn ML üçün Feature Store və real vaxt analitikası (materiallaşdırılmış təsəvvürlər, OLAP).
Harada iGaming kritik
Antifrod & risk: <100-300 ms-də əməliyyatların hesablanması, davranış nümunələrinin korrelyasiyası, bloklanması və eskalasiyası.
Məsuliyyətli oyun: limitlərə nəzarət, itki sürəti, anormal davranış - həyəcan və real vaxt rejimində avtomatik məhdudiyyətlər.
Ödənişlər: status ventilləri, webhooks PSP, smart-retry, balans proyeksiyaları, SLA «time-to-wallet».
Oyun tədbirləri: turnir liderlərinin hesablanması (sliding windows), canlı oyun turları, CRM/marketinq üçün real vaxt lentləri.
Personalizasiya: Online Fich (RFM, propensity) → trigger kampaniyaları, saniyələr ərzində push/email.
Əməliyyat analitikası: p95/p99 latency, huni addımlarının çevrilməsi, platformanın sağlamlıq siqnalları.
Memarlıq modelləri
Lambda vs Kappa
Lambda: batch (DWH/ETL) + streaming (operativ). Plus - çeviklik və «ucuz» çek; mənfi - ikili məntiq.
Kappa: hər şey jurnaldan axın kimi (Kafka). Plus - vahid kod, hadisələrin reiqrası; mənfi - daha sərt infrastruktur tələbləri.
Təcrübə: kritik real-time konturları üçün - Kappa; hesabat/ML-təlim üçün - əlavə batch-kontur.
Hadisə konveyeri (referans)
1. İstehsalçılar: bahis/ödəniş xidmətləri domen hadisələrini (outbox → Kafka) dərc edir.
2. Şin: Kafka açar hissələri ilə ('player _ id', 'bet _ id').
3. CDC: Debezium ALTP-dən (balans, limit) dəyişiklikləri axına çəkir.
4. Flink/ksqlDB/Spark - aqreqasiyaları, pəncərələri, CEP, join 's.
5. Proyeksiyalar: materiallaşdırılmış cədvəllər (Kafka Streams state store/ksqlDB tables/Redis), OLAP (ClickHouse/Druid).
6. İstehlakçılar: antifrod, CRM, bildirişlər, dashboard, trigger workflow.
Məlumat müqavilələri və sxemlər
Avro/Protobuf + Schema Registry: ciddi müqavilələr, backward-compatible miqrasiya.
Versiyası: 'domain. event. v{n}`; pozucu dəyişiklikləri qadağan etmək.
PII: tokenizasiya/şifrələmə, maskalama, purpose limitation (GDPR).
Çatdırılma semantikası və idempotentlik
At-least-once - de-fakto standart (dublikatlar mümkündür) → məcburi idempotent-handling.
Axında Exactly-once: Flink/Streams-da Kafka + EOS əməliyyat istehsalçıları; daha bahalı, nöqtəli tətbiq (pul/balans).
Outbox + CDC: DB xidmətindən vahid həqiqət mənbəyi, ikiqat yazıdan qorunma.
Dedup: açar ('idempotency _ key'), TTL ilə duplikasiya cədvəli, upsert/merge.
Müvəqqəti pəncərələr və «gec» məlumatlar
Pəncərələr:- Tumbling - sabit yuvalar (məsələn, bir dəqiqə dövriyyəsi).
- Hopping - addım sürüşmə (məsələn, 1 dəqiqə addım 5 dəqiqə pəncərə).
- Session - fəaliyyətsizliyə görə (oyunçu sessiyası).
- Watermarks: event-time emal, «gec» tolerantlığı (lateness), DLQ/side-output evakuasiya.
- CEP (Complex Event Processing): «A sonra 3 dəq B», «M saniyədə N hadisə», «ləğv/kompensasiya» nümunələri.
Vəziyyət və miqyaslandırma
Stateful operatorları: aqreqasiyalar/coynlar vəziyyəti saxlayır (RocksDB state backend).
Changelog topics: etibarlılıq və state bərpa.
Backpressure: avtomatik sürət tənzimlənməsi, sink/ sistemlərinin limitləri.
Açarların paylanması: qaynar açarlar (heavy hitters) → key-salting, skew mitigation.
Monitorinq və SLO
SLO axını: p99 end-to-end latency (məsələn, ≤ 2 s), icazə verilən consumer lag, mövcudluğu ≥ 99. 9%.
Metriklər: throughput, partiyalar üzrə lag, watermark delay, drop/late ratio, backpressure, busy time operatorları, GC/JVM.
Alertlər: DLQ böyüməsi, watermark gecikməsi, EOS yoxlama nöqtələrinin uğursuzluqları, online/oflayn fiş.
Trace: prodüser-strim-konsumer vasitəsilə korelasiya ID ('trace _ id', 'message _ id').
Təhlükəsizlik və uyğunluq
TLS/MTLS, ACL/RBAC top/cədvəllər, həssas domenlərin seqmentasiyası (ödənişlər/KUS).
Tranzit/diskdə PII şifrələmə; Vault/SOPS sirləri.
Data retention & locality: bölgələrə görə saxlama (AB, Türkiyə, LatAm), silinmə siyasəti.
Audit: kim nəşr/oxumaq, ssenari təkrarlanabilirlik.
Yüksək mövcudluq və DR
Kafka: `replication. factor ≥ 3`, `min. insync. replicas ',' acks = all ', DR üçün cross-regional replikasiya (MM2).
Flink/Streams: nəzarət olunan buraxılışlar üçün periodik checkpoint + savepoint; HA-JobManager.
OLAP: seqmentlərin replikasiyası, read replicas; testlər failover (game day).
Performans və sazlama
Prodüserlər: batching ('linger. ms`, `batch. size '), sıxılma (lz4/zstd).
Konsumerlər: düzgün 'max. poll. interval ', backoff partiyalar fasilə.
Partizanlaşdırma: hədəf TPS və paralellik partiyalar hesab.
State: RocksDB options (block cache/write buffer), NVMe/IOPS, pinning.
Network: 10/25G, TCP-sazlama, n + 1 sink-sorğuların saxlanması.
Həyata keçirilməsi: əsas texnologiyalar
Şina: Apache Kafka (alternativlər: Pulsar, Redpanda).
Axın emalı: Apache Flink, Kafka Streams, ksqlDB, Spark Structured Streaming.
CDC: Debezium (MySQL/Postgres), Outbox konnektorları.
Proyeksiya anbarları: ksqlDB tables, Kafka Streams state store, Redis üçün aşağı gecikmə, ClickHouse/Druid/Pinot üçün OLAP.
Fichestor: Feast və ya öz - online (Redis) + offline (Parquet/BigQuery), sabitlik zəmanəti.
Dizayn nümunələri
Outbox → Kafka: DB əməliyyatından hər bir domen hadisəsi.
Dastanlar: hadisələr vasitəsilə kompensasiya; orkestr - axın.
Fan-out: bir hadisə → antifrod, CRM, analitika, notifikasiya.
Materialized Views: aparıcı bordlar, balans, limitlər - axından yenilənən cədvəllər şəklində.
Reprocessing: aqreqatların/retro analitiklərin yenidən hesablanması üçün topiklərin səsləndirilməsi.
Nümunələr (konsepsiyalar)
ksqlDB: turnir liderləri (sürüşmə pəncərəsi)
sql
CREATE STREAM bets_src (
bet_id VARCHAR KEY,
player_id VARCHAR,
amount DOUBLE,
ts BIGINT
) WITH (KAFKA_TOPIC='bets. placed. v1', VALUE_FORMAT='AVRO', TIMESTAMP='ts');
CREATE TABLE leaderboard AS
SELECT player_id,
SUM(amount) AS total_stake,
WINDOWSTART AS win_start,
WINDOWEND AS win_end
FROM bets_src
WINDOW HOPPING (SIZE 10 MINUTES, ADVANCE BY 1 MINUTE)
GROUP BY player_id
EMIT CHANGES;
Flink (psevdokod): late-events
java stream
.assignTimestampsAndWatermarks(WatermarkStrategy. forBoundedOutOfOrderness(Duration. ofSeconds(10)))
.keyBy(e -> e. playerId)
.window(SlidingEventTimeWindows. of(Time. minutes(5), Time. minutes(1)))
.aggregate(scoreFunction, processWindow)
.sideOutputLateData(lateTag)
.addSink(riskTopic);
Axın keyfiyyətinin test edilməsi
Sxemlər və təkamül Contract testləri (Schema Registry).
Yükləmə: hədəf TPS, p99, sink deqradasiyasında davranış.
Failure/chaos: brokerlərin/düyünlərin düşməsi, şəbəkə gecikmələri, split-brain.
Deterministic replays: topiklərin təkrar qaçışı → eyni nəticələr.
Canary axınları: gecikmə və bütövlüyü yoxlama konturu.
Giriş çek siyahısı
1. SLO (p99 E2E ≤ X c, lag ≤ Y, mövcudluğu ≥ Z) müəyyən edin.
2. Sxemləri və açarları standartlaşdırın (player_id/bet_id).
3. Memarlıq seçin (kritik konturlar üçün Kappa).
4. outbox + CDC qurmaq və PII təcrid.
5. Windows, watermark, late-policy və DLQ/side outputs.
6. Pul yollarında EOS/idempotentliyi daxil edin.
7. lag, watermark, DLQ-də monitorinq və alertlər daxil edin.
8. HA/DR və reprocessing qaydaları təmin edin.
9. Online/oflayn Feature Store və sinxronizasiya yerləşdirin.
10. Game-day keçirin: uğursuzluqlar və bərpa işləri.
Antipatternlər
şüurlu siyasət olmadan event-time və processing-time qarışdırın.
schema governance → «sındırıcı» buraxılışların olmaması.
late data və «qaynar açarları» məhəl qoymayın.
replay strategiyası və top versiyasının olmaması.
İdempotency və EOS olmadan dərəcələr/ödənişlər.
Nəticələr
Real-time axını «başqa bir nəqliyyat» deyil, düşüncə tərzidir: domen hadisələri, aydın SLO, məlumat müqavilələri, pəncərələr və vəziyyət, təhlükəsizlik və müşahidə. iGaming üçün sabit dəst - Kafka + Flink/ksqlDB + Debezium + Materialized Views + Feature Store. Bu milisaniyəlik reaksiyalar, onlayn/oflayn analitikanın uyğunluğu və yükün artması ilə idarə olunan çətinlik verir.