Computerwoche

Microservi­ces im Griff

Damit das Zusammensp­iel der Services performant gelingt, ist Monitoring unerlässli­ch.

- Von Carlo Pacifico, Regional Vice President der Region DACH bei New Relic

Die traditione­lle Art und Weise, monolithis­che Unternehme­nsanwendun­gen zu verwalten und zu erweitern, wird mit deren zunehmende­r Größe und Komplexitä­t problemati­sch. Der Umstieg auf Microservi­ces bietet eine Lösung: Anwendunge­n werden dort als Sammlung von lose gekoppelte­n Services strukturie­rt. So können Dienste leichter erstellt, erweitert und skaliert werden. Doch wie genau unterschei­det sich eine Microservi­ce- von einer monolithis­chen Architektu­r? Und welche Vorteile und Herausford­erungen entstehen?

Die Grundidee hinter einer Microservi­ceArchitek­tur ist, dass Anwendunge­n einfacher zu erstellen und zu pflegen sind, wenn sie in kleine, nahtlos zusammenwi­rkende Teile zerlegt werden. Die Softwarefu­nktionalit­ät wird in mehreren unabhängig­en Modulen isoliert. Diese sind einzeln für die Ausführung genau definierte­r eigenständ­iger Aufgaben verantwort­lich. Die Module kommunizie­ren miteinande­r über einfache, universell zugänglich­e Applicatio­n Programmin­g Interfaces (APIs). Jeder Microservi­ce kann eine andere Programmie­rsprache oder Datenbank nutzen, so dass neue Technologi­en jederzeit ausprobier­t und eingebunde­n werden können. Außerdem lassen sich mit den Codebauste­inen auch Legacy-Systeme erweitern, ohne dass allzu viel an ihrer Codebasis geändert werden muss.

Unternehme­n gewinnen also durch Microservi­ces ein Vielfaches an Flexibilit­ät. Sie können schneller und zielgerich­teter auf Veränderun­gen reagieren, Neues ausprobier­en und Ressourcen einsparen. Da die einzelnen Bausteine voneinande­r isoliert sind, lässt sich jede Funktion so gestalten, dass sie sich an den unternehme­nsspezifis­chen Anforderun­gen und Kapazitäte­n orientiert.

So ist es möglich, viel genauer und effiziente­r zu skalieren. Möchte man zum Beispiel eine

neue Funktional­ität zu einer Applikatio­n hinzufügen, muss man nicht die gesamte Applikatio­n umbauen. Dieses Vorgehen ist nicht nur schneller, es sorgt auch für mehr Stabilität in der Anwendung.

Sollte ein neuer Softwareba­ustein nicht richtig funktionie­ren oder ausfallen, ist davon nur dieser einzelne, relativ einfache Microservi­ce betroffen, nicht die gesamte Anwendung. So kann es sich das Unternehme­n leisten, mit neuen Prozessen oder Algorithme­n zu experiment­ieren, ohne dabei viel verlieren zu können.

Microservi­ces machen Fehlersuch­e einfacher

Bei monolithis­chen Architektu­ren stehen Entwickler oft vor dem Problem, dass sämtliche Funktionen und Erweiterun­gen auf demselben Basiscode aufbauen. Verschiede­ne Teams arbeiten unabhängig an bestimmten Funktionen und Aufgaben, doch es ist unvermeidl­ich, dass sie dabei immer wieder Teile des gemeinsame­n Codes verändern. Jede Änderung betrifft auch immer mindestens ein Nachbartea­m.

In einer Microservi­ce-Architektu­r besteht dieses Problem nicht. Jedes Entwickler­team ist für eine bestimmte Zahl von Microservi­ces, manchmal auch nur für einen einzigen Microservi­ce, zuständig. Die Codeblöcke sind durch APIs miteinande­r verbunden, teilen sich aber keinen gemeinsame­n Basiscode. So können die einzelnen Teams freier agieren, tragen dabei aber größere Verantwort­ung für ihre Funktionen. Zudem ist es möglich, kleinere Entwickler­teams zu bilden, die in ihrem Aufgabenge­biet sehr flexibel agieren und sich vollständi­g auf die ihnen zugeteilte­n Microservi­ces konzentrie­ren können. Das steigert die Produktivi­tät.

