2016-11-22 4 views
2

Ich habe über das Ereignis Sourcing-Muster gelesen, die sehr nützlich sein kann, wenn Sie Ihr System neu aufbauen möchten. Was ist jedoch, wenn ich die Ereignisrekonstruktion ausführen muss, während neue eingehende Anforderungen bearbeitet werden? Gibt es ein bestimmtes Muster oder eine Best Practice für dieses Szenario? Also, anstatt eine Systemausfallzeit zu planen, wie stelle ich sicher, dass die neuen eingehenden Anfragen mein System während der Wiedergabe nicht vermasseln, da die Synchronisation und Sequenz der Ereignisse für mein System wirklich wichtig ist. Es beinhaltet das Aktualisieren der DB-Sätze, die von der Ereignisfolge abhängig sind. Irgendwelche Gedanken?Event Sourcing - Event-Wiedergabe

+0

Es scheint eine sehr ähnliche Frage von mir http://stackoverflow.com/questions/38197712/event-sourcing-avoid-projects-duplicated-events-where-replaying-events-and-list – martinezdelariva

Antwort

0

Mit den Einschränkungen, die Sie beschrieben haben, klingt es wie Live Wiederaufbau von Null kann nicht Teil Ihrer Pläne sein. Sie könnten stattdessen ein A/B-Setup haben, die Ereignisse auf einem neuen System durchspielen, das zu diesem Zeitpunkt offline ist, und dann zu dem neuen System wechseln, wenn es einmal aufgeholt hat. Der Schlüssel ist, dass sowohl das alte als auch das neue System gleichzeitig den Ereignisstrom einstellen können.

Wenn Sie verschiedene Systeme abonniert haben, die Teilmengen der Ereignisse abonniert haben, müssen Sie möglicherweise nur Ereignisse für eines dieser Subsysteme wiedergeben, und Ihre Synchronisations-/Sequenzanforderungen können weiterhin erfüllt werden, ohne dass dieses Subsystem in Betrieb ist.

Sie können verhindern, dass veraltete Informationen verarbeitet werden, indem Sie Ereignissequenznummern in die Daten einschließen und die sequenzabhängige Service-Defer-Verarbeitung haben, wenn dieses Ereignis noch nicht erkannt wurde.

+0

Danke, was bedeutet, dass für Um sicherzustellen, dass das neue System alle Catch-ups durchgeführt hat, muss ich eine kleine Ausfallzeit einplanen und das alte System ausschalten, um sicherzustellen, dass keine neuen Daten mehr in das alte System fließen. Dann, sobald bestätigt, dass das neue System vollständige Aufholung hat, muss ich das neue System einschalten. Es scheint, dass ich für meinen Dienst eine gewisse Ausfallzeit planen muss, um die Datengenauigkeit sicherzustellen. Korrigieren Sie mich, wenn ich falsch liege. – Nyamnyam

+0

Ich denke du bist ein Missverständnis. Das Ereignisprotokoll ist die Quelle der Wahrheit bei der Ereignisbeschaffung, und alle anderen Systeme sind nur Ereignisverbraucher.Ausfallzeiten sind nicht notwendig; Es ist nur eine Frage der Sicherstellung, dass Sie mit der Art und Weise zufrieden sind, wie die Ereignisse während eines solchen Wechsels immer gehandhabt werden. – rep

0

Um Ihre Ereignisse in das Lesemodell zu projizieren, müssen Sie eine Art Catch-Up-Abonnement verwenden, wie es EventStore bietet. In diesem Fall werden Ihre neuen Ereignisse im Geschäft gespeichert, aber nicht sofort projiziert.

Sie müssen jedoch feststellen, dass Ihre Benutzer stark veraltete Daten sehen und Aktionen basierend auf dem inkonsistenten Lesemodell ausführen. Ich würde das lieber vermeiden und das System neu aufbauen lassen.

Ich stimme der ersten Antwort, dass Sie ein neues Lesemodell parallel zur Aktualisierung der alten und das Umschalten an einem bestimmten Punkt erstellen möchten, möglicherweise nicht für alle Benutzer zuerst.

+0

Wenn möglich, bevorzugen wir, keine Bibliothek von Drittanbietern für die Ereigniswiedergabe zu verwenden. – Nyamnyam

+0

EventStore ist keine Bibliothek http://www.geteventstore.com –

0

Ich habe CQRS + ES in ähnlichen Fall verwendet. Ich erstellte eine Projektion mit vorbereiteten Daten, die ich nur aktualisieren, aber nicht wiederherstellen konnte. Und auf jeder Abfrage baute ich Ergebnis-Informationen von diesem schnell.

Wenn Sie einige lange Operationen ausführen müssen (wie ein Update in db), verwenden Sie sagas. Generiere event -> saga -> aktualisiere die Projektion, nachdem die saga beendet ist und erstelle event2.

Natürlich wird es etwas Verzögerung zwischen Ereignis Einkommen und Projektion Update geben.

Es ist sehr interessant, mehr über Ihr System zu erfahren, und wenn eine solche Variante für Sie gut genug ist.

Verwandte Themen