Was ist event sourcing?

Definition von Event Sourcing

Event Sourcing ist ein architektonisches Muster und eine Methode zur Verwaltung des Anwendungszustands, bei der alle Zustandsaenderungen eines Aggregats (Domaenenobjekt, z.B. Bestellung, Benutzerkonto) als Sequenz unveraenderlicher (immutable) Ereignisse in chronologischer Reihenfolge gespeichert werden. Anstatt nur den aktuellen Zustand des Objekts zu speichern, wie es in traditionellen Datenbanken ueblich ist, wird die gesamte Historie der Ereignisse aufbewahrt, die zu diesem Zustand gefuehrt haben.

Der aktuelle Zustand des Aggregats kann zu jedem beliebigen Zeitpunkt durch das Abspielen (Replay) der Ereignissequenz von Anfang an rekonstruiert werden. Dieser fundamentale Unterschied zum konventionellen CRUD-Ansatz (Create, Read, Update, Delete) eroeffnet voellig neue Moeglichkeiten fuer Audit, Analyse und Systemdesign.

Funktionsweise von Event Sourcing

In einem auf Event Sourcing basierenden System folgt der Datenfluss einem klar definierten Ablauf:

Befehle und Validierung

Eingehende Befehle (Commands), also Absichten zur Zustandsaenderung, werden vom Aggregat validiert. Das Aggregat prueft, ob der Befehl im aktuellen Zustand ausgefuehrt werden darf und ob alle Geschaeftsregeln eingehalten werden.

Ereignisgenerierung

Wenn der Befehl gueltig ist, generiert das Aggregat ein oder mehrere Domaenenereignisse, die den Fakt beschreiben, dass eine Zustandsaenderung stattgefunden hat. Beispiele hierfuer sind:

  • BestellungAufgegeben (OrderPlaced)
  • LieferadresseGeaendert (DeliveryAddressChanged)
  • ProduktZumWarenkorbHinzugefuegt (ProductAddedToCart)
  • ZahlungBestaetigt (PaymentConfirmed)

Ereignisse sind Fakten aus der Vergangenheit und sind unveraenderlich. Sie beschreiben, was passiert ist, nicht was passieren soll.

Event Store

Generierte Ereignisse werden in einem speziellen Ereignisspeicher (Event Store) in der Reihenfolge ihres Auftretens gespeichert. Der Event Store funktioniert wie ein Append-Only-Log, in dem nur neue Eintraege hinzugefuegt, aber bestehende niemals geaendert oder geloescht werden.

Zustandsaktualisierung und Replay

Das Aggregat aktualisiert seinen internen Zustand, indem es die Logik anwendet, die in der Verarbeitung des neu generierten Ereignisses enthalten ist. Um den aktuellen Zustand eines Aggregats zu erhalten (z.B. bei der Verarbeitung des naechsten Befehls), liest das System alle Ereignisse des Aggregats aus dem Event Store und spielt sie nacheinander ab.

Snapshots zur Optimierung

Bei Aggregaten mit langer Ereignishistorie kann das Replay zeitaufwaendig werden. Snapshots speichern periodisch den vollstaendigen Zustand des Aggregats, sodass das Replay nur ab dem letzten Snapshot starten muss. Die optimale Snapshot-Frequenz haengt von der Anzahl der Ereignisse und der gewuenschten Ladezeit ab.

Ereignisveroeffentlichung

Gespeicherte Ereignisse koennen an andere Systemteile veroeffentlicht werden, beispielsweise ueber einen Message Broker. Dies ermoeglicht es anderen Komponenten, auf Ereignisse zu reagieren und eigene Lesemodelle in einer CQRS-Architektur zu aktualisieren.

Event Sourcing und CQRS

Event Sourcing wird haeufig in Kombination mit dem CQRS-Muster (Command Query Responsibility Segregation) eingesetzt. CQRS trennt das Schreibmodell (Commands) vom Lesemodell (Queries):

AspektSchreibseiteLeseseite
DatenmodellEvent Store mit EreignissequenzenOptimierte Lesemodelle (Projektionen)
OptimierungValidierung und KonsistenzAbfrage-Performance
SkalierungFuer Schreiblast optimiertFuer Leselast optimiert
AktualisierungDurch Command-VerarbeitungDurch Event-Projektion

Diese Kombination ermoeglicht es, verschiedene Lesemodelle fuer unterschiedliche Anforderungen zu erstellen, ohne das Schreibmodell zu beeinflussen. Ein E-Commerce-System koennte beispielsweise separate Projektionen fuer den Bestellstatus, Umsatzberichte und Lagerbestandsuebersichten haben, die alle aus demselben Ereignisstrom gespeist werden.

