In che modo Event Sourcing e CQRS cooperano:
Nonostante i suoi vantaggi, Event Sourcing introduce una sfida significativa: maggiore complessità. Scrivere dati in un sistema event-sourced sembra semplice: l’applicazione crea semplicemente un evento e lo aggiunge a un registro eventi. Tuttavia, il recupero dei dati è qualcosa di molto più complesso.
Per recuperare lo stato attuale dei dati in un dato momento, il sistema deve aggregare tutti gli eventi rilevanti fino a quel momento. Questo processo può essere lento e imprevedibile, rendendo le richieste di lettura significativamente meno efficienti di quelle di scrittura. Gestire entrambe le operazioni all’interno dello stesso modello di dati può portare a serie complicazioni.
La causa di queste complicazioni risiede nelle diverse esigenze tra le operazioni di lettura e scrittura. Inoltre, molti sistemi sperimentano un chiaro squilibrio tra le operazioni di lettura e scrittura. Ad esempio, le applicazioni rivolte all’utente in genere sono caratterizzate da molte più letture che scritture, poiché gli utenti consumano principalmente i dati anziché modificarli. Al contrario, alcuni sistemi, come il back office di una banca o una piattaforma di tracciamento dei veicoli, possono sperimentare enormi carichi di scrittura e poche richieste di lettura.
L’ottimizzazione dei modelli di dati per le letture può comportare l’aggiunta di indici, che possono rallentare le scritture e viceversa. È qui che CQRS si dimostra fondamentale. Separando i modelli di lettura e scrittura, CQRS riduce la complessità e consente a ciascun modello di scalare in modo indipendente in base alle sue esigenze specifiche.
La combinazione di Event Sourcing e CQRS offre diversi vantaggi aggiuntivi:
- Tracciamento delle modifiche: poiché ogni modifica di stato viene registrata come un evento, si può ottenere una cronologia dettagliata che mostra cosa è successo, quando e perché. Questi stessi dettagli dell’evento semplificano il monitoraggio dell’evoluzione dei dati.
- Audit dei dati: un registro eventi completo fornisce ovviamente una solida audit trail, fondamentale per la responsabilità, la conformità e le indagini forensi.
- Riduzione delle controversie: isolando i modelli di lettura e scrittura, CQRS riduce al minimo i colli di bottiglia. Le letture possono sfruttare dati denormalizzati ottimizzati per ricerche rapide, mentre le scritture si concentrano sul mantenimento dell’integrità transazionale.
- Miglioramento della sicurezza: con modelli di lettura e scrittura distinti, è possibile applicare controlli più rigorosi sulle operazioni di scrittura, garantendo al contempo che i dati di lettura siano ampiamente accessibili senza comprometterne l’integrità.
Riassumendo: quando si verifica un evento, questo può attivare aggiornamenti a uno o più modelli di lettura ottimizzati per le query. In questo modo, la parte di scrittura può concentrarsi sulla cattura della cronologia, mentre la parte di lettura può fornire visualizzazioni ottimizzate e personalizzate dei dati per query efficienti, che è proprio una comune applicazione delle reads in un’architettura CQRS. Queste Single View unificate sono in genere proiezioni create da modifiche dei dati sottostanti.
Fast Data di Mia-Platform migliora significativamente Event Sourcing e CQRS attraverso il suo modello asincrono. Sfruttando un approccio basato su flussi Kafka, Fast Data acquisisce ed elabora in modo efficiente eventi immutabili.
Questi flussi di eventi vengono quindi utilizzati in modo asincrono per materializzare modelli di lettura ottimizzati (Single Views), allineandosi perfettamente con il lato query di CQRS. Questa elaborazione asincrona garantisce che le operazioni di scrittura (Event Sourcing) e le operazioni di lettura (CQRS tramite Single Views) siano disaccoppiate, migliorando la reattività e la scalabilità.
Il Fast Data Control Plane semplifica ulteriormente la gestione di queste pipeline di dati asincrone, riducendo la complessità spesso associata all’implementazione di Event Sourcing e CQRS.