B2B SaaS · Mittelstand
Symfony 2 → 7 Modernisierung ohne Feature-Freeze
Migration einer 700k-Zeilen-Doctrine-1.x-Codebasis über 14 Monate ohne Produktionsstillstand. Inkrementeller Strangler-Pattern-Ansatz mit kontinuierlichen Feature-Releases.
- Branche
- B2B SaaS · Mittelstand
- Dauer
- 14 Monate
- Stack
- PHP, Symfony, Doctrine
Ergebnisse auf einen Blick
- −63 % Build-Zeit
- −41 % P95-Latenz
- Null produktionsrelevante Regressionen
- Kein Produktionsstillstand während der Migration
Ausgangslage
Ein B2B-SaaS-Produkt aus dem deutschen Mittelstand lief auf Symfony 2 mit Doctrine 1.x. Die Codebasis war auf rund 700.000 Zeilen gewachsen. Symfony 2 und Doctrine 1.x werden schon lange nicht mehr gepflegt, der Stack bekam also keine Sicherheitsupdates mehr.
Rahmenbedingungen
- Kein Feature-Freeze. Neue Features mussten weiter ausgeliefert werden, während die Migration lief.
- Kein Produktionsstillstand. Das System musste während der gesamten Migration verfügbar bleiben.
Vorgehen
Statt eines Neuschreibens folgte die Migration dem Strangler-Fig-Ansatz: Die alte Anwendung lief in Produktion weiter, während sie Schritt für Schritt auf den neuen Stack umzog. Weil die Migration inkrementell lief, gingen Feature-Releases über die ganzen 14 Monate weiter.
Das Strangler-Fig-Pattern löst ein Altsystem Stück für Stück ab. Neuer Code übernimmt einen Bereich, der Traffic für diesen Bereich wandert dorthin, und der alte Code wird entfernt, sobald sich der neue Weg bewährt hat. So schrumpft das Altsystem, bis nichts mehr davon übrig ist. Mehr zur Methode:
- Das Strangler-Fig-Pattern: Legacy-Monolithen sicher ablösen
- Von Symfony 2/3 zu Symfony 7: Eine schrittweise Migrationsstrategie
Ergebnisse
- Build-Zeit um 63 % gesenkt.
- P95-Latenz um 41 % gesenkt. P95 ist die Antwortzeit, die 95 % der Anfragen unterschreiten. Sie zeigt also, was die langsameren Anfragen erleben, nicht nur den Durchschnitt.
- Null produktionsrelevante Regressionen.
- Kein Produktionsstillstand in den 14 Monaten.
Stack und Dauer
PHP, Symfony (von Version 2 auf 7) und Doctrine (ab 1.x). Das Projekt lief 14 Monate.
