Warum Casinos auf eine modulare Architektur umstellen
Warum ein Casino modular ist
Der historische Monolith bremst das Wachstum: Jede Änderung zieht die Freigabe des gesamten Systems, die Integration von Anbietern und PSPs trifft SLOs, Compliance-Updates den gesamten Code. Die modulare Architektur (Domain-Driven + Contract APIs + Events) ermöglicht:- Schnell fichi ausgeben und Provider ohne Koordination „alle mit allen“ verbinden;
- Skalieren Sie selektiv (Live-Video getrennt von der Kasse, Wallet getrennt vom Spielekatalog);
- Isolieren Sie die Risiken (ein Fehler in der Werbung stürzt die Brieftasche nicht ab);
- Lizenzen einhalten (Logging/Versionen/Richtlinien innerhalb der Domänengrenzen);
- Reduzieren Sie die TCO durch klare Verträge, Wiederverwendung und Automatisierung.
Domänenkarte (Beispiel für Aufschlüsselung)
Wallet/Ledger - Geld, Währungshecke, Bonusguthaben, PITR, Wirtschaftsprüfung.
Cashier/Zahlungen - PSP, On-Rump/Off-Rump, KYT, idempotente Webhooks.
Gaming Bridge - Adapter der Anbieter, Normalisierung round/bet.
Katalog/Lobby - Spiele, Anbieter, Fichering und Showregeln.
Promo/Bonus - Promotionsregeln, Gutscheine, Wager.
KYC/AML/RG - Identitätsprüfung, Sanktionen/RER, Limits und Selbstausschluss.
Erfahrung - Frontend, CDN, i18n, A/B, Telegram WebApp.
Telemetrie/Analytics - Veranstaltungen, Schaufenster, ML/KI.
Compliance & Audit - Berichte MGA/UKGC, WORM-Archiv.
Prinzipien der modularen Architektur
1. DDD-Grenzen (bounded context) Klare Beherrschung von Daten und Logik.
2. API-first + Ereignisse. OpenAPI/AsyncAPI, JSON-Schema, Vertragstests.
3. Versionierung und Kompatibilität. 'v1 → v1. 1 → v2` (expand→migrate→contract).
4. Idempotency & Exactly-once-intent. Anforderungsschlüssel, Ereignisdeduplizierung.
5. Die Standardsicherheit. mTLS, HMAC-Signaturen, kurze JWT, RBAC/ABAC.
6. Unabhängige Veröffentlichungen. Kanarienartig/blaugrün deploy, Migrationen durch den „Zweischreiber“ verboten.
7. Beobachtbarkeit. Ende-zu-Ende' traceId', SLO Metriken pro Modul.
8. Ficha-Flaggen. Traffic/Geo/User-Segmente, sichere Rollbacks.
Integrationsschicht: So verbinden Sie Anbieter und PSPs
Adapter/Bridge-Muster: Jeder Spiele-/Zahlungsanbieter ist ein Plugin mit einem einzigen Plattformvertrag.
Spiele: Normalisierung 'roundId/betId/status', Bug-Mapping, Limit-Cache.
Zahlungen: einheitliche Schnittstelle' authorize/capture/refund/payout', Webhooks mit Idempotenz.
Deaktivierbarkeit: Ein fehlerhafter Adapter wird ohne Auswirkungen auf andere in die Wartung überführt.
Beispiel für einen Vertrag (OpenAPI-Fragment):yaml post /wallet/debit:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DebitRequest@v1'
responses:
'200': { $ref: '#/components/schemas/DebitResult@v1' }
'409': { description: IDEMPOTENT_REPLAY }
Veranstaltungen als „Kreislaufsystem“
Reifen (Kafka/NATS) → Ereignisse:- `bet. placed`, `round. settled`, `payout. requested/approved`, `kyc. verified/failed`, `rg. limit_set`, `bonus. issued/consumed`, `cashier. webhook. received`, `wallet. hold/release`, `alert. slo_breach`.
- Ereignisse heben die Vergangenheit nicht auf; Anpassungen durch einzelne kompensierende Ereignisse.
- Jedes Modul schreibt nur seine ursprünglichen Ereignisse, Ableitungen als neue Themen.
Daten: Schichten und Konsistenz
OLTP pro Modul: Postgres/MySQL/KeyDB - isolierte Transaktionen.
OLAP/Schaufenster: ClickHouse/BigQuery werden aus Veranstaltungen aufgebaut; OLTP und Analytik werden nicht gemischt.
Feature Store/ML: OLTP-unabhängige Schicht mit Fitch und TTL-Versionen.
Kohärenz: strategisch eventual zwischen den Modulen und für Geld - lokale ACID + idempotente Aktionen an den Grenzen.
Deploy und Skalierung
Container (Docker/K8s): autoscale modulo (wallet - CPU/IO; Live-Video - Netzwerk; bridge — RPS).
Perimeter Isolation: Netzwerkrichtlinien, separate Geheimnisse/Schlüssel pro Modul, verschiedene PII/Geld/Telemetrie-Speicher.
Traffic-Shaping: Ficha-Flaggen, Kanarienanteil, regionale Routen.
DR/HA: Multi-AZ; Asset-Passiv für Geld, Asset-Asset für Lesungen/Medien.
Compliance „eingenäht“ in Module
KYC/AML/RG ist ein eigenes Modul mit Richtlinien und Entscheidungsprotokoll ('policyVer').
Audit/WORM ist ein unveränderlicher Speicher für Geld/Runden/Auszahlungsereignisse.
Reporting - Export nach Jurisdiktionen (MGA/UKGC), SLA auf Vollständigkeit/Aktualität.
Beispiel für Threads
Wette → Berechnung → Auszahlung
1. 'gaming-bridge' sendet 'bet. placed` (idempotent).
2. 'wallet' macht 'hold' und veröffentlicht' wallet'. hold`.
3. 'gaming-bridge' erhält das Ergebnis des Anbieters → 'round. settled`.
4. „wallet“ zählt „settle“ (Freigabe/Auszahlung) → „wallet“. settled`.
5. 'promo' verbraucht Ereignisse und berechnet einen → 'Bonus. issued`.
Kasse (Kaution)
1. 'cashier' schafft 'payment. intent` с `Idempotency-Key`.
2. Die PSP ruft das Webhook → 'Cashier auf. webhook. received`.
3. `wallet. credit 'ist ein → Ereignis für Analytics und RG.
Änderungen ohne Ausfallzeiten (expand→migrate→contract)
1. Expand: Felder/Endpunkt in 'v1 hinzugefügt. 1', alte Kunden brechen nicht.
2. Migrate: Verbraucher lesen neu, schreiben in beiden Versionen (Dual-Write nur für Nicht-Geld).
3. Vertrag: EOL 'v1 angekündigt. 0', nach N Wochen planmäßig gelöscht.
Plattformtechnik
Goldene Pfade: Modulvorlagen (Repo-Askeleon, CI/CD, Alerts, SLO, Secrets).
Vertragstests: Pact/AsyncAPI Tests in CI; Umgebung von Integrationen mit gefälschten Anbietern.
Service Directory (Backstage): Wer ist der Besitzer, SLA, API-Versionen, Incident-Handbooks.
Erfolgsmetriken der Modularität
Lead-Zeit von der Idee bis zur Prod-Veröffentlichung ↓ X-mal.
Releasefrequenz modulo ↑ (pro Tag/Woche), Änderungsrate ↓.
MTTR für Vorfälle ↓ (aufgrund von Isolation).
Die Infra-Kosten/GGR sind stabil oder ↓, wenn der Traffic steigt (selektiver Scale).
Die Integrationszeit des Providers/PSP (vom Briefing bis zum Prod) ist ↓.
Anti-Muster
„Microservices for Microservices“. Ohne klare Datengrenzen wachsen Konnektivität und Komplexität.
Gemeinsame DBs/Diagramme zwischen den Modulen. Tötet Isolation und unabhängige Freigaben.
Veranstaltungen ohne Version/Vertrag. Verbraucher „leise“ kaputt machen.
Dual-Schreiben für Geld. Das Risiko der Inkonsistenz ist nur idempotente Schritte durch einen Schriftsteller.
Eine globale „Utility-Schicht“ mit allem in einer Reihe. Es verwandelt sich in einen versteckten Monolith.
Keine Fitch-Fahnen und Kill-Switch. Jeder Fehler trifft sofort alle.
OLTP/OLAP-Mischung. Berichte hemmen Wetten/Wallet.
Ohne Beobachtbarkeit. Es gibt nichts, um SLOs zu messen und Vorfälle zu verknüpfen.
Checkliste für den Übergang zur modularen Architektur
Strategie und Domains
- Bounded Contexts, Owner und Modul-KPIs sind definiert.
- Interaktionskarte: API/Ereignisse, Kritikalität und SLO.
Verträge und Sicherheit
- OpenAPI/AsyncAPI + JSON-Schema; Version und Lebenszyklus.
- mTLS/HMAC, kurze JWT, RBAC/ABAC an den Grenzen.
Daten
- Geteilte OLTPs; Ereignisse - Quelle für OLAP.
- Idempotency auf APIs/Webhooks, Deduplizierung von Nachrichten.
CI/CD und Veröffentlichungen
- Kanarienvogel/blau-grün, Ficha-Flaggen, Auto-Scale modulo.
- Vertragsprüfungen im CI; Umgebung mit gefälschten Anbietern.
Beobachtungsstand
- Logs/Metriken/Traces mit 'traceId'; SLO-Dashboards.
- Alerts für Geschäftskennzahlen (VOID, reject, payout lag).
Compliance
- WORM-Archiv Geld/Runden, Export regulatorischer Berichterstattung.
- KYC/AML/RG als eigenständiges Modul mit Lösungsprotokoll.
Minibeispiele
Event 'rund. settled@v1`:json
{
"event":"round. settled", "v":"1", "roundId":"R-2025-10-17-evo-23", "gameId":"evo_blackjack_23", "bets":[{"betId":"b_92f","playerId":"p_1","stake":"10. 00","payout":"15. 00","outcome":"WIN"}], "ts":"2025-10-17T14:23:13. 120Z", "traceId":"tr_5f1"
}
Idempotente Geldbörse:
http
POST /wallet/settle
X-Idempotency-Key: 9a7f-2b1c
{
"roundId":"R-2025-10-17-evo-23", "operations":[{"playerId":"p_1","delta":"5. 00","currency":"EUR"}]
}
Die modulare Architektur verwandelt die Casino-Plattform von einem „fragilen Harvester“ in eine Komposition zuverlässiger Domains: jeder mit seinen eigenen Verträgen, Daten und SLOs. Dies beschleunigt Integrationen und Freigaben, ermöglicht eine selektive Skalierung, vereinfacht die Compliance und reduziert das Risiko von Vorfällen. Beginnen Sie mit der Zuweisung von Domain-Grenzen, Verträgen und Ereignissen, „verweben“ Sie Sicherheit und Beobachtbarkeit - und Sie erhalten eine Plattform, die mit dem Produkt wächst, anstatt es zu hemmen.