zagandesign - Fotolia

Wie sich die Leistung von Microservices und Cloud-Anwendungen optimieren lässt

Microservices können bei der Entwicklung von Cloud-Anwendungen ein nützlicher Ansatz, aber auch schädlich sein. Es gilt verschiedenes zu beachten.

Es gibt nur wenige Technologie-Tools, die grundsätzlich so gut sind, dass man sie nicht falsch verwenden kann. Das aktuelle Interesse an Microservices hat bereits zu einigen Versuchen geführt, die sowohl beeindruckende Erfolge als auch beängstigende Fehler aufgezeigt haben.

Man sollte daher sichergehen, dass die eigenen Pläne für Microservices und die Cloud keine Probleme bei der Leistung und Qualität der Erfahrung (Quality of Experience, QoE) verursachen. Es ist wichtig, die spezifischen Auswirkungen von Microservices auf die Performance zu kennen, Microservice-basierte Anwendungen entsprechend zu entwickeln, um die Qualität der Erfahrung zu maximieren und Schritte in der Computing- und Netzwerkarchitektur zu ergreifen, um die Latenz zu minimieren und die Verfügbarkeit zu maximieren.

Anwendungen, die auf Microservices basieren, erweitern den Grundgedanken der Komponentisierung. Sie schaffen eine größere Anzahl funktional spezialisierter Einzelteile, die über verschiedene Applikationen hinweg gemeinsam genutzt werden können und über ein Unternehmensnetzwerk miteinander verbunden sind.

Viele sehen Microservices als eine natürliche Weiterentwicklung der serviceorientierten Architektur (SOA) oder von Anwendungen an, die auf den Webprinzipien von abstrahierten Ressourcen und Representational State Transfer (REST) basieren. Andere betrachten sie als Möglichkeit, die Agilität der Cloud nutzen zu können. Es ist die Balance dieser beiden Visionen, zwischen denen Leistungsvorteile und Risiken liegen.

Jede Anwendung, die ihre Komponenten über eine Netzwerkverbindung bindet, führt zu Verzögerungen, die nicht vorhanden sind, wenn die Komponenten eng in einem einzigen Image gekoppelt wären. Da Microservices-Anwendungen stärker in Komponenten einteilen, führen sie zu vermehrten Netzwerkverbindungen und möglicherweise zu mehr Verzögerungen. Die Frage ist, wie lässt sich diese Verzögerung minimieren oder kompensieren, so dass die Leistung insgesamt stabilisiert oder über den Microservice-Übergang sogar verbessert werden kann.

Zumindest ist es skalierbar

Der erste Faktor, der eine verbesserte Microservices- und Cloud-Anwendungsleistung ermöglicht, ist die Skalierbarkeit von Microservices-Instanzen unter Last. Richtig designt, können Microservices horizontal skaliert werden, was bedeutet, dass zusätzliche Instanzen des Service erstellt werden können, um auf Workloads zu reagieren. Um dies auszuführen, ist ein Mechanismus für die Lastenverteilung zwischen den Instanzen erforderlich. Es ist einfacher, wenn man die Microservices stateless (zustandslos) entworfen hat oder zum Beispiel eine Backend-Zustandskontrolle verwendet.

Der Trick ist, die Skalierungsbemühungen auf Microservices zu konzentrieren, die tatsächlich davon profitieren. Load Balancing führt zu einer zusätzlichen Verzögerung des Netzwerk-Managements. Man sollte damit beginnen, sich auf Microservices zu konzentrieren, die sich vernünftig auf vier oder mehr Instanzen skalieren lassen, um die Ausgleichsverzögerung zu begrenzen. Computing-gebundene Prozesse sind einfach skalierbar. Aber diejenigen, die viel Festplattenzugriff erfordern oder andere Microservices verwenden, können schwieriger skalierbar sein.

Die zweite Möglichkeit, die Leistungsfähigkeit von Microservices und Cloud-Anwendungen zu verbessern, ist die Abstraktion des Datenbankzugriffs in logische Abfragen. Datenbanken werden fast immer an einem einzigen festen Standort gehostet, und häufig auf der Data-Center-Seite einer Hybrid Cloud. Der Datenbankzugriff ist somit netzwerkverbunden und die Verzögerung kann angesammelt werden, wenn eine große Anzahl Datensätze untersucht werden soll. Ein Microservice, der in der Nähe der Datenbank gehostet wird und als Eingabe eine High-Level-Abfrage oder Anforderung anstelle eines I/0-Befehls verwendet, kann erheblich die Qualität der Erfahrung verbessern.

Obwohl jeder dieser Faktoren die Leistung von Microservices und Cloud-Anwendungen verbessern kann, reicht es möglicherweise nicht aus, grundlegende Probleme mit der Netzwerk-Latenz zu überwinden, wenn Anwendungsdesign und Microservice-Einsatz nicht optimiert werden.

