SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PDF
Hilfe, ich will meinen Monolithen zurück!
PDF
Zukunftssichere Architekturen mit Microservices
PDF
Cloud Architekturen - von "less Server" zu Serverless
PDF
Microservices mit dem MicroProfile
PDF
Aus der Rubrik "Spaß mit Microservices": Transaktionen
PDF
Die Matrix: Enterprise-Architekturen jenseits von Microservices
PDF
Serverless: The Missing Manual
PDF
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
Hilfe, ich will meinen Monolithen zurück!
Zukunftssichere Architekturen mit Microservices
Cloud Architekturen - von "less Server" zu Serverless
Microservices mit dem MicroProfile
Aus der Rubrik "Spaß mit Microservices": Transaktionen
Die Matrix: Enterprise-Architekturen jenseits von Microservices
Serverless: The Missing Manual
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“

Was ist angesagt? (20)

PDF
Enterprise Java on Steroids
PDF
Mehr Sicherheit durch Automatisierung
PDF
Spaß mit Microservices: Transaktionen
PDF
Auf gehts in die Cloud: „Das kann doch nicht so schwer sein!“
PDF
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
PDF
API-Design, Microarchitecture und Testing
PDF
Serverless Survival Guide
PDF
Microservices Architecture: Architektur und Patterns
PDF
Microservices Migration: Vom Monolithen zu Microservices
PDF
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
PDF
Web-API-Design jenseits von REST und Request/Response
PDF
Less Server vs. Serverless?
PDF
Das passende Backend für meine Apps
PDF
Business-Mehrwert durch KI
PDF
Herausforderung „Multi-Channel Architecture”
PDF
CQRS, der etwas andere Architekturansatz
PDF
Supersonic Java für die Cloud: Quarkus
PDF
Herausforderung „Multi-Channel“-Architektur
PDF
Modern Lightweight Enterprise Architectures mit Java
PDF
Amazon Lightsail Webinar
Enterprise Java on Steroids
Mehr Sicherheit durch Automatisierung
Spaß mit Microservices: Transaktionen
Auf gehts in die Cloud: „Das kann doch nicht so schwer sein!“
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
API-Design, Microarchitecture und Testing
Serverless Survival Guide
Microservices Architecture: Architektur und Patterns
Microservices Migration: Vom Monolithen zu Microservices
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Web-API-Design jenseits von REST und Request/Response
Less Server vs. Serverless?
Das passende Backend für meine Apps
Business-Mehrwert durch KI
Herausforderung „Multi-Channel Architecture”
CQRS, der etwas andere Architekturansatz
Supersonic Java für die Cloud: Quarkus
Herausforderung „Multi-Channel“-Architektur
Modern Lightweight Enterprise Architectures mit Java
Amazon Lightsail Webinar
Anzeige

Ähnlich wie Shared Data in verteilten Systemen (11)

PDF
Shared Data in verteilten Architekturen
PDF
Mittendrin statt nur dabei: Microservices und Transaktionen
PDF
Hands-On Microservices mit Java
PDF
Projektbeschreibung "E-Commerce Insights Plattform für den SAP Store" 2020
PDF
E-Commerce Architektur aus Sicht eines Dienstleisters, IPC 2013
PDF
Back to the Frontend – aber nun mit Microservices
PDF
Web-API Design in Java
PDF
Der goldene Schnitt – Wie schneide ich Microservices richtig?
PDF
Web APIs jenseits von REST & Request/Response
PDF
Web-API-Design in Java
PPT
PHP im High End
Shared Data in verteilten Architekturen
Mittendrin statt nur dabei: Microservices und Transaktionen
Hands-On Microservices mit Java
Projektbeschreibung "E-Commerce Insights Plattform für den SAP Store" 2020
E-Commerce Architektur aus Sicht eines Dienstleisters, IPC 2013
Back to the Frontend – aber nun mit Microservices
Web-API Design in Java
Der goldene Schnitt – Wie schneide ich Microservices richtig?
Web APIs jenseits von REST & Request/Response
Web-API-Design in Java
PHP im High End
Anzeige

Mehr von OPEN KNOWLEDGE GmbH (16)

PPTX
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
PDF
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
PDF
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
PDF
Der Spagat zwischen BIAS und FAIRNESS (2024)
PDF
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
PPTX
Nie wieder Log-Files!
PDF
Cloud-native and Enterprise Java? Hold my beer!
PPTX
From Zero to still Zero: The most beautiful mistakes going into the cloud.
PDF
API Expand Contract
PDF
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
PDF
Machine Learning mit TensorFlow.js
PDF
KI und Architektur
PDF
It's not Rocket Science: Neuronale Netze
PDF
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
PDF
Maschinen ohne Gewissen: wenn KI auf Ethik trifft
PDF
Modern Web: Trends der Webentwicklung
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
Der Spagat zwischen BIAS und FAIRNESS (2024)
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
Nie wieder Log-Files!
Cloud-native and Enterprise Java? Hold my beer!
From Zero to still Zero: The most beautiful mistakes going into the cloud.
API Expand Contract
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Machine Learning mit TensorFlow.js
KI und Architektur
It's not Rocket Science: Neuronale Netze
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
Maschinen ohne Gewissen: wenn KI auf Ethik trifft
Modern Web: Trends der Webentwicklung

Shared Data in verteilten Systemen