Glossar
Strangler Fig
Auch: Strangler-Fig-Muster · Würgefeige
Ein Muster, um ein Altsystem schrittweise abzulösen: Neue Funktionen entstehen außen herum, das alte System schrumpft, bis nichts mehr davon übrig ist.
Der Name stammt von der Würgefeige, die an einem Baum hochwächst, ihn umschließt und am Ende allein stehen bleibt. Übertragen heißt das: Vor das Altsystem kommt eine Weiche, die einzelne Aufrufe an neuen Code leitet. Anfangs sind es wenige, mit der Zeit werden es mehr, und irgendwann läuft nichts mehr über den alten Pfad.
Der Gegenentwurf ist der große Neubau: zwei Jahre parallel entwickeln, dann umschalten. Das klingt sauberer und geht regelmäßig schief, weil das alte System in der Zwischenzeit weiterlebt und sich verändert. Jede Änderung am Alten muss im Neuen nachgezogen werden, und der Abstand wird größer statt kleiner.
Praktisch braucht das Muster drei Dinge: eine Stelle, an der man Verkehr umlenken kann, Klarheit darüber welche Daten wem gehören, und die Disziplin, den alten Pfad nach der Umstellung wirklich zu löschen.
Die Weiche kann verschieden aussehen. Bei HTTP-Verkehr genügt oft ein Reverse Proxy oder eine Regel im Lastverteiler, die einen Pfad an einen neuen Dienst schickt. In einer Anwendung ohne eigene Netzgrenze ist es ein Schalter im Code, der zwischen alter und neuer Implementierung wählt. Bei asynchroner Verarbeitung liest der neue Konsument dieselbe Warteschlange mit.
Der wirklich schwierige Teil ist selten die Weiche, sondern die Datenhaltung. Solange alt und neu auf dieselbe Datenbank schreiben, ist nichts abgelöst, sondern nur zusätzlicher Code entstanden. Deshalb wird ein Bereich erst dann geschnitten, wenn klar ist, wer Eigentümer welcher Daten ist und wie die andere Seite an sie kommt: über eine Schnittstelle, über Ereignisse oder über eine Spiegelung mit einer eindeutigen Schreibrichtung.
Die Reihenfolge folgt dem Nutzen, nicht der Architektur. Zuerst der Bereich, der am häufigsten geändert wird oder am meisten Ärger macht, nicht der, der am einfachsten aussieht. Der erste Schnitt hat außerdem eine zweite Aufgabe: Er baut die Werkzeuge, die alle folgenden brauchen, also Weiche, Vergleichsbetrieb, Rückschaltung und Messung.
Rückschaltbarkeit ist das, was das Verfahren risikoarm macht. Jeder Schritt läuft erst im Schattenbetrieb, dann für einen kleinen Anteil, dann vollständig, und lässt sich in jeder Phase in Sekunden zurückdrehen. Wer stattdessen nach jedem Schritt ein Deployment braucht, um zurückzukommen, hat den Vorteil verschenkt.
Woran Sie es erkennen
- Es gibt eine Stelle, an der Verkehr umgelenkt werden kann, etwa einen Lastverteiler.
- Einzelne Funktionsbereiche haben klare Datengrenzen.
- Ein Neubau würde länger dauern als der Wettbewerb Zeit lässt.
- Das System darf während des Umbaus nicht stillstehen.
Nicht zu verwechseln mit
- Big-Bang-Migration
- Ein Stichtag, ein Versuch, kein Zwischenzustand. Strangler Fig tauscht diesen einen großen Risikoblock gegen viele kleine, von denen jeder einzeln rückholbar ist.
- Refactoring
- Verändert Struktur innerhalb desselben Systems. Strangler Fig verlagert Funktionalität in ein neues System und schaltet Verkehr um.
- Branch by Abstraction
- Dieselbe Idee innerhalb einer Codebasis: eine Abstraktionsschicht einziehen, dahinter austauschen. Strangler Fig arbeitet über Systemgrenzen hinweg.
- Anti-Corruption-Layer
- Kein Ablösemuster, sondern eine Schutzschicht. Sie verhindert, dass die Begriffe und Eigenheiten des Altsystems in den neuen Code wandern, und wird beim Strangler Fig meist zusätzlich gebraucht.
Wann es trägt
- Das System muss während des Umbaus durchgehend laufen.
- Es gibt eine Stelle, an der Verkehr umgelenkt werden kann, etwa Lastverteiler, Proxy oder ein Schalter im Code.
- Der Funktionsumfang ist zu groß, um ihn vollständig zu spezifizieren.
- Das Vorhaben muss unterbrechbar sein, weil Budget oder Prioritäten sich ändern können.
Wann nicht
- Sehr kleine Systeme, bei denen die Weiche mehr Aufwand ist als der Neubau.
- Wenn alt und neu unauflösbar auf demselben Datenmodell sitzen und kein Schnitt gefunden wird.
- Wenn das Altsystem ohnehin abgeschaltet wird und niemand sein Verhalten übernehmen muss.
Wie man rangeht
- Schnitt entlang der Fachlichkeit suchenNicht nach Technikschichten trennen, sondern nach Zuständigkeit. Ein Bereich, der seine Daten besitzt, lässt sich herauslösen; eine Schicht quer durch alles nicht.
- Weiche einbauen und ohne Funktionsänderung ausrollenErst die Umlenkung produktiv nehmen, die noch hundert Prozent an das Alte schickt. Wer Weiche und erste Funktion zusammen ausrollt, weiß bei einem Fehler nicht, welches von beidem schuld ist.
- Datenbesitz klären, bevor Code entstehtWer schreibt, wer liest, wie kommt die andere Seite an die Daten. Ohne diese Antwort entsteht ein zweiter Schreiber auf derselben Tabelle, und das ist keine Ablösung.
- Schattenbetrieb fahrenDer neue Pfad verarbeitet echten Verkehr, das Ergebnis geht aber nicht an den Nutzer, sondern in einen Vergleich. Abweichungen zeigen sich, bevor sie jemanden treffen.
- Anteilig umschaltenEin Prozent, zehn, fünfzig, hundert, mit einer Kennzahl je Stufe. Die Rückschaltung muss ein Schalter sein, kein Deployment.
- Alten Pfad in derselben Aufgabe löschenKein Folgeticket. Der tote Code bleibt sonst als Sicherheitsnetz stehen, wird weiter gepflegt und macht den Umbau teurer statt billiger.
Häufig gefragt
Wie lange dauert eine Ablösung mit dem Strangler-Fig-Muster?
Länger als ein Neubau auf dem Papier und kürzer in der Realität, weil ab dem ersten Monat Teile in Produktion sind. Bei der Redaktionsplattform aus meinen Case Studies lief die Modernisierung über zwölf Monate, ohne einen Tag Ausfall. Entscheidend ist nicht die Gesamtdauer, sondern dass jeder Schritt einzeln Wert hat.
Was macht man mit der gemeinsamen Datenbank?
Sie ist der eigentliche Prüfstein. Solange beide Seiten in dieselben Tabellen schreiben, ist nichts abgelöst. Praktikabel sind drei Wege: der neue Dienst übernimmt einen Datenbereich vollständig und stellt ihn über eine Schnittstelle bereit, oder das Alte veröffentlicht Ereignisse und das Neue führt eine eigene Sicht, oder es gibt eine Spiegelung mit genau einer erlaubten Schreibrichtung. Zwei Schreiber auf derselben Tabelle sind kein Zwischenzustand, sondern ein neuer Dauerzustand.
Womit fängt man an?
Mit dem Bereich, der am häufigsten geändert wird oder am meisten Störungen verursacht, nicht mit dem einfachsten. Der erste Schnitt kostet überproportional, weil er Weiche, Vergleichsbetrieb und Rückschaltung mitbaut. Wenn dieser Aufwand in ein Randstück fließt, ist das Werkzeug da, aber der Nutzen unsichtbar, und Vorhaben ohne sichtbaren Nutzen werden nicht zu Ende gebracht.
Wie beweist man, dass der neue Pfad dasselbe tut?
Über Schattenbetrieb: Beide Pfade verarbeiten denselben echten Verkehr, ausgeliefert wird das alte Ergebnis, verglichen werden beide. Nach ein paar Tagen kennt man die Abweichungen und weiß, welche davon Fehler sind und welche gewollte Korrekturen. Erst danach wird umgeschaltet, und dann anteilig.
Was, wenn das Vorhaben in der Mitte gestoppt wird?
Dann liegt der Wert der bereits abgelösten Teile trotzdem vor, und der Zwischenzustand ist betreibbar. Genau das unterscheidet das Muster vom Neubau, bei dem ein Abbruch nach achtzehn Monaten null liefert. Der Preis: Der Zwischenzustand darf kein Dauerzustand werden, also braucht jeder pausierte Schnitt ein Datum, an dem über Fortsetzung oder Rückbau entschieden wird.
