Microservices-Architektur – Hype oder neue Realität?

Microservices versprechen die IT fit für die Zukunft zu machen! Doch was braucht es dafür? Und wo macht der Einsatz Sinn? Antworten im Beitrag.

Autor:  Matthias Hert

Welche Eigenschaften beschreiben eine Microservices-Architektur? Und welche Grundkonzepte müssen gegeben sein, um eine funktionierende Microservices-Architektur aufzubauen?

Microservices ist ein Architekturstil für die Erstellung von Applikationen. Dieser verfolgt den Ansatz komplexe Applikationen modular, basierend auf feingranularen Bausteinen, den sogenannten Microservices, aufzubauen. Die Funktionalität der einzelnen Microservices werden via APIs oder Message/Event Bus für andere Microservices und Clients zugänglich gemacht. Jeder Microservice funktioniert für sich autonom und implementiert eine sehr spezifische Funktion. Dies entspricht der aus dem Unix-Umfeld bekannten Philosophie «do one thing, and do it well», d.h. erfülle nur eine Funktion, diese aber gut.

Die folgende Abbildung zeigt den schematischen Aufbau einer Microservices-Architektur.

Microservices-Architektur.png
Schematischer Aufbau einer Microservices-Architektur

Eigenschaften einer Microservices-Architektur

  • Autonom: Microservices funktionieren für sich unabhängig. Dies bezieht sich sowohl auf die Laufzeit, wie auch auf die Entwicklung und das Deployment. Jeder Microservice kann eigenständig weiterentwickelt und ausgerollt werden.
  • Entkoppelt: Microservices sind untereinander stark entkoppelt. Sie kommunizieren nur über klar definierte und sprachunabhängige Schnittstellen. Für synchrone Aufrufe sind das APIs und für die asynchrone Kommunikation kommt ein Message/Event Bus zum Einsatz.
  • Skalierbarkeit: Microservices können unabhängig und nach Bedarf skaliert werden.
  • Resilient: Microservices sind ausfallsicher und fehlertolerant. Fehler wirken nur lokal und breiten sich nicht im ganzen System aus. Das aus dem Schiffsbau bekannte Konzept eines Schotts (engl. Bulkhead) wird umgesetzt. Eine Verfügbarkeit von 100% ist somit möglich.

Grundkonzepte einer funktionierenden Microservices-Architektur

  • Continuous Delivery: Hoher Grad an Automatisierung für Provisionierung, Skalierung, Deployments und Regressionstests. Ermöglicht es einzelne Microservices unabhängig und sicher voneinander auszurollen.
  • DevOps: Schnelle Weiterentwicklung und sicherer Betrieb gelingt nur, wenn Entwicklung und Betrieb zusammenarbeiten. Die Organisationsstruktur eines Unternehmens findet sich auch im Design ihrer Systeme wieder (vgl. Conway’s Law).
  • Zentrale Basisdienste: Gemeinsame Funktionen wie Logging, Monitoring und Konfiguration sollen zentral für alle Microservices bereitgestellt werden. Dies vereinfacht den Betrieb und beschleunigt die Entwicklung.
  • API Management: Entkoppelt den Client von den individuellen Microservices. Ermöglicht die Komposition der feingranularen Microservices in grobgranulare, client-orientierte Services. Security ist ein weiterer Aspekt, der zentral über ein API-Gateway gelöst werden kann.
  • Domain Driven Design: Die passende Aufteilung der fachlichen Domäne in einzelne Microservices ist von zentraler Bedeutung für eine funktionierende Microservices-Architektur. Domain Driven Design stellt dazu die nötigen Werkzeuge bereit.

Wann ist der Einsatz einer Microservices-Architektur sinnvoll?

Microservices-Architekturen eignen sich primär für den Bau von Applikationen über die sich ein Unternehmen differenziert. Diese Applikationen unterliegen oft stetigem Wandel und müssen aufgrund von Marktveränderungen schnell angepasst werden. Konkrete Beispiele wären der Online Shop eines Retailers, das Kundenportal einer Versicherung oder das e-Banking einer Bank. Doch sind die Anforderungen hinsichtlich Skalierbarkeit und Flexibilität der Applikationen wirklich so hoch? Die Wahl einer Microservices-Architektur muss gut überlegt sein! Denn die Kehrseite von Microservices-Architekturen sind die erheblich erhöhte Komplexität, sowie auch notwendige organisatorische Veränderungen in Richtung cross-functional Teams. Dazu kommen DevOps und Continuous Delivery als Konzepte die es zuerst umzusetzen gilt. Erst dann kann eine Microservices-Architektur zum Erfolg führen.

Auch wenn Microservices aktuell ein Hype sind, in vielen Fällen reicht auch eine herkömmliche Applikationsarchitektur mit erheblich geringer Komplexität.