Perché il casinò passa all'architettura modulare
Perché il casinò è modulare
Il monolite storico frena la crescita, con ogni cambiamento che tira il rilascio di tutto il sistema, l'integrazione di fornitori e PSP che colpiscono lo SLO, i complessi update su tutto il codice. Architettura modulare (domain-driven + appalti API + eventi) consente di:- Visualizzare rapidamente i file e collegare i provider senza coordinare «tutti con tutti»
- Scalare selettivamente (video live separati dalla cassa, portafogli separati dal catalogo dei giochi);
- Isolare i rischi (un errore nel promo non cancella il portafoglio);
- Rispettare le licenze (loging/versioni/criteri nei limiti di dominio)
- Ridurre il TCO con contratti chiari, riutilizzabili e automazione.
Mappa dei domini (esempio di suddivisione)
Wallet/Ledger - denaro, valute hedge, bilanci bonus, PITR, controllo.
Cashier/Payments - PSP, Rampe/Off-Rampe, KYT, Idempotent webhoop.
Gaming Bridge - Adattatori di provider, normalizzazione round/bet.
Catalog/Lobby - giochi, provider, fithering e regole di visualizzazione.
Promo/Bonus - regole di azioni, voucher, wager.
KYC/AML/RG - Controllo di identità, sanzioni/RER, limiti e auto-esclusione.
Experience - Frontand, CDN, i18n, A/B, Telegram WebApp.
Telemetry/Analytics - eventi, vetrine, ML/IA.
Compliance & Audit - Report MGA/UKGC, Archivio WORM.
Principi dell'architettura modulare
1. Limiti DDD (bounded text). Una netta conoscenza dei dati e della logica.
2. API-primo evento +. OpenAPI/AsyncAPI, JSON-Schema, test contrattuali.
3. Versioning e compatibilità. 'v1' v1. 1 → v2` (expand→migrate→contract).
4. Idempotency & Exactly-once-intent. Chiavi di query, deduplicazione degli eventi.
5. Protezione predefinita. mTLS, firma HMAC, breve JWT, RBAC/ABAC.
6. Comunicati indipendenti. Le migrazioni «due scrittori» sono vietate.
7. Osservabilità. «traceId», metriche SLO per modulo.
8. Flag Fiech. Traffico/geo/yuser segmenti, ripristini sicuri.
Livello di integrazione come connettere provider e PSP
Adattatore/Bridge-Pattern: ogni provider di giochi/pagamenti è un plugin con un unico contratto di piattaforma.
Giochi: normalizzazione dì roundId/betId/status ", mupping degli errori, crash dei limiti.
Pagamenti: un'unica interfaccia «authorize/capture/refund/payout», webhoop con idipotenza.
Disattivazione: la scheda di rete difettosa viene tradotta in maintenance senza influire sugli altri.
Esempio di contratto (frammento di OpenAPI):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 }
Eventi come «sistema circolatorio»
Pneumatico (Kafka/NATS):- `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`.
- Gli eventi non annullano il passato; gli aggiustamenti sono eventi di compensazione separati.
- Ogni modulo scrive solo i propri eventi originali, i derivati come nuovi argomenti.
Dati - Livelli e coerenza
OLTP per modulo: Postgres/MySQL/KeyDB - Transazioni isolate.
OLAP/vetrine: le ClickHouse/BigQuery vengono costruite con eventi; L'OLTP e l'analista non sono mescolati.
Feature Store/ML - Livello indipendente da OLTP con versioni fich e TTL.
Coerenza: eventual strategico tra i moduli e, per il denaro, ACID locale + Idampotente ai confini.
Deposito e ridimensionamento
Contenitori (Docker/K8s) - Scale automatico per modulo (wallet - CPU/IO; Video live - Rete bridge — RPS).
Isolamento del perimetro: regole di rete, singoli segreti/chiavi per modulo, diversi depositi PII/denaro/telemetria.
Traffico-shaping: flag Fiech, Canarie, itinerari regionali.
DR/HA: Multi-AZ; attivo-passivo per il denaro, attivo-attivo per la lettura/media.
La compilazione «inserisce» nei moduli
KYC/AML/RG è un modulo personalizzato con regole e registro delle soluzioni ('policyVer').
Audit/WORM è un archivio di eventi di denaro/round/pagamenti invariato.
Report - Esportazione giurisdizionale (MGA/UKGC), SLA completa/puntuale.
Esempio di thread
Tasso di
1. "gaming-bridge" invia "bet. placed` (idempotent).
2. «wallet» fa «hold» e pubblica «wallet». hold`.
3. «gaming-bridge» ottiene il risultato del provider «round». settled`.
4. «wallet» conta «settle» (release/payout) «wallet». settled`.
5. 'promo', consuma eventi e paga un bonus →. issued`.
Cassa (deposito)
1. «cashier» crea «payment». intent` с `Idempotency-Key`.
2. Il PSP chiama il webhook «cashier». webhook. received`.
3. `wallet. credit'di fatto un evento per gli analisti e RG.
Modifiche senza interruzione (expand→migrate→contract)
1. Expand - Aggiungono campi/endpoint à v1. 1 ', i vecchi clienti non si rompono.
2. Migrate - I consumatori leggono qualcosa di nuovo, scrivono in entrambe le versioni (dual-write solo per non-moneta).
3. Contract: dichiarato EOL'v1. 0 ', rimosso dopo N settimane come previsto.
Ingegneria della piattaforma
Golden Paths: modelli di moduli (repo-asceleone, CI/CD, alert, SLO, segreti).
Test contrattuali: test a CHI; ambiente di integrazione con fake provider.
Catalogo servizi (Backstage) - Chi possiede, SLA, API, incidente Rucbook.
Metriche di successo della modularità
Lead time dall'idea al prod-release in X volte.
Frequenza di rilascio del modulo ↑ (giorno/settimana), cambio-fail rate ↓.
MTTR per incidenti di ↓ (a causa dell'isolamento).
Infra cost/GGR è stabile o ↓ quando il traffico cresce (scale selettivo).
Tempo di integrazione del provider/PSP (dal briefing al prod) ↓.
Anti-pattern
«Microservizi per microservizi». Senza limiti di dati chiari, la connettività e la complessità crescono.
Database/schemi comuni tra i moduli. Uccide l'isolamento e i comunicati indipendenti.
Eventi senza versione/contratto. Rompono i consumatori in silenzio.
Dual-write per il denaro. Il rischio di incoerenza è solo l'idipotente passo attraverso un singolo scrittore.
Un livello di utilità globale con tutto. Diventa un monolite nascosto.
Nessun flag fich e kill-switch. Ogni errore colpisce tutti.
Miscelazione OLTP/OLAP. I rapporti rallentano le scommesse/portafogli.
Senza osservabilità. Non possiamo misurare l'SLO e collegare gli incidenti.
Foglio di lavoro per l'architettura modulare
Strategia e domini
- Definiti bounded texts, proprietari e KPI nel modulo.
- Mappa delle interazioni: API/eventi, criticità e SLO.
Contratti e sicurezza
- OpenAPI/AsyncAPI + JSON-Schema; versione e ciclo di vita.
- mTLS/HMAC, JWT brevi, RBAC/ABAC ai confini.
Dati
- OLTP separati; eventi - Origine per OLAP.
- Idempotency su API/Web, deduplicazione dei messaggi.
CI/CD e comunicati
- Canary/blue-green, flag fich, scale automatico del modulo.
- Test contrattuali in CI; ambiente con fake provider.
Osservabilità
- Loghi/metriche/trail' traceId '; Dashboard SLO.
- Alert per metriche aziendali (VOID, reject, payout lag).
Compilazione
- Archivio WORM denaro/round, esportazione di rapporti regolatori.
- KYC/AML/RG come modulo separato con il registro delle soluzioni.
Mini esempi
Evento «round». 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"
}
Portafoglio idropotente:
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"}]
}
L'architettura modulare trasforma la piattaforma di casinò da una «mozzafiato» a una composizione di domini affidabili, ognuno con contratti, dati e SLO. Questo accelera le integrazioni e le release, consente un ridimensionamento selettivo, semplifica la compliance e riduce i rischi di incidenti. Iniziate evidenziando i confini di dominio, i contratti e gli eventi, «incollate» la sicurezza e l'osservabilità e ottenete una piattaforma che cresce con il prodotto, anziché rallentarlo.