Migrieren Sie ein älteres System inkrementell, indem Sie bestimmte Teile der Funktionalität nach und nach durch neue Anwendungen und Dienste ersetzen. Durch das fortgesetzte Austauschen von Features des älteren Systems ersetzt das neue System schließlich alle Features des alten Systems, wodurch das alte System unbrauchbar wird und von Ihnen außer Betrieb genommen werden kann.
Kontext und Problem
Mit zunehmendem Alter von Systemen überaltern auch die Entwicklungstools, die Hosting-Technologie und sogar Systemarchitekturen, auf denen sie basieren. Durch das Hinzufügen neuer Features und Funktionalität kann die Komplexität dieser Anwendungen erheblich zunehmen, sodass sie schwieriger zu verwalten oder neue Features schwerer hinzuzufügen sind.
Das vollständige Ersetzen eines komplexen Systems kann eine große Herausforderung darstellen. Häufig ist eine schrittweise Migration zu einem neuen System notwendig, während das alte System gleichzeitig zur Handhabung von Features verwendet wird, die noch nicht migriert wurden. Das Ausführen von zwei separaten Versionen einer Anwendung bedeutet jedoch, dass Clients wissen müssen, wo sich bestimmte Features befinden. Jedes Mal, wenn ein Feature oder Dienst migriert wird, müssen die Clients aktualisiert werden, um auf den neuen Speicherort zu verweisen.
Lösung
Ersetzen Sie bestimmte Teile der Funktionalität nach und nach durch neue Anwendungen und Dienste. Erstellen Sie eine Fassade, die Anforderungen an das ältere Back-End-System abfängt. Die Fassade leitet diese Anforderungen entweder an die ältere Anwendung oder die neuen Dienste weiter. Vorhandene Features können allmählich zum neuen System migriert werden, und Kunden können weiterhin die gleiche Schnittstelle verwenden, ohne zu merken, dass eine Migration stattgefunden hat.
Dieses Muster hilft, das Risiko der Migration zu minimieren und den Entwicklungsaufwand über einen Zeitraum zu verteilen. Da die Fassade die Benutzer sicher an die richtige Anwendung weiterleitet, können Sie dem neuen System in der jeweils gewünschten Geschwindigkeit Funktionalität hinzufügen und gleichzeitig sicherstellen, dass die ältere Anwendung weiterhin funktioniert. Wenn im Laufe der Zeit immer mehr Features zum neuen System migriert werden, ist das ältere System schließlich unbrauchbar und wird nicht mehr benötigt. Sobald dieser Vorgang abgeschlossen ist, kann das ältere System sicher außer Betrieb genommen werden.
Probleme und Überlegungen
- Überlegen Sie, wie Dienste und Datenspeicher gehandhabt werden sollen, die möglicherweise sowohl vom neuen als auch vom älteren System verwendet werden. Stellen Sie sicher, dass beide parallel auf diese Ressourcen zugreifen können.
- Strukturieren Sie neue Anwendungen und Dienste auf solche Weise, dass sie leicht abgefangen und bei zukünftigen Einschnürungsmigrationen ersetzt werden können.
- Zu einem Zeitpunkt nach Abschluss der Migration ist die Strangler-Fassade entweder nicht mehr vorhanden oder hat sich zu einem Adapter für ältere Clients entwickelt.
- Stellen Sie sicher, dass die Fassade mit der Migration Schritt hält.
- Stellen Sie sicher, dass die Fassade nicht zu einer einzelnen Fehlerquelle (Single Point of Failure) oder einem Leistungsengpass wird.
Verwendung dieses Musters
Verwenden Sie dieses Muster bei der schrittweisen Migration einer Back-End-Anwendung auf eine neue Architektur.
Dieses Muster ist in folgenden Fällen unter Umständen nicht geeignet:
- Wenn Anforderungen an das Back-End-System nicht abgefangen werden können.
- Für kleinere Systeme, bei denen die Komplexität eines Austausches für den Großhandel gering ist.
Workloadentwurf
Ein Architekt sollte evaluieren, wie das Strangler-Fig-Muster im Design seiner Workloads verwendet werden kann, um die Ziele und Prinzipien zu erreichen, die in den Azure Well-Architected Framework-Pfeilern behandelt werden. Zum Beispiel:
Säule | So unterstützt dieses Muster die Säulenziele |
---|---|
Zuverlässigkeitsdesignentscheidungen tragen dazu bei, dass Ihre Workload ausfallsicher wird und dass sie nach einem Ausfall wieder in einen voll funktionsfähigen Zustand zurückkehrt. | Der schrittweise Ansatz dieses Musters kann dazu beitragen, die Risiken bei der Umstellung von Komponenten im Vergleich zu großen systemischen Änderungen zu mindern. - RE:08 Prüfung |
Die Kostenoptimierung konzentriert sich auf Erhaltung und Verbesserung der Rendite Ihrer Workload. | Das Ziel dieses Ansatzes besteht darin, die vorhandenen Investitionen in das derzeit laufende System zu maximieren und gleichzeitig schrittweise zu modernisieren, so dass Sie Ersetzungen mit hohem ROI vor solchen mit niedrigem ROI durchführen können. - CO:07 Komponentenkosten - CO:08 Umweltkosten |
Operational Excellence unterstützt die Workloadqualität durch standardisierte Prozesse und Teamzusammenhalt. | Dieses Muster bietet einen kontinuierlichen Verbesserungsansatz, bei dem ein schrittweiser Austausch mit kleinen Änderungen im Laufe der Zeit gegenüber großen systemischen Änderungen, die in der Umsetzung riskanter sind, bevorzugt wird. - OE:06 Entwicklung der Arbeitsbelastung - OE:11 Sichere Bereitstellungsmethoden |
Berücksichtigen Sie wie bei jeder Designentscheidung alle Kompromisse im Hinblick auf die Ziele der anderen Säulen, die mit diesem Muster eingeführt werden könnten.
Nächste Schritte
- Blogbeitrag von Martin Fowler zu StranglerFigApplication