In einer Microservices Architektur soll jeder Service seine eigene Datenbank haben und darf nur mit dieser Datenbank kommunizieren. Was passiert wenn Transaktionen mehrere Services überbrücken?
Das obige Bild stellt einen PlaceOrder Transaktion bzw. Prozess dar, die den CustomerService und den OrderService einbezieht.
- Der Benutzer gibt eine neue Bestellung auf
- Der Conductor weiß, dass sowohl die CustomerTable als auch die OrderTable aktualisiert werden müssen und beauftragt dafür die Customer- und Order-Service.
- Wenn beide Services mit der Transaktion durch sind, sendet der Conductor eine OK Antwort zurück.
Soweit so gut. Allerdings müssen wir das Szenario betrachten, bei dem der CustomerService seine Datenbank aktualisiert hat und aus irgendeinem Grund der OrderService fehlschlägt. Wir kommen in einen invaliden Zustand, da die Transaktion nicht atomar ist. Welchen Zustand soll zurückgegeben werden, wenn während eine Transaktion, die ein Objekt ändert, eine Anfrage zum Lesen des Objekts ankommt? Im nächsten Abschnitt stellen wir zwei Alternativen dar, um dieses Problem zu bewältigen.