Patrón: Blue/Green
Hoy hablaremos de un patrón poco conocido, pero muy útil y usado, hablamos del patrón Azul/Verde, una práctica que nos propone entornos paralelos de producción para disminuir el downtime que pueda tener nuestra infraestructura y que ofrece otras ventajas importantes.
La puesta en producción de los microservicios, debe ser siempre un proceso automatizado, empleando técnicas de integración continua (CI), o un paso más adelante con entrega continua (CD). Estas técnicas llevan a crear tuberías (pipelines) para llevar el software desde el código hasta su puesta en operación, permitiendo la ejecución de pruebas, verificación automática de bugs, nivel de recubrimiento de los test, entre otros procesos que permitan garantizar una mejor salida a producción. Herramientas como Jenkins, GitLab CI, SonarQube y muchas otras, permiten estos procesos.
Blue/Green
El patrón Azul-Verde, es una práctica recomendada aplicar que nos plantea tener dos infraestructuras de operación similares, una azul, donde se encuentre el entorno de producción operativo, y otra verde, lo más idéntica posible a la azul, con las mismas capacidades.
Azul-Verde opera por debajo de un router o gateway que permite ante situaciones deseadas encaminar el tráfico hacia una u otra infraestructura de operación, teniendo siempre una infraestructura de contingencia.
Los escenarios, en los que podría ser útil son variados, algunos ejemplos:
- Se daña un elemento físico de la infraestructura en operación, rápidamente podemos cambiar el ruteo hacia la otra.
- Vamos a añadir una nueva funcionalidad, y queremos hacer algunas pruebas en el entorno de producción, podemos usar la infraestructura verde para ello.
- Podemos hacer rollback rápidamente hacia la última infraestructura operativa en caso de un fallo.
La puesta en operación de Azul Verde tiene los siguientes problemas asociados que son necesarios resolver para que funcione de forma exitosa:
- Las bases de datos de ambos entornos deben estar completamente sincronizadas/replicadas.
- Las transacciones de larga duración que estén en el entorno verde al pasar al azul se perderán.
El primero de los problemas puede resultar un poco más sencillo de resolver, pues los gestores de bases de datos modernos permiten este tipo de actividad. El segundo caso es un poco más complejo de resolver; Martin Fowler en su artículo sobre este patrón plantea dos variantes para resolver este problema, la primera es crear un mecanismo que alimente a ambos entornos de las transacciones, pero se procesen en solo uno; otra variante consiste en poner el ambiente que se va a dejar de usar en modo solo lectura por un tiempo para que complete las transacciones.
El uso de este patrón puede traer asociado altos costes de infraestructura, en dependencia del tamaño de la plataforma y sus componentes.
Cuando usar este patrón
Si las pérdidas por falta de disponibilidad temporal, superan el costo que supondría tener una infraestructura paralela se recomienda aplicar este patrón. La decisión de usar o no Azul Verde debe estar sujeta al impacto de tener falta de disponibilidad.
Software recomendado
En entornos Cloud existen diversas herramientas para lograr Azul Verde, en Amazon por ejemplo existe AWS CodePipeline. En entornos gestionados manualmente como VPS deben configurarse los pipelines de CI y el proxy reverso (con Nginx por ejemplo) para enrutar hacia una u otra infraestructura.
Espero te haya gustado este artículo, y te sirva para aprender sobre los microservicios y entornos Cloud.