Was ist ein Microservice?
Microservices bezeichnen eine Art von Anwendungsarchitektur, bei der eine Sammlung unabhängiger Services über schlanke APIs miteinander kommuniziert.
Erinnern Sie sich nur einmal an Ihren letzten Besuch in einem Online-Shop. Dabei haben Sie vielleicht die Funktion für die Produktsuche auf der jeweiligen Site verwendet. Diese Funktion ist ein Service. Vielleicht wurden Ihnen auch Vorschläge für ähnliche Produkte unterbreitet, oder Sie haben ein Produkt zu Ihrem Warenkorb hinzugefügt. Dabei handelt es sich auch um Services. Wenn Sie all diese Microservices bündeln, haben Sie eine vollständig funktionale Anwendung.
Ein effizienterer Ansatz für die Anwendungsentwicklung
Eine Microservice-Architektur ist ein cloudnativer Ansatz, bei dem Software so gebaut wird, dass Kernfunktionen innerhalb einer Anwendung unabhängig voneinander funktionieren.
Wenn die Elemente einer Anwendung auf diese Art und Weise getrennt werden, können Entwicklungs- und Operations-Teams zusammenarbeiten, ohne sich gegenseitig in die Quere zu kommen. Das heißt, dass mehrere Entwicklerinnen und Entwickler gleichzeitig an derselben App arbeiten und so die Entwicklungszeit deutlich reduziert werden kann.
Monolithische Architektur im Vergleich zu Microservice-Architektur
Monolithische Architektur im Vergleich zu Microservice-Architektur
Der traditionelle Ansatz bei der Anwendungsentwicklung legte den Fokus auf den Monolith. In einer monolithischen Architektur, sind die Funktionen und Services innerhalb einer Anwendung miteinander verbunden und agieren als eine Einheit. Wenn die Anwendung erweitert oder verändert wird, führt dies dazu, dass die Architektur komplexer wird. Dadurch wird es schwieriger, eine einzelne Funktion der Anwendung zu verbessern, ohne gleichzeitig die gesamte Anwendung auseinandernehmen zu müssen. Weiterhin führt es dazu, dass die Skalierung eines einzelnen Prozesses innerhalb der Anwendung eine Skalierung der gesamten Anwendung erfordert.
In einer Microservice-Architektur werden Anwendungen so gebaut, dass einzelne Kernfunktionen der App unabhängig von anderen funktionieren. Dadurch können Entwicklungsteams neue Komponenten entwickeln, aktualisieren und den geschäftlichen Anforderungen anpassen, ohne dass dies die Anwendung als Ganzes beeinträchtigt.
Serviceorientierte Architektur im Vergleich zu Microservice-Architektur
Microservice-Architektur ist eine Weiterentwicklung von serviceorientierter Architektur (SOA). Die zwei Ansätze brechen beide große, komplexe Anwendungen in kleinere Komponenten auf, mit denen es sich leichter arbeiten lässt. Wegen ihrer Ähnlichkeit werden SOA und Microservice-Architektur oft verwechselt. Ein Hauptunterschied zwischen den beiden ist ihr Umfang: Eine SOA ist ein unternehmensweiter Ansatz der Architektur, während es sich bei Microservices um eine Implementierungsstrategie für die Teams in der Anwendungsentwicklung handelt.
Vorteile einer Microservice-Architektur
Dank der verteilten Entwicklung von Microservices entstehen für Ihre Teams und Routinen ganz neue Möglichkeiten. Außerdem können Sie mehrere Microservices gleichzeitig entwickeln. Das heißt, dass mehrere Entwicklerinnen und Entwickler gleichzeitig an derselben App arbeiten und so die Entwicklungszeit deutlich reduziert werden kann.
Schnellere Markteinführung
Da die Entwicklungszyklen in einer Microservice-Architektur sehr viel kürzer sind, können auch Deployments und Updates viel agiler durchgeführt werden.
Hohe Skalierbarkeit
Wenn der Bedarf für bestimmte Services steigt, können diese über mehrere Server und Infrastrukturen hinweg flexibel implementiert werden.
Resilienz
Wenn diese unabhängigen Services ordnungsgemäß entwickelt sind, haben Sie keinerlei Auswirkungen aufeinander. Das heißt, wenn eine Komponente ausfällt, streikt im Gegensatz zum monolithischen Ansatz nicht gleich die gesamte App.
Einfaches Deployment
Da microservice-basierte Apps modular und dazu viel kleiner als herkömmliche monolithische Apps sind, können Sie die mit der alten Methodologie verbundenen Probleme getrost vergessen. Zwar erfordert die neue Variante eine intensivere Koordination, bei der eine Service-Mesh-Schicht behilflich sein kann, dieser Umstand kann jedoch durch die großen Vorteile mehr als wettgemacht werden.
Besserer Zugriff
Da eine größere App in kleinere Bestandteile aufgegliedert wird, können Entwicklerinnen und Entwickler die einzelnen Komponenten leichter verstehen, aktualisieren und verbessern, was wiederum zu kürzeren Entwicklungszyklen führt, speziell in Kombination mit agilen Methoden wie etwa DevOps.
Mehr Offenheit
Dank sprachunabhängiger APIs können Entwicklungsteams ihre bevorzugte Sprache bzw. Technologie für die notwendige Funktion frei wählen.
Mögliche Herausforderungen bei Microservices
Die durch Microservices ermöglichte Flexibilität kann dazu führen, dass neue Änderungen schnell bereitgestellt werden, was bedeutet, dass neue Pattern kreiert werden müssen. Im Software Engineering bezeichnet ein „Pattern“ algorithmische Lösungen, die bekanntermaßen funktionieren. Als „Anti-Pattern“ werden häufige Fehler bezeichnet, die bei der Problemlösung gemacht werden und langfristig zu neuen Problemen führen können.
Neben den kulturellen und prozessualen Komponenten sind Komplexität und Effizienz zwei der größten Herausforderungen einer Microservice-Architektur. Beim Arbeiten mit Microservice-Architektur sollten Sie nach diesen häufigen Anti-Patterns Ausschau halten.
- Skalierung: Die Skalierung einer Funktion innerhalb des Software-Lifecycle-Entwicklungsprozesses kann besonders zu Beginn herausfordernd sein. Bei der ersten Einrichtung sollten Abhängigkeiten zwischen Services identifiziert und ein besonderes Augenmerk auf potenzielle Auslöser gelegt werden, die eine Abwärtskompatibilität gefährden könnten. Wenn die Zeit der Bereitstellung gekommen ist, ist eine Investition in Automatisierung äußerst wichtig, da Microservices zu komplex für eine menschliche Bereitstellung sind.
- Protokollierung: Bei verteilten Systemen benötigen Sie zentrale Protokolle zur Erfassung aller Daten. Ansonsten wird eine effiziente Skalierung unmöglich.
- Überwachung: Sie benötigen unbedingt eine zentrale Ansicht Ihres Systems, um die Ursachen von Problemen identifizieren zu können.
- Debugging: Remote-Debugging mithilfe Ihrer lokalen IDE (Integrated Development Environment) ist hier keine Option und funktioniert nicht bei Dutzenden oder Hunderten von Services. Leider gibt es auf diese Frage zum jetzigen Zeitpunkt keine zufriedenstellende Antwort.
- Konnektivität: Ziehen Sie eine Service-Discovery-Lösung in Betracht, zentral oder integriert.
Tools und Technologien, die Microservices ermöglichen
Container und Kubernetes
Ein Container ist eine Softwareeinheit, in der Anwendungscode zusammen mit den für die Ausführung erforderlichen Dateien paketiert wird. Mit dieser Organisation kann die enthaltene Anwendung leicht und voll funktionsfähig in einzelne Umgebungen verschoben werden.
Kubernetes ist eine Plattform für die Container-Orchestrierung, mit der einzelne Komponenten in einer Anwendung aktualisiert werden können, ohne dass sich dies auf den Rest des Technologie-Stacks auswirkt. Dadurch eignet sie sich perfekt für die Automatisierung von Management, Skalierung und Deployment von Microservice-Anwendungen.
APIs
Eine Programmierschnittstelle, auch API genannt, ist der Teil einer Anwendung, der für die Kommunikation mit anderen Anwendungen verantwortlich ist. Innerhalb der Infrastruktur einer Microservice-Architektur spielen APIs eine wichtige Rolle, da sie es verschiedenen Services innerhalb eines Microservices erlauben, Informationen zu teilen und als Ganzes zu arbeiten.
Event-Streaming
Ein Event bezeichnet einen Vorgang, der innerhalb eines Microservice-Services stattfindet. Beispielsweise wenn jemand beim Online-Shopping einen Artikel zum Warenkorb hinzufügt oder daraus entfernt.
Events formen Event-Streams, die das veränderte Verhalten eines Systems abbilden. Durch die Überwachung von Events können Organisationen nützliche Schlussfolgerungen über Daten und Kundenverhalten erhalten. Event Stream Processing ermöglicht sofortige Handlungen und kann direkt und in Echtzeit mit operativen Workloads verwendet werden. Unternehmen nutzen Event Streaming für viele verschiedene Anwendungsbereiche von der Betrugserkennung bis hin zur Rechnerwartung.
Serverless Computing
Serverless Computing ist ein cloudnatives Entwicklungsmodell, bei dem Entwicklungsteams Anwendungen erstellen und ausführen und ein Cloudanbieter sich um die Provisionierung, Wartung und Skalierung der Server-Infrastruktur kümmert. Die Entwicklung muss zur Bereitstellung lediglich den Code in Container paketieren. Unternehmen können damit schneller Innovationen schaffen, da die Anwendung von der zugrunde liegenden Infrastruktur abstrahiert wird.
Wie Red Hat helfen kann
Die Open Source-Lösungen von Red Hat unterstützen Sie nicht nur bei der Aufschlüsselung Ihrer monolithischen Anwendungen in Microservices, sondern auch bei deren Verwaltung, Orchestrierung und der Handhabung der damit erstellten und geänderten Daten.
Red Hat OpenShift
Red Hat® OpenShift® ist eine Kubernetes-basierte Plattform, die Microservices ermöglicht, indem sie einen einheitlichen Weg für die Vernetzung, Verwaltung und Beobachtung Microservice-basierter Anwendungen bietet. Unterstützt werden containerisierte, ältere und cloudnative sowie in Microservices aufgeschlüsselte Anwendungen. OpenShift lässt sich in Red Hat Application Services integrieren und kann mit bestehenden Automatisierungs-Tools wie Git und Jenkins verwendet werden. Dazu verfügt es über ein unternehmensfähiges Linux-Betriebssystem, das mehr Sicherheit für den gesamten Cluster bietet.
Ob Sie nun Legacy-Anwendungen optimieren, zur Cloud migrieren oder komplett neue microservicebasierte Lösungen entwickeln, Red Hat OpenShift bildet für diese Anwendungen über Ihre gesamte Infrastruktur eine sichere und stabile Plattform.
Red Hat Runtimes
Red Hat Runtimes ist ein Set fertiger, containerisierter Runtime-Vorlagen für Microservices. Es unterstützt eine breite Palette an Sprachen und Frameworks, die bei der Erstellung von Microservice-Architektur verwendet werden können. Dazu zählen unter anderem Quarkus, Spring Boot, MicroProfile und Node.js. Zusätzlich enthält Red Hat Runtimes unterstützende Services für schnellen Datenzugriff in Form von Red Hat Data Grid sowie Services für den Schutz von Microservice-APIs in Form von Red Hat Single Sign-On.
Red Hat Integration
Red Hat Integration umfasst diverse Integrations- und Messaging-Technologien, mit denen sich Anwendungen und Daten in Hybrid-Infrastrukturen verbinden lassen. Es handelt sich um eine agile, verteilte, containerisierte und API-zentrierte Lösung. Sie enthält folgende Funktionen: Service-Komposition und -Orchestrierung, Anwendungskonnektivität und Datentransformation, Echtzeit-Messaging und -Streaming sowie API-Management – und all das kombiniert mit einer cloudnativen Plattform und Toolchain, die das vollständige Spektrum moderner Anwendungsentwicklung unterstützt.
Entwicklungspersonal kann Tools wie Drag-and-Drop-Services und eingebaute Integrationsmuster nutzen, um Microservices zu erstellen. Geschäftliche Nutzende können webbasierte Tools verwenden, um APIs zu entwickeln, die unterschiedliche Microservices integrieren können.