Microservice mimarisi
1) Neden iGaming'de mikro hizmetler
Değişim hızı: Takım özelliklerinin bağımsız sürümleri (ödemeler, içerik, risk, turnuvalar).
Güvenilirlik: Bir servisin arızalanması tüm ürünü düşürmez (arıza limitleri).
Ölçek: "Sıcak" alanların yatay ölçeği (cüzdan, lobi, akışlar).
Uyum: Verilerin bölgeye/yargı alanına göre ayrılması.
Buna değmediğinde: Küçük bir ekip/hacim, DevOps uygulamaları yok, testlerin zayıf otomasyonu - o zaman modüler bir monolit daha iyidir.
2) Alan adları, sınırlar ve takımlar (DDD + Takım Topolojileri)
Alan adı konturları: Hesap/Profil, CCM/Uyumluluk, Ödemeler/Cüzdan, Oyun İçeriği/Toplama, Bonuslar/Görevler, Turnuvalar, Pazarlama/CRM, Raporlama/BI.
Sınırlı Bağlam = Veri Modeli ve Dil Sözleşmesi.
Akış ↔ komutları değiştir: bir komut = bir döngü + SLO'ları.
BFF (Frontend için Arka Uç): İstemci üzerinde "orkestrasyon" toplamamak için Web/Mobile/Partner için ayrı cepheler.
3) İletişim: senkron vs asenkron
Senkron (REST/gRPC): Acil bir yanıt gerektiğinde (depozito limitlerini kontrol ederek).
Asynchron (Kafka/NATS/SQS): olaylar ve arka plan işlemleri (cashback tahakkuk, postalama, derecelendirme güncellemeleri).
- Kritik yol = minimum ağ şerbetçiotu.
- Etki alanları arası entegrasyon - etkinlikler ve sözleşmeli API'ler aracılığıyla.
- Çevrimiçi "5 + senkron çağrı zincirleri" oluşturmayın - EDA/sagas kullanın.
4) Sözleşmeler ve sürüm oluşturma
Sözleşme Bir: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
SemVer + uyumluluğu: Alan eklemek istemcileri bozmaz.
Tüketici odaklı sözleşmeler (CDC): CI'da otomatik kontroller (regresyonlara karşı).
Reddetme politikası: destek penceresi (12-18 ay), eski sürümler için telemetri.
5) Olaylar, destanlar ve tutarlılık
Outbox/Transaction Log Tailing: atomik kayıt "data + event".
Saga desenleri:- Ödemeler/çıktılar için orkestrasyon (merkezi koordinatör).
- Bonuslar/görevler için koreografi (olaylara tepki).
- Idempotence: 'entityId + action + nonce', dedup kayıt defteri depolama üzerindeki anahtarlar.
- Tutarlılık: "dış" - olaylar aracılığıyla; "dahili" - hizmet içindeki işlemler.
6) Veri ve depolama
"Kendi mağazası" ilkesi: Her hizmet kendi veritabanına sahiptir (planların izolasyonu).
Erişim modeline göre depolama seçimi:- İşlemler/bakiyeler, katı değişmezlerle ilişkiseldir (PostgreSQL).
- Olaylar/log - sadece ekle (Kafka/Redpanda).
- Önbellek/oturumlar - Redis/KeyDB; Leaderboards - Redis Sıralı Kümeler.
- Arama - OpenSearch/Elastic.
- Materyalize Okuma Projeksiyonları (CQRS) - Hızlı Listeler/Raporlar.
7) Güvenilirlik ve istikrar
Zaman aşımları/Sadece idempotent işlemleri için jitter/Retry-budget ile yeniden deneme.
Servisler arasında devre kesici/Outlier-ejection.
Bulkhead: "gürültülü" yukarı akış için ayrı havuzlar.
Müşteri/rota başına fiyat limitleri, geri basınç (503 + Retry-After).
Kuyruklarda Dead-letter + poison-message işleme.
8) Gözlemlenebilirlik
Trace: OpenTelemetry (shlyuz aracılığıyla 'trace _ id', servisy, BD).
Metrikler: RPS, p50/p95/p99, hata oranı 4xx/5xx, doygunluk (CPU/mem/queue), iş metrikleri (TTP, TtW).
Günlükler: Yapılandırılmış JSON, PII/PAN/IBAN maskeleme, 'trace _ id'ile korelasyon.
SLO/uyarılar: rota/işlev için (örneğin, 'Deposit p95 ≤ 300 ms', 'başarı ≥ 98. 5%`).
9) Güvenlik ve uyumluluk
Zero-Trust: mTLS servis↔servis (SPIFFE/SPIRE), kısa ömürlü sertifikalar.
AuthN/Z: OAuth2/JWT (aud/scope/exp), rollerin öznitelik farklılaşması.
Sırlar: KMS/Secrets Manager/Mühürlü Sırlar, anahtar rotasyonu.
GDPR/veri yerelleştirme: bölgesel kümeler, API ağ geçidinde coğrafi eskrim.
Denetim: değişmez günlükler (WORM), yönetici eylemlerini izleme.
10) Dağıtım ve Sürümler
Containers/K8s: bir hizmet = bir dağıtım; Kaynaklar/sınırlar; PodDisruptionBudget.
CI/CD: linters, unit/contract/integ testleri, güvenlik taraması, SBOM.
Bültenleri: kanarya/mavi-yeşil/gölge, genişlet ve sözleşme yoluyla şema göçleri.
Otomatik ölçek: CPU + RPS + p95 + kuyruk derinliği ile HPA; Çöküş üzerine drenaj.
11) Performans ve maliyet
Profilleme: p95/99 "hizmetler ve yöntemlerle", alev grafikleri.
Önbelleğe alma: okuma/yazma; Etkinliğe göre TTL/engellilik.
Veri lokalitesi: Sıcak verileri hesaplamaya yakın tutun.
FinOps: indirme hedefi %60-70, "sıcak havuzlar", aktif olmayan işçilerin otomatik duraklaması.
12) Etki alanı şablonları (iGaming)
12. 1 Ödemeler/Cüzdan
Hizmetler: 'Payments-gw' (cephe), 'wallet', 'psp-adaptörler-', 'fraud-check'.
Stream: 'Init - reserve - capture/rollback' (saga).
События: 'PaymentInitiated', 'PaymentAuthorized', 'PaymentSettled/Failed'.
Idempotency: 'Idempotency-Key', 'cüzdan' içinde deadup.
12. 2 CCM/Uyumluluk
Сервисы: 'kyc-flow', 'doc-storage', 'sanctions-check', 'pep-screening'.
События: 'KycSubmitted/Approved/Rejected', 'RiskScoreUpdated'.
Denetim ve ETA: görev kuyruğu, zaman çizgisi durumu, eylemler sonrası.
12. 3 Bonuslar/Görevler
Hizmetler: 'bonus-motor', 'cüzdan-bonus', 'uygunluk'.
Koreografi: 'BetPlaced> BonusEngine> BonusGranted> WalletCredited'.
Kötüye kullanıma karşı koruma: idempotent hibeler, limitler, kural simülatörü.
12. 4 Turnuvalar/Liderlik Tabloları
Hizmetler: 'tournament-svc', 'scoring', 'leaderboard'.
Depolama: OLAP'ta Redis ZSET + periyodik "floş".
События: 'ScoreUpdated', 'TournamentClosed', 'RewardIssued'.
13) Sözleşme + Olay Örneği (Basitleştirilmiş)
OpenAPI (parça) - Cüzdan
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 (fragman) - olay
yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]
14) Test etme
Alan kuralları için Birim/Özellik tabanlı.
CDC (Pact/Assertible) - sağlayıcı/tüketici sözleşme testleri.
Yerel broker (Testcontainers) ile entegrasyon.
Kritik akış E2E (registratsiya ^ depozit ^ start igry ^ vyvod)
Kaos/Yük devretme testleri: PSP kapatma/aracı bırakma/bölge kaybı.
15) Metrikler ve SLO (minimum)
Hizmetlerin kullanılabilirliği: '≥99. Ödeme/cüzdan için %9 '.
Gecikme süresi p95: 300-500 ms ≤ kritik yol API'si.
Hata bütçesi: 0. 1–0. Her çeyrekte %5, yanık uyarısı.
Kuyruklar: kurşun zaman olayları (üret - tüket), DLQ ≤ 0. 1%.
İş: TTP, TtW, FTD-başarı, KYC-TtV.
16) Kontrol listeleri
Hizmet tasarımı
- Alan sınırını ve veri sahibini temizleyin.
- OpenAPI/AsyncAPI sözleşmeleri + Kayıt Defterindeki şemalar.
- SLO/uyarılar tanımlı; Metrikler/yollar/günlükler yerleşik.
- Zaman aşımı/Retray/Idempotency Politikaları.
- Şema geçişleri: genişlet ve sözleşme.
Yayınlanmadan Önce
- Birim/CDC/entegrasyon testleri yeşil.
- Kanarya rotası ve geri dönüş planı.
- Hız limitleri/ağırlık yolları yapılandırılmıştır.
- Sırlar/anahtarlar/sertifikalar kazıyor.
- Ficha bayrakları ve follbacks hazırlanır.
17) Anti-desenler
Veri yolu olarak ağ: olaylar yerine derin senkron zincirler.
Ortak "tanrı" - tüm hizmetler için DB.
Idempotency eksikliği - çift yazma-off/tahakkuk.
Telemetri ve kill-switch olmadan karanlık bültenler.
Gizli oturum (dış koşul yerine her yerde yapışkanlık).
Sürüm ve CDC olmadan "kodda" sözleşmeler.
Hizmetler yerine API ağ geçidinde mantık (ağ geçidi = ince).
18) Monolit Göç (Strangler Fig)
1. Cephe ağ geçidini ve birincil devreyi seçin (örneğin, ödemeler).
2. Monolitten olaylara ikili günlüğü (giden kutusu) kaldırın.
3. Son noktaları yavaş yavaş yeni bir servise aktarın (yönlendirme/kanarya ağırlıkları).
4. Monoliti "çekirdeğe" sıkıştırın ve kapatın.
19) Yığın ve altyapı (örnek)
İletişim: REST/gRPC, Kafka/NATS; Şema Kayıt Defteri.
Depolar: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP - ClickHouse/BigQuery.
Konteynerler/orkestrasyon: Gerekirse Docker, Kubernetes (Giriş/Ağ Geçidi), Servis Mesh (Istio/Linkerd).
Ağ Geçidi: Elçi/Kong/Traefik/NGINX.
CI/CD: GitHub Eylemleri/GitLab CI + ArgoCD/Flux; Pakt/OWASP/ZAP.
Gözlemlenebilirlik: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.
20) Son hile sayfası
Sınırları alan ve veri sorumluluğuna göre tasarlayın.
Senkron - sadece şimdi bir cevaba ihtiyaç duyulduğunda; Gerisi olaylardır.
Sözleşmeler/Şemalar/CDC - Regresyon Sigortası.
Sagas + outbox + idempotency - güvenilirliğin temeli.
Gözlemlenebilirlik ve SLO bir seçenek değil, "hazır" kriterdir.
Kanarya/mavi-yeşil yoluyla bültenler, göçler - genişlet ve sözleşme.
Güvenlik/uyumluluk: mTLS, JWT, KMS, bölgesel veriler.
İlk olarak, modüler bir monolit, sonra evrim - ölçek ve ekip hazırsa.