Microservices
Microservices beschreiben einen organisatorischen, architekturbezogenen Ansatz in der Softwareentwicklung, bei dem Software aus kleinen (= micro) voneinander unabhängigen Services zusammengesetzt wird. Diese Services kommunizieren über APIs (Application Programming Interface) miteinander.
Microservices zeichnen sich aus durch:
- Eigenständigkeit: Die Services innerhalb von Microservice-Architekturen werden unabhängig voneinander entwickelt, bereitgestellt und betrieben. Das bedeutet: Sie beeinträchtigen nicht die Funktionsfähigkeit anderer Services, da sie keinen Code und keine Implementierung miteinander teilen.
- Spezialisierung: Jeder Microservice ist auf eine bestimmte Funktion ausgelegt und dient damit zur Lösung eines spezifischen Problems. Wird ein Service zu komplex, weil weiterer Code hinzugefügt wurde, sollte er in kleinere Services unterteilt werden.
Wozu dienen Microservices?
Eine Microservice-Architektur erfüllt mehrere Zwecke. Sie:
- beschleunigt die Entwicklungszeit von Anwendungen
- vereinfacht die Skalierbarkeit
- verkürzt die Markteinführungszeit neuer Funktionen
- ermöglicht Innovationen
Microservices vs. SOA vs. Monolithische Architektur
Microservices unterscheiden sich in wesentlichen Merkmalen von SOA und monolithischer Architektur:
Microservices
Eine Microservice-Architektur zeichnet aus, dass sie Anwendungen durch eigenständige, voneinander unabhängige Komponenten erstellt. Diese Komponenten führen jeden der Anwendungsprozesse als Service aus.
Die Kommunikation zwischen den Services funktioniert mithilfe von APIs über sorgfältig definierte Schnittstellen. Dank der Unabhängigkeit der Services können sie (anders als in monolithic systems) jeweils einzeln aktualisiert, bereitgestellt und skaliert werden.
Monolithische Architektur
Monolitische Architektur (auch monolithic systems genannt) beschreibt die enge Verbundenheit und damit Abhängigkeit der Prozesse, die als ein einziger großer Service ausgeführt werden. Da entsprechend in monolithic systems nur die Architektur als Ganzes skaliert werden kann, wird die Codebasis nach und nach komplexer, sobald Funktionen hinzugefügt oder verbessert werden.
Im Gegensatz zu einer Microservice-Architektur ist es durch die steigende Komplexität schwieriger, zu experimentieren und neue Konzepte umzusetzen. Ein zusätzlicher Nachteil gegenüber Microservices ist die risikobehaftete Anwendungsverfügbarkeit, die durch die Abhängigkeiten der Prozesse entsteht.
SOA
Der Unterschied zwischen SOA (Service Oriented Architecture) und Microservice-Architektur besteht - neben technischen Aspekten - vor allem in einem jeweils anderen Umfang:
Bei SOA soll die Art und Weise standardisiert werden, wie sämtliche Webdienste in einem einzigen Unternehmen miteinander kommunizieren und miteinander integriert sind. Im Gegensatz dazu ist Microservice-Architektur anwendungsspezifisch.
Vorteile & Nachteile von Microservice-Architektur
Wenn du aktuell in Betracht ziehst, Microservices in deinem Unternehmen einzuführen, schau dir die Vor- und Nachteile im Überblick an.
Vorteile
Die Nutzung einer Microservice-Architektur lohnt sich für dein Unternehmen aus folgenden Gründen:
- Agilität: Microservices unterstützen die Arbeit in kleinen und voneinander unabhängigen Teams, da diese jeweils die Verantwortung für ihre Services übernehmen. Diese klar definierte Verantwortung ermöglicht es den Teams, schneller zu arbeiten und Entwicklungszyklen zu verkürzen.
- Einfaches Bereitstellen: Da eine kontinuierliche Integration über Microservice-Architekturen ermöglicht wird, können Teams auch einfacher neue Konzepte testen und bei Bedarf wieder stoppen. Dieses Experimentieren lässt Entwickler den Code wesentlich leichter aktualisieren, was die Markteinführung neuer Funktionen beschleunigt.
- Flexible Skalierung: Wird eine Anwendungsfunktion stärker nachgefragt, können Entwickler Teams dank der Unabhängigkeit flexibel darauf reagieren. Zusätzlich können sie die Kosten einer Funktion genau messen, um Ineffizienzen festzustellen und Kosten zu reduzieren.
- Technologische Flexibilität: Microservices bieten Entwicklern die Freiheit, das beste Tool zum Lösen einer Aufgabe zu wählen, anstatt einer Einheitslösung. Außerdem können Developer verschiedene Stacks und Programmiersprachen für verschiedene Komponenten verwenden.
- Wiederverwendbarer Code: Die klar definierten Services können als Basis bzw. Baustein für einen anderen Funktionsumfang verwendet werden.
- Resilienz: Da die Services voneinander unabhängig sind, verringert sich entsprechend das Ausfallrisiko von Anwendungen. Bei einem Fehler stürzt nicht gleich die komplette Anwendung ab: Lediglich eine bestimmte Funktionalität ist beeinträchtigt.
Nachteile
Die Einführung bzw. Umstellung auf eine Microservice-Architektur ist mit verschiedenen Herausforderungen verbunden:
- Komplexeres Management: Es gilt, mehr Services zu managen, die meist von verschiedenen Entwickler Teams und evtl. an verschiedenen Standorten erstellt werden.
- Komplexere Protokolldaten: Für die Überwachung und zur Problemlösung genutzte Protokolldaten sind entsprechend umfangreich und können zwischen verschiedenen Services voneinander abweichen.
- Abwärtskompatibilität problemhaft: Durch neue Versionen leidet eventuell die Kompatibilität mit dem Bestehenden.
- Latenz- und Konnektivitätsprobleme: Durch die zahlreichen Netzwerkverbindungen steigt das Risiko für Konnektivitäts- und Latenzprobleme.
Tipp:
Die genannten Herausforderungen können durch eine DevOps Lösung aufgefangen werden.
Bestandteile von Microservices
Zwar können jedes moderne Tool und jede Sprache für eine Microservice-Architektur genutzt werden. Die folgenden Tools sind jedoch essentiell geworden, wenn du Microservices in deinem Unternehmen nutzen willst:
- Container, Docker und Kubernetes
- API-Gateways
- Messaging- und Eventstreaming
Fazit zu Mircoservices
Die Einführung von Microservices lohnt sich ab dem Punkt, an dem eine monolithische Architektur aufgrund steigender Komplexität zu schwerfällig geworden ist. Denn eine Microservice-Architektur sorgt mit ihren vielen voneinander unabhängigen Services dafür, dass eine Anwendung in kleinere Dienste umstrukturiert werden kann.
Neben ihrer Eigenständigkeit zeichnet sich eine Microservices Architecture auch durch Spezialisierung aus, denn: Die einzelnen Services adressieren jeweils einzelne, spezifische Probleme.
Neben den zahlreichen Vorteilen von Microservices gegenüber einer Monolithic Architecture wie Agilität, flexiblem Skalieren und einfachem Bereitstellen bringen sie auch eigene Herausforderungen mit: Komplexeres Management, komplexere Protokolldaten sowie Latenz- und Konnektivitätsprobleme können jedoch durch den Einsatz von DevOps aufgefangen werden.