Verteile Anwendungen wie Microservices verlagern einen Teil der Komplexität in das Zusammenspiel der Services untereinander. Ein solches Service Mesh, das bis zu dreistellige (oder mehr) Laufzeitinstanzen haben kann, wird sehr schwierig zu beherrschen. Man muss sich mit Fragen auseinandersetzen wie zum Beispiel: Welcher Service wird von welchem Service in welcher Version bei welchem Request-Inhalt wie oft aufgerufen? Wie kann man das Zusammenspiel testen und wie werden einzelne Services durch neue ersetzt? Diese und andere Fragestellungen werden in der Session beleuchtet. Dabei werden auch Werkzeuge vorgestellt, die das Leben mit dem Service Mesh vereinfachen sollen.
2. beim Marathon: ab km 30 ...
●
Fettverbrennung, drastische Ermüdung
●
Oft Entscheidung über Marathon-Finish
●
Richtiges Training
●
Spaghetti Party, Essen und Trinken während Lauf
●
Mentale Vorbereitung
Was tun dagegen?
„Der Mann mit dem Hammer“
3. km 30 bei Microservices?
●
Microservice Projekte starten klein (Greenfield, Zerlegung Monolith)
●
Anfangs ohne Versionierungs-Probleme
●
Mehrere Versionen parallel in Produktion
●
Anzahl der Services steigt
●
Service-Ketten werden etabliert
●
Wie teste ich das Zusammenspiel versionsübergreifend?
●
Schleichender Verlust des Überblicks: wer mit wen in welcher
Version?
5. Was kommt noch bei km 30?
●
Komplexität auch zwischen den Services
●
Fallacies of Distributed Systems
●
Wer kümmert sich darum?
– Container-Systeme?
– Resilienz-Frameworks?
Anwendung sollte nichts davon wissen!
The network is reliable.
Latency is zero.
Bandwidth is infinite.
The network is secure.
Topology doesn't change.
There is one administrator.
Transport cost is zero.
The network is homogeneous.
6. Wohin mit der Resilience?
●
Frameworks (Hystrix (eol!), Failsafe, MicroProfile Fault Tolerance)
●
Probleme:
– richtiges Pattern wird erst in Produktion erkannt (neues Deployment!)
– Abhängigkeit Bibliothek zur Programmiersprache
– Versionsmix der Bibliotheken über alle Services hinweg
– Abhängigkeiten zu anderen Frameworks (Service-Call → LoadBalancing → Service
Registry)
– Service Registry für andere Services verwendbar? Doppelte Service Registry? (hohe
Kopplung der Services an Infrastruktur-Komponenten!)
– Lernkurve bzgl. vieler Frameworks bei jedem Entwickler-Team
●
Alternative: Service Mesh Tool
7. Service Mesh
„The term service mesh is used to describe the network of
microservices that make up such application and the
interactions between them.“ (istio.io)
Ohne Werkzeug lässt sich Service Mesh (Big Ball of Mud)
kaum beherrschen!
Anforderungen an Werkzeug:
●
Verwaltung der Aufrufe auf Layer 7 (Application Layer)
●
Resilienz, Routing-, Security- und Telemetrie-Funktionalitäten
●
Dezentral u. transparent für Services (implementation-independant)
9. Service Mesh Tool ab wann?
●
Hohe Anzahl verschiedener Services
●
Aufruf-Tiefe der Services > 1
●
Einheitliche Umsetzung der Resilienz gewünscht
●
Contemporary testing strategies: Test in Produktionsumgebung
(notwendig?)
13. Envoy Proxy
Design Goal: „The network should be transparent to applications.
When network and application problems do occur it should be easy to
determine the source of the problem.“
●
Als Container gemeinsam mit Service deployed
●
„Man-in-the-Middle“
●
Als Sidecar transparent für Service
●
Service-Discovery, Load-Balancing, Resilience, Health-Checks,
Metrics, Fault Injection
●
Kommunikation mit Mixer (Telemetrie) und Pilot (Policies)
17. Automatic Sidecar Injection
Herzstück von Istio:
Sidecar (Envoy Proxy) automatisch bereitzustellen
●
IPTables Modifikation im Pod
●
Health-Checks durch Sidecar zum Service
●
Restart Pod wenn einer der beiden Container abstürzt
kubectl label
namespace my-namespace
istio-injection=enabled
helm install
install/kubernetes/helm/istio
--name istio --namespace
istio-system
29. Recommendations
●
Marathon-Training: frühzeitig im Projekt mit Werkzeug für
Service Mesh starten
●
Integration in CI/CD (Zero-Downtime Deployments!)
●
Resilienz besser im Sidecar als in Anwendung
●
Integration Tracing/Monitoring in vorhandene
Infrastruktur
●
Neue Testansätze etablieren