Microservices-Architekturen: Anwendungen agiler und leistungsfähiger machen
Schneller, agiler und flexibler werden – Microservices versprechen viel. Unternehmen können von einer Microservices-Architektur aber nur profitieren, wenn sie verschiedene Herausforderungen bewältigen.
Microservices sind beliebt. Studien zeigen, dass 85 Prozent der Unternehmen im Moment dabei sind, eine Microservices-Architektur aufzubauen [1]. Die Relevanz dieser modernen IT-Architektur ist also groß. Gleichzeitig empfinden viele IT-Teams den Umstieg auf Microservices als anspruchsvoll.
Deshalb lohnt es sich, einen genauen Blick auf die verschiedenen Aspekte von Microservices zu werfen und dabei sowohl die Vorteile als auch die Herausforderungen etwas klarer zu machen. Denn das Architekturkonzept unterscheidet sich deutlich von monolithischen Anwendungen, welche aus einer einzigen Codebasis bestehen, sodass einzelne Funktionen nicht unabhängig von anderen geändert oder erneuert werden können.
Ganz anders eine typische Microservices-Architektur, die als Sammlung unabhängiger und modularer Dienste daherkommt. Jeder dieser Services kapselt eine klar umrissene fachliche Funktionalität und soll so unabhängig von anderen entwickelt, bereitgestellt und skaliert werden können. Allerdings müssen dann verschiedene Microservices miteinander integriert werden, um übergreifende fachliche Anforderungen umzusetzen, etwa bei End-to-End-Geschäftsprozessen.
Vorteile von Microservices
Ein Grund, warum sich Microservices so stark in den Unternehmen verbreiten, ist die damit erreichbare Skalierbarkeit der Entwicklung. Anders als bei einer monolithischen Codebasis können verschiedene Entwicklungsteams unabhängig voneinander arbeiten, beispielsweise parallel an unterschiedlichen Funktionen – ohne zeitraubende Abstimmungen. Microservices können somit das Problem lösen, dass immer mehr Software entwickelt werden muss, dies in einem großen Monolithen aber nicht mehr praktikabel ist. Dadurch erreichen Unternehmen eine wesentlich höhere Entwicklungsgeschwindigkeit. Ein Nebeneffekt ist, dass jedes Entwicklungsteam freier in seinen Entscheidungen rund um seinen technischen Stack ist, was es zum Beispiel erlaubt, geeignetere Datenbanken oder Programmiersprachen für ein Problem einzusetzen.
Damit einher geht auch, dass einzelne Microservices bei Bedarf unabhängig skaliert werden können. So könnte bei einem E-Commerce-Anbieter der Webshop oder auch die Produktsuche bei wachsendem Andrang – zum Beispiel rund um den Black Friday – angepasst werden, wohingegen die eigentliche Auftragsabwicklung nicht unbedingt im gleichen Maß skalieren muss.
Microservices: Management erforderlich
Da eine typische Architektur dieser Form aus vielen Microservices besteht, braucht es ein Konzept, um sie zu betreiben. Hier haben sich Docker-Container und Kubernetes zur Container-Orchestrierung als De-Facto-Standard durchgesetzt.
Dazu wird jeder Microservice als eigener Container verpackt und betrieben. Bei einem Container handelt es sich um ein kleines Softwarepaket ähnlich einer virtuellen Maschine, das alle Elemente enthält, die zur Ausführung in beliebigen Umgebungen notwendig sind. Das sind zum Beispiel das Betriebssystem und der Code des Microservices selbst. Diese Container können dann von Kubernetes verwaltet werden, um Container automatisch zu starten, neu zu starten oder lastabhängig hoch oder herunter zu skalieren.
Fehlerisolierung und Wiederverwendbarkeit
Ein Vorteil einer Microservices-Architektur zeigt sich während des laufenden Betriebs. Sollte es einmal zu einem Fehler kommen, kann ein Microservice unabhängig von den anderen neu gestartet oder auch beendet werden. Dies führt nicht zum Stillstand eines ganzen Monolithen. Diese Fehlerisolierung begrenzt den Schaden durch Störungen und reduziert die Ausfallzeiten. Aber: Trotz dieser Vorteile ist eine sorgfältige Konzeption der Microservices-Architektur wichtig, um sogenannte kaskadierende Ausfälle zu vermeiden, also dass die Nichtverfügbarkeit eines Microservices andere abhängige Microservices mit in die Tiefe reißt.
Aus Sicht des IT-Managements ist ein großer Vorteil von Microservices die Wiederverwendbarkeit der einzelnen Module. Bei der Anwendungsentwicklung müssen Entwickler deshalb nicht jedes Mal das Rad neu erfinden und bestimmte Funktionen neu implementieren – oder aus Quellcode-Repositories herauskopieren. Sofern ein bestimmter Microservice fehlerfrei läuft, kann er einfach verwendet werden und die Entwickler haben mehr Zeit für andere Aufgaben.
Voraussetzungen für den Einsatz
Microservices eignen sich aber erst für eine gewisse Komplexität und Größe der Systemumgebung. Denn eine Microservices-Architektur besitzt eine eingebaute Tendenz zur Komplexität. Sie kann vor allem in kleineren Systemumgebungen mehr Aufwand verursachen als Nutzen bringen, da es dort häufig (noch) möglich ist, einen Monolithen mit einem oder zwei Teams gut zu beherrschen. Dies kann soweit gehen, dass sich das ganze Entwicklungsteam nur noch mit Microservices-Architektur-Themen beschäftigt, anstatt Fachlogik zu bauen. Also sollte immer genau beobachtet werden, ob sich die Komplexität rund um Microservices-Architekturen wirklich lohnt.
Aus Sicht des IT-Managements ist ein großer Vorteil von Microservices die Wiederverwendbarkeit der einzelnen Module.
Auf der Netzwerkebene haben Microservices-Umgebungen das Risiko, viel Datenverkehr zu erzeugen. Durch die dauerhafte Kommunikation der Microservices untereinander entsteht Last auf dem Netzwerk. Dies kann beispielsweise zu hohen Latenzen oder Bandbreitenproblemen führen. Als Anforderung formuliert: Microservices erfordern ein ausreichend leistungsfähiges Netzwerk und ein Entwicklungsteam, das Herausforderungen rund um verteilte Systeme beherrscht.
Microservices erfordern weiterhin angepasste Entwicklungsprozesse und Rituale im Unternehmen. Zum Beispiel sollte ein Wildwuchs an Sprachen und Frameworks verhindert werden und neue Technologie nur mit gutem Grund eingeführt werden. Standardisierte Stacks und Vorgehen helfen, dass Entwicklungsteams nicht monatelang Infrastruktur aufsetzen, sondern sich schnell auf Fachlogik konzentrieren können. Dies ist auch ein weiterer Grund dafür, dass Microservices besser für größere Unternehmen geeignet sind, die ausreichend Kapazitäten für die Standardisierung ihrer eigenen IT-Landschaft haben.
Viele Anwendungen profitieren von Microservices
Insgesamt zeichnet sich also ein gar nicht so positives Bild: Der Aufwand, eine Microservices-Architektur auf die Beine zu stellen, ist hoch, die allgemeine Komplexität nimmt zu, die Vorteile von Kapselung und Wiederverwendbarkeit entstehen nur, wenn alles reibungslos läuft, und mit schlechter Steuerung versinkt man schnell im Technologie-Chaos.
Warum also doch Microservices? Neben dem reinen Skalieren von Entwicklungsteams liefert eine funktionierende Microservices-Architektur eben auch einige strategisch wichtige Vorteile.
So können sehr leicht neue Technologien in einem isolierten Microservice verprobt und eingeführt werden. Das aktuellste Beispiel ist sicherlich Machine Learning und generell künstliche Intelligenz. Das Risiko, dies in einem Microservice einzusetzen, ist überschaubar, und man könnte sogar relativ leicht A/B Tests machen, in denen verschiedene Umsetzungsalternativen verglichen werden.
Ein anderer häufiger Anwendungsfall ist das Refactoring von Legacy-Systemen, die in die Cloud gebracht werden sollen. Mit Microservices kann die klassische Salamitaktik angewendet werden: Stück für Stück. Dies hält sowohl die Kosten als auch das Risiko klein beziehungsweise zerlegt es in handliche Stücke. Dadurch ist es etwa in der Transaktionsverarbeitung möglich, ausgewählte Prozesse oder Prozessketten nach und nach in die Cloud zu verlagern.
Generell eignen sich Microservices also sehr gut für die Automatisierung von Geschäftsprozessen, wenn das Unternehmen groß genug ist. Hier stellen Microservices eine wichtige Option bei der Gestaltung der IT-Landschaft dar. Im richtigen Kontext machen sie Anwendungen und ihre Entwicklung agiler und flexibler – sofern Unternehmen die Herausforderungen bei deren Einsatz bewältigen.