SlideShare une entreprise Scribd logo
1  sur  139
Télécharger pour lire hors ligne
@ArneLimburg @_openknowledge #WISSENTEILEN
Der goldene Schnitt
Microservices maßgeschneidert
ÜBER MICH
Microservices maßgeschneidert | Arne Limburg
• Enterprise Architect bei der open knowledge GmbH
• Themen
• Microservices
• Domain Driven Design
• APIs
• Architektur
• Coaching
• Technologie (Java EE / Jakarta EE)
Arne Limburg
ÜBER OPEN KNOWLEDGE
Titel der Präsentation | Name des Sprechers
Branchenneutrale Softwareentwicklung und IT-Beratung
Warum Microservices?
Microservices maßgeschneidert | Arne Limburg
klein
lose gekoppelt
einzeln deploybar
Microservices maßgeschneidert | Arne Limburg
© Martin Fowler: https://www.martinfowler.com/bliki/MicroservicePremium.html
Warum Microservices?
Microservices maßgeschneidert | Arne Limburg
Monolit / Layered Architecture vs. Microservices
Wartbarkeit
Skalierbarkeit
Ausfallsicherheit
Warum Microservices
Wie groß ist ein Microservice?
„Small enough
and not smaller“by Sam Newman (thoughtworks)Microservices maßgeschneidert | Arne Limburg
Microservices maßgeschneidert | Arne Limburg
„Eine Einheit, die von einem kleinen Team
komplett – also fachlich und technisch –
beherrscht werden kann.”
Oliver Wegner (OTTO)
Microservices maßgeschneidert | Arne Limburg
Wie groß ist ein Microservice
Number of microservices /
Smallness of microservice
Costs
Costs of:
- setup
- eventual consistency
- operational complexity
- redundant implementation
- …
Costs for:
- agility
- adaptivity
- communication times business:tech
Microservices maßgeschneidert | Arne Limburg
Beispiel Online Shop
Microservices maßgeschneidert | Arne Limburg
Wie finde ich Microservices?
Microservices maßgeschneidert | Arne Limburg
Kandidaten für Microservices?
Kategorien
Suche
Produktkatalog
Historie
Empfehlungen
Benutzerverwaltung
Warenkorb
Microservices maßgeschneidert | Arne Limburg
Fachlichkeit über Fachlichkeit
Microservices maßgeschneidert | Arne Limburg
Domain Driven Design
Microservices maßgeschneidert | Arne Limburg
Domain Driven Design
„For most software projects, the primary focus should be on the domain and domain
logic“
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Microservices maßgeschneidert | Arne Limburg
Ubiquitous Language
Fachsprache als Basis
Eindeutige Begriffe
Durchgängige Nutzung
Microservices maßgeschneidert | Arne Limburg
DOMAIN DRIVEN DESIGN
„Complex Domain Design
should be based on a model “
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Microservices maßgeschneidert | Arne Limburg
DOMÄNENMODELL
Repräsentation der Domäne
Fachlich korrekt und konsistent
Weiterentwicklung durch alle Beteiligten
Microservices maßgeschneidert | Arne Limburg
DOMÄNENMODELL
Repräsentation der Domäne
Fachlich korrekt und konsistent
Weiterentwicklung durch alle Beteiligten
„Das Domänenmodell ist das Bindeglied
zwischen Domänenexperten und
Entwicklern“
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Microservices maßgeschneidert | Arne Limburg
Domänenmodell Online-Shop
Customer
ShoppingCart
Product
Microservices maßgeschneidert | Arne Limburg
Wie passt das zu Microservices?
Microservices maßgeschneidert | Arne Limburg
Bounded Context
Microservices maßgeschneidert | Arne Limburg
Mehrere Modelle – aber wie?
Customer
ShoppingCart
Product
Kein Verlust der Vorteile
Mögliche Konflikte
Verschiedene Modelle
Unterschiedliches Verständnis
Microservices maßgeschneidert | Arne Limburg
Trennung nach
Domänenobjekten?
Customer
ShoppingCart
Product
Microservices maßgeschneidert | Arne Limburg
Beispiel Online Shop
„Small autonomous services
that work together.”
by Sam Newman (thoughtworks)
Microservices maßgeschneidert | Arne Limburg
Microservices maßgeschneidert | Arne Limburg
„Microservices are a
self-contained and easily understandable
realization of domain logic,
highly independent of each other.”by Adam Bien
(Freelancer)
Microservices maßgeschneidert | Arne Limburg
„Microservices are a
self-contained and easily understandable
realization of domain logic,
highly independent of each other.”by Adam Bien
(Freelancer)
Microservices maßgeschneidert | Arne Limburg
Trennung nach
Domänenobjekten?
Customer
ShoppingCart
Product
Microservices maßgeschneidert | Arne Limburg
„If every service has to be updated
at the same time, it‘s
not loosely coupled”
by Adrian Cockcroft (ehemals Netflix)
Microservices maßgeschneidert | Arne Limburg
Trennung nach
Domänenobjekten?
Customer
ShoppingCart
Product
Microservices maßgeschneidert | Arne Limburg
„Eine Einheit, die von einem kleinen Team
komplett – also fachlich und technisch –
beherrscht werden kann.”
Oliver Wegner (OTTO)
Microservices maßgeschneidert | Arne Limburg
Bounded Context
Microservices maßgeschneidert | Arne Limburg
Wer hat welche Daten?
Microservices maßgeschneidert | Arne Limburg
Dezentrale Datenhaltung
Daten-Ownership
Caching
Compensation
Microservices maßgeschneidert | Arne Limburg
Service nicht verfügbar
Shipping
Beispiel Lieferadresse
Microservices maßgeschneidert | Arne Limburg
• Speichern in
• ShipmentService?
• CheckoutService?
• CustomerManagementService?
• Lieferadresse ändern
• Auswahl über CustomerManagementService?
• Setzen in CheckoutService/ShipmentService?
• CustomerManagementService offline à Chain of Failure?
Beispiel Lieferadresse
Microservices maßgeschneidert | Arne Limburg
Microservices maßgeschneidert | Arne Limburg
Dezentrale Datenhaltung
Daten-Ownership
Caching
Transaktionen
„Starbucks does not use
Two-Phase Commit“http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
Verteilte Transaktionen via SAGAs
SAGA Idee:
Abbilden einer verteilten fachlichen
Transaktion durch eine Abfolge lokaler
Transitionen / Transaktionen
Microservices maßgeschneidert | Arne Limburg
Verteilte Transaktionen via SAGAs
Microservices maßgeschneidert | Arne Limburg
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
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Fehler-
behandlung
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
CA = Compensation Algorith a.k.a.
Compensation Transaction
Microservices maßgeschneidert | Arne Limburg
Die
„Saga“
Strategie
CA = Compensation Algorith a.k.a.
Compensation Transaction
„Every Ti has its Ci“
Microservices maßgeschneidert | Arne Limburg
Verteilte Transaktionen via SAGAs
• wohldefinierte Abfolge von Compensation
Algorithms realisieren verteiltes Rollback
• Compensation Algorithms sind fachlicher
Code und somit Applikationslogik
• Abfolge von lokalen TX & CAs kann beliebig
komplex werden!
Microservices maßgeschneidert | Arne Limburg
Steuerung von SAGAs
• Choreographie
• Orchestrierung
Microservices maßgeschneidert | Arne Limburg
Steuerung von SAGAs
• Choreographie
• Orchestrierung
Microservices maßgeschneidert | Arne Limburg
Choreographie von SAGAs
• implizite Sequenzsteuerung
• verteilte Koordination durch Eventfluss
• „Wissen“ liegt bei den beteiligten Services
Microservices maßgeschneidert | Arne Limburg
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?)
Microservices maßgeschneidert | Arne Limburg
Steuerung von SAGAs
• Choreographie
• Orchestrierung
Microservices maßgeschneidert | Arne Limburg
Orchestrierung von SAGAs
• explizite Sequenzsteuerung
• zentraler SAGA-Koordinator im Service
• Command / Handler Pattern
• beteiligte Services haben kein „Wissen“
Microservices maßgeschneidert | Arne Limburg
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)
Microservices maßgeschneidert | Arne Limburg
Orchestration von SAGAs
• contra
„Smart Orchestrator & Dump Services“ Pattern,
d.h. Risiko, zu viel Business Logic im
Orchestrator zu zentralisieren
Microservices maßgeschneidert | Arne Limburg
Orchestration von SAGAs
• btw Orchestrator
Will man den wirklich selber bauen? Nein!
Alternative 1: Saga Framework
Alternative 2: Lightweight Workflow Engine
Microservices maßgeschneidert | Arne Limburg
Microservices maßgeschneidert | Arne Limburg
Dezentrale Datenhaltung
Daten-Ownership
Caching
Transaktionen
Worauf es ankommt
Klare Kontextgrenzen
Unabhängigkeit
Konsistenz
Microservices maßgeschneidert | Arne Limburg
Charakteristika
Charakteristika
Schneiden von Microservices
Schnitt entlang der Prozesse
Fachlichkeit in einem Team
Konsistenz/Transaktionssicherheit
Wenig Kommunikation/Unabhängigkeit
Microservices maßgeschneidert | Arne Limburg
Wie groß ist klein
Size of microservice
„guter“
Microservice
Modularisierung
Teamgröße
Austauschbarkeit
Infrastruktur
Verteilte
Kommunikation
Transaktionen &
Konsistenz
Wie groß ist klein
Team Size
Wie groß ist klein
Team Size
Size of microservice
Number of microservices
Kommunikation
Microservices maßgeschneidert | Arne Limburg
Context Map
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Microservices maßgeschneidert | Arne Limburg
Context Map
Microservices maßgeschneidert | Arne Limburg
Shared Kernel
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Microservices maßgeschneidert | Arne Limburg
Shared Kernel
Microservices maßgeschneidert | Arne Limburg
Abstract Core
Microservices maßgeschneidert | Arne Limburg
Abstract Core
Fachliche Basis
Saubere Modellierung
div. Repräsentationen
Zur Kommunikation
Trennen von common
Microservices maßgeschneidert | Arne Limburg
Abstract Core Online Shop
Customer
ShoppingCart
Product
Fachliche Basis
Saubere Modellierung
div. Repräsentationen
Zur Kommunikation
Trennen von common
Microservices maßgeschneidert | Arne Limburg
Shared Kernel
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Microservices maßgeschneidert | Arne Limburg
Conway‘s Law
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Organisationen, die Systeme entwerfen,
[…]
sind auf Entwürfe festgelegt,
welche die Kommunikationsstrukturen
dieser Organisationen abbilden.
Microservices maßgeschneidert | Arne Limburg
Customer/Supplier Teams
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Organisationen, die Systeme entwerfen,
[…]
sind auf Entwürfe festgelegt,
welche die Kommunikationsstrukturen
dieser Organisationen abbilden.
Microservices maßgeschneidert | Arne Limburg
Conformist
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Conformist
overlap unilaterally as
Microservices maßgeschneidert | Arne Limburg
Open Host Services
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Conformist
overlap unilaterally as
Open Host
Service
support multiple
clients through
WELCHE CLIENTS NUTZEN MICH?
API (PROVIDER CONTRACT)
CONSUMER CONTRACT
CONSUMER CONTRACT – YAGNI
CONSUMER-DRIVEN CONTRACT TEST
Consumer
Contract
Consumer Provider
Consumer
Tests
Provider
Tests
MICROSERVICES ARCHITEKTUR
Address Validation Service
Delivery Service
Customer Service
Billing Service
PIPELINE TO DEPLOY TO STAGE
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
BREAKING CHANGE VOM PROVIDER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
BREAKING CHANGE VOM CONSUMER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
Microservices maßgeschneidert | Arne Limburg
Published Language
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Conformist
overlap unilaterally as
Open Host
Service
support multiple
clients through
Published
Language
formalize as
Microservices maßgeschneidert | Arne Limburg
Anticorruption Layer
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Conformist
overlap unilaterally as
Anticorruption
Layer
translate and insulate
unilaterally with
Open Host
Service
support multiple
clients through
Published
Language
formalize as
Microservices maßgeschneidert | Arne Limburg
Separate Ways
Bounded
Context
Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
Ubiquitous
Language
names
enter
Continous
Integration
keep model unified by
Context Map
assess/overview
relationships with
Shared
Kernel
Overlap allied contexts through
Customer
Supplier
Teamsrelate allied contexts as
Conformist
overlap unilaterally as
Separate
Ways
free teams to go
Anticorruption
Layer
translate and insulate
unilaterally with
Open Host
Service
support multiple
clients through
Published
Language
formalize as
Schnittstellenevolution
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àLiefert Addresse
{
street: {
"name": "Poststraße",
"number": "1",
},
"city": "26122 Oldenburg"
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
Attribut hinzufügen
{
street: {
"name": "Poststraße",
"number": "1",
"additionalAdressLine": "2. Obergeschoss"
},
"city": "26122 Oldenburg"
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
Attribut hinzufügen
{
street: {
"name": "Poststraße",
"number": "1",
"additionalAdressLine": "2. Obergeschoss"
},
"city": "26122 Oldenburg"
}
Besondere Anforderung an den Client:
Unbekannte Attribute ignorieren à
Tolerant Reader Pattern
Microservices maßgeschneidert | Arne Limburg
TOLERANT READER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"number": "1",
"additionalAdressLine":
"2. Obergeschoss"
}...
}
http://www.example.com/addresses/42
Client erwartet
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
Attribut-Umbenennung
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
},
"city": "26122 Oldenburg"
}
Microservices maßgeschneidert | Arne Limburg
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"
}
Microservices maßgeschneidert | Arne Limburg
MAGNANIMOUS WRITER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
http://www.example.com/addresses/42
Client erwartet
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
Microservices maßgeschneidert | Arne Limburg
MAGNANIMOUS WRITER PATTERN
Server schickt
{
street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1“
}...
}
http://www.example.com/addresses/42
Client erwartet
{
street: {
"streetName": "Poststraße",
"houseNumber": "1",
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
Microservices maßgeschneidert | Arne Limburg
MAGNANIMOUS WRITER PATTERN
Server erwartet
PUT http://www.example.com/addresses/42
Client schickt
{
street: {
"name": "Poststraße",
"number": "1",
}...
}
http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
„Be conservative in what you do,
Be liberal in what you expect“
Postels Law (John Postel)
Microservices maßgeschneidert | Arne Limburg
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
Microservices maßgeschneidert | Arne Limburg
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
Microservices maßgeschneidert | Arne Limburg
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",
}
...
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Zusammenführen von Attributen
{
street: {
...
"streetName": "Poststraße",
"houseNumber": "1",
"addressLine1": "Poststraße 1",
}
...
}
Microservices maßgeschneidert | Arne Limburg
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"
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Ebene von Attributen ändern
{
street: {
...
"addressLine1": "Poststraße 1"
}
"addressLine1": "Poststraße 1",
...
}
Microservices maßgeschneidert | Arne Limburg
ABWÄRTSKOMPATIBILITÄT
http://www.example.com/addresses/42
àHerausforderungen: Ebene von Attributen ändern
{
...
"zipCode": "26122",
"cityName": "Oldenburg",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
Microservices maßgeschneidert | Arne Limburg
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!
Microservices maßgeschneidert | Arne Limburg
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
Microservices maßgeschneidert | Arne Limburg
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
Microservices maßgeschneidert | Arne Limburg
VERSIONSSPRUNG
{
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
Microservices maßgeschneidert | Arne Limburg
INKOMPATIBLE ÄNDERUNG
http://www.example.com/v2/addresses/42
àVersionssprung
{
"addressLine1": "Poststraße 1",
"addressLine2": "",
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Services
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Services
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Services
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Endpoints
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Endpoints
Microservices maßgeschneidert | Arne Limburg
Parallele Versionen – via Endpoints
Microservices maßgeschneidert | Arne Limburg
DOMÄNENMODELL ALS API
Schnittstelle Schnittstelle
{ 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"
}
}
{
"addressLine1": "Poststraße 1",
"addressLine2": "“,
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
V1 V2-SNAPSHOT
Microservices maßgeschneidert | Arne Limburg
DOMÄNENMODELL ALS API
Schnittstelle
Schnittstelle
{ street: {
"name": "Poststraße",
"streetName": "Poststraße",
"number": "1",
"houseNumber": "1",
"addressLine1": "Post... 1",
"addressLine2": ""
}
...
}
{
"addressLine1": "Poststraße 1",
"addressLine2": "“,
"city": {
"zipCode": "26122",
"cityName": "Oldenburg"
}
}
V1 V3-SNAPSHOT
Schnittstelle
{ "addressLine1": "Poststraße 1",
"addressLine2": "“,
"location": {
"zipCode": "26122",
"cityName": "Oldenburg"
},
"city": {
"zipCode": "26122",
"cityName": "Oldenburg"
}} V2
• Über URL-Pfad
/v2/addresses
• Über Query-Parameter
/addresses?version=v2
• Über Version-Header
X-Api-Version: v2
• Über Version-Attribut am Media-Type
application/xml;version=v2
• Über Media-Type
application/vnd.de.openknowledge+v2+json
ERMITTELN DER VERSION
Microservices maßgeschneidert | Arne Limburg
• Umbennen von Ressourcen
àHttp-Status-Code 301 „Moved Permanently“
• Semantische Änderung von Attributen
àAnderen Namen vergeben
• Neue Version hat anderes Verhalten
àNeue Schnittstelle
• PUT zum Setzen leerer Attribute
àUnterscheidung zwischen nicht vorhanden und empty
WEITERE HERAUSFORDERUNGEN
Microservices maßgeschneidert | Arne Limburg
Microservices maßgeschneidert | Arne Limburg
Schnittstellenversionierung
Klare Versionierungsstrategie
Mehrere Versionen parallel
Definiertes Versionsschema
Über Custom Header
Über Media-Type
Über die URL
Microservices maßgeschneidert | Arne Limburg
Schneiden des User Interfaces
Microservices maßgeschneidert | Arne Limburg
Seperate UIs
Microservices maßgeschneidert | Arne Limburg
API Composition
Microservices maßgeschneidert | Arne Limburg
API Gateway
Microservices maßgeschneidert | Arne Limburg
Backends for Frontends
Microservices maßgeschneidert | Arne Limburg
UI Fragment Composition
Microservices maßgeschneidert | Arne Limburg
Fazit
Es kommt nicht auf die Größe an
Orientierung an Use Cases
Minimierung der Kommunikation
Gemeinsames Verständnis für Fachlichkeit
Modellierung der Core Domain
Context Map
Explizites Leben der Schnittstellen
Versionierung
Compensation
Microservices maßgeschneidert | Arne Limburg
FRAGEN
? ? ?
KONTAKT
Microservices maßgeschneidert | Arne Limburg
Arne Limburg,
Enterprise Architect
OFFENKUNDIGGUT
arne.limburg@openknowledge.de
+49 (0)441 4082 – 0 / 154
Icons in this presentation designed by “Freepik”, “Nice and Serious” and “Elegant
Themes” from www.flaticon.com

Contenu connexe

Tendances

Tendances (12)

Free ECBA V3 study guide
Free ECBA V3 study guideFree ECBA V3 study guide
Free ECBA V3 study guide
 
Infrastructure Testing: The Ultimate “Shift Left”
Infrastructure Testing: The Ultimate “Shift Left”Infrastructure Testing: The Ultimate “Shift Left”
Infrastructure Testing: The Ultimate “Shift Left”
 
CBAP® Preparation Course
CBAP® Preparation CourseCBAP® Preparation Course
CBAP® Preparation Course
 
DevOps on AWS
DevOps on AWSDevOps on AWS
DevOps on AWS
 
5 service transition
5 service transition5 service transition
5 service transition
 
Business Process Modeling
Business Process ModelingBusiness Process Modeling
Business Process Modeling
 
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
 
Managed IT Services Pricing Models And Strategies Powerpoint Presentation Slides
Managed IT Services Pricing Models And Strategies Powerpoint Presentation SlidesManaged IT Services Pricing Models And Strategies Powerpoint Presentation Slides
Managed IT Services Pricing Models And Strategies Powerpoint Presentation Slides
 
DevOps and Tools
DevOps and ToolsDevOps and Tools
DevOps and Tools
 
DevOps vs Traditional IT Ops (DevOps Days ignite talk by Oliver White)
DevOps vs Traditional IT Ops (DevOps Days ignite talk by Oliver White)DevOps vs Traditional IT Ops (DevOps Days ignite talk by Oliver White)
DevOps vs Traditional IT Ops (DevOps Days ignite talk by Oliver White)
 
Iniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloudIniciando com AWS Lambda e serverless em cloud
Iniciando com AWS Lambda e serverless em cloud
 
Solving Shared Drives: 10 Tips for Cleaning Up, Organizing, and Migrating Con...
Solving Shared Drives: 10 Tips for Cleaning Up, Organizing, and Migrating Con...Solving Shared Drives: 10 Tips for Cleaning Up, Organizing, and Migrating Con...
Solving Shared Drives: 10 Tips for Cleaning Up, Organizing, and Migrating Con...
 

Similaire à Der goldene Schnitt – Wie schneide ich Microservices richtig?

Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue Schwarz
QAware GmbH
 
SAP EAM Kongress 2023
SAP EAM Kongress 2023SAP EAM Kongress 2023
SAP EAM Kongress 2023
argvis GmbH
 

Similaire à Der goldene Schnitt – Wie schneide ich Microservices richtig? (20)

Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
 
Cloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu ServerlessCloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu Serverless
 
Webcast: SAP on Azure für den Mittelstand - Erfolgsfaktor Integration
Webcast: SAP on Azure für den Mittelstand - Erfolgsfaktor IntegrationWebcast: SAP on Azure für den Mittelstand - Erfolgsfaktor Integration
Webcast: SAP on Azure für den Mittelstand - Erfolgsfaktor Integration
 
Zukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit MicroservicesZukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit Microservices
 
Modellierung integrierter SAP System Landschaften
Modellierung integrierter SAP System LandschaftenModellierung integrierter SAP System Landschaften
Modellierung integrierter SAP System Landschaften
 
Vorteile von Managed Service Providern
Vorteile von Managed Service ProvidernVorteile von Managed Service Providern
Vorteile von Managed Service Providern
 
Die Cloud – Veränderungen und Chancen für Softwarehersteller
Die Cloud – Veränderungen und Chancen  für SoftwareherstellerDie Cloud – Veränderungen und Chancen  für Softwarehersteller
Die Cloud – Veränderungen und Chancen für Softwarehersteller
 
Infrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-UmfeldInfrastruktur agil bauen - der DBA im SAFe-Umfeld
Infrastruktur agil bauen - der DBA im SAFe-Umfeld
 
Serverless Dev(Ops) in der Praxis
Serverless Dev(Ops) in der PraxisServerless Dev(Ops) in der Praxis
Serverless Dev(Ops) in der Praxis
 
Enterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue SchwarzEnterprise Cloud Native ist das neue Schwarz
Enterprise Cloud Native ist das neue Schwarz
 
Nefos: Nefos Mobile iPad App
Nefos: Nefos Mobile iPad AppNefos: Nefos Mobile iPad App
Nefos: Nefos Mobile iPad App
 
iPaas: Mehr Kür, weniger Pflicht – Integration Platform as a Service
iPaas: Mehr Kür, weniger Pflicht – Integration Platform as a ServiceiPaas: Mehr Kür, weniger Pflicht – Integration Platform as a Service
iPaas: Mehr Kür, weniger Pflicht – Integration Platform as a Service
 
SAP EAM Kongress 2023
SAP EAM Kongress 2023SAP EAM Kongress 2023
SAP EAM Kongress 2023
 
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
 
Blueprints bei E-Commerce Workloads mit AWS
Blueprints bei E-Commerce Workloads mit AWSBlueprints bei E-Commerce Workloads mit AWS
Blueprints bei E-Commerce Workloads mit AWS
 
Fifty shades of Cloud - Überblick, Best Practices, Beispiele
Fifty shades of Cloud - Überblick, Best Practices, BeispieleFifty shades of Cloud - Überblick, Best Practices, Beispiele
Fifty shades of Cloud - Überblick, Best Practices, Beispiele
 
Multi-Cloud eGov Webinar 20220322
Multi-Cloud eGov Webinar 20220322Multi-Cloud eGov Webinar 20220322
Multi-Cloud eGov Webinar 20220322
 
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
20040921 Serviceorientierte Architektur für WebSphere und WebSphere Portal
 
IT Security Management mit ARIS Cloud Enterprise - AWS Security Web Day
IT Security Management mit ARIS Cloud Enterprise - AWS Security Web DayIT Security Management mit ARIS Cloud Enterprise - AWS Security Web Day
IT Security Management mit ARIS Cloud Enterprise - AWS Security Web Day
 
Cloud-Nutzung aus Anwendersicht, Thomas Witt, Infopark
Cloud-Nutzung aus Anwendersicht, Thomas Witt, InfoparkCloud-Nutzung aus Anwendersicht, Thomas Witt, Infopark
Cloud-Nutzung aus Anwendersicht, Thomas Witt, Infopark
 

Plus de OPEN KNOWLEDGE GmbH

Plus de OPEN KNOWLEDGE GmbH (20)

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
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
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
 
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
 

Der goldene Schnitt – Wie schneide ich Microservices richtig?

  • 1. @ArneLimburg @_openknowledge #WISSENTEILEN Der goldene Schnitt Microservices maßgeschneidert
  • 2. ÜBER MICH Microservices maßgeschneidert | Arne Limburg • Enterprise Architect bei der open knowledge GmbH • Themen • Microservices • Domain Driven Design • APIs • Architektur • Coaching • Technologie (Java EE / Jakarta EE) Arne Limburg
  • 3. ÜBER OPEN KNOWLEDGE Titel der Präsentation | Name des Sprechers Branchenneutrale Softwareentwicklung und IT-Beratung
  • 4. Warum Microservices? Microservices maßgeschneidert | Arne Limburg klein lose gekoppelt einzeln deploybar
  • 5. Microservices maßgeschneidert | Arne Limburg © Martin Fowler: https://www.martinfowler.com/bliki/MicroservicePremium.html Warum Microservices?
  • 6. Microservices maßgeschneidert | Arne Limburg Monolit / Layered Architecture vs. Microservices Wartbarkeit Skalierbarkeit Ausfallsicherheit Warum Microservices
  • 7. Wie groß ist ein Microservice?
  • 8. „Small enough and not smaller“by Sam Newman (thoughtworks)Microservices maßgeschneidert | Arne Limburg
  • 9. Microservices maßgeschneidert | Arne Limburg „Eine Einheit, die von einem kleinen Team komplett – also fachlich und technisch – beherrscht werden kann.” Oliver Wegner (OTTO)
  • 10. Microservices maßgeschneidert | Arne Limburg Wie groß ist ein Microservice Number of microservices / Smallness of microservice Costs Costs of: - setup - eventual consistency - operational complexity - redundant implementation - … Costs for: - agility - adaptivity - communication times business:tech
  • 11. Microservices maßgeschneidert | Arne Limburg Beispiel Online Shop
  • 12. Microservices maßgeschneidert | Arne Limburg Wie finde ich Microservices?
  • 13. Microservices maßgeschneidert | Arne Limburg Kandidaten für Microservices? Kategorien Suche Produktkatalog Historie Empfehlungen Benutzerverwaltung Warenkorb
  • 14. Microservices maßgeschneidert | Arne Limburg Fachlichkeit über Fachlichkeit
  • 15. Microservices maßgeschneidert | Arne Limburg Domain Driven Design
  • 16. Microservices maßgeschneidert | Arne Limburg Domain Driven Design „For most software projects, the primary focus should be on the domain and domain logic“ Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
  • 17. Microservices maßgeschneidert | Arne Limburg Ubiquitous Language Fachsprache als Basis Eindeutige Begriffe Durchgängige Nutzung
  • 18. Microservices maßgeschneidert | Arne Limburg DOMAIN DRIVEN DESIGN „Complex Domain Design should be based on a model “ Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
  • 19. Microservices maßgeschneidert | Arne Limburg DOMÄNENMODELL Repräsentation der Domäne Fachlich korrekt und konsistent Weiterentwicklung durch alle Beteiligten
  • 20. Microservices maßgeschneidert | Arne Limburg DOMÄNENMODELL Repräsentation der Domäne Fachlich korrekt und konsistent Weiterentwicklung durch alle Beteiligten „Das Domänenmodell ist das Bindeglied zwischen Domänenexperten und Entwicklern“ Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004
  • 21. Microservices maßgeschneidert | Arne Limburg Domänenmodell Online-Shop Customer ShoppingCart Product
  • 22. Microservices maßgeschneidert | Arne Limburg Wie passt das zu Microservices?
  • 23. Microservices maßgeschneidert | Arne Limburg Bounded Context
  • 24. Microservices maßgeschneidert | Arne Limburg Mehrere Modelle – aber wie? Customer ShoppingCart Product Kein Verlust der Vorteile Mögliche Konflikte Verschiedene Modelle Unterschiedliches Verständnis
  • 25. Microservices maßgeschneidert | Arne Limburg Trennung nach Domänenobjekten? Customer ShoppingCart Product
  • 26. Microservices maßgeschneidert | Arne Limburg Beispiel Online Shop
  • 27. „Small autonomous services that work together.” by Sam Newman (thoughtworks) Microservices maßgeschneidert | Arne Limburg
  • 28. Microservices maßgeschneidert | Arne Limburg „Microservices are a self-contained and easily understandable realization of domain logic, highly independent of each other.”by Adam Bien (Freelancer)
  • 29. Microservices maßgeschneidert | Arne Limburg „Microservices are a self-contained and easily understandable realization of domain logic, highly independent of each other.”by Adam Bien (Freelancer)
  • 30. Microservices maßgeschneidert | Arne Limburg Trennung nach Domänenobjekten? Customer ShoppingCart Product
  • 31. Microservices maßgeschneidert | Arne Limburg „If every service has to be updated at the same time, it‘s not loosely coupled” by Adrian Cockcroft (ehemals Netflix)
  • 32. Microservices maßgeschneidert | Arne Limburg Trennung nach Domänenobjekten? Customer ShoppingCart Product
  • 33. Microservices maßgeschneidert | Arne Limburg „Eine Einheit, die von einem kleinen Team komplett – also fachlich und technisch – beherrscht werden kann.” Oliver Wegner (OTTO)
  • 34. Microservices maßgeschneidert | Arne Limburg Bounded Context
  • 35. Microservices maßgeschneidert | Arne Limburg Wer hat welche Daten?
  • 36. Microservices maßgeschneidert | Arne Limburg Dezentrale Datenhaltung Daten-Ownership Caching
  • 38. Microservices maßgeschneidert | Arne Limburg Service nicht verfügbar Shipping
  • 40. • Speichern in • ShipmentService? • CheckoutService? • CustomerManagementService? • Lieferadresse ändern • Auswahl über CustomerManagementService? • Setzen in CheckoutService/ShipmentService? • CustomerManagementService offline à Chain of Failure? Beispiel Lieferadresse Microservices maßgeschneidert | Arne Limburg
  • 41. Microservices maßgeschneidert | Arne Limburg Dezentrale Datenhaltung Daten-Ownership Caching Transaktionen
  • 42. „Starbucks does not use Two-Phase Commit“http://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
  • 43. Verteilte Transaktionen via SAGAs SAGA Idee: Abbilden einer verteilten fachlichen Transaktion durch eine Abfolge lokaler Transitionen / Transaktionen Microservices maßgeschneidert | Arne Limburg
  • 44. Verteilte Transaktionen via SAGAs Microservices maßgeschneidert | Arne Limburg
  • 45. 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 Microservices maßgeschneidert | Arne Limburg
  • 54. Die „Saga“ Strategie CA = Compensation Algorith a.k.a. Compensation Transaction Microservices maßgeschneidert | Arne Limburg
  • 55. Die „Saga“ Strategie CA = Compensation Algorith a.k.a. Compensation Transaction „Every Ti has its Ci“ Microservices maßgeschneidert | Arne Limburg
  • 56. Verteilte Transaktionen via SAGAs • wohldefinierte Abfolge von Compensation Algorithms realisieren verteiltes Rollback • Compensation Algorithms sind fachlicher Code und somit Applikationslogik • Abfolge von lokalen TX & CAs kann beliebig komplex werden! Microservices maßgeschneidert | Arne Limburg
  • 57. Steuerung von SAGAs • Choreographie • Orchestrierung Microservices maßgeschneidert | Arne Limburg
  • 58. Steuerung von SAGAs • Choreographie • Orchestrierung Microservices maßgeschneidert | Arne Limburg
  • 59. Choreographie von SAGAs • implizite Sequenzsteuerung • verteilte Koordination durch Eventfluss • „Wissen“ liegt bei den beteiligten Services Microservices maßgeschneidert | Arne Limburg
  • 60. 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?) Microservices maßgeschneidert | Arne Limburg
  • 61. Steuerung von SAGAs • Choreographie • Orchestrierung Microservices maßgeschneidert | Arne Limburg
  • 62. Orchestrierung von SAGAs • explizite Sequenzsteuerung • zentraler SAGA-Koordinator im Service • Command / Handler Pattern • beteiligte Services haben kein „Wissen“ Microservices maßgeschneidert | Arne Limburg
  • 63. 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) Microservices maßgeschneidert | Arne Limburg
  • 64. Orchestration von SAGAs • contra „Smart Orchestrator & Dump Services“ Pattern, d.h. Risiko, zu viel Business Logic im Orchestrator zu zentralisieren Microservices maßgeschneidert | Arne Limburg
  • 65. Orchestration von SAGAs • btw Orchestrator Will man den wirklich selber bauen? Nein! Alternative 1: Saga Framework Alternative 2: Lightweight Workflow Engine Microservices maßgeschneidert | Arne Limburg
  • 66. Microservices maßgeschneidert | Arne Limburg Dezentrale Datenhaltung Daten-Ownership Caching Transaktionen
  • 67. Worauf es ankommt Klare Kontextgrenzen Unabhängigkeit Konsistenz Microservices maßgeschneidert | Arne Limburg
  • 68. Charakteristika Charakteristika Schneiden von Microservices Schnitt entlang der Prozesse Fachlichkeit in einem Team Konsistenz/Transaktionssicherheit Wenig Kommunikation/Unabhängigkeit Microservices maßgeschneidert | Arne Limburg
  • 69. Wie groß ist klein Size of microservice „guter“ Microservice Modularisierung Teamgröße Austauschbarkeit Infrastruktur Verteilte Kommunikation Transaktionen & Konsistenz
  • 70. Wie groß ist klein Team Size
  • 71. Wie groß ist klein Team Size
  • 72. Size of microservice Number of microservices
  • 74. Microservices maßgeschneidert | Arne Limburg Context Map Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with
  • 75. Microservices maßgeschneidert | Arne Limburg Context Map
  • 76. Microservices maßgeschneidert | Arne Limburg Shared Kernel Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through
  • 77. Microservices maßgeschneidert | Arne Limburg Shared Kernel
  • 78. Microservices maßgeschneidert | Arne Limburg Abstract Core
  • 79. Microservices maßgeschneidert | Arne Limburg Abstract Core Fachliche Basis Saubere Modellierung div. Repräsentationen Zur Kommunikation Trennen von common
  • 80. Microservices maßgeschneidert | Arne Limburg Abstract Core Online Shop Customer ShoppingCart Product Fachliche Basis Saubere Modellierung div. Repräsentationen Zur Kommunikation Trennen von common
  • 81. Microservices maßgeschneidert | Arne Limburg Shared Kernel Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through
  • 82. Microservices maßgeschneidert | Arne Limburg Conway‘s Law Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Organisationen, die Systeme entwerfen, […] sind auf Entwürfe festgelegt, welche die Kommunikationsstrukturen dieser Organisationen abbilden.
  • 83. Microservices maßgeschneidert | Arne Limburg Customer/Supplier Teams Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Organisationen, die Systeme entwerfen, […] sind auf Entwürfe festgelegt, welche die Kommunikationsstrukturen dieser Organisationen abbilden.
  • 84. Microservices maßgeschneidert | Arne Limburg Conformist Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Conformist overlap unilaterally as
  • 85. Microservices maßgeschneidert | Arne Limburg Open Host Services Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Conformist overlap unilaterally as Open Host Service support multiple clients through
  • 90. CONSUMER-DRIVEN CONTRACT TEST Consumer Contract Consumer Provider Consumer Tests Provider Tests
  • 91. MICROSERVICES ARCHITEKTUR Address Validation Service Delivery Service Customer Service Billing Service
  • 92. PIPELINE TO DEPLOY TO STAGE Execute Own Provider Tests Generate Consumer Contract Execute Depending Provider Tests Deploy to Stage
  • 93. BREAKING CHANGE VOM PROVIDER Execute Own Provider Tests Generate Consumer Contract Execute Depending Provider Tests Deploy to Stage
  • 94. BREAKING CHANGE VOM CONSUMER Execute Own Provider Tests Generate Consumer Contract Execute Depending Provider Tests Deploy to Stage
  • 95. Microservices maßgeschneidert | Arne Limburg Published Language Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Conformist overlap unilaterally as Open Host Service support multiple clients through Published Language formalize as
  • 96. Microservices maßgeschneidert | Arne Limburg Anticorruption Layer Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Conformist overlap unilaterally as Anticorruption Layer translate and insulate unilaterally with Open Host Service support multiple clients through Published Language formalize as
  • 97. Microservices maßgeschneidert | Arne Limburg Separate Ways Bounded Context Eric Evans, Domain-Driven Design, Addison-Wesley, © Eric Evans, 2004 Ubiquitous Language names enter Continous Integration keep model unified by Context Map assess/overview relationships with Shared Kernel Overlap allied contexts through Customer Supplier Teamsrelate allied contexts as Conformist overlap unilaterally as Separate Ways free teams to go Anticorruption Layer translate and insulate unilaterally with Open Host Service support multiple clients through Published Language formalize as
  • 99. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 àLiefert Addresse { street: { "name": "Poststraße", "number": "1", }, "city": "26122 Oldenburg" }
  • 100. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 Attribut hinzufügen { street: { "name": "Poststraße", "number": "1", "additionalAdressLine": "2. Obergeschoss" }, "city": "26122 Oldenburg" }
  • 101. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 Attribut hinzufügen { street: { "name": "Poststraße", "number": "1", "additionalAdressLine": "2. Obergeschoss" }, "city": "26122 Oldenburg" } Besondere Anforderung an den Client: Unbekannte Attribute ignorieren à Tolerant Reader Pattern
  • 102. Microservices maßgeschneidert | Arne Limburg TOLERANT READER PATTERN Server schickt { street: { "name": "Poststraße", "number": "1", "additionalAdressLine": "2. Obergeschoss" }... } http://www.example.com/addresses/42 Client erwartet { street: { "name": "Poststraße", "number": "1", }... }
  • 103. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 Attribut-Umbenennung { street: { "name": "Poststraße", "streetName": "Poststraße", "number": "1", "houseNumber": "1", }, "city": "26122 Oldenburg" }
  • 104. Microservices maßgeschneidert | Arne Limburg 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" }
  • 105. Microservices maßgeschneidert | Arne Limburg MAGNANIMOUS WRITER PATTERN Server schickt { street: { "name": "Poststraße", "streetName": "Poststraße", "number": "1", "houseNumber": "1“ }... } http://www.example.com/addresses/42 Client erwartet { street: { "name": "Poststraße", "number": "1", }... } http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
  • 106. Microservices maßgeschneidert | Arne Limburg MAGNANIMOUS WRITER PATTERN Server schickt { street: { "name": "Poststraße", "streetName": "Poststraße", "number": "1", "houseNumber": "1“ }... } http://www.example.com/addresses/42 Client erwartet { street: { "streetName": "Poststraße", "houseNumber": "1", }... } http://tenderware.blogspot.de/2011/05/magnanimous-writer.html
  • 107. Microservices maßgeschneidert | Arne Limburg MAGNANIMOUS WRITER PATTERN Server erwartet PUT http://www.example.com/addresses/42 Client schickt { street: { "name": "Poststraße", "number": "1", }... } http://tenderware.blogspot.de/2011/05/magnanimous-writer.html „Be conservative in what you do, Be liberal in what you expect“ Postels Law (John Postel)
  • 108. Microservices maßgeschneidert | Arne Limburg 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
  • 109. Microservices maßgeschneidert | Arne Limburg 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
  • 110. Microservices maßgeschneidert | Arne Limburg 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", } ... }
  • 111. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 àHerausforderungen: Zusammenführen von Attributen { street: { ... "streetName": "Poststraße", "houseNumber": "1", "addressLine1": "Poststraße 1", } ... }
  • 112. Microservices maßgeschneidert | Arne Limburg 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" }
  • 113. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 àHerausforderungen: Ebene von Attributen ändern { street: { ... "addressLine1": "Poststraße 1" } "addressLine1": "Poststraße 1", ... }
  • 114. Microservices maßgeschneidert | Arne Limburg ABWÄRTSKOMPATIBILITÄT http://www.example.com/addresses/42 àHerausforderungen: Ebene von Attributen ändern { ... "zipCode": "26122", "cityName": "Oldenburg", "location": { "zipCode": "26122", "cityName": "Oldenburg" } }
  • 115. Microservices maßgeschneidert | Arne Limburg 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!
  • 116. Microservices maßgeschneidert | Arne Limburg 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
  • 117. Microservices maßgeschneidert | Arne Limburg 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
  • 118. Microservices maßgeschneidert | Arne Limburg VERSIONSSPRUNG { 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
  • 119. Microservices maßgeschneidert | Arne Limburg INKOMPATIBLE ÄNDERUNG http://www.example.com/v2/addresses/42 àVersionssprung { "addressLine1": "Poststraße 1", "addressLine2": "", "location": { "zipCode": "26122", "cityName": "Oldenburg" } }
  • 120. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Services
  • 121. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Services
  • 122. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Services
  • 123. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Endpoints
  • 124. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Endpoints
  • 125. Microservices maßgeschneidert | Arne Limburg Parallele Versionen – via Endpoints
  • 126. Microservices maßgeschneidert | Arne Limburg DOMÄNENMODELL ALS API Schnittstelle Schnittstelle { 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" } } { "addressLine1": "Poststraße 1", "addressLine2": "“, "location": { "zipCode": "26122", "cityName": "Oldenburg" } } V1 V2-SNAPSHOT
  • 127. Microservices maßgeschneidert | Arne Limburg DOMÄNENMODELL ALS API Schnittstelle Schnittstelle { street: { "name": "Poststraße", "streetName": "Poststraße", "number": "1", "houseNumber": "1", "addressLine1": "Post... 1", "addressLine2": "" } ... } { "addressLine1": "Poststraße 1", "addressLine2": "“, "city": { "zipCode": "26122", "cityName": "Oldenburg" } } V1 V3-SNAPSHOT Schnittstelle { "addressLine1": "Poststraße 1", "addressLine2": "“, "location": { "zipCode": "26122", "cityName": "Oldenburg" }, "city": { "zipCode": "26122", "cityName": "Oldenburg" }} V2
  • 128. • Über URL-Pfad /v2/addresses • Über Query-Parameter /addresses?version=v2 • Über Version-Header X-Api-Version: v2 • Über Version-Attribut am Media-Type application/xml;version=v2 • Über Media-Type application/vnd.de.openknowledge+v2+json ERMITTELN DER VERSION Microservices maßgeschneidert | Arne Limburg
  • 129. • Umbennen von Ressourcen àHttp-Status-Code 301 „Moved Permanently“ • Semantische Änderung von Attributen àAnderen Namen vergeben • Neue Version hat anderes Verhalten àNeue Schnittstelle • PUT zum Setzen leerer Attribute àUnterscheidung zwischen nicht vorhanden und empty WEITERE HERAUSFORDERUNGEN Microservices maßgeschneidert | Arne Limburg
  • 130. Microservices maßgeschneidert | Arne Limburg Schnittstellenversionierung Klare Versionierungsstrategie Mehrere Versionen parallel Definiertes Versionsschema Über Custom Header Über Media-Type Über die URL
  • 131. Microservices maßgeschneidert | Arne Limburg Schneiden des User Interfaces
  • 132. Microservices maßgeschneidert | Arne Limburg Seperate UIs
  • 133. Microservices maßgeschneidert | Arne Limburg API Composition
  • 134. Microservices maßgeschneidert | Arne Limburg API Gateway
  • 135. Microservices maßgeschneidert | Arne Limburg Backends for Frontends
  • 136. Microservices maßgeschneidert | Arne Limburg UI Fragment Composition
  • 137. Microservices maßgeschneidert | Arne Limburg Fazit Es kommt nicht auf die Größe an Orientierung an Use Cases Minimierung der Kommunikation Gemeinsames Verständnis für Fachlichkeit Modellierung der Core Domain Context Map Explizites Leben der Schnittstellen Versionierung Compensation
  • 138. Microservices maßgeschneidert | Arne Limburg FRAGEN ? ? ?
  • 139. KONTAKT Microservices maßgeschneidert | Arne Limburg Arne Limburg, Enterprise Architect OFFENKUNDIGGUT arne.limburg@openknowledge.de +49 (0)441 4082 – 0 / 154 Icons in this presentation designed by “Freepik”, “Nice and Serious” and “Elegant Themes” from www.flaticon.com