2016 war ein Hochpunkt des Hypes um das Thema Microservices. Grund genug für uns, um ein Resümee zu ziehen und unsere positiven Erfahrungen zu diesem Thema auszuwerten.
Was sind Microservices?
Microservices sind ein Architekturmuster für Entwicklung und Betrieb von Software-Anwendungen. Es weist viele Gemeinsamkeiten mit einer serviceorienterten Architektur (SOA) auf.Komplexe Anwendungen werden dabei durch kleine, modulare und unabhängige Services dargestellt. Die Kommunikation zwischen Komponenten erfolgt durch technologieunabhängige Schnittstellen.
“Do One Thing and Do It Well”
Douglas McIlroyUS-amerikanischer Informatiker, Mathematiker, Ingenieur und ProgrammiererDieser Gedanke der Unix-Philosophie gibt dem Entwickler alle Freiheiten bei der Implementierung einer Anwendung und stellt gleichzeitig die Anforderung, dass die Funktionalität der Anwendung nicht zu weit gefasst ist.
Ein frühes Beispiel für den Einsatz von drei kombinierten Microservices ist beispielweise:
cat /etc/passwd | grep “/bin/bash” | cut -d “:” -f 1
Der erste Microservice „cat“ gibt den Inhalt von Dateien in die Standardausgabe aus. In diesem Fall die Benutzerdatei, welche alle Benutzer des Systems enthält. Der zweite Microservice „grep“ filtert den übergebenen Datenstrom zeilenweise. Es wird auf die Zeichenfolge „/bin/bash“ gefiltert. Dies soll die Zeilen für Benutzer finden, welche die Shell verwenden können. Der dritte Microservice „cut“ extrahiert spaltenweise Ausschnitte aus Textzeilen. In diesem Fall das erste Feld der Zeile mit dem Benutzername.
Das Zeichen „|“ kombiniert die Aufrufe der einzelnen Services miteinander. Auch wenn die Grundsätze von Microservices denen einer SOA stark gleichen, ist die Definition von Microservices schärfer gefasst und lässt weniger Interpretationsspielraum zu. Einzelne Aspekte von Microservices wie unabhängiger Betrieb und Auslieferung einzelner Services gehen über die Definition von SOA hinaus.
Was bei der Umsetzung zu beachten ist
Ein Grund, warum sich dieser Trend in einigen Bereichen der Softwareentwicklung vermehrt durchsetzt, ist wohl die Anforderung, immer flexibler mit Teilen einer Anwendungslandschaft agieren zu können. Beispielsweise kann es erforderlich sein, einzelne Teile in die Cloud auszulagern, zu skalieren oder einfach nur zu ändern. Begünstigt wird der Trend durch hochwertige Open Source-Produkte wie Docker, welche perfekt zu den Grundgedanken von Microservices passen.
Einige Vorteile von Microservices
- Serviceunabhängige Skalierung einzelner Microservices
- Skalierung agiler Entwicklungs-Prozesse, da die Services unabhängig entwickelt und verteilt werden
- Hohe Qualität und reduzierter Änderungsaufwand durch verringerte Komplexität einzelner Services
- Gutes Konfigurationsmanagement durch klar abgegrenzte Schnittstellen
- Continuous Integration/Delivery, begünstigt durch die Größe und Unabhängigkeit der einzelnen Services
- Effizienz und Technologieunabhängigkeit
Nachteile von Microservices ergeben sich vor allem durch die verteilte Architektur und die komplexere Infrastruktur, denn daraus resultieren z.B. ein höherer Testaufwand, eine aufwendigere Sicherstellung der Datenkonsistenz sowie ein komplexeres Monitoring. Außerdem müssen Microservices eine getrennte Datenhaltung haben. Die Nutzung einer gemeinsamen Datenbasis würde die Microservices zu eng aneinander binden.
Aus der Praxis
Besonders positiv aufgefallen sind uns die hohe Flexibilität und Geschwindigkeit, die durch Continuous Integration im Zusammenspiel mit Microservices ermöglicht werden.Der Aufbau neuer Umgebungen und die Qualitätssicherung von Releases für eine größere Anwendung konnte dadurch beschleunigt und der Aufwand reduziert werden. Außer durch die Verwendung von Microservices wurde dies unter anderem durch die Virtualisierung mit Docker erzielt.
Die Größe eines Microservices ist ein wichtiges Kriterium, um von paralleler Entwicklung profitieren zu können. Er sollte von einem einzelnen Team entwickelt werden können. Um den Entwicklungsaufwand rund um Datenkonsistenz und Transaktionen in Grenzen zu halten, sollten Microservices allerdings nicht zu klein sein.
Die übersichtliche Größe von Teams dieser Art für Services mit klar abgegrenzten Schnittstellen hat in mehreren Projekten den Bedarf an Absprachen in und zwischen den Teams merklich reduziert. Es blieb mehr Zeit für die Umsetzung.
Microservices in meinem Unternehmen?
Es lässt sich nicht pauschal sagen, ob der Einsatz von Microservices sinnvoller ist als die Alternativen. Zu unterschiedlich sind die Anforderungen und die Gegebenheiten. Die Abwägung von Vor- und Nachteilen für die projektspezifische Situation erfordert Erfahrung mit Softwarearchitekturen und eine gute initiale Planung. Ein Einstieg in Microservices ist sowohl durch die Migration oder Erweiterung eines Monolithen als auch per Start auf der grünen Wiese möglich.
Unser Resümee ist, dass Microservices zu vielen modernen Anforderungen an Softwarearchitektur passt und bei korrekter Implementierung viele Vorteile bietet.