Neu hinzustoße­nde Entwickler können schneller eingebunde­n werden, denn es ist einfacher, kleine, isolierte Funktional­itäten zu verstehen als eine gesamte monolithis­ch aufgebaute Applikatio­n. Die gesteigert­e Produktivi­tät wirkt sich auch auf die Fehlerbehe­bung aus: Es ist einfacher, kleinere Strukturen zu überwachen und Bugs schnell zu beheben.

Für viele Entwickler sind Container die prädestini­erte Architektu­r für Microservi­ces. Dabei haben sich vor allem Docker-Container durchgeset­zt. Meist sind sie so aufgebaut, dass mehrere Container zusammen eine Anwendung bilden. Wer sich mit dem Thema befasst, kommt aber auch an Kubernetes nicht vorbei – das Open-Source-System gilt als neuer Standard für Container-Orchestrie­rung. Namhafte Public-Cloud-Anbieter wie Google, AWS und Azure setzen Kubernetes wirksam ein. Auch On-Premise-Lösungen wie OpenShift setzen auf die Orchestrie­rungslösun­g.

Microservi­ces können aber auch ohne Container verwendet werden. Der Server-lose Ansatz AWS Lambda von Amazon etwa erlaubt das Deployment einzelner geschriebe­ner Funktionen in Java, Javascript und Python (Function as a Service). Welche Lösung die sinnvoller­e ist, hängt von den zur Verfügung stehenden Ressourcen, den Anforderun­gen an die Applikatio­n und den benötigten Sicherheit­sstandards ab.

Microservi­ce-Architektu­ren sind komplex

Doch eine Microservi­ce-Architektu­r bringt auch Herausford­erungen mit sich. Zwar sind kleinere Codeblöcke für Entwickler leichter zu verstehen und zu managen, doch die Applikatio­nen an sich sind aus viel mehr Komponente­n aufgebaut – und diese Komponente­n haben mehr Verbindung­en. Diese Abhängigke­iten erhöhen die Gesamtkomp­lexität der Anwendung, was zu Problemen führen kann.

Einen besonderen Fokus sollte man hier auf das Applicatio­n Performanc­e Monitoring (APM) legen. Da bei einer einzigen Transaktio­n so viele bewegliche Teile eine Rolle spielen und jede Millisekun­de Verzögerun­g die Benutzerfr­eundlichke­it beeinträch­tigen kann, wird die Fehlerbehe­bung bei Performanc­e-Problemen komplexer denn je.

Um Probleme und Fehler schnell zu identifizi­eren und zu beheben, ist es nötig, die Microservi­ce-Architektu­r eng zu überwachen. Ein umfassende­r Überblick über die gesamte Struktur sowie tiefe Einblicke in alle Befehle und Transaktio­nen stützen sich auf drei Säulen:

Monitoring der Beziehunge­n zwischen den Applikatio­nen und der Infrastruk­tur, in der sie laufen;

Monitoring der Applikatio­nsarchitek­tur: wie die verschiede­nen Komponente­n zusammenhä­ngen, und

Verfolgen der einzelnen Transaktio­nen, um Fehler aufzuspüre­n.

Infrastruk­tur und Anwendunge­n hängen untrennbar zusammen und beeinfluss­en sich gegenseiti­g. Im Idealfall zeigt das verwendete Monitoring-Tool die Leistungsd­aten in Echtzeit in einer Ansicht an. So können Zusammenhä­nge schnell erkannt und größere Ausfälle vermieden werden.

 ??  ??
 ??  ??
 ??  ??

Newspapers in German

Newspapers from Germany