GH GambleHub

Kernel Event-Driven

Cos'è un kernel Event-Driven

Il kernel Event-Driven (EDC) è una colonna vertebrale di un'architettura in cui i fatti aziendali vengono registrati e diffusi come eventi invariati, mentre il resto della funzionalità (lettura, integrazione, analisi, cache, notifica) si basa sul flusso di questi eventi. Il kernel specifica il contratto eventi, le regole di consegna e gli invarianti ordine/idampotenza, garantendo una scarsa connettività e scalabilità.

L'idea chiave è di scrivere il fatto (kernel), quindi arricchirlo e proiettarlo in modo indipendente nei modelli desiderati. Ciò riduce la connettività e migliora la resistenza ai guasti parziali.

Obiettivi e proprietà EDC

La verità dei fatti è che ogni evento è una registrazione immutabile dì cosa è successo ".
Scarsa connettività: i produttori non conoscono i consumatori; estensione del sistema - aggiunta di abbonati.
Scalabilità: crescita orizzontale su partizioni/topic, consumatori indipendenti.
Osservabilità e verifica: identificatori passanti, riproducibilità, retenzioni e ripetizione.
Evoluzione guidata: versioni degli schemi, compatibilità, deprecation.

Componenti architettonici

1. Bus/broker eventi: Kafka/NATS/Pulsar/SNS + SQS - canali, partenze, retenze.
2. Registro degli schemi: JSON Schema/Avro/Protobuf per compatibilità e evoluzione.
3. Tracciato Outbox/CDC - Fissazione atomica del fatto + pubblicazione senza «doppia voce».
4. Proiezioni/letture (CQRS) - Visualizzazioni materializzate per query rapide.
5. Sags/orchestrazione: coordinare processi di lunga durata attraverso eventi/comandi.
6. Arricchimento: singoli topici' .enriched '/' .derived ', senza influire sul percorso critico.
7. Tracciabilità, logica, metriche per eventi e lame.

Modello di eventi

Tipi di eventi

