1. Einführung & Überblick
Dieser Inhalt basiert auf einer Folge des Software Engineering Radio Podcasts (Folge 213), die ein Gespräch zwischen Johannes Thönes und James Lewis zum Thema Microservices enthält. Die Diskussion beleuchtet die Definition, Motivationen und praktischen Überlegungen zu diesem Architekturstil, der Anfang 2015 als Antwort auf die Herausforderungen bei der Wartung großer, monolithischer Anwendungen erheblich an Bedeutung gewann.
2. Definition von Microservices
Ein Microservice wird als kleine, fokussierte Anwendungskomponente konzipiert.
2.1 Kernmerkmale
Laut der Diskussion besitzt ein Microservice mehrere Schlüsselattribute:
- Unabhängige Bereitstellung: Kann ohne Änderungen an anderen Diensten bereitgestellt werden.
- Unabhängige Skalierung: Kann basierend auf seiner spezifischen Last horizontal oder vertikal skaliert werden.
- Unabhängiges Testen: Kann isoliert validiert werden.
- Einzelverantwortlichkeit: Hat einen primären Grund, sich zu ändern oder ersetzt zu werden. Er erfüllt eine zusammenhängende Aufgabe und ist leicht verständlich.
2.2 Beispiele für einzelne Verantwortlichkeiten
Die "eine Sache", die ein Microservice tut, kann funktional oder funktionsübergreifend (nicht-funktional) sein:
- Funktional: Bereitstellung einer spezifischen Domänenressource (z.B. ein Benutzerdienst, ein Artikeldienst, ein Risikoberechnungsdienst in der Versicherung).
- Funktionsübergreifend: Ein Warteschlangenprozessor, der eine Nachricht liest, Geschäftslogik anwendet und weiterleitet. Verantwortung für eine spezifische nicht-funktionale Anforderung wie Caching oder Protokollierung.
3. Der Aufstieg der Microservices
3.1 Treiber der Popularität
Die Popularität von Microservices wird auf einen weit verbreiteten Schmerzpunkt in der Industrie zurückgeführt: die unhandliche monolithische Anwendung. Organisationen stehen vor Anwendungen, die über 5-10 Jahre gewachsen sind und zu schwer zu modifizieren, als SaaS bereitzustellen oder effektiv in der Cloud zu skalieren geworden sind.
3.2 Bewältigung von Technischer Schuld
Microservices entstanden als Lösung, um diese Monolithen in kleinere, kooperierende Komponenten aufzuteilen, die außerhalb des Prozesses laufen. Dieser Ansatz, wie er in großem Maßstab von Unternehmen wie Netflix demonstriert wurde, ermöglicht unabhängige Wartung, Skalierung und Ersetzung. Der zentrale Treiber ist die Notwendigkeit, Software schneller auszuliefern und Praktiken wie Continuous Delivery zu nutzen, die durch monolithische Architekturen behindert werden.
4. Einführungs- & Implementierungsmuster
4.1 Greenfield vs. Brownfield
Eine zentrale Frage ist, ob ein neues Projekt mit Microservices beginnen (Greenfield) oder ein bestehender Monolith in diese umgewandelt werden soll (Brownfield). Die Diskussion stellt fest, dass empirisch gesehen die meisten Organisationen mit einem Monolithen beginnen und später refaktorisieren, wobei sie vor der Herausforderung stehen, abgegrenzte Kontexte und Nahtstellen innerhalb der bestehenden Codebasis zu identifizieren.
4.2 Betriebliche Komplexität
Der Podcast-Auszug erwähnt, dass Platzbeschränkungen eine vollständige Diskussion über betriebliche Komplexität und deren Auswirkungen auf DevOps verhinderten. Dies impliziert, dass Microservices zwar Entwicklungs- und Skalierbarkeitsprobleme lösen, aber neue Herausforderungen in den Bereichen Monitoring, Bereitstellungsorchestrierung und Netzwerkzuverlässigkeit mit sich bringen.
5. Zentrale Erkenntnisse & Analyse
Kernaussage
Microservices sind keine Allheiltechnologie; sie sind eine organisatorische und wirtschaftliche Antwort auf den Engpass der monolithischen Entwicklung. Der eigentliche Mehrwert, wie das Netflix-Beispiel andeutet, liegt in der Ermöglichung von unabhängigen, parallelen Wertschöpfungsströmen. Diese Architektur zielt direkt auf die Koordinationskosten und Bereitstellungshemmnisse ab, die große Teams plagen, die an einer einzigen Codebasis arbeiten – ein Problem, das durch Melvin Conways Ausspruch formalisiert wurde, dass "Organisationen, die Systeme entwerfen, ... dazu gezwungen sind, Entwürfe zu produzieren, die Kopien der Kommunikationsstrukturen dieser Organisationen sind." Microservices versuchen, dies umzukehren, indem sie Systeme entwerfen, die wünschenswerte Kommunikationsstrukturen erzwingen.
Logischer Ablauf
Die Darstellung folgt einer überzeugenden Ursache-Wirkungskette: (1) Monolithen häufen Technische Schuld an und werden veränderungsunfähig. (2) Das Geschäft fordert Cloud-Skalierbarkeit und Continuous Delivery. (3) Die monolithische Architektur ist aufgrund ihrer Kopplung grundsätzlich unvereinbar mit diesen Zielen. (4) Die Lösung besteht darin, den Monolithen entlang abgegrenzter Kontexte aufzubrechen und unabhängig bereitstellbare Einheiten zu schaffen. Diese Logik ist schlüssig, übergeht jedoch die immense Zwischenkomplexität – das "Wie" des Aufbrechens.
Stärken & Schwächen
Stärken: Der Fokus auf unabhängige Bereitstellbarkeit als Hauptmerkmal ist treffend. Dies ist der Hebel, der Teamautonomie und schnellere Release-Zyklen freisetzt. Der Bezug zu Conways Gesetz und CQRS (als ausgelassene Themen erwähnt) zeigt ein Bewusstsein für die tieferen sozio-technischen Muster, die hier wirken.
Schwächen: Die Perspektive von 2015 ist auffallend optimistisch bezüglich der Leichtigkeit, "Einzelverantwortlichkeit" zu definieren. Spätere Branchenerfahrungen haben dies als den schwierigsten Teil offenbart – der Fluch schlecht definierter Dienstgrenzen führt zu verteilten Monolithen. Das Transkript spielt auch die betrieblichen Aufwände gefährlich herunter. Wie der grundlegende Fowler-Artikel später ausführte, tauscht man Entwicklungs- gegen Betriebskomplexität ein. Die Erwähnung von Docker als "ein beliebtes Stück" ist eine historische Momentaufnahme; das Containerisierungs-Ökosystem war der fehlende betriebliche Ermöglicher, der Microservices in der Praxis in großem Maßstab praktikabel machte.
Umsetzbare Erkenntnisse
Für Führungskräfte: Beginnen Sie nicht mit Microservices, weil sie im Trend liegen. Beginnen Sie damit, Ihre Lead Time für Änderungen und Bereitstellungshäufigkeit zu messen. Wenn diese aufgrund von Codebasis-Koordination schlecht sind, ziehen Sie Microservices in Betracht. Für Architekten: Das primäre Designtool ist keine Technologie-Checkliste, sondern eine Domain-Driven Design (DDD)-Kontextkarte. Definieren Sie Grenzen basierend auf Geschäftsfähigkeiten, nicht auf technischen Schichten. Für Teams: Investieren Sie von Anfang in Platform Engineering – automatisierte Bereitstellung, Service Discovery und Observability sind keine Nachgedanken; sie sind die Grundlage. Der vorgeschlagene Weg – Refaktorisierung von einem Monolithen – ist immer noch der klügste. Verwenden Sie das Strangler-Fig-Muster, um Teile des Monolithen schrittweise durch Dienste zu ersetzen, da dies das Risiko managt und Lernen ermöglicht.
6. Technischer Rahmen & Mathematische Modelle
Obwohl der Podcast konversationsbasiert ist, können die zugrundeliegenden Prinzipien formalisiert werden. Ein Schlüsselmodell ist die Beziehung zwischen Teamgröße (N), Kommunikationspfaden und architektonischer Kopplung.
In einer monolithischen Architektur mit N Teams skalieren die potenziellen Kommunikationspfade mit $O(N^2)$, da Änderungen in einem Modul viele andere beeinflussen können. Dies erzeugt Koordinationsaufwand. Microservices zielen darauf ab, dies durch die Durchsetzung abgegrenzter Kontexte und APIs zu reduzieren. Das Ziel ist es, die Kosten der dienstübergreifenden Kommunikation, $C_{comm}$, durch Netzwerkaufrufe explizit hoch zu machen und dadurch starke Modularität innerhalb eines Dienstes zu fördern, wo die Kosten für Änderungen, $C_{internal}$, niedrig sind.
Ein vereinfachtes Modell für die Änderungsausbreitungswahrscheinlichkeit ($P_{prop}$) könnte sein:
$P_{prop} \approx \frac{C_{comm}}{C_{comm} + C_{internal}}$
Wobei eine gut gestaltete Microservices-Architektur $P_{prop}$ für unabhängige Änderungen minimiert, indem sie $C_{comm}$ (Netzwerklatenz, API-Versionierung) zum dominierenden Faktor für grenzüberschreitende Änderungen macht.
7. Experimentelle Ergebnisse & Fallstudien
Der Podcast nennt Netflix als primäre Fallstudie. Bis 2015 hatte Netflix seinen monolithischen Backend-Bereich berühmt in Hunderte von Microservices zerlegt, was ermöglichte:
- Unabhängige Skalierung: Dienste wie Filmempfehlungen oder Abrechnung konnten während Spitzenlasten unabhängig skaliert werden.
- Schnelle Innovation: Teams konnten ihre Dienste mehrmals täglich bereitstellen, ohne gesamten Stack koordinieren zu müssen.
- Technologie-Heterogenität: Unterschiedliche Dienste konnten in der für ihre Aufgabe am besten geeigneten Sprache geschrieben werden (z.B. Java, Node.js).
Diagrammbeschreibung (hypothetisch): Ein Balkendiagramm, das eine monolithische Anwendung mit einer Microservices-Architektur auf zwei Achsen vergleicht: (1) Bereitstellungshäufigkeit (Bereitstellungen/Tag): Monolith zeigt einen niedrigen Balken (z.B. 0,1), Microservices zeigen einen hohen Balken (z.B. 50+). (2) Mittlere Zeit bis zur Wiederherstellung (MTTR) nach einem Ausfall: Monolith zeigt einen hohen Balken (z.B. 4 Stunden), Microservices zeigen einen niedrigeren Balken (z.B. 30 Minuten), da Ausfälle auf bestimmte Dienste isoliert werden können.
Spätere Studien, wie sie in den State of DevOps Reports referenziert werden, haben lose gekoppelte, serviceorientierte Architekturen statistisch mit höherer Softwareauslieferungsleistung korreliert.
8. Analyse-Framework: Ein praktisches Beispiel
Szenario: Ein E-Commerce-Monolith kämpft mit Updates. Änderungen an der "Kasse"-Funktion erfordern vollständige Regressionstests und kollidieren mit Updates des "Produktkatalogs".
Anwendung des Frameworks:
- Abgegrenzte Kontexte identifizieren: Mithilfe von Domain-Driven Design Kernbereiche identifizieren: Bestellung, Katalog, Lagerbestand, Benutzerverwaltung, Zahlung.
- Dienstgrenzen definieren: Für jeden Kontext einen Microservice erstellen. Der Bestellservice besitzt die Kassenlogik und Bestelldaten.
- Verträge festlegen: Klare APIs definieren. Der Bestellservice ruft die API
processPayment(orderId, amount)des Zahlungsdienstes und die APIreserveStock(itemId, quantity)des Lagerbestandsdienstes auf. - Datenhoheit: Jeder Dienst besitzt seine eigene Datenbank. Der Bestellservice hat seine eigene "orders"-Tabelle; er fragt nicht direkt die Lagerbestandsdatenbank ab.
- Bereitstellung & Observability: Jeder Dienst wird containerisiert, unabhängig bereitgestellt und veröffentlicht Metriken (Latenz, Fehlerrate) an ein zentrales Dashboard.
Ergebnis: Das Kassen-Team kann nun Updates für den Bestellservice bereitstellen, ohne das Katalog- oder Lagerbestands-Team einzubeziehen, was den Koordinationsaufwand erheblich reduziert und die Bereitstellungshäufigkeit erhöht.
9. Zukünftige Anwendungen & Forschungsrichtungen
Die Entwicklung von Microservices geht über die Sichtweise von 2015 hinaus:
- Service Meshes: Technologien wie Istio und Linkerd sind entstanden, um funktionsübergreifende Belange (Sicherheit, Observability, Traffic-Management) auf der Infrastrukturebene zu handhaben und so die Codebelastung für einzelne Dienste zu reduzieren.
- Serverless & FaaS: Functions-as-a-Service (z.B. AWS Lambda) stellen eine extreme Form von Microservices dar, die die betriebliche Komplexität vollständig auf den Cloud-Anbieter verlagern und eine noch feiner granulierte Skalierung ermöglichen.
- KI/ML-Integration: Microservices werden zum de-facto-Muster für die Bereitstellung von ML-Modellen als unabhängige Vorhersagedienste, was A/B-Tests und schnelle Iteration von Algorithmen ermöglicht.
- Edge Computing: Bereitstellung von leichtgewichtigen Microservices auf Edge-Geräten für Latenz-optimierte Verarbeitung in IoT- und Echtzeit-Analyse-Szenarien.
- Forschungsschwerpunkt: Zukünftige Forschung ist erforderlich in automatisierten Dienstzerlegungswerkzeugen, intelligenter Fehlervorhersage in verteilten Systemen und formaler Verifikation von Interaktionen in Service-Choreografien.
10. Referenzen
- Lewis, J., & Fowler, M. (2014). Microservices. MartinFowler.com. Abgerufen von https://martinfowler.com/articles/microservices.html
- Newman, S. (2015). Building Microservices. O'Reilly Media.
- Forsgren, N., Humble, J., & Kim, G. (2018). Accelerate: The Science of Lean Software and DevOps. IT Revolution Press.
- Conway, M. E. (1968). How Do Committees Invent? Datamation, 14(5), 28-31.
- Google Cloud. (2019). The 2019 Accelerate State of DevOps Report. DORA.
- Netflix Technology Blog. (Various). https://netflixtechblog.com/