Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann...

30
Zuhören. Analysieren. Beraten. DATENBANKEN? WO WIR HINFAHREN BRAUCHEN WIR KEINE DATENBANKEN. Nicolai Mainiero sidion

Transcript of Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann...

Page 1: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

DATENBANKEN? WO WIR HINFAHREN BRAUCHEN WIR KEINE DATENBANKEN.Nicolai Mainiero

sidion

Page 2: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Über mich� Diplom-Informatiker.

� Mehr als 8 Jahre Erfahrung in der Softwareentwicklung.

� Seit mehr als 3 Jahren bei sidion.

Über mich

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero1

Über sidion� Inhabergeführtes Unternehmen seit 1992.

� Ca. 130 Mitarbeiter.

� Standorte: Stuttgart, Frankfurt.

� Branchen: Automotive OEMs, Banken und

Finanzwesen, Logistik, Öffentlicher Dienst.

Page 3: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Die Vergangenheit ändern um die Zukunft zu beeinflussen

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero2

Page 4: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Agenda1. CQRS und Event Sourcing

2. Vor- und Nachteile

3. Frameworks

4. Ausblick

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero3

Page 5: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero4

Page 6: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Ein einfaches Beispiel: Bankkonto

Das Bankkonto ist ein einfaches Beispiel für ein System, dass einzelne Ereignisse erfasst

und daraus den aktuellen Zustand des Kontos ableitet.

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero5

Datum Verwendungszweck Wert Saldo

26.10.1985 Kontoeröffnung 10.000,00 10.000,00

21.11.2015 Sportalmanach -15,95 9984,05

22.11.2015 Überweisung an Needles -500,00 9484,05

Page 7: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Ein einfaches Beispiel: Bankkonto

� Jede Transaktion wird gespeichert

� Der aktuellen Zustand ist die Aggregation aller Transaktion

� Den aktuellen Zustand kann man wieder herstellen, indem alle Transaktionen erneut aggregiert werden

� Die Transaktionen sind gleichzeitig ein Audit Log

� Der Zustand (Saldo) kann für jeden beliebigen Zeitpunkt bestimmt werden

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero6

Page 8: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Was ist ein Event?

Etwas das in der Vergangenheit passiert ist.

� Events sollen mit Verben repräsentiert werden

� CustomerRelocated, CargoShipped oder InventoryLossageRecorded

� Enthalten weitere Daten

� Sind Immutable

� Sind Domänenspezifisch

� Sind Wiederholbar

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero7

Page 9: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Event Sourcing – Ein Strom von Events

� Events werden gespeichert, z.B. Append-Only Speicher

� Event beschreibt die Änderung zwischen zwei Zuständen

� Events werden nicht gelöscht

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero8

Einkaufs-wagen erzeugt

Produkt 1 hinzu-gefügt

Produkt 2 hinzu-gefügt

Versand-daten hinzu-gefügt

Bestellung auf-

gegeben

Produkt 3 hinzu-gefügt

Produkt 1entfernt

Produkte versendet

Einkaufs-wagen erzeugt

Produkt 1 hinzu-gefügt

Produkt 2 hinzu-gefügt

Versand-daten hinzu-gefügt

Bestellung auf-

gegeben

Produkt 3 hinzu-gefügt

Produkt 1entfernt

Produkte versendet

Page 10: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Events auswerten

Problem

� Den aktuellen Zustand ermitteln ohne alle Events betrachten zu müssen

� Events mit weiteren Daten verknüpfen

� Abfragen auf den Events ausführen

Lösung

� Command Query Responsibility Segregation (CQRS)

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero9

Page 11: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Was ist Command Query Responsibility Segregation (CQRS)?

� Ursprung ist das Konzept der Command Query Separation

It states that every method should either be a command that performs an action, or a query that returns data to the caller, but not both. In other words, Asking a question should not change the answer. More formally, methods should return a value only if they are referentially transparent and hence possess no side effects.

Bertrand Meyer - 2014

� Command Query Responsibility Segregation

� Lange als Erweiterung von CQS betrachtet

� Mittlerweile jedoch als eigenes Pattern akzeptiert

� CQRS teilt Commands und Queries in zwei getrennte Objekte

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero10

Page 12: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Command und Query aufteilen

public interface CustomerService {

void makeCustomerPreferred(int id);

Customer getCustomer(int id);

Set<Customer> getCustomersWithName(String

name);

Set<Customer> getPreferredCustomers();

void changeCustomerLocale(int id, Locale

locale);

void createCustomer(Customer c);

void editCustomerDetails(CustomerDetails

cd);

}

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero11

public interface CustomerWriteService {

void makeCustomerPreferred(int id);

void changeCustomerLocale(int id, Locale

locale);

void createCustomer(Customer c);

void editCustomerDetails(CustomerDetails

cd);

}

CommandCommand

public interface CustomerReadService {

Customer getCustomer(int id);

Set<Customer> getCustomersWithName(String

name);

Set<Customer> getPreferredCustomers();

}

QueryQuery

Page 13: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

CQRS und Event Sourcing

Gründe für die Aufteilung in Commands und Querys

Anforderung Command Query

Konsistenz Leichter mit konsistentenDaten zu arbeiten

Den meisten Systemen reicht es wenn die Daten irgendwann konsistent sind

Speicherung Am besten normalisiertesDatenmodell

Am besten denormalisiertesDatenmodell

Skalierbarkeit Relevant Sehr wichtig

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero12

Page 14: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Commands

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero13

