Eine auf Microservices basierende Architektur umzusetzen, bedeutet, dass auch die Datenhaltung auf die verschiedenen Services verteilt werden muss. Was aber bedeutet das in der Praxis? Was ist, wenn Daten einer Entität - vollständig oder in Teilen - in mehreren Services benötigt werden? Wie wird referenzielle Integrität über mehrere Services hinweg realisiert? Wie lassen sich serviceübergreifende Transaktionen realisieren? Dies sind nur einige von vielen Fragen, die im Rahmen der Session beantwortet werden. So viel vorab: Umdenken ist gefragt!
Nur wenn die Auftrennung der Fachlichkeit in verschiedenen Microservices auch konsequent bis hin zur Ebene der Datenhaltung vollzogen wird, kann die angestrebte Unabhängigkeit der Services zur Entwicklungs- und Laufzeit erreicht werden. Ohne diesen Schritt dagegen würde sich das Problem der starren Kopplung und der damit einhergehenden Abhängigkeiten einer monolithischen Architektur lediglich um eine Schicht nach unten, in die Datenbank, verlagern. Was aber bedeutet das konsequente Einhalten des Database-per-Service-Patterns und einer damit einhergehenden Verteilung der Datenhaltung in der Praxis? Die Session zeigt die wesentlichen Herausforderungen auf und liefert passende Lösungsansätze.
Cloud Architekturen - von "less Server" zu Serverless
Shared Data in verteilten Architekturen
1. Shared Data
in verteilten Architekturen
#WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
info@openknowledge.de.
Shared Data
in verteilten Architekturen
#WISSENTEILEN
Lars Röwekamp | @mobileLarson
2. #WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
@mobileLarson
CIO New Technologies
OPEN KNOWLEDGE
Lars Röwekamp
Cloud
AI & ML
Architecture
Microservices
<
<
<
<
3. #WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
OPEN KNOWLEDGE
@_openknowledge
Und da arbeite ich >
23. #WISSENTEILEN
Cust
Orders
GET customerorders/123 …
Idee:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
? Orders
Customer
24. #WISSENTEILEN
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
GET customerorders/123 …
25. #WISSENTEILEN
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
GET customerorders/123 …
Aufruf der
Data Owner APIs*
Data Owner
*Integration der Daten
lesend via Data Owner
schreibend via Data Owner
26. #WISSENTEILEN
Koordination der Aufrufe
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
27. #WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
28. #WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
29. #WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
btw: starre Kopplung
Lösung:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht
via API Composition.
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
Cust
Orders
Orders
Customer
!
30. #WISSENTEILEN
Cust
Orders
Idee #2:
Ein spezieller Service
CustOrders hält die
gewünschte Übersicht in
einer eigenen DB vor.*
GET customerorders/123 …
* Database-per-Service Pattern
benötigte Daten von
Customer & Order
31. #WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Ein spezieller Service
CustOrders hält die
gewünschte Übersicht in
einer eigenen DB vor.*
Herausforderung:
Änderungen an den
Originaldaten müssen
propagiert werden.
?
* Database-per-Service Pattern
Data change
benötigte Daten von
Customer & Order
32. #WISSENTEILEN
Cust
Orders
Orders
Customer
Lösung #2:
Der Service CustOrders wird
via Domänen-Events über
Änderungen „informiert“.
Herausforderung:
Änderungen an den
Originaldaten müssen
propagiert werden.
*Integration der Daten
lesend via Replikat
schreibend via Data Owner
Data change
benötigte Daten von
Customer & Order
Domain Event:
„Order changed“
33. #WISSENTEILEN
Cust
Orders
Orders
Customer
Lösung #2:
Der Service CustOrders wird
via Domänen-Events über
Änderungen „informiert“
(aka CQRS*).
Herausforderung:
Änderungen an den
Originaldaten müssen
propagiert werden.
*Integration der Daten
lesend via optimiertem Replikat
schreibend via Data Owner
Data change
Domain Event:
„Order changed“
Materialized View*
CustumerOrders
34. #WISSENTEILEN
Cust
Orders
Orders
Customer
Data change
Domain Event:
„Order changed“
Lösung #2:
Der Service CustOrders wird
via Domänen-Events über
Änderungen „informiert“.
Herausforderung:
Änderungen an den
Originaldaten müssen
propagiert werden.
Order NEW
Order OLD
WARNING:
Eventual Consistency, d.h.
Original und Replikat sind
für einen kurzen Augenblick
out-of-sync!
35. #WISSENTEILEN
Cust
Orders
Orders
Customer
Data change
Domain Event:
„Order changed“
Lösung #2:
Der Service CustOrders wird
via Domänen-Events über
Änderungen „informiert“.
Herausforderung:
Änderungen an den
Originaldaten müssen
propagiert werden.
Dies führt zu Eventual
Consistency. Ist das
fachlich ein Problem?
Wenn nicht, alles OK! Order NEW
Order OLD
43. #WISSENTEILEN
Checkout
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Datenversorgung:
Zu dem Zweck hält der
Checkout-Service ein
Replikat der notwendigen
Daten*.
Orders
Preferred Delivery Address
Preferred Payment Method
*ggf. als eigene Domänen-Repräsentation
46. #WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Herausforderung:
Die bevorzugte Lieferadresse
bzw. Zahlungsmethode soll
nicht zur Anwendung kommen.
47. #WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Alternative Adresse:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer alternativen
Adresse herangezogen.
48. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
49. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
GET …/addresses
(list all addresses)
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
50. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
200 ok
[
„list of
addresses“
]
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
51. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
PUT …/addresses/123
(change pref. delivery address)
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
52. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
204 no content
[ ]
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
53. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
54. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
55. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery address changed
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
56. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
57. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Lösungsidee:
… im „Ausnahmefall“ wird
der Address-Service zur
Auswahl einer anderen
Adresse herangezogen.
58. #WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Herausforderung:
Eine neue Adresse, die
bisher dem System noch
nicht bekannt ist, soll zur
Anwendung kommen.
59. #WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Neue Adresse anlegen:
… auch neue Adressen
werden ausschließlich
über den Data-Owner
Address-Service angelegt
und im Anschluss repliziert.
60. #WISSENTEILEN
Address
Lösungsidee:
… auch neue Adressen
werden ausschließlich
über den Data-Owner
Address-Service angelegt
und im Anschluss repliziert.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
NEW Preferred Delivery Address
new Address
61. #WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Lösungsidee:
… auch neue Adressen
werden ausschließlich
über den Data-Owner
Address-Service angelegt
und im Anschluss repliziert.
76. #WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Kunde als gelöscht
markieren und APIs
bei Bedarf adaptieren
Herausforderung:
Ein Kunde wird gelöscht.
Customer 123 Orders of Customer 123
GET customerorders/123 …
*
*als gelöscht markiert
Kunde 123 im Status „aktiv“?
GET customer/123
200
OK
77. #WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Kunde als gelöscht
markieren und APIs
bei Bedarf adaptieren
Herausforderung:
Ein Kunde wird gelöscht.
Customer 123 Orders of Customer 123
GET customerorders/123 …
*
*als gelöscht markiert
Kunde 123 im Status „aktiv“?
GET customer/123
404
Not Found
111. #WISSENTEILEN
DISCLAIMER
Im folgenden Beispiel wird davon ausgegangen,
dass die gezeigten Services bereits „optimal“
geschnitten sind und somit aus Sicht der
fachlichen Modellierung keine weitere
Optimierung möglich ist.
“
112. #WISSENTEILEN
Verteilte Transaktionen via SAGAs
SAGA Idee:
Abbilden einer verteilten fachlichen
Transaktion durch eine Abfolge lokaler
technischer Transitionen / Transaktionen
114. #WISSENTEILEN
Verteilte Transaktionen via SAGAs
• Konsistenz von Daten zwischen Services
wird durch eine wohldefinierte Abfolge lokaler
Transitionen/Transaktionen erreicht.
• Service kommuniziert „erfolgreiche“ lokale
Transition/Transaktion an den nächsten
beteiligten Service*.
*mehr dazu später
115. #WISSENTEILEN
Konsistenz von Daten und Nachrichten
Services veröffentlichen „Erfolgs“-Nachricht
direkt nach lokaler TX
lokale TX und „Erfolgs“-Nachricht sind
atomare Einheit aus Sicht des Services
*Message Broker buffered bei Bedarf die Message