51
Stefan Toth - embarc Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

  • Upload
    buidang

  • View
    220

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Stefan Toth - embarc

Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Page 2: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

embarc – Eine Architekturskizze

Page 3: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Was sind Microservices?

“In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.”

Charakteristische Eigenschaften!  Zerlegung in relativ kleine (fachliche) Services   Services sehr lose gekoppelt   Services einzeln installierbar und upgradebar   Dezentrale Datenhaltung   Hoher Freiheitsgrad bei Technologieauswahl

(James Lewis, Martin Fowler)

Page 4: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Im Prinzip…

Schichten Vertikalen

Page 5: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Microservices yeah!

Google Trends: Web Search, weltweit, ab 2004

Page 6: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Ziele

•  Skalierbarkeit •  Autonomie von Subprojekten & Teams •  Schnellere Time-To-Market für neue Features •  Bessere Wartbarkeit •  Technologische Evolutionsfähigkeit

–  Langlebigkeit

•  … •  [WhateverYourManagerNeeds]

Page 7: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Herausforderungen

•  Komplexität •  (technischer) Overhead •  Datensegregation •  Top-Down Planbarkeit •  Verantwortungsübernahme

Page 8: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Microservices Flowchart

Quelle: https://www.stavros.io/posts/microservices-cargo-cult/

Page 9: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#1Wiederverwendung

Page 10: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Schrottkunst / “Das kann man noch Essen”

Das kann man !noch verwenden.!

Das ist Kunst!

Page 11: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Share as much as possible…

•  Wiederverwendetes Service ist von allen Services nutzbar

•  Abhängigkeitssenke •  Häufig ein Gateway zu Daten

–  Produkt –  Partner –  …

Page 12: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum nicht?

Abhängigkeiten bedeuten Kommunikation, schwere Abschätzbarkeit von Änderungen, technischen Schnitt

–  Skalierbarkeit –  Autonomie von Subprojekten & Teams –  Schnellere Time-To-Market für neue Features –  Bessere Wartbarkeit

1.  Komplexität im Shared Service 2.  Teamabhängigkeiten

3.  Bottleneck

Page 13: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Redundanz mit Variation…

•  Echte Vertikalen •  Eventuell unterschiedliche

Datenrepräsentationen von “überlappender” Fachlichkeit

•  Evtl. unterschiedliche Persistenz (optimiert auf Service-Zweck)

•  Weniger Interaktion beim Request

•  Asynchroner Abgleich notwenig

Page 14: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#2Orchestrierung

Page 15: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Konzert Klassisch

Einer hat den Überblick,!Die anderen machen !oder fliegen!

Page 16: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Orchestrierung - Middleware

•  Mehrere Services für einen Business Request

•  Middleware zur Koordinierung von Service Calls –  Intelligentes Routing –  Anreicherung von

Nachrichten –  Umformung von Nachrichten –  Protokoll-Transformationen

Master-Plan!

Page 17: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Das SOA Erbe

Page 18: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum nicht?

Jedes Service sollte unabhängig weiterentwickelbar, testbar, deploybar sein (“self-contained”)

–  Skalierbarkeit –  Autonomie von Subprojekten & Teams –  Schnellere Time-To-Market für neue Features –  Bessere Wartbarkeit

Unabhängigkeit

Page 19: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Interaktion…

Event!

x

!

x

Schnittstelle!Aufruf!

Änderungswünsche / Tests (Pact, Pacto)

Page 20: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

API-Gateway ≠ Orchestrierung

•  Nicht in jeder Microservice-Ausprägung vorhanden

•  Unintelligent •  Services werden für das UI

“gesammelt” –  Usability –  Team-Optimierung

Facade!

Page 21: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#3Zu wenig Automatisierung

Page 22: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Dunkles Zeitalter

manuelle Arbeit!braucht !

(langsamen) Rythmus !

Page 23: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Monolith è …

(Deployment)Monolith!

•  Von 1 auf 20 oder mehrere100 •  Manuelle Tätigkeiten werden zu

aufwändig (weggelassen) •  Ops wird querschnittlich "

(ohne Know-How) •  Neue Fähigkeiten nötig:

–  Mehr Remote –  Mehr Ausfälle –  Logging (Interaktionspfade)

Page 24: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Themen für Automatisierung

•  Build •  Test

–  Funktionalität –  Performance/Last –  Security

•  Deployment •  Konfiguration •  Monitoring inkl. Failover •  …

Page 25: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum?

Page 26: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum?

Blindflug bringt Chaos und Verwässerung. Zu seltenes Deployment macht Fehler nicht nachvollziehbar und zuweisbar

–  Autonomie von Subprojekten & Teams –  Schnellere Time-To-Market für neue Features –  Bessere Wartbarkeit

1.  Etwas Einblick (Zustand, Fehler) 2.  Verantwortung spürbar machen 3.  Lauffähiges System garantieren

Page 27: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Build-Deploy-Monitoring

Altes Service-Deployment

Neues Service-Deployment Monitoring!

Deployment!

Build / Package!

Page 28: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Plattform-Teams helfen

•  Lernende Plattform-Teams: Separate Teams verantworten grundlegende Plattformen und Technologien. Plattform ist Selbstbedienung –  Deployment-Werkzeuge –  Infrastruktur-Technologien –  Datenbanken –  Container –  etc.

Page 29: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#4Fertigstellung zu Q4 201x

Page 30: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Work in progress!Zum Stichtag tuts weh!

Dann… Anderes Projekt…!

Page 31: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Die Microservice-Initiative…

