Patrón Strangler Fig (Higo Estrangulador)
Inspirado en los higos estranguladores de las selvas tropicales —que germinan en las ramas altas de un árbol huésped, hacen descender sus raíces hasta el suelo y crecen gradualmente hasta sustituir por completo al árbol original—, Martin Fowler propuso el Patrón Strangler Fig como la estrategia por excelencia para migrar o refactorizar aplicaciones heredadas (Legacy Systems) de forma incremental.
1. El Peligro del "Big Bang Rewrite" #
Intentar reescribir un sistema monolítico o legado de 10 años desde cero en un proyecto paralelo suele ser una trampa mortal:
- Requiere congelar o duplicar el desarrollo de nuevas características de negocio.
- El proyecto nuevo suele tardar el doble de lo planeado y nunca alcanza la paridad funcional con el legacy.
- El día del despliegue (Go-Live) es un evento de riesgo extremo con alta probabilidad de fallos catastróficos.
El patrón Strangler Fig elimina este riesgo al permitir que el código nuevo y el antiguo coexistan en producción desde el primer día.
2. Fases de Implementación del Patrón #
1FASE 1: Transformar FASE 2: Coexistir FASE 3: Estrangular y Eliminar 2┌─────────────────────────────────┐ ┌─────────────────────────────────┐ ┌─────────────────────────────────┐ 3│ API Gateway / Router │ │ API Gateway / Router │ │ API Gateway / Router │ 4└──────┬───────────────────┬──────┘ └──────┬───────────────────┬──────┘ └─────────────────┬───────────────┘ 5 │ (100% Tráfico) │ (0%) │ (60% Tráfico) │ (40%) │ (100% Tráfico) 6 ▼ ▼ ▼ ▼ ▼ 7┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ 8│ SISTEMA │ │ NUEVO SERVICIO │ SISTEMA │ │ NUEVO SERVICIO │ NUEVO SERVICIO 9│ LEGACY │ │ LIMPIO │ │ LEGACY │ │ LIMPIO │ │ LIMPIO │ 10└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
- Transformar (Transform): Se implementa una funcionalidad específica (ej.
ProcesarFacturas) utilizando diseño limpio, tests unitarios y arquitectura moderna en un nuevo componente o microservicio. - Coexistir (Coexist): Se coloca una capa de enrutamiento o interceptor (API Gateway, Proxy inverso o Fachada) que redirige las peticiones de esa funcionalidad concreta al nuevo código, mientras el resto del tráfico sigue yendo al monolito legacy.
- Estrangular (Eliminate): Se repite el proceso para los demás casos de uso hasta que el sistema legacy queda vacío de tráfico y puede apagarse de forma segura.
3. Ejemplo Práctico: Fachada Estranguladora en Código #
Resumen del tema
Conceptos clave #
- Migración Incremental: reemplaza el código heredado caso de uso a caso de uso en lugar de intentar una reescritura total simultánea.
- Capa de Intercepción: uso de Proxies, API Gateways o Feature Flags para redirigir tráfico selectivamente.
- Entrega Continua de Valor: permite entregar mejoras a producción cada semana mientras se avanza en la refactorización arquitectónica.
- Mitigación de Riesgos: si la nueva implementación presenta algún fallo, basta con cambiar el flag de enrutamiento para volver al sistema previo en segundos.
Qué debes recordar #
Nunca intentes una reescritura "Big Bang" de un sistema legacy en producción; estrangula el monolito gradualmente con el patrón Strangler Fig.