#WISSENTEILEN
Hands-On
Microservices
Arne Limburg & Lars Röwekamp
@arneLimburg | @mobileLarson | @_openknowledge
#WISSENTEILEN
Was genau ist eigentlich ein guter
Microservice?
#WISSENTEILEN
Functional Decompensation
Single Responsibility Principle
Share nothing*
Consumer Contracts (a.k.a. Interfaces)
Lightweight Communication
Independently develop, test, deploy, run
Heterogeneous (a.k.a. Polyglot)
*share as little as possible
#WISSENTEILEN
Bussiness
Focused
*time-to-market
#WISSENTEILEN
#WISSENTEILEN
<set-up />
#WISSENTEILEN
Service Design
#WISSENTEILEN
Aufteilen nach
Domänen
Objekten
Service
Design
#WISSENTEILEN
Aufteilen nach
Domänen
Objekten
Service
Design
#WISSENTEILEN
„If every service has to
be updated at the same
time it’s not loosely
coupled.“
Adiran Cockcroft
#WISSENTEILEN
„If you have to know
to much about
surrounding services
you don‘t have a
bounded context.“
Adiran Cockcroft
#WISSENTEILEN
Aufteilen nach
Domänen
Objekten
Service
Design
#WISSENTEILEN
„Loosely coupled
service oriented
architecture with
bounded contexts.“
Adiran Cockcroft
#WISSENTEILEN
Bounded Context?
• Klare Grenzen
• Business-Prozesse
• Inkonsistenzen vermeiden
• e.g. „check out“
• e.g. „search products“
• e.g. „my recommendations“
#WISSENTEILEN
Aufteilen nach
Bounded
Contexts
Service
Design
#WISSENTEILEN
Aufteilen nach
Bounded
Contexts
Service
Design
Was ist mit gemeinsam benutzen Objekten?
#WISSENTEILEN
Aufteilen nach
Bounded
Contexts
Service
Design
Sind die Objekte wirklich identisch
oder heißen sie nur (zufällig) gleich?
#WISSENTEILEN
Aufteilen nach
Bounded
Contexts
Service
Design
Auch syntaktisch identische Objekte können
zu unterschiedlichen Services gehören
#WISSENTEILEN
Service
Design
Herausforderung:
Daten konsistent?
#WISSENTEILEN
Service
Design
Herausforderung:
Daten konsistent
• einen Data-Owner
definieren
• schreibend nur
via Data-Owner
#WISSENTEILEN
Web Shop
#WISSENTEILEN
#WISSENTEILEN
Communication
#WISSENTEILEN
Wie kommunizieren Services untereinander?
#WISSENTEILEN
#WISSENTEILEN
Search
Idee:
Ein Search-Service
liefert Suchergebnisse
#WISSENTEILEN
Search
Idee:
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= …
Idee:
Ein Search-Service
#WISSENTEILEN
Search
ok 200
[
…
„list of products“
…
]
Idee:
Ein Search-Service
#WISSENTEILEN
Search
no content 204
[ ]
Idee:
Ein Search-Service
#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
Neue 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
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
search?query= …
Search
API
Aggregation der Ergebnisse
Koordination der Aufrufe
Resilience im “Fall des Falles“Search MQ Result MQ
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
User gibt Suchbegriff ein …
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
search?query= …
Search
API
Search MQ Result MQ
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
„Search“ Msg
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ „Simple Search“ Result Msg
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ „Super Search“ Result Msg
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
Neue Idee:
zwei Search-Services
#WISSENTEILEN
Simple
Search
Super
Search
Search
API
Search MQ Result MQ
ok 200
[
…
„merged list
of products“
…
]
Neue Idee:
zwei Search-Services
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
Versioning
#WISSENTEILEN
TOLERANT READER PATTERN
http://www.example.com/addresses/42
àLiefert Adresse
{
street: {
"name": "Poststraße",
"number": "1",
},
"city": "26122 Oldenburg"
}
#WISSENTEILEN
TOLERANT READER PATTERN
http://www.example.com/addresses/42
Attribut hinzufügen
{
street: {
"name": "Poststraße",
"number": "1",
"additionalAdressLine": "2. Obergeschoss"
},
"city": "26122 Oldenburg"
}
#WISSENTEILEN
http://www.example.com/addresses/42
Client erwartet
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
TOLERANT READER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"number": "1",
"additionalAdressLine":
"2. Obergeschoss"
}...
}
#WISSENTEILEN
TOLERANT READER PATTERN
http://www.example.com/addresses/42
Attribut-Umbenennung
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
},
"city": "26122 Oldenburg"
}
#WISSENTEILEN
TOLERANT READER PATTERN
http://www.example.com/addresses/42
àAbwärtskompatible Änderungen: Umbenennen durch Kopieren
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
},
"city": "26122 Oldenburg"
}
#WISSENTEILEN
Photo by Irene Fertik, USC News Service. Copyright 1994, USC.
„Be conservative in what you do,
Be liberal in what you accept
from others“
RFC 793, Robustness Principal (John Postel)
#WISSENTEILEN
Es darf nichts entfernt werden
Keine Veränderung von Verarbeitungsregel
Optionales darf nie Required werden
http://zalando.github.io/restful-api-guidelines
Alles was hinzugefügt wird, muss optional sein
#WISSENTEILEN
http://www.example.com/addresses/42
Client erwartet
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
MAGNANIMOUS WRITER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
#WISSENTEILEN
http://www.example.com/addresses/42
Client erwartet
{
street: {
"streetName": "Poststraße",
"houseNumber": "1",
}...
}
MAGNANIMOUS WRITER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
#WISSENTEILEN
PUT http://www.example.com/addresses/42
Client schickt
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
MAGNANIMOUS WRITER PATTERN
Server erwartet
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
#WISSENTEILEN
MAGNANIMOUS WRITER PATTERN
PUT http://www.example.com/addresses/42
Client schickt
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
Server erwartet
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
oder
oder
#WISSENTEILEN
MAGNANIMOUS WRITER PATTERN
PUT http://www.example.com/addresses/42
Client schickt
{
street: {
"streetName": "Poststraße",
"houseNumber": "1",
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
Server erwartet
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
oder
oder
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àAbwärtskompatible Änderungen: Umbenennen durch Kopieren
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
},
"city": "26122 Oldenburg"
}
Geht da noch mehr?
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àZusammenführen und Teilen von Attributen
{
street: {
...
"streetName": "Poststraße",
"houseNumber": "1",
"addressLine1": "Poststraße 1",
}
...
}
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Zusammenführen von Attributen
{
street: {
...
"streetName": "Poststraße",
"houseNumber": "1",
"addressLine1": "Poststraße 1",
}
...
}
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Teilen von Attributen
{
street: {
...
"addressLine1": "Poststraße 1",
}
"city": "26122 Oldenburg",
"zipCode": "26122",
"cityName": "Oldenburg"
}
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Ebene von Attributen ändern
{
street: {
...
"addressLine1": "Poststraße 1"
}
"addressLine1": "Poststraße 1",
...
}
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Ebene von Attributen ändern
{
...
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Ebene von Attributen ändern
{
...
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
Bei jeder Modelländerung muss
eine Migrationsstrategie
einbezogen werden!
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
"addressLine1": "Post... 1",
"addressLine2": ""
}
"addressLine1": "Poststraße 1",
"addressLine2": "",
"city": "26122 Oldenburg",
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
http://www.example.com/v1/addresses/42
àBisher nur abwärtskompatible Änderungen
#WISSENTEILEN
ABWÄRTSKOMPATIBILITÄT
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
"addressLine1": "Post... 1",
"addressLine2": ""
}
"addressLine1": "Poststraße 1",
"addressLine2": "",
"city": "26122 Oldenburg",
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
http://www.example.com/v1/addresses/42
àViele Attribute deprecated
#WISSENTEILEN
WEITERENTWICKLUNG
{ "street": {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
"addressLine1": "Post... 1",
"addressLine2": ""
},
"addressLine1": "Poststraße 1",
"addressLine2": "",
"city": "26122 Oldenburg",
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
Schnittstelle Schnittstelle {
"addressLine1": "Poststraße 1",
"addressLine2": "",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
V1 V2-SNAPSHOT
#WISSENTEILEN
Data Consistency
#WISSENTEILEN
#WISSENTEILEN
Checkout
Idee:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Orders
#WISSENTEILEN
Checkout
Idee:
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
Idee:
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
Orders
Preferred Delivery Address
Preferred Payment Method
Idee:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Herausforderung:
Aber was ist, wenn die
bevorzugte Lieferadresse bzw.
Zahlungsmethode nicht zur
Anwendung kommen soll?
#WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Idee:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Alternative Adresse:
… im „Ausnahmefall“ wird der
Address-Service zur Auswahl
einer anderen Adresse heran-
gezogen.
#WISSENTEILEN
Checkout
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
POST https://ok-shop.de/orders
Orders
Preferred Delivery Address
Preferred Payment Method
#WISSENTEILEN
Checkout
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
201 created
Location: …/orders/1234
Orders
Preferred Delivery Address
Preferred Payment Method
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
GET …/addresses
(list all addresses)
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
200 ok
[
„list of
addresses“
]
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
PUT …/addresses/123
(change pref. delivery address)
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
204 no content
[ ]
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preffered Payment Method
Idee:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Herausforderung:
Was ist, wenn eine neue
Adresse verwendet werden
soll?
#WISSENTEILEN
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Idee:
Der gesamte Bestellvorgang
kann im „Normalfall“ mit Hilfe
des Checkout-Service
abgehandelt werden.
Neue Adresse anlegen:
… neue Adressen werden über
den Address-Service angelegt
und im Anschluss repliziert.
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
POST …/addresses/
(add new pref. delivery address)
#WISSENTEILEN
Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
201 created
Location ...
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
pref. delivery
address changed
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Address MQ
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service
Herausforderung:
Und was ist, wenn der
Address-Service nicht
verfügbar ist?
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service
Fachlicher Workaround :
z.B. durch Setzen der Adresse
nur für die aktuelle
Bestellung via UI.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
POST …/orders/
(with typed in address)
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service
Fachlicher Workaround :
z.B. durch Setzen der Adresse
nur für die aktuelle
Bestellung via UI.
#WISSENTEILEN
Address Checkout
Orders
Preferred Delivery Address
Preferred Payment Method
Addresses
Preferred Delivery Address
201 created
Location …
Idee:
Im „Normalfall“ nur der
Checkout-Service.
Im „Ausnahmefall“ zusätzlich
der Address-Service
Fachlicher Workaround :
z.B. durch Setzen der Adresse
nur für die aktuelle
Bestellung via UI.
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
Security
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
Product
Idee:
Ein Product-Service liefert
zu empfehlende Produkte
oder alternativ die Liste der
Bestseller.
Product
nicht eingeloggt eingeloggt
gutes Service Design:
Ein Service hat genau eine
fachlich Verantwortlichkeit
und ein dazu passendes
Domänen Modell
#WISSENTEILEN
Neue Idee:
Wenn nicht eingeloggt,
liefert ein Bestseller-Service
die Liste der Top-10.
Wenn eingeloggt, liefert ein
Recommendation-Service
zu empfehlende Produkte.
Bestseller Recomm
nicht eingeloggt eingeloggt
#WISSENTEILEN
Herausforderungen:
Wer stellt fest, ob
eingeloggt oder nicht
(UI vs. Services)?
Wie kommen die Login-
Informationen zum
Recommendation-Service?
Wie werden „Session“ Info
verteilt, wenn mehrere Services
in einen Call involviert sind
(Context Propagation)?
Bestseller Recomm
nicht eingeloggt eingeloggt
#WISSENTEILEN
Exkurs: Sicher ist sicher! Sicher?
• Server based Security
via Session auf dem Server
• Token based Security
via Austausch von Token
#WISSENTEILEN
Server
based
Security
#WISSENTEILEN
Token
based
Security
#WISSENTEILEN
Exkurs: Sicher ist sicher! Sicher?
JWT (JSON Web Token)
• neue, einfache und kompakte Specs
• Token plus public & private „Claims“
• digitale Signatur und/oder Encryption
• als Bearer Token und für SSO
#WISSENTEILEN
#WISSENTEILEN
Herausforderungen:
Wer stellt fest, ob
eingeloggt oder nicht
(UI vs. Services)?
Wie kommen die Login-
Informationen zum
Recommendation-Service?
Wie werden „Session“ Info
verteilt, wenn mehrere Services
in einen Call involviert sind
(Context Propagation)?
Bestseller Recomm
nicht eingeloggt eingeloggt
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Eingeloggt? Nein.
Recommendations?
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Bestseller
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Auth
Provider
login
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Auth
Provider
ok & Token
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Auth
Provider
Recommendations?
Eingeloggt? Ja.
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Auth
Provider
User? Role?
#WISSENTEILEN
Bestseller Recomm
Neue Idee:
Zwei Services plus
API-Service als Weiche.
Recomm
API
Auth
Provider
Recommendations für User
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
Monitoring
#WISSENTEILEN
#WISSENTEILEN
Search
Idee:
Bei einer Suche durch den
Search-Service wird neben
den Treffern auch deren
Verfügbarkeit angezeigt.
gutes Service Design:
Ein Service hat genau eine
fachlich Verantwortlichkeit
und ein dazu passendes
Domänen Modell
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Bei einer Suche wird neben
den Treffern auch deren
Verfügbarkeit angezeigt.
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Herausforderung:
Performance ist deutlich
schlechter als erwartet!
Wo liegt das Problem?
Und was ist eigentlich
„passiert“?
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Tracing:
Unique Trace ID wird
als „Klammer“ erzeugt
und durch den gesamten
Aufruf geschleust.
id
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Herausforderung:
Service liefert nicht das
erwartete Ergebnis. Wo
genau liegt das Problem?
Und was ist eigentlich im
Detail passiert?
#WISSENTEILEN
Search Inventory
Search
API
Koordination der Aufrufe
Aggregation der Ergebnisse
Neue Idee:
Ein Search-Service liefert die
Suchergebnisse.
Ein Inventory-Service liefert
die Verfügbarkeit.
Distributed Logging:
Die Logs der einzelnen
Services werden in einem
„Topf“ aggregiert und
ausgewertet.
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
Resilience
#WISSENTEILEN
#WISSENTEILEN
Recomm
Idee:
Ein Recomm*-Service liefert
zu empfehlende Produkte.
*PPT-kompatible Version von „Recommendations-Service“
#WISSENTEILEN
Recomm
Idee:
Ein Recomm*-Service liefert
zu empfehlende Produkte.
*PPT-kompatible Version von „Recommendations-Service“
Herausforderung:
Aber was ist, wenn der
Recomm-Service
einmal ausfällt?
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
Recomm
Idee:
Ein Recomm-Service liefert
zu empfehlende Produkte.
Bestseller
Resilience:
Im Falles eines Ausfalls wird
auf einen Bestseller-Service
ausgewichen.
#WISSENTEILEN
Bestseller Recomm
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
Recomm
API
#WISSENTEILEN
Bestseller Personal
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Ja.
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback. Recommendations?
#WISSENTEILEN
Bestseller Personal
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Ja.
Recommendations für User X?
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
Bestseller Personal
Recomm
API
Recommendations für User X
Eingeloggt? Ja.
„Personal“ verfügbar? Ja.
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
Bestseller Personal
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback. Recommendations?
#WISSENTEILEN
Bestseller Personal
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
Bestseller?
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
Bestseller Personal
Recomm
API
Bestseller
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
Bestseller Recomm
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
„Bestseller“verfügbar? Nein.
Recommendations?
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
#WISSENTEILEN
#WISSENTEILEN
Bestseller Recomm
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
„Bestseller“verfügbar? Nein.
Recommendations?
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
Bestseller Recomm
Recomm
API
Eingeloggt? Ja.
„Personal“ verfügbar? Nein.
„Bestseller“verfügbar? Nein.
Static Content
Idee:
Recomm-Service als
primäre Option.
Bestseller-Service als
Fallback.
#WISSENTEILEN
<coding-time />
#WISSENTEILEN
Lessons
Learned
#WISSENTEILEN
Ein Microservice
kommt selten allein!
#WISSENTEILEN
Microservices-Projekte
scheitern nicht
an Technologie.
#WISSENTEILEN
Viele Probleme
lassen sich
fachlich lösen.
#WISSENTEILEN
Automatisierung ist
Pflicht nicht Kür.
#WISSENTEILEN
Arne Limburg, @arneLimburg
Lars Röwekamp, @mobileLarson
Kontakt:
lars.roewekamp@openknowledge.de
arne.limburg@openknowledge.de
kontakt@openknowledge.de
Besten Dank! #WISSENTEILEN

Hands-On Microservices mit Java