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
#WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
@mobileLarson
CIO New Technologies
OPEN KNOWLEDGE
Lars Röwekamp
Cloud
AI & ML
Architecture
Microservices
<
<
<
<
#WISSENTEILEN
Lars Röwekamp (CIO New Technologies)
@mobileLarson | @_openknowledge
OPEN KNOWLEDGE
@_openknowledge
Und da arbeite ich >
#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
So will ich
arbeiten!
Microservices
Architecture
#WISSENTEILEN
So will ich
arbeiten!
unabhängig
• entwickeln
• testen
• deployen
• skalieren
#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
Datenbank
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 …
Idee:
Ein spezieller Service
CustOrders liefert die
gewünschte Übersicht.
#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
#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 …
#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
#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
#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
#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
#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
!
#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
#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
#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“
#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
#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!
#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
#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*
* so kundenfreundlich und effizient wie möglich
#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:
Den Bestell-Service via
Domänen-Event über
Löschung des Kunden
informieren
Customer 123
Integrity out of sync
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Orders of Customer 123
Idee:
Den Bestell-Service via
Domänen-Event über
Löschung des Kunden
informieren
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:
Den Bestell-Service via
Domänen-Event über
Löschung des Kunden
informieren
Customer 123
Customer MQ customer 123 deleted
Integrity out of sync*
*eventual integrity
#WISSENTEILEN
Cust
Orders
Orders
Customer
Herausforderung:
Ein Kunde wird gelöscht.
Orders of Customer 123
Idee:
Den Bestell-Service via
Domänen-Event über
Löschung des Kunden
informieren
Customer 123
Integrity in sync*
Customer MQ
*eventual integrity
#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:
Kunde als gelöscht
markieren und APIs
bei Bedarf adaptieren
#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
#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
#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
#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
A B
TX
Konsistenz
von Daten
über Servicegrenzen hinweg
#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
Verteilte Transaktionen via SAGAs
SAGA Idee:
Abbilden einer verteilten fachlichen
Transaktion durch eine Abfolge lokaler
technischer Transitionen / Transaktionen
#WISSENTEILEN
Verteilte Transaktionen via SAGAs
order = PENDING
item = PENDING
TX 1
TX 2
TX 3
TX 4
TX 5
TX 6
APPROVED
APPROVED
#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
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
Was ihr
mitnehmen
solltet. Cool,
verstanden.
Und wo finde ich mehr dazu?
#WISSENTEILEN
Was ihr
mitnehmen
solltet.
https://de.slideshare.net/_openknowledge/spa-mit-microservices-transaktionen
#WISSENTEILEN
Was ihr
mitnehmen
solltet.
#WISSENTEILEN
„Microservices ohne
Database-per-Service
macht keinen Sinn.“
#WISSENTEILEN
„Es kann nur
eine gültige Quelle
für eine bestimmte
Entität geben.“
#WISSENTEILEN
„Nutze
Domänen-Events
zur Kommunikation von
Entitäten-Änderungen.“
#WISSENTEILEN
„Verwende
Eventual Consistency
wann immer fachlich
möglich.“
#WISSENTEILEN
„Denke in
fachlichen
statt in technischen
Transaktionen.“
#WISSENTEILEN
#WISSENTEILEN
Zeit für
Fragen?
Immer!
#WISSENTEILEN
#WISSENTEILEN
Vielen
Dank!
#WISSENTEILEN
by open knowledge GmbH
@_openKnowledge | @mobileLarson
Lars Röwekamp, CIO New Technologies
#WISSENTEILEN
#WISSENTEILEN
BILDNACHWEIS
Folie 01: © Merena, iStockphoto.com
Folie 20: © Photoplotnikov, iStockphoto.com
All other pictures, drawings and icons originate from
• pexels.com,
• pixabay.com,
• unsplash.com,
• flaticon.com
or were made by my own.
#WISSENTEILEN
JOINS
von Daten
eXtended
BONUS
Material:
#WISSENTEILEN
Anforderung:
Ergebnis der Suche eines (ggf anonymen) Nutzers anzeigen
#WISSENTEILEN
Search
Ausgangssituation:
Ein Search-Service
liefert Suchergebnisse
#WISSENTEILEN
Search
Ausgangssituation:
Ein Search-Service
liefert Suchergebnisse
RESTfull
• Resources via URI
• State Transfer via http Methods
• Headers, Caches, Status-Codes …
#WISSENTEILEN
Search
https://ok-shop.de/search?query= …
Ausgangssituation:
Ein Search-Service
liefert Suchergebnisse
#WISSENTEILEN
Search
ok 200
[
…
„list of products“
…
]
Ausgangssituation:
Ein Search-Service
liefert Suchergebnisse
#WISSENTEILEN
Search
no content 204
[ ]
Ausgangssituation:
Ein Search-Service
liefert Suchergebnisse
#WISSENTEILEN
Search
Super
Search
?
Herausforderung:
Der aktuelle Search-Service
soll um einen zweiten
SuperSearch-Service
ergänzt werden.
#WISSENTEILEN
Search
Super
Search
search?query= … supersearch?query= …
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
btw: starre Kopplung
Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
simplesearch?query= … supersearch?query= …
Search
API
search?query= …
Koordination der Aufrufe
Aggregation der Ergebnisse
Resilience im “Fall des Falles“
btw: starre Kopplung
Idee #2:
zwei Search-Services
plus API Composition
#WISSENTEILEN
Simple
Search
Super
Search
search?query= …
Search
API
Aggregation der Ergebnisse
Koordination der Aufrufe
Resilience im “Fall des Falles“
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
User gibt einen
Suchbegriff ein …
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
search?query= …
Search
API
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
„Search“ Msg
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ „Simple Search“ Result Msg
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ „Super Search“ Result Msg
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
ok 200
[
…
„merged list
of products“
…
]
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung
TIMEOUT
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
ok 200
[
…
„list of products“
of SIMPLE SEARCH only
]
Idee #3:
zwei Search-Services
plus API Composition
plus Entkoppelung

Shared Data in verteilten Architekturen