Dev-IadicolaPillar article sullo Strangler Fig Pattern: come sostituire un sistema legacy gradualmente senza mai fermare il servizio.
Hai un gestionale PHP 5.6 con 200.000 righe di codice, nessun test, query SQL inline ovunque, e HTML mescolato con logica di business. Il sistema funziona, 50 utenti lo usano ogni giorno, e il business dipende da esso. Riscrivere da zero richiederebbe 12 mesi e nessuno può permettersi di restare senza sistema per un anno. Ma ogni modifica al codice esistente e un rischio: il codice e fragile e imprevedibile.
Lo Strangler Fig Pattern, proposto da Martin Fowler, prende il nome dal fico strangolatore: una pianta tropicale che cresce attorno a un albero esistente, lo avvolge gradualmente, e alla fine lo sostituisce completamente. Il vecchio albero muore, ma il nuovo e già al suo posto.
Metti un proxy davanti al sistema legacy: un reverse proxy (Nginx), un API gateway, o un middleware applicativo. Inizialmente, il proxy inoltra tutte le richieste al sistema legacy senza modifiche. Il sistema continua a funzionare identicamente, ma ora hai un punto di intercettazione.
Scegli una funzionalita — la più semplice, la meno rischiosa — e reimplementala nel nuovo sistema. Configura il proxy per instradare le richieste di quella funzionalita al nuovo sistema invece che al legacy. Tutte le altre richieste continuano ad andare al legacy. Il vecchio e il nuovo coesistono.
Funzionalita dopo funzionalita, il nuovo sistema cresce e il legacy si restringe. Ogni migrazione e indipendente, testabile e reversibile (basta cambiare la regola del proxy per tornare al legacy). Quando l'ultima funzionalita e migrata, il sistema legacy viene spento.
/clienti al nuovo sistema./clienti/* al nuovo sistema./fatture/* al nuovo.In ogni momento, il sistema funziona. Gli utenti non notano interruzioni. Se una migrazione ha problemi, il proxy torna a instradare al legacy in secondi.
Il punto più delicato e il database. Due approcci:
Lo Strangler Fig Pattern non e solo una tecnica di migrazione: e una filosofia del cambiamento incrementale. Non serve il coraggio di buttare via tutto e ripartire da zero. Serve la disciplina di sostituire un pezzo alla volta, validando ogni passo, senza mai perdere il terreno sotto i piedi.