GH GambleHub

Microservice-Architektur

1) Warum Microservices in iGaming

Änderungsrate: Unabhängige Freigaben von Teams (Zahlungen, Inhalte, Risiko, Turniere).
Zuverlässigkeit: Der Ausfall eines Dienstes bringt nicht das gesamte Produkt zu Fall (Ausfallgrenzen).
Skalierung: horizontaler Scale von „heißen“ Domains (Wallet, Lobby, Streams).
Compliance: Datensegregation nach Regionen/Jurisdiktionen.

Wenn es sich nicht lohnt: kleines Team/Volumen, keine DevOps-Praktiken, schwache Testautomatisierung - dann ist ein modularer Monolith besser.

2) Domains, Grenzen und Teams (DDD + Team Topologies)

Domain-Konturen: Konto/Profil, KUS/Compliance, Zahlungen/Wallet, Spielinhalte/Aggregation, Boni/Missionen, Turniere, Marketing/CRM, Reporting/BI.
Bounded Context = Vertrag über Datenmodell und Sprache.
Änderungsströme ↔ Teams: ein Team = ein Loop + eigene SLOs.
BFF (Backend for Frontend): einzelne Fassaden unter Web/Mobile/Partner, um keine „Orchestrierung“ am Kunden zu sammeln.

3) Kommunikation: synchron vs asynchron

Synchron (REST/gRPC): Wenn eine sofortige Antwort erforderlich ist (Überprüfung der Limits bei der Einzahlung).
Asynhron (Kafka/NATS/SQS): Ereignisse und Hintergrundprozesse (Cashback, Mailings, Ratings aktualisieren).

Regeln:
  • Kritischer Pfad = Minimum an Netzwerk-Hops.
  • Domänenübergreifende Integration - durch Events und vertragliche APIs.
  • Bauen Sie keine „Ketten von 5 + synchronen Anrufen“ online → verwenden Sie EDA/Saga.

4) Verträge und Versionierung

Vertrag: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
SemVer + Kompatibilität: Das Hinzufügen von Feldern stört die Kunden nicht.
Consumer-driven contracts (CDC): Auto-Checks in CI (gegen Regressionen).
Deprecation policy: Support-Fenster (12-18 Monate), Telemetrie nach alten Versionen.

5) Ereignisse, Sagen und Konsistenz

Outbox/Transaction Log Tailing: atomarer Datensatz „Daten + Ereignis“.

Saga-Muster:
  • Orchestrierung (zentraler Koordinator) für Zahlungen/Auszahlungen.
  • Choreographie (Reaktion auf Ereignisse) für Boni/Missionen.
  • Idempotenz: Schlüssel auf 'entityId + action + nonce', Speicherung der Dedup-Registry.
  • Konsistenz: „extern“ - durch Ereignisse; „intern“ - Transaktionen innerhalb eines Dienstes.

6) Daten und Speicherung

Prinzip „eigener Stor“: Jeder Dienst besitzt eine eigene DB (Isolation der Schaltungen).

Speicherauswahl nach Zugriffsmuster:
  • Transaktionen/Salden - relational (PostgreSQL) mit strengen Invarianten.
  • Events/log - nur append (Kafka/Redpanda).
  • Cache/Sitzungen - Redis/KeyDB; Leaderboards - Redis Sorted Sets.
  • Die Suche ist OpenSearch/Elastic.
  • Materialisierte Projektionen zum Lesen (CQRS) - Schnelllisten/Berichte.

7) Zuverlässigkeit und Nachhaltigkeit

Timeouts/Retry mit Jitter/Retry-Budget nur für idempotente Operationen.
Circuit-breaker/Outlier-ejection zwischen den Diensten.
Bulkhead: separate Pools für „laute“ Upstreams.
Rate limits per-client/route, backpressure (503 + Retry-After).
Dead-letter + poison-message handling in Warteschlangen.

8) Beobachtbarkeit (Observability)

Tracing: OpenTelemetry („trace _ id“ durch die shlyuz→servisy→BD).
Metriken: RPS, p50/p95/p99, Fehlerrate 4xx/5xx, Sättigung (CPU/mem/queue), Geschäftsmetriken (TTP, TtW).
Logs: Structural JSON, PII/PAN/IBAN Masking, Coreation nach 'trace _ id'.
SLO/alert: pro Strecke/Funktion (z.B. 'Deposit p95 ≤ 300 ms', 'success ≥ 98. 5%`).

9) Sicherheit und Compliance

Zero-Trust: mTLS servis↔servis (SPIFFE/SPIRE), kurzlebige Zertifikate.
AuthN/Z: OAuth2/JWT (aud/scope/exp), attributive Rollenabgrenzung.
Geheimnisse: KMS/Secrets Manager/Versiegelte Geheimnisse, Schlüsselrotation.
DSGVO/Datenlokalisierung: regionale Cluster, Geo-Fencing am API-Gateway.
Audit: Unveränderliche Protokolle (WORM), Verfolgung von Admin-Aktivitäten.

10) Rollouts und Releases

Container/K8s: ein Service = ein Deploy; Ressourcen/Grenzen; PodDisruptionBudget.
CI/CD: Linters, Unit/Contract/Integ-Tests, Sicherheitsscan, SBOM.
Releases: canary/blue-green/shadow, Migration von Schemata über Expand-and-Contract.
Autoscale: HPA durch CPU + RPS + p95 + queue-depth; drain beim Minimieren.

