cqrs basierte architekturen mit microservices

38
CQRS basierte Architekturen mit Microservices

Upload: michael-ploed

Post on 28-Nov-2014

565 views

Category:

Technology


0 download

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

Page 1: CQRS basierte Architekturen mit Microservices

CQRS basierte Architekturen

mitMicroservices

Page 2: CQRS basierte Architekturen mit Microservices

Michael Plöd@bitboss

Page 3: CQRS basierte Architekturen mit Microservices

Die klassische, bewährte N-Tier Software-

Architektur

Page 4: CQRS basierte Architekturen mit Microservices

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

Charakteristika

Page 6: CQRS basierte Architekturen mit Microservices

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

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

3 Grobgranulares Deployment

IncidentSOAPEndpoint

IncidentBusinessService

IncidentDAO

Client

RDBMS

Frontend-Server

Backend-Server

Datenbank-Server

Page 9: CQRS basierte Architekturen mit Microservices

? Probleme

Page 10: CQRS basierte Architekturen mit Microservices

Zahlreiche Anwendungen fahren mit der klassischen

Architektur gut

Page 11: CQRS basierte Architekturen mit Microservices

Es gibt dennoch Bereiche, in denen dieses

Architekturmodell an seine Grenzen stößt

Page 12: CQRS basierte Architekturen mit Microservices

1 Datenmodell ist ein Kompromiss

2 Skalierbarkeit

3 Hang zum Monolithen

Page 13: CQRS basierte Architekturen mit Microservices

CQRS

Page 14: CQRS basierte Architekturen mit Microservices

Command Query Responsibility Separation

Page 15: CQRS basierte Architekturen mit Microservices

!CQRS ist ein Pattern, keine Architektur

Page 16: CQRS basierte Architekturen mit Microservices

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

IncidentQueryEndpoint

IncidentQueryService

IncidentQueryDAO

RDBMS

Netzwerk

IncidentCommandEndpoint

IncidentCommandService

IncidentCommandDAO

Einfache CQRS Architektur

Page 18: CQRS basierte Architekturen mit Microservices

Code Beispiel

Page 19: CQRS basierte Architekturen mit Microservices

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

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

1 Optimiertes Lese- und Schreib-Modell

Page 22: CQRS basierte Architekturen mit Microservices

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

2 CQRS ist gut für Event Sourcing geeignet

Page 24: CQRS basierte Architekturen mit Microservices

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

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

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

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

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

EventHandler EventsEvents

Event SourcingIncidentCommandEndpoint

IncidentCommandService

IncidentCommandDAO

RDBMS

IncidentQueryEndpoint

IncidentQueryService

IncidentQueryDAO

Lese Datenhaltung

Events

Select * from Insert into

Page 30: CQRS basierte Architekturen mit Microservices

3CQRS eignet sich gut für asynchrones Processing / messaging Patterns

Page 31: CQRS basierte Architekturen mit Microservices

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

Microservices

Page 33: CQRS basierte Architekturen mit 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

Page 34: CQRS basierte Architekturen mit Microservices

CQRS basierte Anwendungen eignen sich

hervorragend für ein Microservice-Modell

Page 35: CQRS basierte Architekturen mit Microservices

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

1 Individuelle Skalierbarkeit

2Technologie-Freiheit für Query, Command und Event Handling Teil

3 Vermeidung von Monolithen

Page 37: CQRS basierte Architekturen mit Microservices

? Eignung

Page 38: CQRS basierte Architekturen mit Microservices

Fragen?Michael Plöd"

@bitboss"http://slideshare.net/mploed"[email protected]