Vorteile von Event Sourcing

Die Anwendung des Event-Sourcing-Musters bietet eine Reihe bedeutender Vorteile:

  • Vollstaendige Aenderungshistorie (Audit Log): Die Aufbewahrung der vollstaendigen Ereignishistorie stellt ein natuerliches Audit-Log dar, mit dem genau nachvollzogen werden kann, wie und warum sich der Zustand des Aggregats im Laufe der Zeit veraendert hat.
  • Zustandsrekonstruktion: Der Zustand des Systems kann fuer jeden beliebigen Zeitpunkt in der Vergangenheit rekonstruiert werden. Dies ist aeusserst wertvoll fuer Debugging, Analyse, Compliance-Anforderungen und Testing.
  • Flexibilitaet bei Lesemodellen: Gespeicherte Ereignisse koennen zum Aufbau vieler verschiedener Lesemodelle (Projektionen) verwendet werden, die fuer unterschiedliche analytische Beduerfnisse oder Anwendungsansichten optimiert sind.
  • Hohe Schreibperformance: Das Schreiben von Ereignissen in ein Append-Only-Log ist in der Regel eine sehr schnelle Operation, da keine Sperren fuer bestehende Datensaetze erforderlich sind.
  • Natuerliche Unterstuetzung fuer EDA: Event Sourcing fuegt sich nahtlos in eine Event-Driven Architecture ein, in der Ereignisse der primaere Kommunikationsmechanismus sind.
  • Erleichtertes Debugging: Die vollstaendige Ereignishistorie erleichtert das Verstaendnis, was zu einem fehlerhaften Zustand gefuehrt hat, und ermoeglicht die gezielte Reproduktion von Problemen.
  • Temporal Queries: Abfragen koennen gegen den Zustand des Systems zu jedem beliebigen Zeitpunkt ausgefuehrt werden, was fuer Compliance und Analyse unschaetzbar ist.

Herausforderungen und Komplexitaet

Die Implementierung von Event Sourcing bringt auch einige Herausforderungen mit sich:

Konzeptionelle Komplexitaet

Event Sourcing ist ein komplexeres Muster als der traditionelle CRUD-Ansatz. Das gesamte Entwicklungsteam muss das Konzept verstehen und konsequent anwenden. Der Paradigmenwechsel vom Denken in Zustaenden zum Denken in Ereignissen erfordert Umgewoehnng und Training.

Zustandswiedergabe

Die Rekonstruktion des Zustands aus einer langen Ereignishistorie kann zeitaufwaendig sein. Ohne Snapshots wuechst die Ladezeit linear mit der Anzahl der Ereignisse. Eine durchdachte Snapshot-Strategie ist daher essenziell fuer die Performance.

Ereignisversionierung

Mit der Weiterentwicklung des Systems kann sich die Struktur der Ereignisse aendern. Die Implementierung von Mechanismen zur Handhabung verschiedener Ereignisversionen (Event Schema Versioning) ist eine der groesstenn praktischen Herausforderungen. Gaengige Strategien umfassen Upcasting (Transformation alter Ereignisse beim Lesen) und die Verwendung von Schema Registries.

Event Store Management

Der Ereignisspeicher wird zum zentralen Bestandteil des Systems und erfordert angemessenes Management, Skalierung und Backup. Die Wahl der richtigen Technologie, ob spezialisierte Loesungen wie EventStoreDB oder generische Systeme wie Apache Kafka, haengt von den spezifischen Anforderungen ab.

Eventual Consistency

In verteilten Systemen, in denen Ereignisse asynchron propagiert werden, koennen Lesemodelle mit einer gewissen Verzoegerung aktualisiert werden. Diese Eventual Consistency muss in der Benutzeroberflaeche und den Geschaeftsprozessen beruecksichtigt werden.

Loeschen und Datenschutz

Da Ereignisse unveraenderlich sind, stellt das Loeschen von Daten, wie es etwa durch die DSGVO gefordert sein kann, eine besondere Herausforderung dar. Loesungsansaetze umfassen Crypto-Shredding (Verschluesselung personenbezogener Daten und Loeschung des Schluessels) und Event Transformation.

Implementierungsansaetze und Technologien