Domain Events - Fatti aziendali ('payment. authorized`, `kyc. approved`).
Integration Events è incentrato sui sistemi esterni (stabili, lentamente).
Cambio Data Capture (CDC) - Modifiche tecniche alla scrittura (utilizzate per migrazioni/integrazioni).
Audit/Telemetry: azioni degli attori, sicurezza, SLA.

Attributi obbligatori (kernel)

json
{
"event_id": "uuid",
"event_type": "payment. authorized. v1",
"occurred_at": "2025-10-31T11:34:52Z",
"producer": "payments-service",
"subject": { "type": "payment", "id": "pay_123" },
"payload": { "amount": 1000, "currency": "EUR", "method": "card" },
"schema_version": 1,
"trace_id": "abc123",
"partition_key": "pay_123"
}

Raccomandazioni: 'event _ id' è univoco globalmente, 'partition _ key'imposta l'ordine dell'entità,' trace _ id 'fornisce una correlazione.

Semantica di spedizione e idimpotenza

At-least-once (predefinito per molti broker): i consumatori devono essere idipotenti.
At-just-once: accettabile solo per le telemetrie secondarie.
Exactly-once: si ottiene a livello di flusso e di storage attraverso transazioni/chiavi/leucs idipotenti (più costoso, per una buona ragione).

Modello di idampotenza del consumatore

Tabella di deduplicò event _ id '/' (event _ id, consumer _ id) 'con TTL di retenza topica.
Upsert invece di insert; versioning delle proiezioni per sequence/occurred _ at.
Operazioni all'interno della transazione - Segno «visto» + modifica dello stato.

Ordine e partizionamento

Ordine garantito all'interno della partitura.
Scegli partition _ key'in modo che tutti gli eventi di una stessa aggregazione di entità finiscano nella stessa partitura ('user _ id', 'payment _ id').
Evitare «chiavi calde»: hash con sale/sotto-chiave se si desidera distribuire il carico.

Schemi e evoluzione

Additive-first: nuovi campi opzionali, divieto di cambio tipo/semantico senza versione maggiore.
Compatibilità: BACKWARD/FORWARD nel registro degli schemi; CI blocca le modifiche incompatibili.
La denominazione è «domain». action. v{major}` (`payment. authorized. v1`).
Migrazioni: pubblicare le coppie v1 e v2 in parallelo, fornire doppia radiazione (dual-write tramite outbox), togliere «v1» dopo la transizione.

Outbox и CDC

Outbox (consigliato per i servizi transazionali)

1. In una singola transazione database, salvare il record di dominio e l'evento in outbox.
2. Il pub di sfondo legge outbox, pubblica in broker, contrassegna «inviato».
3. Garanzie: niente «perdita» di un fatto in caso di caduta, nessuna dissincronizzazione.

CDC (Change Data Capture)

Adatto ai sistemi/migrazioni esistenti sorgente - Loga della replica del database.
Richiede filtraggio/sovrapposizione negli eventi di dominio (non trasmettere tabelle crude in bianco).

CQRS e proiezioni

I comandi modificano lo stato (spesso sincronizzato), gli eventi generano le proiezioni (asincrona).
Le proiezioni sono basate su query (ricerca, elenco, report), aggiornate dagli iscritti.
La temporanea risincronizzazione è la norma: mostra un UX sostenibile («i dati verranno aggiornati in pochi secondi»).

Attività di coordinamento dei processi

Un coordinatore manda squadre e aspetta gli eventi.
Coreografia: i partecipanti rispondono agli eventi reciprocamente (più semplice, ma richiede disciplina negli appalti).
Regole: compensi chiari e timeout, passaggi ripetuti, elaboratori idropotenti.

Osservabilità

Trace/Span: scorrere «trace _ id »/« span _ id» attraverso le intestazioni quando si generano eventi.
Metriche: gruppo di consumatori, velocità di pubblicazione/consumo, dead-letter rate, percentuale di deduplicazione.
DLQ/parcheggio lot: messaggi non corretti - in un singolo top con alert; Assicuratevi che il lavoro venga rifatto.

Protezione e conformità

Classificazione dati: il kernel contiene solo i minimi PII/find necessari (modello piramide inversa) e le parti in arricchimenti.
Firma/hash attributi critici, controllo integrità.
Crittografia in-flight e at-rest, secessione dei diritti per argomento/console (IAM/ACL).
Le politiche di reticenza e il diritto all'oblio sono ben definiti per ogni topic.

Prestazioni e sostenibilità

Backpressure: i consumatori hanno limitazioni di competitività, il broker ha quote/limiti.
Elaborazione e compressione Batch: raggruppa i record per ridurre i costi generali.
Retrai con jitter e DLQ invece di tentativi infiniti.
Robustezza Rebalance - Memorizzare gli off-set transazionali/esterni, accelerare la partenza fredda con snapshot.

Modelli di evento tipici

Core di pagamenti

`payment. initiated. v1` → `payment. authorized. v1` → `payment. captured. v1` → `payment. settled. v1`

Guasti dì payment ". declined. v1`, `payment. refunded. v1`

Partizione'payment _ id '

SLA: kernel ≤ 2s p95; l'idipotenza dei consumatori è obbligatoria.

CUS/verifiche

`kyc. started. v1` → `kyc. document. received. v1` → `kyc. approved. v1`/`kyc. rejected. v1`

PII - minimo; parti del documento in "kyc. enriched. v1 'con accesso limitato.

Controllo/protezione

`audit. recorded. v1 'con attributi «attore», «subject», «action», «occurred _ at», «trace _ id».
Ritenzione/archiviazione continua maggiore integrità (WORM).

Antipattern

Fat Event: payload sovraccarico senza necessità, fuoriuscita PII.
Hidden RPC attraverso gli eventi: in attesa delle risposte sincrono «qui e ora».
CDC crudi verso l'esterno, una stretta connettività con il sistema di database.
Non c'è idepotenza nei consumatori, le riprese portano a doppi effetti collaterali.
Una cosa comune è il conflitto di interessi, l'ordine problematico, l'evoluzione complessa.

Implementazione passo per passo di EDC

1. Mappatura dominio - Selezionare le unità chiave e i cicli di vita.
2. Elenco eventi: nomi, significati, invarianti, campi obbligatori.
3. Schemi e Registro di sistema - Selezionare un formato, includere le regole di compatibilità.
4. Outbox/CDC: per ogni produttore, definire il meccanismo di pubblicazione dei fatti.
5. Partizionamento - Seleziona le chiavi e valuta le chiavi calde/ridisegnazione.
6. Idempoted: modello di deduplo + transazionalità dei consumatori.
7. Proiezioni - Definite i modelli materializzati e gli aggiornamenti SLA.
8. Tracciabilità, lame, DLQ, alert.
9. Sicurezza/PII: classificazione dei dati, crittografia, ACL.
10. Hyde sull'evoluzione: politica di versione, deprecato, dual-write per le migrazioni.

Assegno foglio di produzione

  • Ogni evento ha «event _ id», «trace _ id», «occurred _ at», «partition _ key».
  • Schemi nel registro, sono attivati i controlli di compatibilità.
  • Idampotenza dei consumatori implementata e testata.
  • DLQ/parcheggio lot e alert configurati per errori di pubblicazione/consumo.
  • Le proiezioni vengono reindirizzate dal cavo (replay) con un tempo accettabile.
  • Accesso limitato al PII; payload minimi nel nucleo.
  • Le SLA sono misurate e visibili sui dashboard.
  • Esiste un piano per la migrazione delle versioni degli eventi e delle finestre di deprecazione.

FAQ

Cosa è diverso dall'EDC?
Il nucleo non è solo un broker, ma anche un contratto di eventi, regole di ordine/idampotenza, processi di evoluzione e osservazione.

È possibile costruire solo su CDC?
Il CDC è adatto per le integrazioni/migrazioni, ma gli eventi di dominio sono più chiari e più stabili per i cambiamenti del database.

E la coerenza?
Accettiamo eventual consistency e progettiamo i processi UX sotto (indicatori di aggiornamento, retrai, compensi).

Quando hai bisogno di exactly-once?
Raramente, quando il raddoppio è strettamente inaccettabile e impossibile da compensare. Più spesso è sufficiente at-least-once + idampotenza.

Totale

Il core Event-Driven trasforma il flusso di fatti aziendali in una base di sistema affidabile. I contratti chiari, la disciplina di consegna e l'osservabilità forniscono scalabilità, sostenibilità e velocità di evoluzione - senza le fragili connessioni sincronizzate e la tempesta di regressione in caso di cambiamenti.

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.