Microservices sind in den letzen Jahren in aller Munde. Der Begriff taucht immer dann auf, wenn es um eine Technik geht, wie die Integration verschiedenster IT-Systeme in Unternehmen und die Orchestrierung von APIs durch voneinander unabhängige Services gestaltet werden kann.
In der Vergangenheit haben wir Software eher im monolithischen Stil erstellt. Eine monolithische Applikation ist als eine einzelne Einheit definiert. Applikationen für Unternehmen (Enterprise Apps) bestehen oft aus drei Teilen (Drei-Schicht-Architektur). Der Client, der die Benutzungsschnittstelle anbietet und oft aus HTML-Seiten und JavaScript-Dateien besteht, die in einem Browser ausgeführt werden. Der Datenbank, die als relationales Datenbanksystem aus vielen Tabellen besteht und als NoSQL Datenbank Dokumente verarbeitet sowie einer Server-Applikation. Letztere verarbeitet die Anfragen des Clients, führt die für die Unternehmensanwendung spezifische Logik aus, liest und schreibt Daten in die Datenbank und sendet die Ergebnisse zurück zur Darstellung an den Browser. Diese Server-Applikation ist ein Monolith. Jede Änderung an diesem System erfordert ein Erstellen, Testen und Installieren des gesamten Systems.
Ein monolithischer Server ist eine simple und einfache Möglichkeit eine webbasierte Enterprise-Applikation zu erstellen. Die gesamte Logik läuft in einem überschaubaren Prozess und ermöglicht es dem Softwareentwickler die grundlegenden Paradigmen einer objektorientierten Programmiersprache zu nutzen, um die Anwendung in Klassen, Methoden und logische Bereiche aufzuteilen. Die Software kann durch den Entwickler selbst auf dessen Entwicklungsrechner getestet werden. Eine Entwicklungs- und Installationspipeline (Continuous Integration and Delivery) stellt sicher, dass Änderungen an der Software umfangreich getestet werden und die Installation in die Produktivumgebung erfolgt. Anwendungen mit einer monolithischen Architektur können horizontal skalieren, indem z. B. mehrere Instanzen hinter einem Loadbalancer zur Lastverteilung betrieben werden.
Es gibt viele Erfolgsgeschichten monolithischer Applikationen, jedoch steigt der Frust bei allen Projektbeteiligten, da mehr und mehr Anwendungen in der Cloud betrieben werden. Änderungszyklen an Softwaresystemen wirken sich – auch bei kleinsten Anpassungen – immer mehr auf den gesamten Systembereich aus und erfordern einen kompletten Durchlauf des Erstellungs- und Installationsprozesses. Mit steigender Projektgröße wird es immer schwieriger eine gute und sinnvolle Modulstruktur aufrecht zu erhalten. Dies macht es um so schwieriger, sich bei Änderungen richtig zu verhalten und nur die Module zu betrachten, die von der eigentlichen Änderung betroffen sein sollten. Die Skalierbarkeit ist nur über die gesamte Applikation möglich obwohl unter Umständen nur bestimmte Teile und Module mehr Ressourcen benötigen.
Diese Hemmnisse führen zum Architekturstil Microservice, der Anwendungen in Gruppen von Services/Diensten – im Sinne einer Service-Orientierten-Architektur (SOA) – gliedert und organisiert. Diese einzelnen Services sind unabhängig voneinander installier- und skalierbar. Außerdem bietet jeder Service eine feste technische wie fachliche Modulgrenze, ja es kann sogar jeder Service in einer unterschiedlichen Programmiersprache entwickelt werden. Und selbstverständlich können einzelne Services von unterschiedlichen Teams – ob intern oder extern – verantwortet und entwickelt werden.
Sie können sich eine solche Architektur einfach als einzelne Dienste oder Arbeitsschritte vorstellen, aus denen sich der gesamte Geschäftsprozess zusammensetzt. Jeder Service implementiert eine gewisse Ebene der Gesamtanwendung für einen bestimmten Geschäftsbereich und beinhaltet die Benutzungsschnittstelle, das Speichern von Daten und jede Art der Logik sowie der Zusammenarbeit und Kommunikation mit anderen Systemen.
Jedes neue Projekt kann auf Basis einer Microservice-Architektur geplant und erstellt werden. Für die Anwendung in einer bestehenden Infrastruktur gibt es unterschiedliche Ansätze. Je nach vorhandenen Anforderungen und mit Rücksicht auf gelerntes Benutzerverhalten können verschiedene Arten der Umsetzung gewählt werden. Für alle gilt jedoch, dass die neu entwickelten Services in einem modularen Ansatz zur Verfügung gestellt werden. Sie können unabhängig von den Bestandssystemen entwickelt und betrieben werden. Der Aufbau erfolgt sukzessive in kleinen Schritten statt großen Sprüngen.
Microservices in der Unternehmens-IT zu integrieren erfolgt also nicht auf einen Schlag sondern beginnt mit der Definition der einzelnen Dienste. Im nächsten Schritt werden diese funktional gruppiert und wiederum in kleinere Einheiten, den Microservices, aufgeteilt. Aus fachlicher Sicht ist es von Vorteil, dass am Anfang keine detaillierten Anforderungen für alle geplanten Dienste definiert sein müssen. Sie können Microservices für Ihre Kunden in einem agilen Vorgehen erstellen, verbessern und publizieren.
Eine Microservice-Architektur ermöglicht es Ihnen also die großen Software-Probleme in kleine und die kleinen Probleme in keine aufzulösen. Gern unterstützen wir Sie dabei.