Wie bereits beschrieben, werden die besten Microservices in einer stateless Form entwickelt. Auf diese Weise kann jede Kopie eines Microservices eine Anfrage anordnen, ohne Informationen zu verwenden, die in ihm von einem früheren Teil eines Transaktionsdialogs gespeichert sind.

Stateless Designs werden häufig in der Webprogrammierung genutzt, sind aber weniger häufig in der nativen Entwicklung von SOA und .NET anzutreffen. Entwickler sind möglicherweise nicht mit der Technik vertraut. Doch können Middleware und Entwickler-Tools jedem helfen, Ansätze für eine optimale Performance zu beschleunigen und zu standardisieren.

Das Design nicht komplex gestalten

Ein häufiger Fehler beim Entwerfen von Microservices ist, die Kopplung der Services zu überdenken, um die Laufzeitbindung zu unterstützen. SOA wurde entwickelt, um Anwendungen zu erlauben, Services dynamisch zu finden. In den meisten Installationen sind Servicestandorte und Workflow-Steuerung tatsächlich ziemlich konstant. Das trifft wahrscheinlich auch auf Microservice-Anwendungen zu, doch viele sind dafür entworfen, einen API-Broker zu verwenden, um eine Anwendung mit dem Microservice zu verbinden, die diese benötigt.

API-Broker können die Agilität bei der Entwicklung verbessern, doch sie beeinträchtigen fast immer die Leistung. Wird ein API-Broker benötigt, sollte man versuchen, die Funktion mit dem Microservice Load Balacing zu verbinden. In dem Fall muss man nicht zwei zusätzliche Schritte im Microservice Workflow einführen.

Werden manche Microservices stärker verwendet, sollte man in Erwägung ziehen, diese außerhalb des Broker Frameworks zu bewegen und sie als RESTful-Services zu veröffentlichen. Das reduziert den Microservice Overhead für diese Anwendungen, denn diejenigen, die stärker verwendet werden, brauchen keine Laufzeitbindung.

Der andere häufige Fehler, den es zu vermeiden gilt, sind ineffiziente Microservices-Strukturen. Ein Microservice sollte klein genug sein, um generell nützlich zu sein, aber nicht so klein, dass er zusammenhängende logische Funktionen in Stücke bricht. Übersegmentierung verstärkt Verzögerungen. Man sollte außerdem vermeiden, dass Microservices andere Microservices aufrufen, da diese Aufeinanderfolge von API-Aufrufen zu Verzögerungen führt, die schwer zu erkennen sind, ohne die gesamte Microservice-Logik zu untersuchen.

Mehr zum Thema Microservices:

Microservices testen: Auf diese Punkte sollten Sie achten.

Per Amazon API Gateway auf eine Microservice-Architektur zugreifen.

Für Docker und Microservices: Anleitung zur Installation von VMwares Photon OS.

Was ist der Unterschied zwischen SOA und einer Microservice Architektur?

Es gibt außerdem nützliche Schritte für die Leistungsverbesserung außerhalb der Microservices selbst. Ein bekannter Schritt ist Load Balancing. Die Effizienz der Microservices-Skalierbarkeitspraktiken hängen in großen Teilen davon ab, ob man die Arbeitslasten auf alle Instanzen verteilen kann.

Die Effizienz wird jedoch auch durch Netzwerkverzögerungen zwischen Benutzern und einem Load Balancer sowie zwischen einem Load Balancer und allen Microservice-Instanzen beeinflusst. Wenn ein Microservice Datenbankressourcen verwendet, muss man zusätzlich die Zugriffsverzögerungen für die Ressourcen berücksichtigen.

All dies erfordert eine sorgfältige Kontrolle darüber, wo Microservice-Instanzen gehostet werden. Das bedeutet, dass die DevOps- oder Bereitstellungs-Tools Hosting- und Verbindungsrichtlinien erzwingen müssen, um minimalen Verzögerungen zu gewährleisten.

Folglich kann die Leistung von Microservices und Cloud-Anwendungen gesteigert oder ernsthaft beeinträchtigt werden. Die Auswirkungen von Microservices auf die Leistung ist oft schwer zu beurteilen. Das bedeutet, dass man nicht nur während der Entwicklung und Bereitstellung behutsam sein muss, sondern wann immer Änderungen im Anwendungs-Workflow oder der Struktur vorgenommen werden. Probleme können sich jederzeit einschleichen und nur die sorgfältige Überprüfung und Tests können den Erfolg sicherstellen, wenn es um die Leistung von Microservices und Cloud-Anwendungen geht.

Folgen Sie SearchEnterpriseSoftware.de auch auf Twitter, Google+, Xing und Facebook!

Erfahren Sie mehr über Cloud Computing

- GOOGLE-ANZEIGEN

ComputerWeekly.de

Close