Substrato iGaming CRM

Banco di prova dell'ingestione. Generato il 11 agosto 2026 alle 11:12 UTC.

Che cosa state guardando, per davvero.

Il codice qui sotto è quello di produzione: lo stesso consumer, lo stesso archivio, lo stesso traduttore. Quello che non è reale è la sorgente — i messaggi vengono da un finto server che parla il protocollo del concessionario, alimentato dai campioni pseudonimizzati.

Il flusso vero non è ancora raggiungibile: il token è valido, ma il servizio risponde 403 ip_denied finché Vincitu non autorizza l'IP di questa macchina.

Non c'è Kafka da questa parte, ed è voluto. Kafka sta dalla loro parte: a noi lo espongono come flusso SSE su HTTP. Mettere un broker qui in mezzo aggiungerebbe un pezzo da gestire senza aggiungere niente che l'archivio grezzo non faccia già.

Gli scenari

Ingestione ordinaria

Il consumer si collega senza posizione: prende il flusso dal vivo, archivia ogni messaggio come arriva e segna dove è rimasto.

parte daarriva aduratatradottipoi
dal vivo 1786446762868-23 3.0 s 24 riprova
Transaction 14Log 4Limit 3CasinoGames 2Player 1

Connessione interrotta

Il server chiude a metà senza preavviso. Il consumer non perde quello che aveva già scritto e conserva l'ultima posizione utile.

parte daarriva aduratatradottipoi
dal vivo 1786446764954-10 1.3 s 11 riprova
Transaction 8Balance 2Limit 1

Ripresa dalla posizione

Alla riconnessione dichiara Last-Event-ID e riparte esattamente da lì. La posizione di partenza è quella con cui era caduto.

parte daarriva aduratatradottipoi
1786446764954-10 1786446766789-11 1.5 s 21 riprova
Transaction 15Balance 3Limit 2Log 1tipo non previsto 2

Il server dichiara un buco

La posizione richiesta non è più in buffer: il server risponde lag. Il buco viene messo agli atti invece di essere ignorato.

parte daarriva aduratatradottipoi
1786446768246-5 1786446769956-9 1.3 s 15 riprova
Transaction 11Player 2Log 1Limit 1buchi dichiarati 1tipo non previsto 1

Accesso revocato

Il server chiude con revoked. Il consumer smette di ritentare: insistere su credenziali revocate è un modo per farsi bloccare l'IP.

parte daarriva aduratatradottipoi
dal vivo 1786446771418-7 1.0 s 7 si ferma
Transaction 5Player 1Log 1tipo non previsto 1

Quanto costa conservare tutto

L'archivio tiene i messaggi come arrivano, prima di tradurli. È la sola assicurazione contro un errore di mappatura scoperto tardi: la traduzione si può rifare, i dati passati no — il flusso ha una finestra di ripresa di circa quaranta minuti.

messaggi archiviatipeso compressoper messaggio stima a 8 msg/s
7812.4 KB 162.5 byte ~107 MB al giorno

Che cosa ha già trovato

Far scorrere i campioni tutti insieme ha rivelato un difetto che le prove per singolo messaggio non potevano vedere: TransactionID non identifica un movimento. Lo stesso valore 1785484692763 sta sulla giocata GeV e sulla sua perdita, e sull'erogazione di un bonus il campo è vuoto. La chiave è diventata TransactionTicket, distinto su tutti i campioni e sempre valorizzato.

Una collisione di chiavi, a differenza di uno scarto, non lascia traccia nei contatori: due movimenti diventano uno e nessuno se ne accorge.

Le pastiglie tipo non previsto qui sopra sono l'altra cosa che la demo ha reso visibile: sono i messaggi PromoDim e PromoFact, che il traduttore non copre ancora. Servono all'attribuzione delle campagne e vanno affrontati con il sotto-progetto che se ne occupa.