11) Leistung und Kosten

Profiling: p95/99 „nach Dienstleistungen und Methoden“, Flame-Graphen.
Caching: read-through/write-through; TTL/Behinderung durch Veranstaltungen.
Datenlokalität: Halten Sie heiße Daten nahe an der Berechnung.
FinOps: Download-Ziel 60-70%, „warme Pools“, Auto-Pause inaktive Worker.

12) Domain-Vorlagen (iGaming)

12. 1 Zahlungen/Wallet

Dienstleistungen: 'payments-gw' (Fassade), 'wallet', 'psp-adapters-', 'fraud-check'.

Init → Reserve → Capture/Rollback (Saga)

События: `PaymentInitiated`, `PaymentAuthorized`, `PaymentSettled/Failed`.
Idempotenz: 'Idempotency-Key', dedup in 'wallet'.

12. 2 KUS/Compliance

Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.
События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.
Audit und ETA: Aufgaben-Warteschlange, Fall-Timeline, Post-Aktionen.

12. 3 Boni/Missionen

Dienstleistungen: 'bonus-engine', 'wallet-bonus', 'eligibility'.

BetPlaced → BonusEngine → BonusGranted → WalletCredited

Schutz vor Missbrauch: idempotente Zuschüsse, Limits, Regelsimulator.

12. 4 Turniere/Leaderboards

Dienstleistungen: 'tournament-svc', 'scoring', 'leaderboard'.
Speicherung: Redis ZSET + periodisches „Brummen“ im OLAP.
События: `ScoreUpdated`, `TournamentClosed`, `RewardIssued`.

13) Beispiel „Vertrag + Ereignis“ (vereinfacht)

OpenAPI (Fragment) - 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 (Snippet) - Ereignis

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

14) Testen

Unit/Property-based für Domänenregeln.
CDC (Pact/Assertible) - Vertragstests von Anbietern/Verbrauchern.
Integration mit lokalen Brokern (Testcontainern).

E2E kritische Flows (registratsiya→depozit→start igry→vyvod)

Chaos/Failover-Tests: PSP deaktivieren/Broker fallen/Zone verlieren.

15) Metriken und SLO (Minimum)

Verfügbarkeit: '≥99. 9% 'für Zahlung/Wallet.

Latency p95: Kritische Pfad-API ≤ 300-500 ms

Error budget: 0. 1–0. 5% pro Quartal, burn-alerts.
Warteschlangen: Lead Time Events (produce→consume), DLQ ≤ 0. 1%.
Unternehmen: TTP, TtW, FTD-Erfolg, KYC-TtV.

16) Checklisten

Service-Design

  • Klare Domänengrenze und Dateneigentümer.
  • OpenAPI/AsyncAPI + Schema Verträge in der Registry.
  • SLO/Warnmeldungen sind definiert; Metriken/Traces/Logs sind eingebettet.
  • Zeit-/Retray-/Idempotenz-Richtlinien.
  • Schema-Migrationen: expand-and-contract.

Vor der Veröffentlichung

  • Unit/CDC/Integrationstests grün.
  • Kanarische Route und Rollback-Plan.
  • Rate-limits/weight Routen sind konfiguriert.
  • Geheimnisse/Schlüssel/Zertifikate werden gewürfelt.
  • Ficha-Flaggen und Vollbacks sind vorbereitet.

17) Anti-Muster

Das Netzwerk als Datenbus: tiefe synchrone Ketten statt Events.
Ein gemeinsamer „Gott“ -BD für alle Dienste.
Keine Idempotenz → doppelte Abschreibungen/Gebühren.
Dark Releases ohne Telemetrie und Kill-Switch.
Versteckte Sitzung (Klebrigkeit überall anstelle eines äußeren Zustands).
Verträge „im Code“ ohne Version und CDC.
Logik im API-Gateway statt Services (Gateway = thin).

18) Migration vom Monolithen (Strangler Fig)

1. Markieren Sie die Gateway-Fassade und den Primärkreis (z. B. Zahlungen).
2. Entfernen Sie die binäre Logik (outbox) vom Monolithen zu den Ereignissen.
3. Schrittweise Umstellung der Endpunkte auf den neuen Service (Routing/Kanariengewichte).
4. Komprimieren Sie den Monolith zu einem „Kern“ und deaktivieren Sie ihn.

19) Stack und Infrastruktur (Beispiel)

Mitteilungen: REST/gRPC, Kafka/NATS; Schema Registry.
Speicher: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP — ClickHouse/BigQuery.
Container/Orchestrierung: Docker, Kubernetes (Ingress/Gateway), Service Mesh (Istio/Linkerd) bei Bedarf.
Gateway: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pact/OWASP/ZAP.
Observability: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.

20) Abschließender Spickzettel

Gestalten Sie Grenzen nach Domänen und Datenverantwortung.
Synchron - nur dort, wo jetzt eine Antwort benötigt wird; Der Rest sind Ereignisse.
Verträge/Regelungen/CDC - Regressionsversicherung.
Saga + Outbox + Idempotenz ist die Grundlage für Zuverlässigkeit.
Beobachtbarkeit und SLO sind keine Option, sondern das Kriterium „fertig“.
Freigaben über Canary/Blue-Green, Migrationen - Expand-and-Contract.
Sicherheit/Compliance: mTLS, JWT, KMS, regionale Daten.
Erst der modulare Monolith, dann die Evolution - wenn Maßstab und Team bereit sind.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.