Ein Service-Mesh verbindet Microservices miteinander, wodurch die Sicherung und Orchestrierung von Container-Komponenten sowie die Arbeit für Cloud-Architekten vereinfacht wird.
Zuerst hieß es: Anwendungen überall und für alles, dann kamen die Microservices (und die Container-Technologien, die diese ermöglichen). Was ist die nächste Innovation, die dazu beitragen wird, dem Benutzer durch Anwendungen eine hervorragende Erfahrung zu bieten? Das Service-Mesh.
Der Microservice-Ansatz stützt sich auf kleine Komponenten mit einem einzelnen Zweck, die zur Bildung größerer, komplexerer Anwendungen verwendet werden. Microservices können für beinahe alles erstellt werden, und da sich alle Microservices auf eine einzige Fähigkeit konzentrieren, lassen sie sich relativ schnell entwickeln. Je mehr Funktionen Sie sich jedoch wünschen, desto komplexer wird es, die Microservices-Komponenten zu koordinieren.
Traditionelle Anwendungen (manchmal auch Monolith-Anwendungen genannt) werden langsamer entwickelt, bieten aber Vorteile. Da viele separate Funktionen von einem einzigen Programm ausgeführt werden, ist die Koordination zwischen den Komponenten im Allgemeinen in das System integriert. Es gibt nur eine einzige Codequelle, was die Fehlersuche und -behebung bei traditionellen Anwendungen erleichtert.
Ein Service-Mesh ist eine transparente Infrastrukturebene, die die Kommunikation zwischen Microservices erleichtert. Dadurch erhalten Anwendungen, die mit Microservices erstellt wurden, die gleichen Vorteile wie traditionelle Anwendungen, z. B. Resilienz, Beobachtbarkeit und Sicherheit.
Der Wechsel von Monolithen zu Microservices wurde vor allem durch die Notwendigkeit angetrieben, dass Anwendungsteams agiler sein und schneller arbeiten müssen. Durch die Reduzierung einer großen Anwendung in viele kleine Elemente konnten sich einzelne Teams spezialisieren. Sie konnten Arbeiten schneller wiederholen, da sie sich nicht mehr um jeden Aspekt der Monolithen kümmern mussten.
Diese Schnelligkeit und Agilität haben jedoch einen Preis: eine erhöhte Komplexität. Microservices vereinfachen die Entwicklung, bringen aber auch neue Herausforderungen mit sich, insbesondere im Zusammenhang mit der Sicherung und Orchestrierung mehrerer, kurzlebiger Komponenten. Das Service-Mesh ist eine Möglichkeit für Entwickler, die Komplexität bei der Skalierung von Anwendungen, die Microservices nutzen, zu reduzieren.
Das Service-Mesh ist eine Möglichkeit für Entwickler, die Komplexität bei der Skalierung von Anwendungen, die Microservices nutzen, zu reduzieren.
In einem kürzlich erschienenen Podcast drückte Andrew Jenkins, Mitbegründer und CTO von Aspen Mesh, es so aus: „In einer Service-Mesh-Umgebung besteht die größte Veränderung nicht darin, was Anwendungsentwickler tun müssen, sondern in all den Dingen, die sie nicht tun müssen.“ Zum Beispiel bietet die Sicherheitskomponente eines Service-Meshs Authentifizierungen und verwaltet, ob Anwendung einer anderen vertraut. Wenn eine Anfrage fehlschlägt, verfügt der Plattformbetreiber über die Tools, um festzulegen, ob der Microservice einen erneuten Versuch startet oder diesen einstellt.
In dieser neuen Umgebung können sich die Entwickler darauf konzentrieren, Anfragen bis hinunter auf die Service-Mesh-Ebene zu bringen. Der Plattformbetreiber – mit Zugang zu Tools, die die gesamte Kommunikation zwischen Microservices beobachten – ist in der Lage, dem Anwendungsentwickler eine ganz neue Palette von Daten und Metriken anzubieten. „In einem Service-Mesh muss man das Problem nur an einer Stelle beheben, und dann wird es überall behoben. Dieselbe Konsistenz taucht immer wieder auf“, so Jenkins.
Stellen Sie sich das Service-Mesh als einen leistungsfähigen neuen Werkzeugkasten vor. Es gibt Werkzeuge für die Sicherheit, die Transaktionsverarbeitung, die Verschlüsselung, Empfehlungsdienste, Distributed Tracing... die Liste lässt sich beliebig fortsetzen. Leistungsstarke Werkzeuge werden Ihnen aber nicht helfen, wenn Sie nicht wissen, wie man sie einsetzt. Für eine erfolgreiche frühe Umsetzung des Service-Mesh-Ansatzes benötigen Sie eine hohe Praxiserfahrung in Cloud-Architekturen und ein Plattformteam, das Erfahrung in der Definition von Infrastrukturdiensten für Entwickler hat.
Viele Organisationen betreiben erfolgreich Kubernetes und andere Containertechnologien ohne ein Service-Mesh. Mit Kubernetes-Standardimplementierungen lassen sich Probleme bei der Bereitstellung sehr gut lösen. Allerdings treten bei Kubernetes-Anwendungen in großem Maßstab Laufzeitprobleme auf, die nicht optimal gelöst werden, wie z. B. bei der Verschlüsselung, der Unterbrechung der Verbindung und dem dynamischen Routing des Datenverkehrs. Lösungen wie NGINX und andere Container-Ingress-Lösungen füllen einen Großteil dieser Lücke, indem sie Mittel zur Erfassung, Gestaltung, Steuerung und Visualisierung des Netzwerkverkehrs bereitstellen, sobald dieser in eine Anwendung hineingelangt. Wenn Entwickler jedoch an die Grenzen dessen stoßen, was diese Tools leisten können, verspricht das Service-Mesh einen neuen Grad an Transparenz darüber, was containerisierte Microservices leisten können.
Im Moment ist das Service-Mesh noch topaktuell. Für Organisationen, die sich bereits voll und ganz mit Kubernetes beschäftigen oder die Entwicklungen mit Kubernetes planen, ist es deutlich einfacher, frühzeitig ein Service-Mesh zu implementieren, als es im weiteren Verlauf einzupflegen. Wenn Sie Kubernetes skalieren und den Verwaltungsaufwand minimieren möchten, benötigen Sie ein Service-Mesh.
Für Organisationen mit komplexen Sicherheitsanforderungen oder Unternehmen, die stark auf Anwendungen angewiesen sind, welche auf Microservices basieren, kann ein Service-Mesh die Bereitstellung und Wartung beschleunigen, die Sicherheit erhöhen und zur Optimierung des Ressourcenverbrauchs beitragen. Service-Mesh-Umgebungen erhöhen die Transparenz und liefern Daten auf Mikro- und Makroebene, die zur Optimierung von Anwendungen genutzt werden können.
Das Service-Mesh ist die nächste Stufe des Fortschritts für Microservices und Containertechnologien. Mit der richtigen Strategie ist es ein leistungsstarkes Tool.