� Als Imperativ formuliert, z.B. OrderCart, BookFlight

� Aufforderung an das System etwas zu tun

� Ermöglichen ein Domain Driven Design

� Reduzieren Komplexität, da lesender Zugriff nicht mehr berücksichtigt werden muss

� Werden von einem Empfänger verarbeitet

Page 15: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Queries

� Anfragen an das System

� Leichtgewichtige Implementierung, die direkt aus dem Datenspeicher liest

� Anfragen sind simpler

� Anfragen können einfacher optimiert werden

� Anfragen sind schneller

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero14

Page 16: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Zwei getrennte Pfade

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero15

Quelle: https://msdn.microsoft.com/en-us/library/jj591573.aspx

Page 17: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Zwei getrennte Pfade mit Events und Messages

CQRS und Event Sourcing

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero16

Quelle: https://msdn.microsoft.com/en-us/library/jj591573.aspx

Page 18: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Vor- und Nachteile

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero17

Page 19: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Vorteile

� Hohe Skalierbarkeit

� Schreib- und Lesezugriffe sind unabhängig voneinander skalierbar

� Ermöglicht Domain Driven Design

� Eignet sich zum Einsatz in Serviceorientierten Architekturen, etwa im Cloud Computing

� Verbesserte Sicherheit durch getrennte Rollen der Schreib- und Leseoperationen

� Simultaner Einsatz verschiedener Versionen derselben Software möglich

� Beibehaltung von Rückwärtskompatibilität möglich

� Migration auf neue Version im Live-Betrieb ohne Downtime möglich

� Anpassbarkeit an veränderte Business-Anforderungen

Vor- und Nachteile

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero18

Page 20: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Vorteile

� Entwicklung der einzelnen Bestandteile durch unterschiedliche Teams

� Nachvollziehbarkeit, da alle Änderungen aufgezeichnet werden

� Jederzeit nachträgliche Datenanalyse möglich

� Deterministische Fehleranalyse möglich

Vor- und Nachteile

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero19

Page 21: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Nachteile

� Hoher Aufwand in der Softwareentwicklung

� Eignet sich eher für Projekte mit vielen gleichzeitigen Benutzern

� Wenn Nachvollziehbarkeit wichtig ist

� Benötigt passende Infrastruktur

� Transaktionen sind schwer umzusetzen

� Queries können durchgeführt werden, bevor Commands durchgeführt wurden. Client

sieht eventuell veraltete Daten

Vor- und Nachteile

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero20

Page 22: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Bibliotheken und Frameworks

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero21

Page 23: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Java EE

Frameworks

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero22

Command Service

Event Handler

Event Store

Mess

age Q

ueue (

JMS)

View Store

Query Service

MessageListener

Page 24: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Java EE

Frameworks

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero23

� Bestehende Applikation kann migriert werden

� Keine vollständige Neuentwicklung notwendig

� Weiterentwicklung in Richtung Microservice möglich

Page 25: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Akka Persistence

� Inspiriert und offizieller Nachfolger von eventsourced

� Low-Level Framework um Event-Sourcing und CQRS zu implementieren

� Verarbeitung von Commands

� Persistierung der Events

� Persistence Query um Events zu lesen und die Daten für lesende Seite aufzubereiten

� Kann zum Beispiel mit Play! zu einer Web-Anwendung oder Microservice ergänzt werden

� Angenehmer mit Scala als mit Java zu nutzen

Frameworks

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero24

Page 26: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

eventuate.io

� Software as a Service oder als lokale Installation

� Automatische Events, wenn sich Daten ändern

� Schnelle und Skalierbare Queries durch materialized views

� Integrierte Unterstützung für zeitliche Abfragen

� Bibliothek zum Einbinden in eigenen Code basierend auf RxJava

� Gute Code-Beispiele frei verfügbar

Frameworks

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero25

Page 27: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Ausblick

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero26

Page 28: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Ausblick

� Möglichkeit Monolithen aufzubrechen bzw. Legacy-Systeme zu modernisieren

� Flexiblere Optionen zur Skalierung der Anwendung

� Audit-Logs als Zugabe

� Keine Datenbankmigration nötig

� Mögliche Datensynchronisation für Microservices

� Fast Data mit Hilfe von Streamprocessing

Ausblick

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero27

Page 29: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Fragen? sidion

Heßbrühlstr. 15 Mergenthalerallee 10-1270565 Stuttgart 65760 Frankfurt-Eschborn

www.sidion.de

Starke Marken brauchen einen starken Partner.

Gemeinsam mehr erreichen.

Page 30: Datenbanken. Wo wir hinfahren brauchen wir keine ... · reicht es wenn die Daten irgendwann konsistent sind Speicherung Am besten normalisiertes Datenmodell Am bestendenormalisiertes

Zuhören. Analysieren. Beraten.

Referenzen

� A CQRS journey (https://msdn.microsoft.com/en-us/library/jj554200.aspx)

� Turning the database inside-out with Apache Samza

(http://www.confluent.io/blog/turning-the-database-inside-out-with-apache-

samza/)

� Building and Deploying Microservices with Event Sourcing, CQRS and Docker

(http://www.infoq.com/presentations/microservices-docker-cqrs)

� lagom (http://www.lagomframework.com/documentation/1.0.x/Home.html)

� Axon Framework (http://www.axonframework.org/)

� Akka Persistence (http://doc.akka.io/docs/akka/2.4.3/java/persistence.html)

Java Forum 2016 - CQRS und Event Sourcing, Nicolai Mainiero29