Despliegue Azul-Verde

Blue-Green deployment is a release strategy that minimizes downtime and risk by running two identical production environments, 'Blue' (current version) and 'Gre...

El Despliegue Azul-Verde (Blue-Green Deployment) es una estrategia de lanzamiento de software diseñada para minimizar el tiempo de inactividad y reducir el riesgo asociado con la implementación de nuevas versiones de aplicaciones. Este enfoque implica mantener dos entornos de producción idénticos, denominados 'Azul' y 'Verde'.

En un momento dado, un entorno (por ejemplo, Azul) ejecuta la versión actual de la aplicación en vivo, atendiendo todo el tráfico de producción. El otro entorno (Verde) permanece inactivo o se utiliza para pruebas. Cuando una nueva versión de la aplicación está lista para ser lanzada, se implementa en el entorno inactivo (Verde).

Una vez que la nueva versión se implementa y se prueba exhaustivamente en el entorno Verde (incluyendo pruebas de integración, pruebas de rendimiento y, potencialmente, pruebas de humo con un pequeño subconjunto de usuarios o personal interno), el tráfico se cambia del entorno Azul al entorno Verde. Este cambio generalmente es gestionado por un balanceador de carga o un enrutador que dirige todas las solicitudes entrantes al entorno Verde, mientras que el entorno Azul ahora queda inactivo.

La principal ventaja es un tiempo de inactividad cercano a cero durante el despliegue. Si surgen problemas con la nueva versión en el entorno Verde después del cambio, el tráfico puede ser revertido instantáneamente al entorno Azul, proporcionando un mecanismo de reversión rápida. El entorno Azul puede ser utilizado para implementar la próxima actualización o ser actualizado para coincidir con el entorno Verde.

Las contrapartidas incluyen el requisito de mantener dos entornos de producción idénticos, lo que duplica los costos de infraestructura y la complejidad. Asegurar la consistencia entre los dos entornos, especialmente en lo que respecta a esquemas de bases de datos o estado, también puede ser un desafío. Las pruebas exhaustivas en el entorno de staging son críticas para evitar la implementación de código defectuoso, ya que la reversión solo es efectiva si la versión anterior es estable.

        graph LR
  Center["Despliegue Azul-Verde"]:::main
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Explícalo como si tuviera 5 años

Imagina que tienes dos escenarios idénticos para una obra de teatro. Los actores están actuando en el Escenario Azul. Cuando el siguiente acto está listo, lo preparas perfectamente en el Escenario Verde mientras el espectáculo continúa en el Azul. Luego, cambias instantáneamente la atención de la audiencia al Escenario Verde para el nuevo acto, dejando el Escenario Azul listo como respaldo.

🤓 Expert Deep Dive

El despliegue Azul-Verde es una forma de despliegue canario o despliegue continuo enfocado en la duplicación de infraestructura en lugar de un despliegue incremental. El mecanismo central se basa en el enrutamiento de tráfico externo (por ejemplo, DNS, configuración del balanceador de carga, proxy inverso) para cambiar el tráfico entre los dos grupos idénticos de servidores. La gestión de bases de datos presenta un desafío significativo; las estrategias incluyen mantener una única instancia de base de datos accedida por ambos entornos (arriesgando problemas de compatibilidad si los cambios de esquema no son compatibles hacia atrás), o usar replicación de bases de datos con sincronización cuidadosa y posibles pasos de migración de datos durante el cambio. La gestión del estado, particularmente para aplicaciones con estado, requiere una consideración cuidadosa para garantizar una transición fluida. La capacidad de reversión es altamente efectiva para fallos en el código de la aplicación, pero menos para problemas relacionados con corrupción de datos o configuraciones de infraestructura persistentes. El sobrecosto de mantener infraestructura redundante debe sopesarse frente al valor comercial de alta disponibilidad y el riesgo reducido de despliegue.

📚 Fuentes