GH GambleHub

Mikroservis memarlığı

1) Niyə iGaming-də mikroservislər

Dəyişmə sürəti: müstəqil buraxılışlar (ödənişlər, məzmun, risk, turnirlər).
Etibarlılıq: Bir xidmətin uğursuzluğu bütün məhsulu məhv etmir (uğursuzluq sərhədləri).
Miqyaslı: üfüqi skayl «isti» domenlər (cüzdan, lobbi, axınlar).
Komplayens: regionlar/yurisdiksiyalar üzrə məlumatların seqreqasiyası.

Buna dəyməz zaman: kiçik komanda/həcm, DevOps təcrübələri yoxdur, testlərin zəif avtomatlaşdırılması - sonra modul monolit daha yaxşıdır.

2) Domenlər, sərhədlər və komandalar (DDD + Team Topologies)

Domen konturları: Hesab/Profil, KUS/Komplayens, Ödənişlər/Cüzdan, Oyun məzmunu/Aqreqasiya, Bonuslar/Missiyalar, Turnirlər, Marketinq/CRM, Hesabat/BI.
Bounded Context = məlumat modeli və dil haqqında müqavilə.
Komanda dəyişikliyi axını: bir komanda = bir kontur + SLO.
BFF (Backend for Frontend): müştəriyə «orkestr» toplamamaq üçün Web/Mobile/Partner üçün ayrı-ayrı fasadlar.

3) Rabitə: sinxron vs asinxron

Sinxron (REST/gRPC): dərhal cavab lazım olduqda (depozit limitlərinin yoxlanılması).
Asinhron (Kafka/NATS/SQS): hadisələr və fon prosesləri (cashback hesablanması, poçt, reytinqlərin yenilənməsi).

Qaydalar:
  • Kritik yol = minimum şəbəkə hopları.
  • Domenlərarası inteqrasiya - hadisələr və müqavilə API vasitəsilə.
  • online → EDA/dastan istifadə «5 + sinxron zəng zəncir» qurmayın.

4) Müqavilələr və versiyalaşdırma

Birinci müqavilə: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
SemVer + uyğunluq: sahələrin əlavə edilməsi müştərilərə zərər vermir.
Consumer-driven contracts (CDC): CI-də avtomatik yoxlamalar (reqressiyalara qarşı).
Deprecation policy: dəstək pəncərəsi (12-18 ay), köhnə versiyalara görə telemetriya.

5) Hadisələr, dastanlar və sabitlik

Outbox/Transaction Log Tailing: atom qeyd «data + hadisə».

Saqa nümunələri:
  • Ödənişlər/nəticələr üçün orkestr (mərkəzi koordinator).
  • Bonuslar/missiyalar üçün xoreoqrafiya (hadisələrə reaksiya).
  • İdempotentlik: 'entityId + action + nonce' açarları, dedup-reyestrinin saxlanması.
  • Konsistentlik: «xarici» - hadisələr vasitəsilə; «daxili» - xidmət daxilində əməliyyatlar.

6) Məlumat və saxlama

«Öz stork» prinsipi: hər bir xidmət öz DD-yə (sxemlərin izolyasiyası) sahibdir.

Giriş nümunəsi ilə saxlama seçimi:
  • Əməliyyatlar/balanslar - ciddi invariantlarla əlaqəli (PostgreSQL).
  • Hadisələr/log - append-only (Kafka/Redpanda).
  • Cash/sessiyaları - Redis/KeyDB; lider bordları - Redis Sorted Sets.
  • Axtarış - OpenSearch/Elastic.
  • Materiallaşdırılmış oxu proyeksiyaları (CQRS) - sürətli siyahılar/hesabatlar.

7) Etibarlılıq və davamlılıq

Timeouts/Retry with jitter/Retry-budget yalnız idempotent əməliyyatlar üçün.
Circuit-breaker/Outlier-ejection xidmətlər arasında.
Bulkhead: «səs-küylü» axınlar üçün ayrı-ayrı hovuzlar.
Rate limits per-client/route, backpressure (503 + Retry-After).
Dead-letter + poison-message handling.

8) Müşahidə (Observability)

Tracking: OpenTelemetry ('trace _ id' → xidmətlər → DB vasitəsilə).
Metrik: RPS, p50/p95/p99, error rate 4xx/5xx, saturation (CPU/mem/queue), biznes metrik (TTP, TtW).
Log: struktur JSON, PII/PAN/IBAN maskalanması, 'trace _ id' ilə korelasiya.
SLO/alertlər: marşruta/funksiyaya (məsələn, 'Deposit p95 ≤ 300 ms', 'success ≥ 98. 5%`).

9) Təhlükəsizlik və uyğunluq

Zero-Trust: mTLS xidməti (SPIFFE/SPIRE), qısa ömürlü sertifikatlar.
AuthN/Z: OAuth2/JWT (aud/scope/exp), rolların atribut ayrılması.
Secrets: KMS/Secrets Manager/Sealed Secrets, açar rotasiyası.
GDPR/məlumat lokalizasiyası: regional klasterlər, API şlüzündə geo-fencing.
Audit: dəyişməz jurnallar (WORM), inzibati hərəkətlərin izlənməsi.

10) Yerləşdirmə və buraxılışlar

Konteynerlər/K8s: bir xidmət = bir deploy; resurslar/limitlər; PodDisruptionBudget.
CI/CD: linterlər, unit/contract/integ testləri, security scan, SBOM.
Relizlər: canary/blue-green/shadow, expand-and-contract vasitəsilə sxemlərin miqrasiyası.
Avtoskeyl: CPU + RPS + p95 + queue-depth üzrə HPA; yığıldıqda drain.

