Ich habe in letzter Zeit über Event-Sourcing gelesen und mag die Ideen, die dahinter stecken, aber ich habe folgendes Problem.
Angenommen, Sie haben N gleichzeitige Prozesse, die Befehle empfangen (z. B. Webserver), als Ergebnis Ereignisse generieren und diese in einem zentralen Speicher speichern. Nehmen wir außerdem an, dass alle vorübergehenden Anwendungszustände im Speicher der einzelnen Prozesse beibehalten werden, indem Ereignisse aus dem Speicher nacheinander angewendet werden.
Angenommen, wir haben die folgende Geschäftsregel: Jeder einzelne Benutzer muss einen eindeutigen Benutzernamen haben.
Wenn zwei Prozesse einen Benutzerregistrierungsbefehl für denselben Benutzernamen X erhalten, überprüfen sie beide, dass X nicht in ihrer Liste der Benutzernamen enthalten ist. Die Regel wird für beide Prozesse validiert und sie speichern beide ein Ereignis "Neuer Benutzer mit Benutzername X" im Speicher .
Wir sind jetzt in einen inkonsistenten globalen Status eingetreten, da die Geschäftsregel verletzt wurde (es gibt zwei unterschiedliche Benutzer mit demselben Benutzernamen).
In einem herkömmlichen RDBMS-System mit N Servern <-> 1 wird die Datenbank als zentraler Synchronisationspunkt verwendet, um solche Inkonsistenzen zu vermeiden.
Meine Frage lautet: Wie gehen Event-Sourcing-Systeme normalerweise mit diesem Problem um? Verarbeiten sie einfach alle Befehle der Reihe nach (z. B. begrenzen sie die Anzahl der Prozesse, die in den Speicher geschrieben werden können, auf 1)?