Microservices: Vorteile und Nachteile

Microservices sind eine gute Möglichkeit, große Software-Projekte in lose miteinander verbundene Module aufzubrechen, die mittels Schnittstellen (APIs) miteinander kommunizieren. In den vergangenen Jahren sind Microservices zunehmend populär geworden, denn die modulare Architektur, die es erlaubt große Software Projekte in kleinere, unabhängige und lose miteinander verbundene Module aufzubrechen, sorgt für größere Dynamik und Agilität. Doch der Einsatz von Microservices birgt viele Vor- und Nachteile, über die es aufzuklären gilt.

Zunächst einmal ein Blick auf die klassische, monolithische Architektur, wie sie bis vor wenigen Jahren noch Standard war: Wenn zum Beispiel jemand eine klassische Applikation in Java baut, dann wird er zunächst eine erste Ebene – das Nutzer Interface – erstellen, gefolgt von einer Anwendungsebene, die alle Business-Logiken handhabt. Darauf folgt dann die Integrationsebene, die die einzelnen Komponenten der Anwendungseben lose miteinander verbindet. Danach ist eine Datenebene notwendig, die ein darunterliegendes Persistenz-System zugänglich macht. Danach wird normalerweise ein Anwendungspaket erstellt und an einen Anwendungsserver geliefert. Dadurch wird die Architektur selbst ganz automatisch monolithisch, da es zwar einzelne Komponenten gibt, diese aber alle zusammen verpackt sind.

Vorteile von Microservices

Für Entwickler schafft diese Art Architektur einige Herausforderungen, denn monolithische Architekturen haben im Gegensatz zu Microservices einige Nachteile:

  1. Wächst eine Anwendung, so wächst auch die damit verbundene Code-Basis, die die Entwicklungsumgebung jedes Mal überlastet, wenn die Applikation lädt. Das reduziert die Produktivität der Entwickler.
  2. Da die Applikation auf EAR/JAR/WAR läuft, wird es schwierig, die Technologie nachträglich zu ändern. Die Code-Basis zu ändern ist kompliziert, da sich immer nur schwer absehen lässt, wie sich das auf die Funktionalität der gesamten Anwendung auswirkt.
  3. Versagt eine einzelne Funktion der Applikation oder eine einzelne Komponente, dann versagt die gesamte Anwendung. Wenn zum Beispiel eine Anwendung Funktionen wie Bezahlung, Login und History beinhaltet und nur eine der Funktionen beginnt, mehr Rechenleistung zu beanspruchen, dann behindert das die Leistung der gesamten Anwendung.
  4. Wer monolithische Applikationen skalieren will, der kann dies nur tun, indem er die gleichen EAR/JAR/WAR Pakete auf zusätzlichen Servern verteilt. Das bezeichnet man als horizontale Skalierung. Jede Kopie der Applikation auf zusätzlichen Servern nutzt die gleiche Zahl der darunterliegenden Ressourcen, was es zu einem ineffizienten Design macht.
  5. Monolithische Architekturen beeinflussen die Entwicklung ebenso wie die Bereitstellung von Applikationen. Wenn sich Applikationen vergrößern, dann ist es umso wichtiger, Applikationen in kleinere Komponenten aufzubrechen. Da alles so eng zusammenhängt, können Entwickler bei monolithischen Architekturen nicht unabhängig voneinander arbeiten oder nur ihre eigenen Module bereitstellen. Vielmehr sind sie abhängig von anderen und das verlangsamt die Entwicklungszeit.

Mit diesen Nachteilen von Monolithen im Hinterkopf soll nun ein Blick auf die Microservices geworfen werden und wie diese für die Flexibilität sorgen, die monolithische Architekturen vermissen lassen.

Skalierbarkeit ist eine treibende Kraft hinter allen Architekturlösungen. Und hier liegt einer der größten Vorteile von Microservices: Statt eine Anwendung erst bereitstellen zu können, wenn alle Komponenten fertig sind, können Entwickler ihre Services unabhängig voneinander bereitstellen – und daher auch unabhängig voneinander arbeiten. Es bietet zudem größere Flexibilität für Änderungen und Neuauflagen von Modulen, da man sich dabei keine Sorgen um den Rest der Anwendung machen muss.

