Event Sourcing (ES)[1] ist ein Verfahren, bei dem alle Veränderungen des Zustands einer Softwareanwendung als Sequenz von Events abgebildet und aufgezeichnet werden.[2] Event Sourcing wird zu den Analysemustern gezählt.

Command-Query-Responsibility-Segregation mit Event Sourcing

Mögliche Implementierung mit einem ESB Bearbeiten

Funktionen bzw. Methoden werden zunächst gemäß dem CQS-Prinzip nach Queries und Commands aufgeteilt. Commands werden an einen Enterprise Service Bus (ESB) geleitet. Falls der Command Handler das Command erfolgreich behandeln kann, wird ein Event erzeugt.

Alle Events werden von einem Event Store aufgezeichnet. Hierbei kommen Datenbankensysteme zum Einsatz. Alternativ kann direkt in das Dateisystem von Festplatten geschrieben werden, was eine höhere Streaming-Performance aufweist als Datenbanken.

Der Einsatz eines Event Stores bietet den Vorteil, dass alle Änderungen am System jederzeit durch eine Wiederholung der Events deterministisch nachgestellt werden können. Dies bietet Vorteile bei der Nachvollziehbarkeit, etwa aus rechtlichen Gründen oder im Debugging. Um die Performance bei der Wiederherstellung eines gegebenen Zustandes zu erhöhen, werden in regelmäßigen Abständen Snapshots des aktuellen Zustands durchgeführt.

Für die einzelnen Events werden am ESB Event-Handler registriert, welche z. B. Zustandsänderungen an denormalisierten Datenbanken durchführen, E-Mails versenden oder Fehler protokollieren.

Vorteile Bearbeiten

  • Hohe Skalierbarkeit
  • Einfache Anpassung an veränderte Business-Anforderungen
  • Nachvollziehbarkeit, da alle Änderungen aufgezeichnet werden
  • Jederzeit nachträgliche Datenanalyse möglich
  • Deterministische Fehleranalyse möglich

Nachteile Bearbeiten

  • Hoher Aufwand bei der Implementierung
  • Unpassend, wenn der Status wichtiger ist als die Events

Weblinks Bearbeiten

Quellen Bearbeiten

  1. Martin Fowler: EventSourcing. 12. Dezember 2005, abgerufen am 13. Juli 2014 (englisch).
  2. Event Sourcing Pattern. In: MSDN. Microsoft, abgerufen am 13. Juli 2014 (englisch).