Shared Data
in verteilten Architekturen
#WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
@mobileLarson
CIO New Technologies
OPEN KNOWLEDGE
Lars Röwekamp
Architecture
Microservices
Cloud
AI & ML
<
<
<
<
#WISSENTEILEN
ÜBER OPEN KNOWLEDGE
Branchenneutrale Softwareentwicklung & IT-Beratung
#WISSENTEILEN
Wo bitte liegt das
Problem
#WISSENTEILEN
MONOLITH
ACHTUNG: von Natur aus böse!
#WISSENTEILEN
MONOLITH
ACHTUNG: von Natur aus böse!
So kann ich
nicht arbeiten!
#WISSENTEILEN
MI CR O
SER VI CES
ARCHI TEC TURE
So will ich
arbeiten!
#WISSENTEILEN
MI CR O
SER VI CES
ARCHI TEC TURE
unabhängig
• entwickeln
• testen
• deployen
• skalieren
So will ich
arbeiten!
#WISSENTEILEN
Ok, es gibt
Challenges …
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
• Poly Persistence
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
• Poly Persistence
• Joins
AB
B
A
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
• Poly Persistence
• Joins
• Redundanz
A‘‘
A‘
A
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
• Poly Persistence
• Joins
• Redundanz
• Integrität
A B
#WISSENTEILEN
Ok, es gibt
Challenges …
• DS per Service
• Poly Persistence
• Joins
• Redundanz
• Integrität
• Konsistenz
A B
TX
Hilfe, ich will meine
monolithische
Database
zurück!
#WISSENTEILEN
Halt, nicht so schnell!
Lösungen
müssen her.
#WISSENTEILEN
JOINS
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
B
A
Joins
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
AB
B
A
Joins
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
Anforderung:
Übersicht der letzten Bestellungen eines Kunden anzeigen
#WISSENTEILEN
Cust
Orders
GET customerorders/123 …
Konzept:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht.
#WISSENTEILEN
Cust
Orders
GET customerorders/123 …
Konzept:
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
#WISSENTEILEN
Lösungsidee:
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 …
#WISSENTEILEN
Lösungsidee:
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
#WISSENTEILEN
Koordination der Aufrufe
Lösungsidee:
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
#WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Lösungsidee:
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
#WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
Lösungsidee:
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
#WISSENTEILEN
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
btw: starre Kopplung
Lösungsidee:
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
!
#WISSENTEILEN
Cust
Orders
Lösungsidee #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
Herausforderung:
Die dafür benötigten
Infos der Kunden und
Bestellungen liegen in
unterschiedlichen
Services.
#WISSENTEILEN
Cust
Orders
Orders
Customer
Lösungsidee #2:
Ein spezieller Service
CustOrders hält die
gewünschte Übersicht in
einer eigenen DB vor.*
Herausforderung #2:
Änderungen an den
Originaldaten müssen
propagiert werden.
?
* Database-per-Service Pattern
Data change
benötigte Daten von
Customer & Order
#WISSENTEILEN
Cust
Orders
Orders
Customer
Data change
benötigte Daten von
Customer & Order
Domain Event:
„Order changed“
Lösungsidee #2+:
Der CustOrders Service
wird via Domänen-Event
über die Änderung
“informiert“.
Herausforderung #2:
Änderungen an den
Originaldaten müssen
propagiert werden.
*Integration der Daten
lesend via Replikat
schreibend via Data Owner
#WISSENTEILEN
Cust
Orders
Orders
Customer
*Integration der Daten
lesend via optimiertem Replikat
schreibend via Data Owner
Data change
Domain Event:
„Order changed“
„Materialized View“*
CustumerOrders
Lösungsidee #2+:
Der CustOrders Service
wird via Domänen-Event
über die Änderung
“informiert“.
Herausforderung #2:
Änderungen an den
Originaldaten müssen
propagiert werden.
#WISSENTEILEN
Cust
Orders
Orders
Customer
Data change
Domain Event:
„Order changed“
Lösungsidee #2+:
Der CustOrders Service
wird via Domänen-Event
über die Änderung
“informiert“.
Herausforderung #2:
Ä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!
#WISSENTEILEN
Cust
Orders
Orders
Customer
Data change
Domain Event:
„Order changed“
Lösungsidee #2+:
Der CustOrders Service
wird via Domänen-Event
über die Änderung
“informiert“.
Herausforderung #2:
Ä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
#WISSENTEILEN
Redundanz
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
A
Redundanz
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
A‘‘
A‘
A
Redundanz
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
Eine einzelne
Information genau
an einem Ort*
*How to survive working with Data?
#WISSENTEILEN
Anforderung:
Aufgeben einer Bestellung eines Kunden
#WISSENTEILEN
Checkout
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Orders
#WISSENTEILEN
Checkout
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Orders
Herausforderung:
Wie kommen die notwendigen
Daten zum Checkout-Service?
#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
#WISSENTEILEN
Checkout
POST https://ok-shop.de/orders
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
#WISSENTEILEN
Checkout
201 created
Location: …/orders/1234
Orders
Preferred Delivery Address
Preferred Payment Method
Konzept:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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.
#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
#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.
#WISSENTEILEN
Integrität
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
A B
Integrität
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
A B
Integrität
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
A B
Integrität
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
Anforderung:
Übersicht der letzten Bestellungen eines Kunden anzeigen
#WISSENTEILEN
Cust
Orders
Orders
Customer
GET customerorders/123 …
Ausgangssituation:
Kundendaten und
zugehörige Bestellungen
sind in unterschiedlichen
Services abgelegt.
*API Composition Pattern
*
Customer 123 Orders of Customer 123
#WISSENTEILEN
Cust
Orders
Orders
Customer
Ausgangssituation:
Kundendaten und
zugehörige Bestellungen
sind in unterschiedlichen
Services abgelegt.
Herausforderung:
Ein Kunde wird gelöscht.
Customer 123 Orders of Customer 123
#WISSENTEILEN
Cust
Orders
Orders
Customer
Ausgangssituation:
Kundendaten und
zugehörige Bestellungen
sind in unterschiedlichen
Services abgelegt.
Herausforderung:
Ein Kunde wird gelöscht.
DELETE customer/123 Was passiert mit
den Bestellungen
von Kunde 123?
Customer 123 Orders of Customer 123
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Orders of Customer 123
Idee:
Der Bestell-Service wird
via Domänen-Event über
Löschung des Kunden
Informiert.
Customer 123
Integrity out of sync
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Orders of Customer 123
Idee:
Der Bestell-Service wird
via Domänen-Event über
Löschung des Kunden
Informiert.
Customer 123
Integrity out of sync*
Customer MQ
customer 123 deleted
*eventual integrity
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Orders of Customer 123
Idee:
Der Bestell-Service wird
via Domänen-Event über
Löschung des Kunden
Informiert.
Customer 123
Customer MQ customer 123 deleted
Integrity out of sync*
*eventual integrity
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Ist die so entstehende
Eventual Integrity
fachlich akzeptabel?
Wenn ja, alles OK.
Wenn nein, …
Orders of Customer 123
Idee:
Der Bestell-Service wird
via Domänen-Event über
Löschung des Kunden
Informiert.
Customer 123
Integrity in sync
Customer MQ
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
DELETE customer/123
Customer 123 Orders of Customer 123
*
*als gelöscht markiert
Idee #2:
Der Kunde wird lediglich
als gelöscht markiert und
die APIs Bedarf angepasst.
#WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Der Kunde wird lediglich
als gelöscht markiert und
die APIs Bedarf angepasst.
Herausforderung:
Ein Kunde wird gelöscht.
Customer 123 Orders of Customer 123
GET customerorders/123 …
*
*als gelöscht markiert
#WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Der Kunde wird lediglich
als gelöscht markiert und
die APIs Bedarf angepasst.
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
#WISSENTEILEN
Cust
Orders
Orders
Customer
Idee #2:
Der Kunde wird lediglich
als gelöscht markiert und
die APIs Bedarf angepasst.
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
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
DELETE customer/123
Customer 123 Orders of Customer 123
*
*in einer Transaktion löschen
Idee #3:
Kunde und zugehörige
Bestellungen in einer TX
löschen.
*
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
DELETE customer/123
Customer 123 Orders of Customer 123
Idee #3:
Kunde und zugehörige
Bestellungen in einer TX
löschen.
TX
#WISSENTEILEN
Dein Ernst? Kunden und
zugehörige Bestellungen
in einer TX löschen?
#WISSENTEILEN
Konsistenz
von Daten
über Servicegrenzen hinweg
#WISSENTEILEN
Konsistenz
von Daten
über Servicegrenzen hinweg
A B
#WISSENTEILEN
Konsistenz
von Daten
über Servicegrenzen hinweg
A B
TX
#WISSENTEILEN
Transaktionen*
sichern Konsistenz
* Transactions vs. Database-per-Service Pattern
#WISSENTEILEN
Die Alternative
aka „Plan B“*
* Transactions vs. Eventual Consistency
#WISSENTEILEN
The Real World is
not transactional!
#WISSENTEILEN
The Online World is
not transactional!
#WISSENTEILEN
#WISSENTEILEN
Order
Service
Inventory
Service
#2
#WISSENTEILEN
The Optimist
„Es wird schon irgendwie gutgehen.“
Strategie #1
#WISSENTEILEN
Order
Service
Inventory
Service
checkOut
#2
The
Optimist
#WISSENTEILEN
Order
Service
Inventory
Service
checkOut
#2
order-id xyz
The
Optimist
#WISSENTEILEN
The
Optimist
Order
Service
Inventory
Service
#1
decrement
checkOut
order-id xyz
#WISSENTEILEN
The Fortune-Teller
„Es wird alles gut, vertraue mir!“
Strategie #2
#WISSENTEILEN
The
Fortune-Teller
Order
Service
Inventory
Service
#2
#4
checkOut
last known value
of items available:
#WISSENTEILEN
The
Fortune-Teller
Order
Service
Inventory
Service
#2
#4
checkOut
order-id xyz
last known value
of items available:
#WISSENTEILEN
The
Fortune-Teller
Order
Service
Inventory
Service
#1
decrement
#1
checkOut
order-id xyz
last known value
of items available:
#WISSENTEILEN
The Safeguard
„Ich frage besser noch mal nach!“
Strategie #3
#WISSENTEILEN
The
Safeguard
Order
Service
Inventory
Service
#2
#4
last known value
of items available:
checkOut
#WISSENTEILEN
The
Safeguard
Order
Service
Inventory
Service
#2
#4
last known value
of items available:
checkOut
inventory?
#WISSENTEILEN
The
Safeguard
Order
Service
Inventory
Service
#2
#2
last known value
of items available:
checkOut
inventory?
2 items left!
#WISSENTEILEN
The
Safeguard
Order
Service
Inventory
Service
#2
#2
last known value
of items available:
checkOut
order-id xyz
inventory?
2 items left!
#WISSENTEILEN
The
Safeguard
Order
Service
Inventory
Service
#1
#1
last known value
of items available:
decrement
checkOut
order-id xyz
#WISSENTEILEN
The Plan “B“
„Es gibt immer eine Alternative!“
Strategie #4
#WISSENTEILEN
Order
Service
Inventory
Service
#0
checkOut
#1
Plan „B“
last known value
of items available:
#WISSENTEILEN
Order
Service
Inventory
Service
#0
checkOut
#1
„Ist der
Datenstand
konsistent?“
Plan „B“
last known value
of items available:
#WISSENTEILEN
Order
Service
Inventory
Service
#0
checkOut
„Kann ich
pünktlich
liefern?“*
Plan „B“
last known value
of items available:
#1
#WISSENTEILEN
Order
Service
Inventory
Service
#0
checkOut
„Kann ich
pünktlich
liefern?“*
* … und ist der Datenstand
letztendlich konsistent
(aka eventual consistency)?
Plan „B“
last known value
of items available:
#0
#WISSENTEILEN
#WISSENTEILEN
Plan B? Schön & gut, aber ich
brauche meine Transaktionen!
#WISSENTEILEN
Konsistenz
von Daten
über Servicegrenzen hinweg
A B
TX
#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.
“
#WISSENTEILEN
(Quelle: Microservices Pattern, Chris Richardson)
#WISSENTEILEN
(Quelle: Microservices Pattern, Chris Richardson)
#WISSENTEILEN
Wie garantiere ich
die Konsistenz der Daten
über Servicegrenzen
hinweg?
#WISSENTEILEN
TX via
SAGA Pattern
#WISSENTEILEN
Quelle:
SAGAS, Hector Garcia-Molina
& Kenneth Salem, January 1987
Die
„Saga“
Strategie
#WISSENTEILEN
Verteilte Transaktionen via SAGAs
SAGA Idee:
Abbilden einer verteilten fachlichen
Transaktion durch eine Abfolge lokaler
technischer Transitionen / Transaktionen
#WISSENTEILEN
Verteilte Transaktionen via SAGAs
#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
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Die
„Saga“
Strategie
Invariante:
sum(open order)
is smaller or equals
customer.creditLimit
#WISSENTEILEN
Was ihr
mitnehmen
solltet.
Wow, das ist ja
wirklich einfach.
Was kann da bitte
schon schiefgehen?
#WISSENTEILEN
Die
„Saga“
Strategie
#WISSENTEILEN
Die
„Saga“
Strategie
#WISSENTEILEN
Die
„Saga“
Strategie
CA = Compensation Action a.k.a.
Compensation Transaction
#WISSENTEILEN
Die
„Saga“
Strategie
CA = Compensation Action a.k.a.
Compensation Transaction
„Every Ti has its Ci“
#WISSENTEILEN
Verteilte Transaktionen via SAGAs
• wohldefinierte Abfolge von Compensation
Actions realisieren verteiltes Rollback
• Compensation Actions sind fachlicher Code
und somit Applikationslogik
• Abfolge von lokalen TXs & CAs kann
beliebig komplex werden!
#WISSENTEILEN
Frage:
Wie koordiniert
man das Ganze?
#WISSENTEILEN
Steuerung von SAGAs
TX 1
TX 2
TX 3
TX 4
TX 5
TX 6
order = PENDING
item = PENDING
APPORVED
APPORVED
#WISSENTEILEN
Steuerung von SAGAs
• Choreographie
• Orchestrierung
#WISSENTEILEN
Steuerung von SAGAs
• Choreographie
• Orchestrierung
#WISSENTEILEN
Choreographie von SAGAs
• implizite Sequenzsteuerung
• verteilte Koordination durch Eventfluss
• „Wissen“ liegt bei den beteiligten Services
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Saga via
Choreography
#WISSENTEILEN
Choreographie von SAGAs
• pro
lose gekoppelt (Teilnehmer kennen sich nicht)
relativ einfach zu implementieren
• contra
i.d.R. zyklische Abhängigkeiten
erhöhte Komplexität im Domänen-Modell
kein zentraler Business-Code (wann valide?)
#WISSENTEILEN
Choreographie von SAGAs
• btw lose Kopplung
Teilnehmer kennen sich zwar nicht, wissen aber
genau, was bei einem Event zu tun ist und wie
im Anschluss – durch ein eigenes Event – zu
antworten ist (a.k.a. pseudo lose Kopplung)
#WISSENTEILEN
Steuerung von SAGAs
• Choreographie
• Orchestrierung
#WISSENTEILEN
Orchestrierung von SAGAs
• explizite Sequenzsteuerung
• zentraler SAGA-Koordinator im Service
• Command / Handler Pattern
• beteiligte Services haben kein „Wissen“
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Saga via Orchestration
#WISSENTEILEN
Orchestration von SAGAs
• pro
Logik ist einfach(er) zu verstehen
fachliche Kopplung nur unidirektional
keine zyklischen Abhängigkeiten
Separation of Concerns (Domain Logic vs. TX)
#WISSENTEILEN
Orchestration von SAGAs
• contra
„Smart Orchestrator & Dump Services“ Pattern,
d.h. Risiko, zu viel Business Logic im
Orchestrator zu zentralisieren
#WISSENTEILEN
Orchestration von SAGAs
• btw Orchestrator
Will man den wirklich selber bauen? Nein!
Alternative 1: Saga Framework
Alternative 2: Lightweight Workflow Engine
#WISSENTEILEN
Frage:
Und das kann
funktionieren?
#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
#WISSENTEILEN
Konsistenz von Daten und Nachrichten
#WISSENTEILEN
Konsistenz von Daten und Nachrichten
#WISSENTEILEN
Konsistenz von Daten und Nachrichten
#WISSENTEILEN
Konsistenz von Daten und Nachrichten
#WISSENTEILEN
Konsistenz von Daten und Nachrichten
#WISSENTEILEN
Fehlende Isolation
fehlende Isolation* kann zu Anomalien führen
(lost updates, dirty reads, event race condition)
Anomalien müssen soweit minimiert bzw.
verhindert werden, dass sie fachlich vertretbar
sind!
* SAGA = ACD (ACID ohne Isolation)
#WISSENTEILEN
Fehlende Isolation: „lost updates“
create order SAGA
ORDER
create
#WISSENTEILEN
Fehlende Isolation: „lost updates“
create order SAGA
ORDER
create
cancel order SAGA
cancel
#WISSENTEILEN
Fehlende Isolation: „lost updates“
create order SAGA
ORDER
create approve
cancel order SAGA
cancel
#WISSENTEILEN
Fehlende Isolation: „dirty reads“
cancel order SAGA
CUSTOMER
increase credit
(from 0 to 100)
order value = 100
#WISSENTEILEN
Fehlende Isolation: „dirty reads“
cancel order SAGA
CUSTOMER
increase credit
(from 0 to 100)
delivery can‘t
be stopped
- CA needed!
#WISSENTEILEN
Fehlende Isolation: „dirty reads“
cancel order SAGA
CUSTOMER
increase credit
(from 0 to 100)
delivery can‘t
be stopped
- CA needed!
decrease credit (CA)
(from 100 to 0)
#WISSENTEILEN
Fehlende Isolation: „dirty reads“
cancel order SAGA
CUSTOMER
create order SAGA
decrease credit
(to 10)
read credit
(100)
increase credit
(from 0 to 100)
decrease credit (CA)
(from 100 to 0)
#WISSENTEILEN
Fehlende Isolation: „dirty reads“
cancel order SAGA
CUSTOMER
create order SAGA
decrease credit
(to 10)
read credit
(100)
increase credit
(from 0 to 100)
decrease credit (CA)
(from 100 to 0)
#WISSENTEILEN
Was ihr
mitnehmen
solltet. Cool,
verstanden.
#WISSENTEILEN
Was ihr
mitnehmen
solltet.
#WISSENTEILEN
„Microservices ohne
Database-per-Service
macht keinen Sinn.“
#WISSENTEILEN
„Es kann nur
eine gültige Quelle
je Entität geben.“
#WISSENTEILEN
„Denke in
fachlichen
statt in technischen
Transaktionen.“
#WISSENTEILEN
„Denke in Domänen
statt in Entitäten.“
#WISSENTEILEN
„Nutze
Domänen-Events
zur Kommunikation von
Entitäten-Änderungen.“
#WISSENTEILEN
„Verwende
Aggregation
zur Kommunikation von
Massenänderungen.“
#WISSENTEILEN
Shared Data in
verteilten Architekturen
Lars Röwekamp | @mobileLarson
BESTEN DANK!
#WISSENTEILEN
Microservices Pattern
#WISSENTEILEN
Shared Data in
verteilten Architekturen
Lars Röwekamp | @mobileLarson
Feedback
erwünscht!
#WISSENTEILEN
Microservices Pattern
#WISSENTEILEN
© Sharon McCutcheon – pexels.com (Folie 01)
© Monstera – pexels.com (Folie 04)
© Andrea Piascquadio – pexels.com (Folie 21, 22, 248)
© Gert Altmann – pexels.com (Folie 177)
Alle weiteren Bilder und Icons der Präsentation sind entweder von pexels.com,
pixabay.com, unsplash.com, flaticon.com oder von mir selbst erstellt.
Bildernachweis

Shared Data in verteilten Systemen