jetzt! Q4 2016!

Q2 2017!

Q4 2017!

•  Vielleicht auch ein 3-Jahres-Plan… •  Noch immer: Projekt-Gedanke

Page 32: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Projekt- vs. Produktentwicklung

Projekt! Wartung!

Qualität!

Kosten!

Produktentwicklung!

Stetige Investition in Gesundheitszustand und Qualität!

Projekt! Wartung!

Page 33: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum nicht Projekte?

Ohne Kontinuität keine Verantwortungsübernahme, keine Innovation, keine Langlebigkeit

–  Autonomie von Subprojekten & Teams –  Schnellere Time-To-Market für neue Features –  Bessere Wartbarkeit –  Technologische Evolutionsfähigkeit

1.  Wir bauen Produkte (meistens) 2.  Verantwortung mit Enddatum?

3.  Microservice-Evolution ist stetig

Page 34: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Wie entsteht Innovation?

Freedom & !Responsibility!

Page 35: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Wie endet das nicht im Chaos?

•  Entwickler mit der Verantwortung konfrontieren (Ziele) !–  Tests für Qualitätskriterien (Latenz, Zuverlässigkeit, Last,…) –  Continuous Delivery, siehe #3

•  Geringe Zähigkeit fördern

“When faced with a change, engineers usually find more than one way to make the change. Some of the ways preserve the design, others do not (i.e. they are hacks.) When the design preserving methods are harder to employ than the hacks, then the viscosity of the design is high. It is easy to do the wrong thing, but hard to do the right thing.” (Robert C. Martin)

Zähigkeit...!

Page 36: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Standard-Blueprint von Netflix

Page 37: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Abweichen vom Standard?

•  Hat einen “echten” Grund (nicht Gemütlichkeit) •  Man ist motiviert andere zu begeistern

–  Etwas als Standard zu etablieren bedeutet ein eigenes Team, weniger Druck, …

Page 38: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#5“Grenzzaun” Security

Page 39: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Nach der Aktion !darf man Alles…!

Page 40: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Firewalls, Berechtigungsservice, OWASP

Authentifizierung!Autorisierung !

Page 41: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum nicht?

•  Erste Hürde wird regelmäßig genommen •  Kein Monolith, mehr remote-Kommunikation •  Confused deputy

irgendwas!wichtiges!

Page 42: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Warum nicht?

•  Zentrale Autorisierung: –  Zentrales Angriffsziel –  Muss evtl. Feingranular über Funktionen und

Berechtigungen Bescheid wissen. Service-Kapselung wird verletzt

Authentifizierung!Autorisierung !

Page 43: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Authentication Security

•  Authentifizierung über OAuth 2.0 / Open ID Connect –  Authentifizierungsserver, von allen Services nutzbar

•  Passwort Daten schützen –  Salted, Peppered Hashes –  Passwort Hashing (HMAC SHA512) –  Passwort Stretching (PBKDF2 100 Durchläufe) –  Passwort Komplexität

•  Federated Authentication –  Google –  …

Page 44: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Ansätze im Microservices-Umfeld I

•  Capability-Based Security –  Use-once Tokens gg. Request Duplizierung –  siehe: JWT (Jason Web Tokens)

•  Mandatory Access Control (MAC) –  Statt DAC (Identität), RBAC (Rolle) gibt es Zonen für

Funktionen (Zugriff, Benutzung, Konvertierung) oder auch Ausschluss von Funktionen

–  Boundaries First!

irgendwas!wichtiges!

Page 45: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Ansätze im Microservices-Umfeld II

•  Sensiblen Daten nicht im System halten

User Agent

Eigene !App

Ext. Service! Sensible!

Daten!

Page 46: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Ansätze im Microservices-Umfeld III

•  Black Hole APIs –  Nicht nur READ und READ+WRITE –  WRITE erlaubt Datenzugriff loszuwerden

•  HTTPS für Service-Aufrufe –  Public Key Infrastructure (PKI): "

Zertifikate, Keys, Certification Authority –  Vereinfachungen für Entwickler: z.B. Netflix Lemur

write

read

Page 47: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

#6Aber…

Page 48: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Antipatterns - Honorable Mentions

•  Starrer Serviceschnitt (kein Management) –  Führt zu breiteren Schnittstellen –  Führt zu fachliche Verwässerung

•  Fokus auf Business-Logik •  Kosteneinsparung als Grund •  Top-Down Organisation

–  Freiheit? Verantwortung? •  “Intelligente” Lösungen – weil wir können •  …

Page 49: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Ziele

•  Skalierbarkeit •  Autonomie von Subprojekten & Teams •  Schnellere Time-To-Market für neue Features •  Bessere Wartbarkeit •  Technologische Evolutionsfähigkeit

–  Langlebigkeit

•  … •  [WhateverYourManagerNeeds]

#1, #2 #1, #2, !#3, #4

#1, #2, #3, #4 #4

#5

Page 50: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

Spicker #3: „Microservices“

è  http://architektur-spicker.de

Unsere Architektur-Spicker beleuchten die konzeptionelle Seite der Softwareentwicklung.

!In dieser Ausgabe:!•  Was ist bei Microservices

entscheidend? •  Wie nutzen Sie die Ansätze? •  Welche Kompromisse gehen

Sie dabei ein?

PDF, 4 Seiten Kostenloser Download.

Page 51: Wie Microservice-Ansätze scheitern – 5 Anti-Patterns

[email protected]

xing.to/sto

@st_toth

Vielen Dank.

DOWNLOAD FOLIEN: http://www.embarc.de/blog/