GH GambleHub

Charding e replica dei database

(Sezione Tecnologia e infrastruttura)

Breve riepilogo

Per le piattaforme iGaming, aumento del traffico (scommesse, depositi, siti PSP, eventi di gioco) e requisiti di disponibilità (≈99. 9–99. 99%) si riversano rapidamente nel limite di un database. La replica consente la scalabilità orizzontale della lettura e la disponibilità di errore. sharding - ridimensionamento orizzontale della scrittura e dei dati. La chiave sono compromessi PACELC consapevoli (dopo aver rifiutato: CA/P, altrimenti Latency vs Consistency), SLO chiari e disciplina schemi/chiavi.


Termini e modelli

Replica - Copia dei dati tra i nodi.

Leader-Follower (Primary-Replica) - Una sola voce consente di leggere molte letture.
Multi-Leader (Active-Active) - Registrazioni in più regioni, conflitti/merge.
Consensus-replication (Raft/Paxos, NewSQL): registrazioni quorum (Cassandra/Scylla - quorum AP, CockroachDB/Yugabyte - quorum CAP).
Sync/Semi-sync/Async - Saldo ritardo vs RPO.
Lo sharding è una ripartizione orizzontale di tabelle/chiavi per chard.

Hash-sharding (uniformità, intervalli più complessi).
Range-sharding (intervalli di chiavi, rischio di calore).
Consistent hasing (morbida aggiunta/decadenza di nodi).
Geo-sharding (per regione/giurisdizione).
Sharding funzionale (per dominio: pagamenti/rate/CRM).


Quando e cosa scegliere nel iGaming

Solo replica (senza sharding): quando il problema principale è la lettura: nastri, report, cataloghi pubblici. I record vengono inseriti nello stesso comando, le letture nelle repliche.
Sharding - Quando la voce/memorizzazione è ristretta, flusso di scommesse, transazioni di bilanci, eventi di trigger.

Multi-region:
  • La latitudine ai giocatori/PSP consente di leggere le repliche in locale.
  • Regolazione (localizzazione dei dati): geo-sharding.
  • DR interregionale con replica asincrona + piano di cambio.

PACELC e proprietà di garanzia

CAP - Seleziona C (consistenza) o A (disponibilità) in una rete split.
PACELC - In assenza di errori, selezioniamo tra Latency (L) e Consistency (C).
Percorsi di cassa (bilanci, prelievi): solitamente C/stretch serializable o Serializable + idampotenza aziendale.
I sottosistemi meno critici (login click, directory) sono orientati a L (AP/CE, eventual).


Replicazione: pratiche

Leader–Follower

Record leader, letture di repliche (read scaling).
Read-after-write - Per le operazioni personalizzate, leggere dal leader o attendere la lega (verifica «last _ committed _ lsn »/« wait _ for _ replay _ lag»).
Semi-sync su percorsi critici (riduzione RPO a costo di latenza).
Failover: automatico (patroni/raft coordinatore) + fencing (per non avere un doppio leader).

Multi-Leader

È utile per domini separati e un basso conflitto (ad esempio, contenuti/impostazioni), ma non per un unico conto giocatore senza misure speciali.
Criteri di merge: last-write-wins, CRDT, regole di dominio per il consolidamento.

Consensus/Database quorum

Scrittura con quorum (ad esempio, WRITE QUORUM), lettura con quorum (READ QUORUM) → una consistenza forte/personalizzabile.
Tenere conto della latitanza MJ/AZ/regioni e del costo del quorum.


Scharding strategie e scelta della chiave

Come selezionare una chiave

Distribuzione stabile per player _ id/account _ id/bet _ id.
Evitare le chiavi monouso (auto-increment) nel range-charding - coda «calda».
Per i pagamenti - spesso «player _ id» o «account _ id»; per i loghi: 'event _ timè + bucketing; per i contenuti, 'tenant _ id'.

Strategie

Hash-sharding player _ id - Bilancia del flusso di scommesse/bilanci.
Range-sharding in base al tempo per gli analisti/archivi.
Geo-Sharding: I giocatori UE sono in linea con le leggi locali.
Ibrido: hash all'interno della regione + geo giurisdizione.

Lotta contro le chiavi hot

Key-salting (aggiungere sale/bucket alla chiave).
Write-throttling per entità, coda command (serial executor).
Materializza «aggregati» (bilanci) in uno store separato con una coda di sequenza.


Operazioni cross-shard

Bonifico/rimborso: evitare 2PC sulle vie calde.
Saga-pattern: suddivisa in transazioni locali + azioni di compensazione, idemoticità rigida e outbox.
2RS/protocolli commit - Ammissibili (batch back-office), ma costosi per latitanza e tolleranza.
Proiezioni - Visualizzazioni di lettura (read models) per schermate tra domini, aggiornate dallo striping.


Schemi, indici e evoluzione

Versioning dello schema - Migrazione da back-compat, feature-flags sul codice.
Indici per chiavi di scardinamento e frequenti richieste; evitare cross-shard join (fare pre-join/denormalizzazione).
Per JSON/Doc Storage - convalida i circuiti (JSON-Schema/Protobuf) e TTL per le collezioni «rumorose».


Ridimensionamento online e resharding

Pianificare un numero di virtuali (slots) flessibile.
Consistent hasing o nodi virtuali per l'aggiunta di nodi morbidi.

