Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Service Mesh - was die neue Infrastruktur für Microservices taugt | Microservices Meetup Hamburg November 2020

Hanna Prinz
November 26, 2020
150

Service Mesh - was die neue Infrastruktur für Microservices taugt | Microservices Meetup Hamburg November 2020

Mal ganz ehrlich - Manchmal wünschen wir uns doch den guten alten Monolithen zurück.

Lückenlose Nachvollziehbarkeit von Fehlern, kein Prometheus- und Grafana-Gebastel, keine Vorkehrungen für allerlei Netzwerkprobleme und nur ein Endpunkt, den es abzusichern gilt. Freie Bahn, um Features zu entwickeln. Die Funktionen, die wir rund um unsere Microservices „nebenbei“ implementieren, haben ein wenig Überhand genommen.

Genau das verspricht ein Service Mesh zu ändern. Es hebt Monitoring, Resilienz, Routing und Sicherheit in die Infrastruktur. Wir müssen reden – über sinnvolle Anwendungsfälle für Service Mesh Technologien wie Istio und Linkerd 2 und über den Preis: Komplexität, Ressourcenverbrauch und Performance. Und wie trifft man überhaupt Architekturentscheidungen wie diese?

Hanna Prinz

November 26, 2020
Tweet

More Decks by Hanna Prinz