Fuer die Implementierung von Event Sourcing stehen verschiedene Technologien zur Verfuegung:

  • EventStoreDB: Eine speziell fuer Event Sourcing entwickelte Datenbank mit eingebautem Support fuer Streams, Projektionen und Subscriptions.
  • Apache Kafka: Als verteiltes Commit-Log eignet sich Kafka hervorragend als Event Store fuer hochvolumige Szenarien.
  • Axon Framework: Ein Java-Framework, das Event Sourcing und CQRS out-of-the-box unterstuetzt.
  • Marten: Eine .NET-Bibliothek, die PostgreSQL als Event Store nutzt.
  • Relationale Datenbanken: Mit entsprechendem Schema-Design koennen auch PostgreSQL oder andere relationale Datenbanken als Event Store dienen.

Wann Event Sourcing einsetzen?

Event Sourcing ist besonders wertvoll in Systemen, in denen:

  • Eine vollstaendige Historie der Zustandsaenderungen entscheidend ist (Audit, Compliance).
  • Die Faehigkeit zur Rekonstruktion vergangener Zustaende benoetigt wird.
  • Grosse Flexibilitaet bei der Erstellung verschiedener Datenansichten (Lesemodelle) gefordert ist.
  • Die Systemarchitektur auf Ereignissen basiert (EDA).
  • Komplexe Geschaeftslogik vorliegt und Ursache-Wirkungs-Analyse erforderlich ist.
  • Branchenspezifische Compliance-Anforderungen bestehen (Finanzwesen, Gesundheitswesen, Regulierung).

Fuer einfache CRUD-Anwendungen ohne besondere Audit- oder Analyse-Anforderungen ist Event Sourcing oft ueberdimensioniert und fuegt unnoetige Komplexitaet hinzu.

Event Sourcing in der Praxis

ARDURA Consulting unterstuetzt Organisationen bei der Gewinnung von Softwarearchitekten und Backend-Entwicklern mit fundierter Erfahrung in Event Sourcing und CQRS. Die Implementierung dieser fortgeschrittenen Architekturmuster erfordert spezialisiertes Know-how, das auf dem Arbeitsmarkt stark nachgefragt ist. Durch erfahrene Spezialisten koennen Unternehmen die Vorteile von Event Sourcing nutzen und gleichzeitig die damit verbundenen Herausforderungen meistern.

Zusammenfassung

Event Sourcing ist ein leistungsfaehiges architektonisches Muster, das die Art und Weise veraendert, wie wir ueber die Verwaltung des Anwendungszustands denken, indem es sich auf die Aufzeichnung der Ereignishistorie konzentriert anstatt nur den aktuellen Zustand zu speichern. Es bietet einzigartige Vorteile in den Bereichen Audit, Flexibilitaet, Debugging und Analyse, fuehrt aber auch zusaetzliche Komplexitaet ein, insbesondere bei der Ereignisversionierung, der Datenkonsistenz und dem Datenschutz. In Kombination mit CQRS und einer Event-Driven Architecture entfaltet Event Sourcing sein volles Potenzial und ermoeglicht den Aufbau robuster, skalierbarer und nachvollziehbarer Systeme fuer anspruchsvolle Geschaeftsanwendungen.

Häufig gestellte Fragen

Was ist Event Sourcing?

Event Sourcing ist ein architektonisches Muster und eine Methode zur Verwaltung des Anwendungszustands, bei der alle Zustandsaenderungen eines Aggregats (Domaenenobjekt, z.B.

Welche Vorteile bietet Event Sourcing?

Die Anwendung des Event-Sourcing-Musters bietet eine Reihe bedeutender Vorteile: Vollstaendige Aenderungshistorie (Audit Log): Die Aufbewahrung der vollstaendigen Ereignishistorie stellt ein natuerliches Audit-Log dar, mit dem genau nachvollzogen werden kann, wie und warum sich der Zustand des Aggre...

Welche Herausforderungen gibt es bei Event Sourcing?

Die Implementierung von Event Sourcing bringt auch einige Herausforderungen mit sich: Event Sourcing ist ein komplexeres Muster als der traditionelle CRUD-Ansatz. Das gesamte Entwicklungsteam muss das Konzept verstehen und konsequent anwenden.

Welche Tools werden für Event Sourcing verwendet?

Fuer die Implementierung von Event Sourcing stehen verschiedene Technologien zur Verfuegung: EventStoreDB: Eine speziell fuer Event Sourcing entwickelte Datenbank mit eingebautem Support fuer Streams, Projektionen und Subscriptions.

Brauchen Sie Unterstuetzung bei Software-Entwicklung?

Kostenlose Beratung vereinbaren →
Angebot erhalten
Beratung vereinbaren