Resharding online:
  • doppia voce (vecchio + nuovo shard), validazione della consistenza;
  • Copie di sfondo delle chat (logical dump/table move/streaming clone)
  • passa a «marcatore» + finestra di osservazione, quindi rimuove il doppio record.
  • Cambiare ruolo, drenare i connettori.

SLO, osservabilità e alerting

SLO scrittura/lettura: p99 X ms su tabelle hot, repliche Y validi secondi, disponibilità Z.
Metriche: TPS, p95/p99, replication lag, conflittualità (multi-leader), retry rate, deadlocks, lock wait, cache hit ratio, iOPS/latency disk.
Traccia: «trace _ id» nelle richieste di database, associare al broker/bus eventi.
Richieste canarie e synthetic transations per il primo oggetto di degrado.


Sicurezza e conformità

Crittografia a riposo e transito (TLS), rotazione delle chiavi.
RBAC/ACL, segmentazione per domini/tenenti, cluster singoli per pagamenti/CUS.
Localizzazione dati (EU/TR/LATAM) - Combina geo-sharding e regole di retrazione.
Verifica di chi e cosa ha letto/regole; maschera PII esportazione del controllo.


Bacap, PITR, DR

Backup completi + incrementali, deposito off-line.
PITR (point-in-time recovery) per i cluster leader.

RPO/RTO:
  • Domini critici (saldo/pagamento) - -30s (semi-sync o frequente WAL-shipping), RTO minuti con failover automatico.
  • Meno critici sono RPO fino a minuti/ore.
  • Esercitazioni DR (game day) e runbook documentato di commutazione.

Prestazioni e sintonizzazioni (brevemente)

Memoria/cache: ingrandisci i buffer (shared buffers/innodb buffer pool), tieni d'occhio la cache-hit al 95%.
Cronologia/motore: NVMe veloce, volume separato sotto WAL/redo.
Pool di connessioni (PgBouncer/Hikari).
Pianificatore/statistico: analisi automatica/autoscatto (Postges), compattazione/tuning GC (motori LSM).
Quorum/replica-fattore - Bilanciamento tra p99 e failover.


Topologie tipiche per i iGaming

1) Bilanci e pagamenti (circuito COP)

Leader-Follower nella regione del giocatore, semi-sync alla replica ravvicinata.
Hash-sharding su «account _ id».
Leggere «dopo la scrittura» dal leader; proiezioni in Redis per API-latency.
Outbox un di eventi per calcoli/analisi.

2) Cronologia delle scommesse/eventi di gioco (login orientato AP)

Range-sharding in base al tempo o hash in «player _ id» in un invertebrato/archivio LSM.
Repliche asincrone per report/OLAP.
Avvenual consistency è accettabile, più importante è la larghezza di banda.

3) Profili/CRM (Multi-region read, localizzazione)

Geo-sharding giurisdizione, repliche locali per la lettura.
Registrazioni tramite il leader più vicino; regione crociata - asincrona + risoluzione dei conflitti solo per campi non critici.


Esempi (concettuali)

Postges - Charding dichiarativo per «player _ id»

sql
CREATE TABLE player_wallet (
player_id BIGINT NOT NULL,
balance_cents BIGINT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (player_id)
) PARTITION BY HASH (player_id);

CREATE TABLE player_wallet_p0 PARTITION OF player_wallet FOR VALUES WITH (MODULUS 32, REMAINDER 0);
--... p1..p31

-- Репликация: публикация WAL на реплики, синхронность для «горячего» региона.
ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (replica_eu1, replica_eu2)';

Scrittura quorum (pseudo)


WRITE CL=QUORUM  -- запись подтверждена большинством реплик
READ CL=LOCAL_QUORUM -- локальный кворум для низкой задержки

Saga invece di 2PC (semplificato)

1. Azzera deposito per shard-A (idempotent).
2. Invia l'evento «ritirato» al servizio di pagamento shard-B.
3. Se il passaggio 2 è incompleto, compensare il passaggio 1 con l'evento «ritorno».


Assegno foglio di implementazione

1. Definire i domini dati e SLO (p99, RPO/RTO, repliche).
2. Selezionare un modello di replica (leader/follower, quorum) e una strategia di sharding.
3. Fissa le chiavi di sharding e schema (invariabili!).
4. Immettere il criterio read-after-write e l'instradamento delle letture.
5. Progettare il resharding online (dischi virtuali, record doppio).
6. Assicurati idemoticità e outbox per eventi/comandi.
7. Personalizzare backap, PITR, DR e esercizi regolari.
8. Attivate l'osservazione, i quorum, le chiavi calde, i conflitti.
9. Documentazione runbook: failover, split-brain, degrado.
10. Eseguire test di carico/caos per i picchi materici.


Antipattern

Uno shard gigante dì tutto "e" poi tagliamo ".
Join's cross-shard'sul percorso caldo della richiesta.
Nessun criterio read-after-write.
Migrazioni di schemi che rompono le chiavi di sharding.
Multi-leader per i conti in denaro senza una risoluzione rigorosa dei conflitti.
Nessun PITR/DR - Impossibile recuperare da un errore logico.


Riepilogo

La replica risolve la lettura e la disponibilità, lo sharding e il volume. L'architettura di successo nel iGaming è un chiaro SLO e compromesso PACELC, chiavi di sharding stabili, un minimo di coordinazione cross-chard (saga al posto di 2PC), disciplina read-after-write, Read-after-resharding online regolari e esercitazioni DR regolari. Questo approccio è scalabile sotto i picchi dei tornei, supporta i limiti regolatori di localizzazione dei dati e rimane prevedibile in uso.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.