EinschnürungsmusterStrangler pattern

Migrieren Sie ein älteres System inkrementell, indem Sie bestimmte Teile der Funktionalität nach und nach durch neue Anwendungen und Dienste ersetzen.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. 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.As features from the legacy system are replaced, the new system eventually replaces all of the old system's features, strangling the old system and allowing you to decommission it.

Kontext und ProblemContext and problem

Mit zunehmendem Alter von Systemen überaltern auch die Entwicklungstools, die Hosting-Technologie und sogar Systemarchitekturen, auf denen sie basieren.As systems age, the development tools, hosting technology, and even system architectures they were built on can become increasingly obsolete. 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.As new features and functionality are added, the complexity of these applications can increase dramatically, making them harder to maintain or add new features to.

Das vollständige Ersetzen eines komplexen Systems kann eine große Herausforderung darstellen.Completely replacing a complex system can be a huge undertaking. 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.Often, you will need a gradual migration to a new system, while keeping the old system to handle features that haven't been migrated yet. Das Ausführen von zwei separaten Versionen einer Anwendung bedeutet jedoch, dass Clients wissen müssen, wo sich bestimmte Features befinden.However, running two separate versions of an application means that clients have to know where particular features are located. Jedes Mal, wenn ein Feature oder Dienst migriert wird, müssen die Clients aktualisiert werden, um auf den neuen Speicherort zu verweisen.Every time a feature or service is migrated, clients need to be updated to point to the new location.

LösungSolution

Ersetzen Sie bestimmte Teile der Funktionalität nach und nach durch neue Anwendungen und Dienste.Incrementally replace specific pieces of functionality with new applications and services. Erstellen Sie eine Fassade, die Anforderungen an das ältere Back-End-System abfängt.Create a façade that intercepts requests going to the backend legacy system. Die Fassade leitet diese Anforderungen entweder an die ältere Anwendung oder die neuen Dienste weiter.The façade routes these requests either to the legacy application or the new services. 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.Existing features can be migrated to the new system gradually, and consumers can continue using the same interface, unaware that any migration has taken place.

Diagramm des Einschnürungsmusters

Dieses Muster hilft, das Risiko der Migration zu minimieren und den Entwicklungsaufwand über einen Zeitraum zu verteilen.This pattern helps to minimize risk from the migration, and spread the development effort over time. 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.With the façade safely routing users to the correct application, you can add functionality to the new system at whatever pace you like, while ensuring the legacy application continues to function. 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.Over time, as features are migrated to the new system, the legacy system is eventually "strangled" and is no longer necessary. Sobald dieser Vorgang abgeschlossen ist, kann das ältere System sicher außer Betrieb genommen werden.Once this process is complete, the legacy system can safely be retired.

Probleme und ÜberlegungenIssues and considerations

  • Überlegen Sie, wie Dienste und Datenspeicher gehandhabt werden sollen, die möglicherweise sowohl vom neuen als auch vom älteren System verwendet werden.Consider how to handle services and data stores that are potentially used by both new and legacy systems. Stellen Sie sicher, dass beide parallel auf diese Ressourcen zugreifen können.Make sure both can access these resources side-by-side.
  • Strukturieren Sie neue Anwendungen und Dienste auf solche Weise, dass sie leicht abgefangen und bei zukünftigen Einschnürungsmigrationen ersetzt werden können.Structure new applications and services in a way that they can easily be intercepted and replaced in future strangler migrations.
  • Zu einem Zeitpunkt nach Abschluss der Migration ist die Fassade entweder nicht mehr vorhanden oder hat sich zu einem Adapter für ältere Clients entwickelt.At some point, when the migration is complete, the strangler façade will either go away or evolve into an adaptor for legacy clients.
  • Stellen Sie sicher, dass die Fassade mit der Migration Schritt hält.Make sure the façade keeps up with the migration.
  • Stellen Sie sicher, dass die Fassade nicht zu einer einzelnen Fehlerquelle (Single Point of Failure) oder einem Leistungsengpass wird.Make sure the façade doesn't become a single point of failure or a performance bottleneck.

Verwendung dieses MustersWhen to use this pattern

Verwenden Sie dieses Muster bei der schrittweisen Migration einer Back-End-Anwendung auf eine neue Architektur.Use this pattern when gradually migrating a back-end application to a new architecture.

Dieses Muster ist in folgenden Fällen unter Umständen nicht geeignet:This pattern may not be suitable:

  • Wenn Anforderungen an das Back-End-System nicht abgefangen werden können.When requests to the back-end system cannot be intercepted.
  • Für kleinere Systeme, bei denen die Komplexität eines Austausches für den Großhandel gering ist.For smaller systems where the complexity of wholesale replacement is low.