SlideShare a Scribd company logo
1 of 85
Download to read offline
C Q R S
Der etwas andere
Architekturansatz
Lars Röwekamp
CIO New Technologies
@mobileLarson
@_openknowledge
#WISSENTEILEN
Branchenneutrale Softwareentwicklung und IT-Beratung
ÜBER OPEN KNOWLEDGE
#WISSENTEILEN
Lars Röwekamp (a.k.a. @mobileLarson)
ÜBER MICH
LR
#WISSENTEILEN
Wer bin ich - und wen ja, wie viele?
• CIO New Technologies
• Enterprise & Mobile
• Autor, Speaker, Coach & Mentor
• Snowboard & MTB Enthusiast
• mehrfacher Vater, einfacher Ehemann
Es könnte alles
so einfach sein!
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
Greetings
from
Eric
#WISSENTEILEN
CQRS
Greetings
from
Eric
#WISSENTEILEN
CQRS
Greetings
from
Eric
In sich konsistentes Modell via
Aggregates, Entities, Value Objects,
Builder, Services, Repositories, ...
Validierung, Relationen, Mapping, Rules ...
Isses aber nich ...
#WISSENTEILEN
CQRS
Greetings
from
Eric
In sich konsistentes Modell via
Aggregates, Entities, Value Objects,
Builder, Services, Repositories, ...
Validierung, Relationen, Mapping, Rules ...
#WISSENTEILEN
CQRS
Write
#WISSENTEILEN
CQRS
Read
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
ReadWrite
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
Verletzung des SRP auf Architekturebene
#WISSENTEILEN
CQRS
Benutzerinteraktion vs. Datenbereitstellung
#WISSENTEILEN
CQRS
Domänen-Modell als Kompromiss für „Read“ & „Write“
CQRS
#WISSENTEILEN
Domänen-Modell als Kompromiss für R & W
• Business vs. Technologie?
• Entities, DTOs, VOs?
• Architektur Over-Engineering
• Optimistic Locking
• Caching
CQRS
#WISSENTEILEN
Domänen-Modell als Kompromiss für R & W
• Read vs. Write Performance
• Read vs. Write Skalierung
• Read vs. Write Optimierung
CQRS
#WISSENTEILEN
Klassische Ein-Domänen Architektur
Die Komplexität der Änderungen &
Erweiterungen steigt mit der Komplexität
des Domänenmodells
„A single model cannot be
appropriate for reporting,
searching, and transactional
behaviors.” Greg Young
„Every method should either be
a command, that performs an
action or a query that returns
data to the caller, but not both.”
Bertrand Meyer
„Every method should either be
a command, that performs an
action or a query that returns
data to the caller, but not both.”
Bertrand Meyer
Bertrand Meyer
C ommand
Q uery
R ?
S ?
Bertrand Meyer
C ommand
Q uery
R esponsibility
S egregation
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
Create
Cutomer
Cutomer
Created
Find all
Customers with ...
#WISSENTEILEN
CQRS
// BEFORE: CRUD based interface with no DDD usage
interface CustomerService {
Customer createCustomer(Customer cust);
void updateCustomer(Customer cust);
void deleteCustomer(String id);
Customer getCustomer(String id);
List<Customer> findCustomer(String query);
}
#WISSENTEILEN
CQRS
// AFTER: CQRS based interfaces with DDD usage
interface CustomerQueryService {
Customer findCustomerWith(Name uniqueName);
List<Customer> findAllCustomerMatching(SearchQuery sq);
}
interface CustomerCommandService {
Customer moveTo(Address newAddress);
Customer marry(Name newName, Partner partner);
}
Und was bedeutet
das für die
Architektur?
#WISSENTEILEN
CQRS
Read	Side	...	
• optimiert	für	Abfragen
• kurze	Antwortzeiten
• unterschiedliche	„Sichten“
• einfach	zu	skalieren	
• möglichst	denormalisiert
Write	Side	...	
• „Kommandos“	ausführen
• Validierung
• Datenkonsistenz	
• ACID	
• Verhalten	Teil	der	Domäne
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
FAZIT
„Starbucks	does not	use
Two-Phase	Commit“
http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
#WISSENTEILEN
CQRS
Write Read
Moment, was macht
ihr da mit meinen
„Entities“?
#WISSENTEILEN
CQRS & Event Sourcing
... Änderungen „sammeln“ statt State updaten!
State vs. immutable Facts ...
BTW: Immutable!
#WISSENTEILEN
CQRS & Event Sourcing
... Änderungen „sammeln“ statt State updaten!
State vs. immutable Facts ...
BTW: Immutable!
#WISSENTEILEN
CQRS & Event Sourcing
... Änderungen „sammeln“ statt State updaten!
State vs. immutable Facts ...
#WISSENTEILEN
CQRS & Event Sourcing
... Änderungen „sammeln“ statt State updaten!
State vs. immutable Facts ...
CQRS & Event Sourcing
#WISSENTEILEN
Festhalten der Änderungen via Events
• speichern der Events in korrekter Reihenfolge
• vollständige Historie implizit
• keine „Updates“ oder „Deletes“
• kein „Current State“
• „Current State“ ergibt sich durch „Replay“ der
Events für einen bestimmten Zeitpunkt!
CQRS & Event Sourcing
#WISSENTEILEN
Festhalten der Änderungen via Events
• „Kein“ Locking bei konkurrierenden Zugriffen
(Repräsentation durch zwei Events)
• Evolution des Models problemlos möglich
(neueinspielen der Events)
• Tests auf Command- & Eventebene
(wenn dieses Command, dann das Ergebnis)
WT#?
Wo bleibt da die
Konsistenz?
#WISSENTEILEN
FAZIT
„Starbucks	does not	use
Two-Phase	Commit“
http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
Ist das
nicht super
langsam?
CQRS & Event Sourcing
#WISSENTEILEN
Ist das nicht super langsam?
• In der Regel wenige Events pro Aggregate
• Problem bei langlebenden Entities
• Problem bei regelmäßigen Änderungen
• Snapshots als Lösung (Momento Pattern)
• ABER: Events niemals ändern/löschen!
#WISSENTEILEN
CQRS & Event Sourcing
#WISSENTEILEN
CQRS & Event Sourcing
#WISSENTEILEN
CQRS & Event Sourcing
#WISSENTEILEN
CQRS & Event Sourcing
Still time
for a Demo?
#WISSENTEILEN
CQRS & Event Sourcing
(siehe	https://blog.jayway.com/2013/03/08/aggregates-event-sourcing-distilled/)
Muss das denn so
kompliziert sein?
CQRS & Event Sourcing
#WISSENTEILEN
JA! Denn, ...
• es ist extrem schnell für den Anwender
• es ist extrem einfach skalierbar
• es ist extrem einfach erweiterbar
• das Domänen-Modell bleibt konsistent
• Fehler können rekonstruiert werden
• Auditing & History gibt es quasi geschenkt
#WISSENTEILEN
#WISSENTEILEN
FAZIT
#WISSENTEILEN
FAZIT
#WISSENTEILEN
FAZIT
#WISSENTEILEN
FAZIT
FAZIT
#WISSENTEILEN
Die Benefits
• Fachlichkeit im Fokus (auch im Code!)
• Optimierung auf „Komponentenebene“
• max. Performance für High-Load Szenarien
• getrennte Evolution möglich (fachl./tech.)
• detaillierte Nachverfolgung aller Vorgänge
• Total Cost of Ownership
FAZIT
#WISSENTEILEN
Die Pitfals
• Komplexität gegenüber CRUD Anwendungen
• Performance bei Event-Replay
• Seiteneffekte durch Event-Replay / Snapshot
• Eventual Consistency in Query Views
• Concurrent Writes durch Commands
• Ramp-Up Zeit
#WISSENTEILEN
Two models
to rule them all.
FAZIT
#WISSENTEILEN
Focus on
Business first!
FAZIT
#WISSENTEILEN
Schrei nach Consistency
ist meist das Fehlen eines
fachlichen Plan B!
FAZIT
#WISSENTEILEN
Microservices & JEE?
Best Friends Forever!
FAZIT
„BFF“
Best Friends Forever!
#WISSENTEILEN
#WISSENTEILEN
? # !
LARS RÖWEKAMP
CIO NEW TECHNOLOGIES
lars.roewekamp@openknowledge.de
+49 (0) 441 4082 – 0
@mobileLarson
@_openknowledge
OFFENKUNDIGGUT
KOTAKT
#WISSENTEILEN
#80: © marekuliasz– shutterstock.com
#1, #45, #79: pixabay.com
Icons in this presentation designed by “Freepik”,
BILDNACHWEISE
#WISSENTEILEN

More Related Content

What's hot

What's hot (20)

Web APIs jenseits von REST & Request/Response
Web APIs jenseits von REST & Request/ResponseWeb APIs jenseits von REST & Request/Response
Web APIs jenseits von REST & Request/Response
 
Mobile Ideation – der sanfte Weg zum mobilen Mehrwert
Mobile Ideation – der sanfte Weg zum mobilen MehrwertMobile Ideation – der sanfte Weg zum mobilen Mehrwert
Mobile Ideation – der sanfte Weg zum mobilen Mehrwert
 
Web-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/ResponseWeb-API-Design jenseits von REST und Request/Response
Web-API-Design jenseits von REST und Request/Response
 
Less Server vs. Serverless?
Less Server vs. Serverless?Less Server vs. Serverless?
Less Server vs. Serverless?
 
iOS: einheitliche Oberflächen mit Auto Layout
iOS: einheitliche Oberflächen mit Auto LayoutiOS: einheitliche Oberflächen mit Auto Layout
iOS: einheitliche Oberflächen mit Auto Layout
 
Aus der Rubrik "Spaß mit Microservices": Transaktionen
Aus der Rubrik "Spaß mit Microservices": TransaktionenAus der Rubrik "Spaß mit Microservices": Transaktionen
Aus der Rubrik "Spaß mit Microservices": Transaktionen
 
Java EE meets Microservices
Java EE meets MicroservicesJava EE meets Microservices
Java EE meets Microservices
 
Microservices Architecture: Architektur und Patterns
Microservices Architecture: Architektur und PatternsMicroservices Architecture: Architektur und Patterns
Microservices Architecture: Architektur und Patterns
 
Die Matrix: Enterprise-Architekturen jenseits von Microservices
Die Matrix: Enterprise-Architekturen jenseits von MicroservicesDie Matrix: Enterprise-Architekturen jenseits von Microservices
Die Matrix: Enterprise-Architekturen jenseits von Microservices
 
Microservices Migration: Vom Monolithen zu Microservices
Microservices Migration: Vom Monolithen zu MicroservicesMicroservices Migration: Vom Monolithen zu Microservices
Microservices Migration: Vom Monolithen zu Microservices
 
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
 
Microservices mit dem MicroProfile
Microservices mit dem MicroProfileMicroservices mit dem MicroProfile
Microservices mit dem MicroProfile
 
Spaß mit Microservices: Transaktionen
Spaß mit Microservices: TransaktionenSpaß mit Microservices: Transaktionen
Spaß mit Microservices: Transaktionen
 
Zukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit MicroservicesZukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit Microservices
 
Der perfekte Microservice
Der perfekte MicroserviceDer perfekte Microservice
Der perfekte Microservice
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Enterprise Java auf Diät
Enterprise Java auf DiätEnterprise Java auf Diät
Enterprise Java auf Diät
 
Cloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu ServerlessCloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu Serverless
 
Hands-On Microservices mit Java
Hands-On Microservices mit JavaHands-On Microservices mit Java
Hands-On Microservices mit Java
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
 

Viewers also liked

Viewers also liked (9)

Refactoring for Domain Driven Design
Refactoring for Domain Driven DesignRefactoring for Domain Driven Design
Refactoring for Domain Driven Design
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal ArchitectureDomain Driven Design and Hexagonal Architecture
Domain Driven Design and Hexagonal Architecture
 
Domain-driven design - eine Einführung
Domain-driven design - eine EinführungDomain-driven design - eine Einführung
Domain-driven design - eine Einführung
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 

Similar to CQRS, der etwas andere Architekturansatz

Similar to CQRS, der etwas andere Architekturansatz (19)

Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Mobile- & Offline-First: Mehr als nur Buzzword-Bingo
Mobile- & Offline-First: Mehr als nur Buzzword-BingoMobile- & Offline-First: Mehr als nur Buzzword-Bingo
Mobile- & Offline-First: Mehr als nur Buzzword-Bingo
 
Enterprise Java on Steroids
Enterprise Java on SteroidsEnterprise Java on Steroids
Enterprise Java on Steroids
 
Offline-first Architekturen: Wer bitte braucht schon Internet
Offline-first Architekturen: Wer bitte braucht schon InternetOffline-first Architekturen: Wer bitte braucht schon Internet
Offline-first Architekturen: Wer bitte braucht schon Internet
 
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
 
Typo3 Barcamp Usability Gesetze
Typo3 Barcamp Usability GesetzeTypo3 Barcamp Usability Gesetze
Typo3 Barcamp Usability Gesetze
 
Mittendrin statt nur dabei: Microservices und Transaktionen
Mittendrin statt nur dabei: Microservices und TransaktionenMittendrin statt nur dabei: Microservices und Transaktionen
Mittendrin statt nur dabei: Microservices und Transaktionen
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
Responsive Multichannel-E-Commerce: Vorgehen und Learnings aus der Praxis
Responsive Multichannel-E-Commerce: Vorgehen und Learnings aus der PraxisResponsive Multichannel-E-Commerce: Vorgehen und Learnings aus der Praxis
Responsive Multichannel-E-Commerce: Vorgehen und Learnings aus der Praxis
 
Rails goes SOA
Rails goes SOARails goes SOA
Rails goes SOA
 
Minimal Viable Product - ein Mythos bei Corporates!
Minimal Viable Product - ein Mythos bei Corporates!Minimal Viable Product - ein Mythos bei Corporates!
Minimal Viable Product - ein Mythos bei Corporates!
 
UX & AGILE vom SCRUM Stammtisch Graz
UX & AGILE vom SCRUM Stammtisch GrazUX & AGILE vom SCRUM Stammtisch Graz
UX & AGILE vom SCRUM Stammtisch Graz
 
E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018E-Commerce vs Architektur CodeTalks.Commerce_2018
E-Commerce vs Architektur CodeTalks.Commerce_2018
 
Service Design - Dienstleistungen erfolgreich gestalten und umsetzen (Gründer...
Service Design - Dienstleistungen erfolgreich gestalten und umsetzen (Gründer...Service Design - Dienstleistungen erfolgreich gestalten und umsetzen (Gründer...
Service Design - Dienstleistungen erfolgreich gestalten und umsetzen (Gründer...
 
The Day after
The Day afterThe Day after
The Day after
 
Quarterly Technology Briefing - Big Data - Germany
Quarterly Technology Briefing - Big Data - GermanyQuarterly Technology Briefing - Big Data - Germany
Quarterly Technology Briefing - Big Data - Germany
 
IT Outsourcing Agentur Berlin
IT Outsourcing Agentur BerlinIT Outsourcing Agentur Berlin
IT Outsourcing Agentur Berlin
 
Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT
 
Event Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best PracticesEvent Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best Practices
 

More from OPEN KNOWLEDGE GmbH

More from OPEN KNOWLEDGE GmbH (20)

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
 
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
 
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
 
Serverless Survival Guide
Serverless Survival GuideServerless Survival Guide
Serverless Survival Guide
 

CQRS, der etwas andere Architekturansatz