Zweig nach Abstraktionsmuster - AWS Präskriptive Leitlinien

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Zweig nach Abstraktionsmuster

Das Würgerfeigenmuster funktioniert gut, wenn Sie die Rufe am Rand des Monolithen abfangen können. Wenn Sie jedoch Komponenten modernisieren möchten, die sich tiefer im Legacy-Anwendungsstack befinden und Upstream-Abhängigkeiten aufweisen, empfehlen wir das Branch-by-Abstraktionsmuster. Dieses Muster ermöglicht es Ihnen, Änderungen an der vorhandenen Codebasis vorzunehmen, damit die modernisierte Version sicher neben der Legacy-Version koexistieren kann, ohne dass es zu Unterbrechungen kommt.

Gehen Sie wie folgt vor, um das Branch-by-Abstraktionsmuster erfolgreich zu verwenden:

  1. Identifizieren Sie Monolith-Komponenten, die Upstream-Abhängigkeiten haben.

  2. Erstellen Sie eine Abstraktionsebene, die die Interaktionen zwischen dem zu modernisierenden Code und seinen Clients darstellt.

  3. Wenn die Abstraktion eingerichtet ist, ändern Sie die vorhandenen Clients, um die neue Abstraktion zu verwenden.

  4. Erstellen Sie eine neue Implementierung der Abstraktion mit der überarbeiteten Funktionalität außerhalb des Monolithen.

  5. Wechseln Sie die Abstraktion auf die neue Implementierung, wenn Sie fertig sind.

  6. Wenn die neue Implementierung den Benutzern alle erforderlichen Funktionen bietet und der Monolith nicht mehr verwendet wird, bereinigen Sie die ältere Implementierung.

Das Muster „Verzweigung nach Abstraktion“ wird oft mit Feature-Toggles verwechselt, mit denen Sie auch schrittweise Änderungen an Ihrem System vornehmen können. Der Unterschied besteht darin, dass Funktionsschalter die Entwicklung neuer Funktionen ermöglichen und diese Funktionen für Benutzer unsichtbar machen sollen, wenn das System läuft. Feature-Toggles werden also zur Bereitstellungszeit oder zur Laufzeit verwendet, um auszuwählen, ob ein bestimmtes Feature oder eine Reihe von Funktionen in der Anwendung sichtbar ist. Branch by Abstraction ist eine Entwicklungstechnik und kann mit Feature-Toggles kombiniert werden, um zwischen der alten und der neuen Implementierung zu wechseln.

In der folgenden Tabelle werden die Vor- und Nachteile der Verwendung des Branch-by-Abstraktionsmusters erläutert.

Vorteile Nachteile
  • Ermöglicht inkrementelle Änderungen, die rückgängig gemacht werden können, falls etwas schief geht (abwärtskompatibel).

  • Ermöglicht das Extrahieren von Funktionen, die sich tief im Inneren des Monolithen befinden, wenn Sie die Aufrufe am Rand des Monolithen nicht abfangen können.

  • Ermöglicht die Koexistenz mehrerer Implementierungen im Softwaresystem.

  • Bietet eine einfache Möglichkeit, einen Fallback-Mechanismus zu implementieren, indem ein zwischengeschalteter Überprüfungsschritt verwendet wird, um sowohl neue als auch alte Funktionen aufzurufen.

  • Unterstützt die kontinuierliche Bereitstellung, da Ihr Code während der gesamten Umstrukturierungsphase jederzeit funktioniert.

  • Ist nicht geeignet, wenn Datenkonsistenz gefragt ist.

  • Erfordert Änderungen am bestehenden System.

  • Könnte den Entwicklungsprozess zusätzlich belasten, insbesondere wenn die Codebasis schlecht strukturiert ist. (In vielen Fällen lohnt sich der zusätzliche Aufwand, und je umfassender die Umstrukturierung ist, desto wichtiger ist es, die Verwendung des Zweig-für-Abstraktionsmusters in Betracht zu ziehen.)

Die folgende Abbildung zeigt das Verzweigungsmuster für eine Komponente „Benachrichtigung“ im Versicherungsmonolith. Es beginnt mit der Erstellung einer Zusammenfassung oder einer Schnittstelle für die Benachrichtigungsfunktionalität. In kleinen Schritten werden bestehende Kunden auf die neue Abstraktion umgestellt. Dazu muss möglicherweise die Codebasis nach API-Aufrufen durchsucht werden, die sich auf die Benachrichtigungskomponente beziehen. Sie erstellen die neue Implementierung der Benachrichtigungsfunktion als Microservice außerhalb Ihres Monolithen und hosten ihn in der modernisierten Architektur. In Ihrem Monolithen fungiert Ihre neu erstellte Abstraktionsschnittstelle als Makler und ruft die neue Implementierung hervor. In kleinen Schritten portieren Sie die Benachrichtigungsfunktionen auf die neue Implementierung, die inaktiv bleibt, bis sie vollständig getestet und bereit ist. Wenn die neue Implementierung fertig ist, stellen Sie Ihre Abstraktion um, um sie zu verwenden. Sie sollten einen Schaltmechanismus verwenden, der einfach umgedreht werden kann (z. B. einen Funktionsumschalter), damit Sie bei Problemen problemlos zur alten Funktionalität zurückkehren können. Wenn die neue Implementierung beginnt, Ihren Benutzern alle Benachrichtigungsfunktionen zur Verfügung zu stellen, und der Monolith nicht mehr verwendet wird, können Sie die ältere Implementierung bereinigen und alle Switching-Feature-Flags entfernen, die Sie möglicherweise implementiert haben.

Zerlegung von Monolithen in Microservices mithilfe des Verzweigungsmusters