Ho letto su event sourcing ultimamente e mi piacciono molto le idee che ci stanno dietro, ma sono bloccato con il seguente problema .
Supponiamo che tu abbia N processi concorrenti che ricevono comandi (ad esempio server web), generano eventi come risultato e li memorizzano in un archivio centralizzato. Supponiamo inoltre che tutti gli stati transitori di applicazione siano mantenuti nella memoria dei singoli processi applicando in sequenza gli eventi dallo store.
Ora diciamo che abbiamo la seguente regola aziendale: ogni utente distinto deve avere un nome utente univoco.
Se due processi ricevono un comando di registrazione utente per lo stesso nome utente X, entrambi controllano che X non sia nella loro lista di nomi utente, la regola convalida per entrambi i processi e entrambi memorizzano un evento "nuovo utente con nome utente X" nel negozio.
Ora abbiamo inserito uno stato globale incoerente perché la regola aziendale è stata violata (ci sono due utenti distinti con lo stesso nome utente).
In un server N tradizionale < - > 1 sistema stile RDBMS, il database viene utilizzato come punto centrale di sincronizzazione che aiuta a prevenire tali incoerenze.
La mia domanda è: in che modo i sistemi basati sugli eventi in genere affrontano questo problema? Elaborano semplicemente tutti i comandi in sequenza (ad esempio, limita la quantità di processo che può scrivere nel negozio su 1)?