KOSTENLOSER DOWNLOAD: DIGITALISIERUNGS-REPORT

Ist Ihr Unternehmen auf die Stolpersteine und Herausforderungen der Digitalisierung vorbereitet? Erfahren Sie im kostenlosen Analyse-Report von Crisp Research, worauf geachtet werden sollte und welche Technologien dabei zum Einsatz kommen können.

Die Vorteile von Microservices haben große Unternehmen wie Amazon, Netflix oder eBay überzeugt. Zu diesen gehören:

  • Bessere Fehlerisolation: Größere Anwendungen bleiben weitestgehend unberührt von dem Versagen eines einzelnen Moduls.
  • Es vermeidet einen Lock-in-Effekt: Microservices eröffnen die Möglichkeit, eine neue Technologie nur an einem ganz bestimmten Service oder einem Stapel an Services zu testen. Dabei muss man sich weniger Sorgen um Abhängigkeiten machen. Weniger Code bedeutet größere Flexibilität.
  • Einfache Verständlichkeit: Durch eine zusätzliche Vereinfachung können Entwickler die Funktionalität von Services besser verstehen.
  • Microservices werden am besten in Containern bereitgestellt in virtuelle Betriebsumgebungen, was die Skalierung erleichtert.

Nachteile von Microservices

Neben allen Vorteilen gibt es auch Herausforderungen bzw. Nachteile von Microservices, die ebenfalls zu thematisieren sind. Traditionellen Monolith-Architekturen beruhen auf einer Drei-Schichten-Architektur aus Client, Anwendung und Datenbank. Microservices stellt dies komplett auf den Kopf, da die einzelnen Services aufgebrochen und separat bereitgestellt werden können. Die Vorteile davon sind groß, sie haben aber einen Preis und der liegt häufig in den Betriebskosten – Zeit und Geld. Folgende Probleme bestehen bei Microservices:

1. Monitoring von Microservices

Während es bei monolithischen Applikationen auch Probleme gibt, ist es dort recht einfach, eine schlechte Veröffentlichung wieder zurückzunehmen. In einer Container-basierten Applikation sind Dinge sehr viel komplizierter. Wer eine monolithische App in Microservices aufbricht oder ein ganz neues Microservice-System baut, hat sehr viel mehr Services zu überwachen. Zum Beispiel:

  • Microservices nutzen verschiedene Technologien und/oder Sprachen.
  • Sie sind auf verschiedenen Maschinen und/oder in unterschiedlichen Containern aktiv.
  • Sie haben alle ihre eigene Versionskontrolle.

Dadurch wird das System sehr fragmentiert und es entsteht ein Bedürfnis nach zentralisierter Überwachung und Protokollierung.

Komponenten einer Container-Applikation können unabhängig voneinander erstellt und bereitgestellt werden. Geht also etwas nach der Bereitstellung kaputt, muss erst einmal identifiziert werden, welcher Service das Problem ist. Danach muss entschieden werden, wie die Version zurückgestellt werden kann.

2. Aufteilung der Protokollierung auf mehrere Services

Wenn es um die Überwachung von Applikationen geht, steht eine Sache stets im Mittelpunkt: Logs oder Protokolle! Diese Gigabytes von unstrukturiertem Text werden tagtäglich von Servern generiert und sorgen oft für eine Datenbelastung auf Servern und Festplatten. Selbst bei kleinen monolithischen Architekturen, bereiten sie der IT oft Kopfschmerzen, denn oft enthalten sie keine wirklich brauchbaren Informationen. Selbst bei Monolithen durchdringt der Code verschiedene Ebene, so dass ein Protokoll über das gleiche Problem gleich an verschiedenen Plätzen wieder auftaucht.

Bei Microservices werden diese Protokolle noch stärker zersplittert. Eine einzige Nutzer-Transaktion kann gleich durch mehrere Services laufen, die alle über einen eigenen Protokollrahmen verfügen. Um einem Problem auf den Grund zu gehen, müssen die Protokolle von allen Services herangezogen werden, die eine Transaktion durchlaufen hat, um herausfinden zu können, was schief gelaufen ist.

