Download - CQRS basierte Architekturen mit Microservices

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]