36
Event Sourcing für reaktive Anwendungen Einführung + Best Practices

Event Sourcing für reaktive Anwendungen

Embed Size (px)

Citation preview

Page 1: Event Sourcing für reaktive Anwendungen

Event Sourcingfür reaktive Anwendungen

Einführung + Best Practices

Page 2: Event Sourcing für reaktive Anwendungen

Michael Plöd@bitboss

Page 3: Event Sourcing für reaktive Anwendungen

Die meisten aktuellen Systeme speichern den aktuellen Zustand beim

Verarbeiten von Transaktionen

Page 4: Event Sourcing für reaktive Anwendungen

IncidentRestController

IncidentBusinessService

IncidentDAO

Incident

ID USER_ID DATUM TEXT1 23423 11.03.2014 Maus defekt 2 67454 12.03.2014 EMail Empfang3 93729 12.03.2014 Monitor defekt… … … …

Klassische Architektur

Page 5: Event Sourcing für reaktive Anwendungen

IncidentRestController

IncidentBusinessService

IncidentDAO

Incident

ID USER_ID DATUM TEXT1 23423 11.03.2014 Maus ist kaputt2 67454 12.03.2014 EMail Empfang3 93729 12.03.2014 Monitor defekt… … … …

Update

Der Datensatz wird direkt geändert. Keine Historie

Page 6: Event Sourcing für reaktive Anwendungen

1 Audit Log nur mit extra Aufwand

2 Kein Replay

3 Snapshots nur über Backups

Page 7: Event Sourcing für reaktive Anwendungen

? Probleme

Page 8: Event Sourcing für reaktive Anwendungen

Zahlreiche Anwendungen fahren mit der klassischen

Herangehensweise gut

Page 9: Event Sourcing für reaktive Anwendungen

Es gibt dennoch Bereiche, in denen dieses

Architekturmodell an seine Grenzen stößt

Page 10: Event Sourcing für reaktive Anwendungen

? Reactive

Page 11: Event Sourcing für reaktive Anwendungen

? Responsive

? Resilient

? Elastic

? Message driven

Page 12: Event Sourcing für reaktive Anwendungen

IncidentRestController

IncidentBusinessService

IncidentDAO

Incident

Nicht so ganz reactive…

Datenbank

Page 13: Event Sourcing für reaktive Anwendungen

Event Sourcing ist ein Architekturstil bei dem der Zustand der Daten einer Anwendung aus

einer Sequenz von Domain Events bestimmt

wird

Page 14: Event Sourcing für reaktive Anwendungen

Aufbau / Bestandteile

Anwendung

Event Queue

Anwendung stellt Events asynchron

in Queue

Event Handler

Handler verarbeitet Events und reagiert

darauf

Event Store

Store speichert sämtliche Events

Page 15: Event Sourcing für reaktive Anwendungen

Ein Event ist etwas, das in der Vergangenheit

passiert ist

tjetzt

EventEventEventEventEvent

Page 16: Event Sourcing für reaktive Anwendungen

Die Benennung von Events ist Teil der

Ubiquitous Language

D D D

Page 17: Event Sourcing für reaktive Anwendungen

ShipmentDeliveredEvent

CustomerVerifiedEvent

CartCheckedOutEvent

CreateCustomerEvent WillSaveItemEvent

DoStuffEvent

Page 18: Event Sourcing für reaktive Anwendungen

Code Beispielpublic class CustomerVerifiedEvent {

private CustomerNumber customerNumber;

private String comment;

public CustomerVerifiedEvent(CustomerNumber custNum, String comment) {this.customerNumber = cusNum;this.comment = comment;

}

}

Page 19: Event Sourcing für reaktive Anwendungen

Scoping von Events auf Basis von

Aggregaten

D D D

Page 20: Event Sourcing für reaktive Anwendungen

Ein Event ist immer immutable!

Page 21: Event Sourcing für reaktive Anwendungen

Den Verlauf der Events in der Queue nennt man

Event Stream

tjetzt

EventEventEventEventEvent

Page 22: Event Sourcing für reaktive Anwendungen

IncidentCreatedEvent incidentNumber: 1 userNumber: 23423timestamp: 11.03.2014 12:23:23 text: „Maus defekt“status: „offen“

Beispielhafter Event Stream

IncidentUpdatedEvent incidentNumber: 1 text: „Maus ist Kaputt“

IncidentUpdatedEvent incidentNumber: 1 solution: „Neue Maus“status: „geschlossen“

Page 23: Event Sourcing für reaktive Anwendungen

1 Kompletter Rebuild möglich

2 Zeitbasierte Abfragen

3 Event Replay

Page 24: Event Sourcing für reaktive Anwendungen

Gängiges Beispiel

=Versionskontroll-Systeme

Page 25: Event Sourcing für reaktive Anwendungen

Das Event Log hat einen sehr

hohen Business Value

Page 26: Event Sourcing für reaktive Anwendungen

Es gibt kein Delete!

Page 27: Event Sourcing für reaktive Anwendungen

Ein Delete ist einfach

ein weiterer Event

IncidentCreatedEvent incidentNumber: 1 userNumber: 23423timestamp: 11.03.2014 12:23:23 text: „Maus defekt“status: „offen“

IncidentUpdatedEvent incidentNumber: 1 text: „Maus ist Kaputt“

IncidentUpdatedEvent incidentNumber: 1 solution: „Neue Maus“status: „geschlossen“

IncidentRemovedEvent incidentNumber: 1

Page 28: Event Sourcing für reaktive Anwendungen

Laufe ich bei Abfragen nicht in ein Performance

Problem, wenn ich den Zustand aus dem Event Store

errechnen muss

Page 29: Event Sourcing für reaktive Anwendungen

Ja, vor allem bei vielen

Events

Page 30: Event Sourcing für reaktive Anwendungen

Application State

Vorhalten von Application State

Anwendung

Event Queue

Event Handler

Event Store

Application State

Die Anwendung stellt Abfragen gegen den

Application State

Page 31: Event Sourcing für reaktive Anwendungen

CQRS

Page 32: Event Sourcing für reaktive Anwendungen

Command Query Responsibility Separation

Page 33: Event Sourcing für reaktive Anwendungen

IncidentSOAPEndpoint

IncidentBusinessService

IncidentDAO

IncidentBusiness Model

Client

Incident DTO

Incident View Model

RDBMS

Incident ER-Model

Netzwerk

Netzwerk

Page 34: Event Sourcing für reaktive Anwendungen

EventHandler EventsEvents

Event Sourcing & CQRSIncidentCommandEndpoint

IncidentCommandService

IncidentCommandDAO

IncidentQueryEndpoint

IncidentQueryService

IncidentQueryDAO

Lese Datenhaltung

Events

Select * from

Page 35: Event Sourcing für reaktive Anwendungen

ToolsEvent

Sourcing

Hazelcast, RabbitMQ, MQSeries, RDBMS, MongoDB, Redis, Apache Kafka, und viele

mehr

Treiben Sie das Thema Event Sourcing nicht aus Tooling Sicht sondern adaptieren Sie, das

was für Ihre Organisation Sinn macht

Page 36: Event Sourcing für reaktive Anwendungen

Danke!Michael Plöd

@bitbosshttp://slideshare.net/[email protected]