Freigeben über


Entwurfsmuster für Microservices

Eine Microservices-Architektur verteilt die Verantwortung auf unabhängige Dienste. Diese Unabhängigkeit verändert, wie Sie die folgenden allgemeinen architektonischen Herausforderungen bewältigen:

  • Wartung der Datenkonsistenz ohne verteilte Transaktionen
  • Dienstübergreifendes Kommunikationsmanagement
  • Fehlerisolation, sodass Fehler nicht kaskadieren
  • Legacy-Systemintegration während der Migration

Die Entwurfsmuster in diesem Artikel behandeln diese Herausforderungen direkt. Jedes Muster zielt auf ein bestimmtes Problem ab, das beim Entwerfen, Erstellen und Betreiben von Microservices auftreten kann.

Diagramm, das Microservices-Entwurfsmuster und deren Beziehungen zeigt.

Der Diagrammfluss beginnt mit einer Clientanwendung. Ein Pfeil zeigt von der Clientanwendung auf ein Feld, das die Microservices-Anwendung darstellt. Ein zweiter Pfeil zeigt von der Clientanwendung auf das Strangler Fig-Muster. Zwei Pfeile zeigen vom Strangler-Feigen-Muster aus. Ein Pfeil zeigt auf das Microservices-Anwendungsfeld, und der andere Pfeil zeigt auf ein Rechteck mit der Bezeichnung "Legacysystem" am unteren Rand des Diagramms. Die Microservices-Anwendungsbox enthält Designmuster und Microservices. In einem Abschnitt mit der Bezeichnung API-Gateway zeigt ein Pfeil vom Gateway-Offloading-Muster zu den Gateway-Routing- und Gateway-Aggregationsmustern. Ein Pfeil zeigt vom Gateway-Routing-Muster auf einen Microservice für Desktop. Ein Pfeil zeigt vom Gatewayaggregationsmuster auf einen Mikroservice für mobile Geräte. Diese Microservices befinden sich in einem Abschnitt mit der Bezeichnung Back-Ends für Frontends. Pfeile zeigen von diesen Microservices auf einen anderen Microservice unter einer Box, beschriftet mit Sidecar. Ein Pfeil zeigt von diesem Microservice auf einen Remotedienst außerhalb des Microservices-Anwendungsfelds. Ein Pfeil zeigt vom Microservice für mobile Geräte auf einen Abschnitt, der zwei als "Service" bezeichnete Boxen enthält. Pfeile zeigen zwischen jedem Dienst auf einen Ereignisbus. In einem anderen Abschnitt zeigt ein Pfeil, der durch eine Anti-Korruptionsebene führt, von einem Microservice zum Legacy-System außerhalb der Microservices-Anwendung.

Allgemeine Entwurfsmuster

  • Antikorruptionsschicht implementiert eine Fassade oder Adapterschicht zwischen Subsystemen, die nicht dieselbe Semantik gemeinsam nutzen. Dieses Muster übersetzt Anforderungen zwischen Subsystemen und verhindert, dass Abhängigkeiten von älteren Systemen oder anderen Diensten mit inkompatiblen Domänenmodellen den Entwurf eines neuen Diensts einschränken.

  • Back-Ends für Frontends erstellen separate Back-End-Dienste für verschiedene Clienttypen, z. B. Desktop und Mobil. Bei diesem Ansatz muss ein einzelner Back-End-Dienst nicht die widersprüchlichen Anforderungen verschiedener Clienttypen behandeln. Dieses Muster hilft dabei, jeden Microservice einfach zu halten, indem clientspezifische Anforderungen getrennt werden.

  • Bulkhead isoliert kritische Ressourcen, z. B. Verbindungspools, Arbeitsspeicher und CPU, für jede Workload oder jeden Dienst. Diese Isolation verhindert, dass eine einzelne Workload oder ein Dienst alle Ressourcen verbraucht. Dieses Muster erhöht die Arbeitslastresilienz, indem verhindert wird, dass ein Dienst kaskadierende Fehler verursacht.

  • Die Choreographie ermöglicht jedem Dienst zu entscheiden, wann und wie ein Geschäftsvorgang verarbeitet werden soll, anstatt von einem zentralen Orchestrator abhängig zu sein. Dieses Muster reduziert die Kopplung zwischen Diensten und unterstützt häufige Dienstupdates oder -änderungen.

  • Die Befehlsabfrageverantwortungstrennung (Command Query Responsibility Segregation, CQRS) trennt Lesevorgänge von Schreibvorgängen in separate Datenmodelle. Dieses Muster verbessert die Leistung, Skalierbarkeit und Sicherheit in Microservices, bei denen Lese- und Schreibvorgänge unterschiedliche Leistungs- oder Skalierungsanforderungen aufweisen.

  • Gatewayrouting verwendet ein API-Gateway als Reverseproxy, um Clientanforderungen basierend auf der Anforderung an verschiedene Dienste weiterzuleiten. Dieser Ansatz bietet Clients einen einzelnen Endpunkt anstelle von vielen.

    Die Gatewayaggregation verwendet das Gateway, um mehrere Clientanforderungen in einer einzigen Anforderung zu kombinieren. Dieser Ansatz reduziert die Chattigkeit zwischen Clients und Diensten.

    Durch das Offloading des Gateways werden übergreifende Funktionen wie Ssl-Beendigung (Secure Socket Layer), Authentifizierung und Ratelimitierung in das Gateway zentralisiert, sodass einzelne Dienste diese Bedenken nicht separat implementieren müssen.

    Weitere Informationen finden Sie unter API-Gateways für Microservices.

  • Saga verwaltet die Datenkonsistenz über Microservices hinweg, die unabhängige Datenspeicher aufweisen. Eine Saga ist eine Abfolge lokaler Transaktionen, in denen jeder Dienst seinen Betrieb ausführt und den nächsten Schritt auslöst. Wenn ein Schritt fehlschlägt, führt die Saga Ausgleichstransaktionen durch, um die vorherigen Änderungen rückgängig zu machen. Dieses Muster ersetzt verteilte Transaktionen, die häufig in einer Microservices-Architektur unpraktisch sind.

  • Sidecar stellt Hilfskomponenten einer Anwendung als separaten Container oder Prozess bereit, um Isolation und Kapselung bereitzustellen. Verwenden Sie dieses Muster, um allgemeine Funktionen wie Protokollierung, Überwachung und Netzwerkkonfiguration an einen Dienst anzufügen, ohne ihn in den Code des Diensts einzubetten.

  • Strangler Fig unterstützt die inkrementelle Migration von einem älteren System, indem bestimmte Funktionen schrittweise durch neue Dienste ersetzt werden. Verbraucher verwenden weiterhin dieselbe Schnittstelle, wissen nicht, dass die Migration stattfindet, bis Sie das Legacysystem vollständig ersetzen.

Unterstützende Muster

Die Interservice-Kommunikation beschreibt die Retry - und Circuit Breaker-Muster für widerstandsfähige Dienst-zu-Dienst-Aufrufe.

Den vollständigen Katalog der Clouddesignmuster im Azure Architecture Center finden Sie unter Clouddesignmuster.

Nächste Schritte