CQRS basierte Architekturen mit Microservices
-
Upload
michael-ploed -
Category
Technology
-
view
556 -
download
0
description
Transcript of CQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen
mitMicroservices
Michael Plöd@bitboss
Die klassische, bewährte N-Tier Software-
Architektur
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
Netzwerk
Charakteristika
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
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
3 Grobgranulares Deployment
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Client
RDBMS
Frontend-Server
Backend-Server
Datenbank-Server
? Probleme
Zahlreiche Anwendungen fahren mit der klassischen
Architektur gut
Es gibt dennoch Bereiche, in denen dieses
Architekturmodell an seine Grenzen stößt
1 Datenmodell ist ein Kompromiss
2 Skalierbarkeit
3 Hang zum Monolithen
CQRS
Command Query Responsibility Separation
!CQRS ist ein Pattern, keine Architektur
IncidentSOAPEndpoint
IncidentBusinessService
IncidentDAO
Incident!Business Model
Client
Incident DTO
Incident View Model
RDBMS
Incident ER-Model
Netzwerk
Netzwerk
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
RDBMS
Netzwerk
IncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
Einfache CQRS Architektur
Code Beispiel
Klassisches Interface
public interface IncidentManagementService {!! Incident saveIncident(Incident i);!! void updateIncident(Incident i);!! List<Incident> retrieveBySeverity(Severity s);!! Incident retriveById(Long id);!}
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);!}
1 Optimiertes Lese- und Schreib-Modell
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
2 CQRS ist gut für Event Sourcing geeignet
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
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
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
Event Sourcing ist ein Architekturstil bei dem der Zustand der Daten einer Anwendung aus
einer Sequenz von Events bestimmt wird
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“
EventHandler EventsEvents
Event SourcingIncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
Events
Select * from Insert into
3CQRS eignet sich gut für asynchrones Processing / messaging Patterns
EventHandler EventsEvents
Async CQRSIncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
Events
Select * from Insert into
Commands können asynchron prozessiert
werden
Microservices
„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
CQRS basierte Anwendungen eignen sich
hervorragend für ein Microservice-Modell
Incident CommandMicroservice
Incident QueryMicroservice
EventHandling Microservice
EventsEvents
Command und Query Split
Events
IncidentQueryEndpoint
IncidentQueryService
IncidentQueryDAO
Lese Datenhaltung
IncidentCommandEndpoint
IncidentCommandService
IncidentCommandDAO
RDBMS
1 Individuelle Skalierbarkeit
2Technologie-Freiheit für Query, Command und Event Handling Teil
3 Vermeidung von Monolithen
? Eignung
Fragen?Michael Plöd"
@bitboss"http://slideshare.net/mploed"[email protected]