cqrs basierte architekturen mit microservices
DESCRIPTION
Die Themen Command Query Responsibility Segregation, kurz CQRS, und Microservices sind derzeit in aller Munde. Häufig werden die beiden Themen jedoch getrennt besprochen. So wird CQRS als neues Architekturpattern gehandelt, welches eine Abkehr vom klassischen Schichtmodell darstellt. Parallel dazu werden Microservices als modernes Architektur- und Deploymentmodell vorgestellt, welches zum einen die bestehenden Probleme der klassischen Application-Server Welt adressiert und welches sich als neue Denkweise für Service Orientierte Architekturen empfiehlt. Beide Ansätze sind für sich alleine betrachtet sehr interessant allerdings bilden sie vor allem in Kombination miteinander ein äusserst attraktives Modell für künftige IT-Landschaften. Der Vortrag wird dieses Modell vorstellen. Des Weiteren zielt der Vortrag auf eine kritische Auseinandersetzung mit diesem Architekturmodell ab.TRANSCRIPT
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]