Czytałem ostatnio o pozyskiwaniu wydarzeń i bardzo podobają mi się pomysły, ale utknąłem z następującym problemem.
Załóżmy, że masz N równoczesnych procesów, które odbierają polecenia (np. Serwery sieciowe), generują w rezultacie zdarzenia i przechowują je w scentralizowanym sklepie. Załóżmy również, że cały przejściowy stan aplikacji jest utrzymywany w pamięci poszczególnych procesów poprzez sekwencyjne stosowanie zdarzeń ze sklepu.
Załóżmy, że mamy następującą regułę biznesową: każdy odrębny użytkownik musi mieć unikalną nazwę użytkownika.
Jeśli dwa procesy otrzymają polecenie rejestracji użytkownika dla tej samej nazwy użytkownika X, oba sprawdzają, czy X nie znajduje się na ich liście nazw użytkowników, reguła sprawdza się dla obu procesów i oba przechowują w sklepie zdarzenie „nowy użytkownik o nazwie X” .
Wprowadziliśmy teraz niespójny stan globalny, ponieważ naruszono regułę biznesową (dwóch różnych użytkowników ma tę samą nazwę użytkownika).
W tradycyjnym systemie typu N serwera <-> 1 RDBMS baza danych jest używana jako centralny punkt synchronizacji, który pomaga zapobiegać takim niespójnościom.
Moje pytanie brzmi: w jaki sposób systemy oparte na zdarzeniach zazwyczaj podchodzą do tego problemu? Czy po prostu przetwarzają wszystkie polecenia sekwencyjnie (np. Ograniczają ilość procesów, które można zapisać w sklepie do 1)?