Mit Microservices wird versucht, eine Anwendung in möglichst kleine, unabhängige Teile zu schneiden, die dann miteinander kommunizieren. Diese Idee bringt einige Vorteile mit sich. Wie bekommt man es aber hin, dass dabei die Fachlichkeit nicht zerpflückt wird und so der Blick für das große Ganze verloren geht? Wie schneide ich die Services richtig? Und worauf muss bei der Kommunikation der Services untereinander geachtet werden? Der Workshop zeigt, wie Domain-driven Design dabei helfen kann, diese Fragen sinnvoll zu beantworten, und was es sonst noch zu beachten gilt.
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
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
19. Microservices maßgeschneidert | Arne Limburg
DOMÄNENMODELL
Repräsentation der Domäne
Fachlich korrekt und konsistent
Weiterentwicklung durch alle Beteiligten
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
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)
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)
33. Microservices maßgeschneidert | Arne Limburg
„Eine Einheit, die von einem kleinen Team
komplett – also fachlich und technisch –
beherrscht werden kann.”
Oliver Wegner (OTTO)
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
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
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
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
69. Wie groß ist klein
Size of microservice
„guter“
Microservice
Modularisierung
Teamgröße
Austauschbarkeit
Infrastruktur
Verteilte
Kommunikation
Transaktionen &
Konsistenz
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
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",
}
...
}
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
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
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