Das zweite Problem ist also: In Microservices geht es darum, Dinge in einzelne Komponenten aufzubrechen. Als Nebeneffekt werden auch operative Prozeduren und deren Überwachung in einzelne Services aufgebrochen und so geht die Fähigkeit verloren, das gesamte System als Einheit zu überwachen. Die Herausforderung ist hier, das richtige Werkzeug für eine Re-Zentralisierung zu finden und zu nutzen.

3. Abhängigkeiten unter Services kann Probleme verlagern

Ist eine Transaktion in einem spezifischen Service fehlgeschlagen, kann nicht davon ausgegangen werden, dass tatsächlich dieser Service der Ursprung des Problems ist. In Wirklichkeit gibt es drei Szenarien, die erklären können, was passiert ist:

  1. Der Input ist schlecht, das heißt man muss verstehen, was dafür gesorgt hat, dass der vorangegangene Service fehlgeschlagen ist.
  2. Der Output hat eine unerwartete Antwort vom darauf folgenden Service verursacht, das heißt man muss verstehen, wie der nächste Service sich verhält.
  3. Das wahrscheinlichste Szenario aber ist, dass die Abhängigkeiten sehr viel komplexer sind als „A verursacht B“. Es ist wahrscheinlich, dass mehr als nur ein Service das Problem verursacht.

Bei Microservices ist es also zunächst notwendig herauszufinden, wo man überhaupt nach Antworten suchen kann und muss. Die Daten sind überall verteilt und sind nicht immer vom Dashboard oder den Protokollen aus zugänglich. Das dritte Problem bei Microservices ist also: Bei Monolithen weiß man fast immer, wo man mit der Suche nach Fehlern beginnen kann. Microservices machen es schwieriger herauszufinden, was die Ursache eines Problems ist und wie man an die entsprechenden Daten gelangt.

4. Die Ursache eines Problems finden

Wer an dem Punkt ist, dass er weiß, welches die problematischen Services sind, alle Daten gezogen hat und Einblicke aus den Protokollen gesammelt hat und womöglich bereits über eine Lösung verfügt, die Auffälligkeiten im Verhalten von Anwendungen und deren Komponenten aufdeckt, wird weitere Daten sammeln – zum Beispiel über besonders lange Prozesszeiten. Aber dann bleibt noch immer die alles entscheidende Frage: Was ist die eigentliche, tieferliegende Ursache?

Es gilt dabei der Datenspur zu folgen und Hinweise zur Ursache zu erkennen. So kann es hilfreich sein, in einem bestimmten Service eine verstärkte Protokollierung durchzuführen und diesen neu aufzulegen, in der Hoffnung, dass durch einen besseren Kontext die eigentliche Ursache findet. Das beste Mittel ist allerdings, von Anfang an entsprechende Monitoringlösungen einzusetzen, um diesen Szenarien pro-aktiv zu begegnen und Probleme zu identifizieren, die Programmierer selbst vielleicht nicht berücksichtigt haben.

Das vierte Problem ist also: Die Ursache eines Fehlers verteilt sich über gleich mehrere Services. Das macht es notwendig ein zentralisiertes Werkzeug zu haben, das diese Probleme von der Wurzel her erkennt.

Zusammengefasst lässt sich festhalten: Wer neue Technologie wie Microservices annimmt, braucht starke Skills, um erfolgreich zu sein.

 

ÜBERSICHT ARTIKELSERIE

1) Microservices vs. Monolith – Paradigmenwechsel in der Software-Entwicklung
2) Microservices: Vorteile und Nachteile
3) Die größten Herausforderungen beim Einsatz von Microservices
4) Konfiguration & Betrieb von Microservices

Download: Marktübersicht für Digital Workplaces & Mobility-Lösungen

Unternehmen sind mit neuen Technologien und hohem Bedarf an Vernetzung & Schnelligkeit konfrontiert. Jetzt im Marktüberblick von Crisp Research erfahren, welche Anbieter hier unterstützen.

Klicken Sie zum Download einfach auf das Bild und Sie werden automatisch weitergeleitet.

Download: Markt- und Anbieterüberblick für Digital Workplaces und Mobility-Lösungen

Unternehmen sind mit neuen Technologien und hohem Bedarf an Vernetzung & Schnelligkeit konfrontiert. Jetzt im Marktüberblick von Crisp Research erfahren, welche Anbieter hier unterstützen.

Klicken Sie zum Download einfach auf den Button und Sie werden automatisch weitergeleitet.