Ho letto di recente sull'approvvigionamento di eventi e mi piacciono molto le idee alla base, ma sono bloccato con il seguente problema.
Supponiamo che tu abbia N processi simultanei che ricevono comandi (ad es. Server Web), generano eventi di conseguenza e li memorizzano in un archivio centralizzato. Supponiamo anche che tutto lo stato transitorio dell'applicazione venga mantenuto nella memoria dei singoli processi applicando sequenzialmente eventi dall'archivio.
Ora, supponiamo di avere 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 verificano che X non sia nel loro elenco di nomi utente, la regola viene convalidata per entrambi i processi ed entrambi memorizzano un evento "nuovo utente con nome utente X" nel negozio .
Ora siamo entrati in uno stato globale incoerente perché la regola aziendale è stata violata (ci sono due utenti distinti con lo stesso nome utente).
In un sistema di tipo RDBMS tradizionale N server <-> 1, il database viene utilizzato come punto centrale di sincronizzazione che aiuta a prevenire tali incoerenze.
La mia domanda è: in che modo i sistemi basati su eventi in genere affrontano questo problema? Elaborano semplicemente tutti i comandi in sequenza (ad es. Limitano la quantità di processo che può scrivere nel negozio a 1)?