Transcript

  1. Service Mesh - was die neue Infrastruktur für Microservices taugt

    1 Hanna Prinz @HannaPrinz Microservices Meetup Hamburg
  2. Service Mesh Metriken Konfiguration Retry Timeout Circuit Breaker Routing Verschlüsseln

    Entschlüsseln Autorisierung Metriken ... } @INNOQ @HannaPrinz
  3. Infrastruktur-Service Y Service Mesh Architektur Microservice 1 Microservice 2 Proxy

    Proxy Control Plane App Infrastruktur-Service X Anwendung Data Plane Control Plane Infrastruktur @INNOQ @HannaPrinz
  4. 12 ‣ Was ist ein Service Mesh? ‣ Service Mesh

    Features ‣ Kosten eines Service Mesh ‣ Istio Demo ‣ Service Mesh Implementierungen ‣ Wann man ein Service Mesh (nicht) braucht Agenda
  5. Monitoring Ein Service Mesh kann automatisch "Golden Signals" liefern: Latenz

    Requests/Sekunde Status Codes (Fehler) Auslastung (durch Kubernetes) ... es hat aber keinen Einblick in die Microservices https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/#xref_monitoring_golden-signals @INNOQ @HannaPrinz
  6. Monitoring mit Service Mesh Metriken zum Netzwerkverkehr generieren -> Latenz

    / Antwortzeit -> HTTP Status Codes -> Anfragen pro Sekunde ... einem Monitoring-System zur Verfügung stellen ... und mit Dashboards aufbereiten @INNOQ @HannaPrinz
  7. Tracing •Beantwortet... •Welcher Aufruf erzeugt welchen Folgeaufruf? •Welchen Anteil hat

    jeder Teilaufruf an der Latenz? •Wo ist ein Fehler entstanden? •Umsetzung: Tracing- Backend B C A 3s Latenz #42 #42 #42 Trace von Aufruf #42 A B C 16 @INNOQ @HannaPrinz
  8. Tracing mit Service Mesh Tracing-Header an ausgehende Anfragen kopieren Tracing-Daten

    an ein Tracing-Backend senden Tracing-Daten in Dashboard aufbereiten 17 @INNOQ @HannaPrinz
  9. Routing Typischerweise im Edge Router / API-Gateway implementiert z.B. NGINX,

    Envoy, Ambassador, Traefik Instance A Instance B Load Balancing Instance A Instance B Pfad-basiertes Routing /a /b Instance A Instance B Blue/Green Deployment Instance A Instance B A/B-Testing 50% 50% Instance A Instance B Canary Releasing Berlin Welt @INNOQ @HannaPrinz
  10. Routing mit Service Mesh Microservice 1 Microservice 2 Proxy Proxy

    Control Plane App Anwendung Data Plane Control Plane Routing- Regeln @INNOQ @HannaPrinz
  11. Routing mit Service Mesh GET /neu GET / 90% 10%

    Service 1 Service 2A Proxy Proxy Service 2B Proxy Komplexe Routing-Regeln für A/B Testing und Canary Releasing Service 1 Service 2 Proxy Proxy Service 2 Proxy PRODUKTION STAGING Traffic Mirroring locality=mars locality=* @INNOQ @HannaPrinz
  12. Resilience Was wenn ein Service nicht wie erwartet zur Verfügung

    steht? Ziel: Gesamtsystem funktioniert weiter ... ggf. mit Einschränkungen Maßnahmen: Retry, Timeout, Circuit Breaking 500 @INNOQ @HannaPrinz
  13. Resilience mit Service Mesh Microservice 1 Microservice 2 Proxy Proxy

    Control Plane App Anwendung Data Plane Control Plane Resilienz- Regeln @INNOQ @HannaPrinz
  14. Resilience mit Service Mesh Fault Injection Delay Injection Service 1

    Service 2 Proxy Proxy Timeout Retry Service 1 Service 2 Proxy Proxy 4s 502 @INNOQ @HannaPrinz
  15. Security mit Service Mesh Microservice 1 Microservice 2 Proxy Proxy

    Anwendung Data Plane Control Plane Control Plane App Autorisierungs- Regeln TLS-Zertifikat @INNOQ @HannaPrinz
  16. Security mit Service Mesh Service 1 Service 2 Proxy Proxy

    Authentifizierung mit mTLS Autorisierung Service 1 Service 2 Proxy Proxy GET /api GET / Autorisierungs-Regel TLS-Zertifikat "Service 1" @INNOQ @HannaPrinz
  17. Service Mesh Features Netzwerk-Metriken und Access Logs Tracing-Daten an Backend

    senden Automatische Timeouts & Retrys Automatisches Circuit Breaking Business-Metriken oder -Logs Weitergabe von Tracing-Headern Alerting Cache oder Standardantworten in Circuit Breaker nutzen Automatisches Canary Releasing Authentifizierung mit mTLS Autorisierung Komplexe Routing-Regeln Canary Releasing & A/B-Testing Observability Resilience Routing Security @INNOQ @HannaPrinz
  18. Lernkurve Docker, Kubernetes (bzw. AWS oder Consul) mTLS , Monitoring/Tracing

    (z.B. Prometheus) Service Mesh Funktionsweise & Konfigurationsmodell @INNOQ @HannaPrinz
  19. apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: istio-attributegen-filter spec: workloadSelector: labels:

    app: reviews configPatches: - applyTo: HTTP_FILTER match: context: SIDECAR_INBOUND proxy: proxyVersion: '1\.6.*' listener: filterChain: filter: name: "envoy.http_connection_manager" subFilter: name: "istio.stats" patch: operation: INSERT_BEFORE value: name: istio.attributegen typed_config: "@type": type.googleapis.com/udpa.type.v1.TypedStruct type_url: type.googleapis.com/envoy.extensions.filters.http.wa value: config: configuration: | { "attributes": [ { "output_attribute": "istio_operationId", "match": [ { "value": "GET /users", "condition": "request.url_path == '/users' && }, { "value": "POST /order", "condition": "request.url_path == '/order' && }, { "value": "GET /invoice/{id}", "condition": "request.url_path.matches('^/invo && request.method == 'GET'" } ] } ] } vm_config: runtime: envoy.wasm.runtime.null code: local: { inline_string: "envoy.wasm.attributegen" } Service Mesh Magie basiert auf einem Haufen YAML apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: istio-attributegen-filter spec: workloadSelector: labels: app: reviews configPatches: - applyTo: HTTP_FILTER match: context: SIDECAR_INBOUND proxy: proxyVersion: '1\.6.*' listener: filterChain: filter: name: "envoy.http_connection_manager" subFilter: name: "istio.stats" patch: operation: INSERT_BEFORE value: name: istio.attributegen typed_config: "@type": type.googleapis.com/udpa.type.v1.TypedStruct type_url: type.googleapis.com/envoy.extensions.filters.http.was value: config: configuration: | { "attributes": [ { "output_attribute": "istio_operationId", "match": [ { "value": "GET /users", "condition": "request.url_path == '/users' && r }, { "value": "POST /order", "condition": "request.url_path == '/order' && r }, { "value": "GET /invoice/{id}", "condition": "request.url_path.matches('^/invoi && request.method == 'GET'" } ] } ] } vm_config: runtime: envoy.wasm.runtime.null code: local: { inline_string: "envoy.wasm.attributegen" }
  20. Lernkurve Docker, Kubernetes (bzw. AWS oder Consul) PKI , Monitoring/Tracing

    (z.B. Prometheus) Service Mesh Funktionsweise & Konfigurationsmodell Einfluss des Service Mesh auf Applikations-Architektur Betriebserfahrungen sammeln Updates, Debugging, Customization @INNOQ @HannaPrinz
  21. Latenz zur Laufzeit •Zusätzliche ~3ms Latenz* für jede Anfrage zwischen

    Services! •Abhängig von der Service Mesh Implementierung & der Kommunikation zwischen den Services Stark abhängig vom Projekt → eigener Benchmark empfehlenswert! *https://istio.io/latest/docs/ops/deployment/performance-and-scalability/ @INNOQ @HannaPrinz
  22. Ressourcenverbrauch zur Laufzeit •Zusätzliche Containers für Control Plane & Sidecars

    •→ erhöhter Verbrauch von CPU & Memory •Ressourcenverbrauch hängt ab von •... der Service Mesh Implementierung •... der Anzahl von Services & Pods •... der Menge der Anfragen → eigener Benchmark empfehlenswert! @INNOQ @HannaPrinz
  23. Komplexität •Anpassungen abseits vom happy path •Verlagerung von Funktionen aus

    den Services in das Mesh (Retry/Timeout, mTLS) •Organisatorische Aspekte: Wem gehört die Mesh-Konfiguration? •Debugging •Debugging •Debugging ... aber der wahre Preis eines Meshes ist @INNOQ @HannaPrinz
  24. Mehr zu den Implementierungen Istio Talk: Istio, Linkerd & Co

    - Service Meshes im Vergleich @INNOQ @HannaPrinz ... in 2 Wochen auf dem INNOQ Technology Day
  25. Service Mesh Löst viele wesentliche Probleme von Microservices + Eine

    weitere komplexe Technologie – ... ohne Codeänderungen! Latenz- und Ressourcen- Overhead @INNOQ @HannaPrinz
  26. Entscheidungshilfe Service Mesh Indikatoren Kriterien für die Auswahl • Viele

    Microservices, viele synchrone Aufrufe • Viele ungelöste Probleme beim Monitoring, Routing, Resilienz und/oder Security • Großteil läuft in Kubernetes • Welche Features fehlen wirklich? • Vorhandene Infrastruktur - Kubernetes, Consul, AWS, ... • Zeitliche und kognitive Kapazität im Team • Aktivität der Community @INNOQ @HannaPrinz Ziel: So viel Komplexität wie nötig, aber so wenig wie möglich
  27. Mehr zum Thema • Service Mesh Vergleich auf servicemesh.es https://servicemesh.es/

    • Gut gesiebt: Service Meshes im Vergleich https://www.innoq.com/de/articles/2020/10/service-meshes-im-vergleich/ • Artikel: Glücklich ohne Service Mesh https://www.innoq.com/de/blog/gluecklich-ohne-service-mesh/ • Podcast zu Service Meshes https://www.innoq.com/de/podcast/059-service-meshes-1/ • Beispiel-Anwendung auf GitHub https://github.com/ewolff/microservice-istio • Tutorial von Linkerd https://linkerd.io/2/tasks/ • Tutorial von Istio https://istio.io/docs/setup/getting-started/ • Artikel: Alle 11 Minuten verliebt sich ein Microservice in Linkerd https://www.innoq.com/en/articles/2020/01/linkerd2/ • Beispiel-Anwendung mit Istio und Linkerd Tutorial on GitHub https://github.com/ewolff/microservice-istio https://github.com/ewolff/microservice-linkerd @INNOQ @HannaPrinz GOTO 2020 • Getting started with Service Mesh https://www.youtube.com/watch?v=w14ge2838Vs
  28. Krischerstr. 100 40789 Monheim am Rhein Germany +49 2173 3366-0

    Ohlauer Str. 43 10999 Berlin Germany +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany +49 2173 3366-0 Kreuzstr. 16 80331 München Germany +49 2173 3366-0 Hermannstrasse 13 20095 Hamburg Germany +49 2173 3366-0 Gewerbestr. 11 CH-6330 Cham Switzerland +41 41 743 0116 innoQ Deutschland GmbH innoQ Schweiz GmbH www.innoq.com Danke! Fragen? Hanna Prinz [email protected] @HannaPrinz Icons made by srip, Smashicons, Nikita Golubev, Freepik, surang and Darius Dan from www.flaticon.com and licensed by CC 3.0 BY Service Mesh Primer - 2nd Edition Kostenlos auf leanpub.com/service-mesh-primer