![Page 1: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/1.jpg)
CQRS basierte Architekturen
mitMicroservices
![Page 2: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/2.jpg)
Michael Plöd@bitboss
![Page 3: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/3.jpg)
Die klassische, bewährte N-Tier Software-
Architektur
![Page 4: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/4.jpg)
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
Netzwerk
![Page 5: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/5.jpg)
Charakteristika
![Page 6: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/6.jpg)
1Wir lesen und schreiben Daten über den identischen Weg
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
NetzwerkW
RITE
REA
D
![Page 7: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/7.jpg)
2Wir verwenden für Lesen und Schreiben das gleiche Modell
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
Netzwerk
![Page 8: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/8.jpg)
3 Grobgranulares Deployment
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Client
RDBMS
Frontend-Server
Backend-Server
Datenbank-Server
![Page 9: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/9.jpg)
? Probleme
![Page 10: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/10.jpg)
Zahlreiche Anwendungen fahren mit der klassischen
Architektur gut
![Page 11: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/11.jpg)
Es gibt dennoch Bereiche, in denen dieses
Architekturmodell an seine Grenzen stößt
![Page 12: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/12.jpg)
1 Datenmodell ist ein Kompromiss
2 Skalierbarkeit
3 Hang zum Monolithen
![Page 13: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/13.jpg)
CQRS
![Page 14: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/14.jpg)
Command Query Responsibility Separation
![Page 15: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/15.jpg)
!CQRS ist ein Pattern, keine Architektur
![Page 16: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/16.jpg)
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
Netzwerk
![Page 17: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/17.jpg)
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
RDBMS
Netzwerk
IncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
Einfache CQRS Architektur
![Page 18: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/18.jpg)
Code Beispiel
![Page 19: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/19.jpg)
Klassisches Interface
public interface IncidentManagementService {!! Incident saveIncident(Incident i);!! void updateIncident(Incident i);!! List<Incident> retrieveBySeverity(Severity s);!! Incident retriveById(Long id);!}
![Page 20: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/20.jpg)
CQRS Interface
public interface IncidentManagementQueryService {!! List<Incident> retrieveBySeverity(Severity s);!! Incident retriveById(Long id);!}
public interface IncidentManagementCommandService {!! Incident saveIncident(Incident i);!! void updateIncident(Incident i);!}
![Page 21: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/21.jpg)
1 Optimiertes Lese- und Schreib-Modell
![Page 22: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/22.jpg)
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
RDBMS
Netzwerk
IncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
Getrenntes Model
Read Model
Write Model
Achtung: aktuell laufen beide Models noch auf ein
gemeinsames Datenbank-Modell zusammen
![Page 23: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/23.jpg)
2 CQRS ist gut für Event Sourcing geeignet
![Page 24: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/24.jpg)
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 25: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/25.jpg)
IncidentRestController
IncidentBusinessService
IncidentDAO
Incident
ID USER_ID DATUM TEXT1 23423 11.03.2014 Maus ist kaputt"2 67454 12.03.2014 EMail Empfang3 93729 12.03.2014 Monitor defekt… … … …
Update
![Page 26: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/26.jpg)
IncidentRestController
IncidentBusinessService
IncidentDAO
Incident
ID USER_ID DATUM TEXT1 23423 11.03.2014 Maus ist kaputt"2 67454 12.03.2014 EMail Empfang3 93729 12.03.2014 Monitor defekt… … … …
Update
Der Datensatz wird direkt geändert. Keine Historie
![Page 27: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/27.jpg)
Event Sourcing ist ein Architekturstil bei dem der Zustand der Daten einer Anwendung aus
einer Sequenz von Events bestimmt wird
![Page 28: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/28.jpg)
IncidentCreateEvent incidentNumber: 1 userNumber: 23423!timestamp: 11.03.2014 12:23:23 text: „Maus defekt“!status: „offen“
Event Sourcing
IncidentUpdateEvent incidentNumber: 1 text: „Maus ist Kaputt“
IncidentUpdateEvent incidentNumber: 1 solution: „Neue Maus“!status: „geschlossen“
![Page 29: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/29.jpg)
EventHandler EventsEvents
Event SourcingIncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
Events
Select * from Insert into
![Page 30: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/30.jpg)
3CQRS eignet sich gut für asynchrones Processing / messaging Patterns
![Page 31: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/31.jpg)
EventHandler EventsEvents
Async CQRSIncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
Events
Select * from Insert into
Commands können asynchron prozessiert
werden
![Page 32: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/32.jpg)
Microservices
![Page 33: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/33.jpg)
„In short, the microservice architectural style is an approach to developing a single application as a
suite of small services, each running in its own process and communicating
with lightweight mechanisms, often an HTTP resource API.“
Martin Fowler:
http://martinfowler.com/articles/microservices.html
![Page 34: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/34.jpg)
CQRS basierte Anwendungen eignen sich
hervorragend für ein Microservice-Modell
![Page 35: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/35.jpg)
Incident CommandMicroservice
Incident QueryMicroservice
EventHandling Microservice
EventsEvents
Command und Query Split
Events
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
IncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
![Page 36: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/36.jpg)
1 Individuelle Skalierbarkeit
2Technologie-Freiheit für Query, Command und Event Handling Teil
3 Vermeidung von Monolithen
![Page 37: CQRS basierte Architekturen mit Microservices](https://reader033.vdocuments.us/reader033/viewer/2022050804/547e8893b4af9fda158b5646/html5/thumbnails/37.jpg)
? Eignung