11) Performans və dəyəri

Profil: p95/99 «xidmət və metodlara görə», flame-qraflar.
Caching: read-through/write-through; TTL/hadisələr üzrə əlillik.
Data locality: hesablama yaxın isti məlumat saxlamaq.
FinOps: 60-70% yükləmə hədəfi, «warm pools», aktiv olmayan işçilərin avtomatik fasiləsi.

12) Domen şablonları (iGaming)

12. 1 Ödənişlər/Cüzdan

Xidmətlər: 'payments-gw' (fasad), 'wallet', 'psp-adapters-', 'fraud-check'.
axını: 'init → reserve → capture/rollback' (saga).
События: `PaymentInitiated`, `PaymentAuthorized`, `PaymentSettled/Failed`.
İdempotentlik: 'Idempotency-Key', dedup 'wallet'.

12. 2 KUS/Komplayens

Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.
События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.
Audit və ETA: tapşırıqların növbəsi, zaman-line case, post-actions.

12. 3 Bonuslar/Missiyalar

Xidmətlər: 'bonus-engine', 'wallet-bonus', 'eligibility'.
Xoreoqrafiya: 'BetPlaced → BonusEngine → BonusGranted → WalletCredited'.
Sui-istifadədən qorunma: idempotent qrantlar, limitlər, qaydalar simulyatoru.

12. 4 Turnirlər/Liderbordlar

Xidmətlər: 'tournament-svc', 'scoring', 'leaderboard'.
Saxlama: Redis ZSET + OLAP-da periodik «endirmə».
События: `ScoreUpdated`, `TournamentClosed`, `RewardIssued`.

13) Nümunə «müqavilə + hadisə» (sadələşdirilmiş)

OpenAPI (fraqment) - Wallet

yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }

AsyncAPI (fraqment) - hadisə

yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]

14) Test

Domen qaydaları üçün Unit/Property-based.
CDC (Pact/Assertible) - provayderlərin/istehlakçıların müqavilə testləri.
Yerli brokerlərlə inteqrasiya (Testcontainers).
kritik flow E2E (qeydiyyat → depozit → başlanğıc oyun → çıxış).
Chaos/Failover Tests: PSP off/broker düşməsi/zona itkisi.

15) Metrika və SLO (minimum)

Xidmətlərin mövcudluğu: '≥ 99. 9% 'ödəniş/cüzdan üçün.
Latency p95: kritik yol API ≤ 300-500 ms.
Error budget: 0. 1–0. 5% rübdə, burn-alerts.
Növbələr: lead time hadisə (produce → consume), DLQ ≤ 0. 1%.
Biznes: TTP, TtW, FTD-success, KYC-TtV.

16) Çek vərəqləri

Servisin layihələndirilməsi

  • Aydın domen sərhədi və məlumat sahibi.
  • OpenAPI/AsyncAPI müqavilələri + Registry sxemləri.
  • SLO/alert müəyyən; metrik/treys/log daxili.
  • Taymaut/retraj/idempotentlik siyasəti.
  • Sxemlərin miqrasiyası: expand-and-contract.

Buraxılışdan əvvəl

  • Unit/CDC/inteqrasiya testləri yaşıl.
  • Kanarya marşrutu və geri dönüş planı.
  • Rate-limits/çəki marşrutları xüsusi.
  • Sirləri/açarları/sertifikatları fırlanır.
  • Ficha bayraqları və follbeklər hazırlanmışdır.

17) Anti-nümunələr

Bir veri şinası kimi şəbəkə: hadisələr əvəzinə dərin sinxron zəncirlər.
Bütün xidmətlər üçün ümumi «tanrı» -BD.
İdempotentliyin olmaması → ikiqat silinmə/hesablama.
Telemetriya və kill-switch olmadan qaranlıq buraxılışlar.
Gizli sessiya (xarici vəziyyət əvəzinə hər yerdə yapışqanlıq).
Müqavilələr «kodda» versiyasız və CDC.
Xidmətlər əvəzinə API şlyuzunda məntiq (şluz = nazik).

18) Monolitdən miqrasiya (Strangler Fig)

1. Fasad-şlyuz və birinci konturu seçin (məsələn, ödənişlər).
2. Monolitdən hadisələrə ikili log (outbox) çıxarın.
3. Tədricən end nöqtələrini yeni xidmətə (marşrutlaşdırma/kanarya çəkisi) köçürün.
4. Monolitin «nüvəsinə» sıxın və söndürün.

19) Yığın və infrastruktur (nümunə)

Rabitə: REST/gRPC, Kafka/NATS; Schema Registry.
Depolama: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP — ClickHouse/BigQuery.
Konteynerlər/orkestr: Docker, Kubernetes (Ingress/Gateway), Xidmət Mesh (Istio/Linkerd).
Şlyuz: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pact/OWASP/ZAP.
Observability: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Yekun şparqalka

Domenlər və məlumatların məsuliyyəti ilə sərhədləri layihələndirin.
Sinxron - yalnız indi cavab lazım olan yerdə; qalan - hadisələr.
Müqavilələr/sxemlər/CDC - reqressiya sığortası.
Dastanlar + outbox + idempotentlik - etibarlılığın təməli.
Müşahidə və SLO seçim deyil, «hazır» meyarıdır.
canary/blue-green vasitəsilə buraxılışlar, miqrasiyalar - expand-and-contract.
Təhlükəsizlik/uyğunluq: mTLS, JWT, KMS, regional məlumatlar.
Əvvəlcə modul monolit, sonra təkamül - miqyas və komanda hazırdırsa.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.