Skip to content
SP StackPractices
intermediate Por StackPractices

Despliegue Blue-Green — Releases sin Downtime con Rollback Instantáneo

Guía práctica sobre despliegues blue-green: arquitectura, estrategias de cambio de tráfico, migraciones de base de datos y lograr releases sin downtime con rollback instantáneo.

Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.

Overview

El despliegue blue-green es una estrategia de release que mantiene dos entornos de producción idénticos: blue (activo) y green (inactivo). Las nuevas versiones se despliegan al entorno inactivo, se validan y luego el tráfico cambia instantáneamente. Si surgen problemas, el rollback es simplemente otro cambio de tráfico.

Esta guía cubre diseño de arquitectura, mecanismos de cambio de tráfico, manejo de migraciones de base de datos y mejores prácticas operacionales.

When to Use

  • Necesitas despliegues sin downtime para servicios críticos
  • La velocidad de rollback es más importante que la eficiencia de recursos
  • Tu aplicación puede ejecutarse en dos entornos paralelos completos
  • Tienes suficiente capacidad de infraestructura para ejecutar entornos duplicados
  • Los cambios de base de datos son compatibles hacia atrás o pueden desacoplarse

Core Concepts

ConceptoDescripción
Entorno BlueEntorno de producción actualmente activo sirviendo tráfico real
Entorno GreenObjetivo de despliegue de la nueva versión; inactivo hasta que la validación pase
Cambio de TráficoEnrutar todo el tráfico de usuarios de blue a green instantáneamente
RollbackRevertir tráfico a blue si green muestra problemas
Warm-upPrecargar cachés y conexiones antes de cambiar el tráfico
Compatibilidad de Base de DatosRequisito de que los cambios de schema funcionen con código viejo y nuevo

Architecture

┌─────────────────┐
│   Load Balancer  │
│   (Router/Proxy) │
└────────┬────────┘

    ┌────┴────┐
    │         │
┌───▼───┐  ┌──▼────┐
│ Blue  │  │ Green │
│ (Live)│  │ (Idle)│
└───────┘  └───────┘

Step-by-Step Blue-Green Deployment

1. Preparar el Entorno Green

Despliega la nueva versión al entorno inactivo:

# Ejemplo: Blue-green de Kubernetes con Services
# Entorno Blue (actual live)
apiVersion: v1
kind: Service
metadata:
  name: myapp-blue
  labels:
    version: blue
spec:
  selector:
    app: myapp
    version: blue
  ports:
    - port: 80
      targetPort: 8080

# Entorno Green (nueva versión)
apiVersion: v1
kind: Service
metadata:
  name: myapp-green
  labels:
    version: green
spec:
  selector:
    app: myapp
    version: green
  ports:
    - port: 80
      targetPort: 8080

Checklist de preparación:

  • Desplegar nueva versión a green con sizing idéntico de recursos
  • Ejecutar smoke tests y health checks contra green
  • Precalentar cachés y pools de conexiones
  • Verificar que green puede manejar carga completa de producción
  • Mantener blue corriendo y saludable durante preparación

2. Cambiar Tráfico

Mover todo el tráfico de blue a green:

# Ejemplo: Cambio de tráfico en NGINX
# Actualizar configuración de upstream y recargar
upstream myapp {
    server green-env.internal:8080;  # Cambiar a green
    # server blue-env.internal:8080;  # Comentar blue
}

# Recargar sin downtime
sudo nginx -s reload

# Ejemplo: Cambio de target group en AWS ALB
aws elbv2 modify-listener \
  --listener-arn arn:aws:elasticloadbalancing:... \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:...:targetgroup/green

Estrategias de cambio de tráfico:

  • Cambio DNS: Actualizar CNAME (lento debido a propagación TTL)
  • Load balancer: Cambiar target group o backend upstream (instantáneo)
  • Service mesh: Actualizar reglas de routing de virtual service (instantáneo)
  • API gateway: Actualizar configuración de endpoint backend (instantáneo)

3. Monitorear Post-Cambio

Observar problemas inmediatamente después del cambio:

MétricaUmbral de AlertaAcción
Tasa de error>0.1% de incrementoDisparar rollback
Latencia p95>20% de incrementoDisparar rollback
CPU/Memoria>80% de utilizaciónEscala green o rollback
KPI de negocio customCualquier regresiónDisparar rollback
# Ejemplo: Disparador automatizado de rollback
#!/bin/bash
ERROR_RATE=$(curl -s "http://monitoring/api/v1/query?query=rate(errors[5m])" | jq '.data.result[0].value[1]')
THRESHOLD=0.001

if (( $(echo "$ERROR_RATE > $THRESHOLD" | bc -l) )); then
  echo "Tasa de error $ERROR_RATE excede umbral. Iniciando rollback."
  ./switch-traffic.sh --target=blue
  exit 1
fi

4. Rollback (Si es Necesario)

Revertir instantáneamente a blue si green falla:

# Ejemplo: Script de rollback instantáneo
#!/bin/bash
set -e

TARGET=${1:-blue}

echo "Haciendo rollback de tráfico a ${TARGET}..."

# Actualizar load balancer
case $TARGET in
  blue)
    kubectl patch service myapp-active -p '{"spec":{"selector":{"version":"blue"}}}'
    ;;
  green)
    kubectl patch service myapp-active -p '{"spec":{"selector":{"version":"green"}}}'
    ;;
esac

echo "Rollback completo. Verificando salud..."
curl -f http://myapp-active/health

Consideraciones de rollback:

  • Mantener entorno blue corriendo por 1-2 horas post-cambio (o más)
  • Asegurar que los cambios de base de datos sean compatibles hacia atrás para rollback
  • Tener un runbook con pasos exactos de rollback
  • Practicar drills de rollback trimestralmente

5. Decomisionar Blue

Después de que green esté estable, desmantelar blue:

# Ejemplo: Checklist de decomisión segura
# 1. Esperar 24-48 horas de operación estable en green
# 2. Verificar que no hay tráfico hacia blue vía access logs
# 3. Archivar estado del entorno blue (para forense si se necesita)
# 4. Escala blue a cero o eliminar recursos
# 5. Actualizar documentación con nueva baseline (green se convierte en blue para próximo despliegue)

Database Considerations

Los cambios de base de datos son la parte más difícil de los despliegues blue-green:

EstrategiaCuándo UsarComplejidad
Schema compatible hacia atrásTodos los cambios funcionan con código viejo y nuevoBaja
Patrón expand-contractAgregar en un release, eliminar en el siguienteMedia
Base de datos por entornoRequiere aislamiento completo de datosAlta
Read replicasCambiar tráfico de lectura independientementeMedia
-- Ejemplo: Migración compatible hacia atrás
-- Paso 1 (antes del despliegue): Agregar nueva columna como nullable
ALTER TABLE users ADD COLUMN email_verified BOOLEAN;

-- Paso 2 (nuevo código escribe en ambas columnas vieja y nueva)
-- Código viejo ignora nueva columna

-- Paso 3 (siguiente release): Rellenar y hacer no-nullable
UPDATE users SET email_verified = false WHERE email_verified IS NULL;
ALTER TABLE users ALTER COLUMN email_verified SET NOT NULL;

Best Practices

  • Mantén entornos verdaderamente idénticos. Mismo OS, versiones de runtime, límites de recursos y configuración.
  • Automatiza todo el cambio. Los cambios manuales de DNS o configuración son propensos a errores.
  • Monitorea antes, durante y después. Las métricas de baseline ayudan a detectar regresiones.
  • Planifica el drift de base de datos. Las bases de datos compartidas entre entornos requieren cuidadoso orden de migraciones.
  • Practica el rollback regularmente. El mejor momento para probar rollback es cuando no lo necesitas.
  • Documenta la decisión de cambio. Nota por qué ocurrió el cambio y qué se observó.

Common Mistakes

  • Cambiar tráfico sin health checks. Siempre valida green antes de enrutar usuarios.
  • Ignorar estado de base de datos. Los cambios de schema deben ser compatibles con ambos entornos.
  • Eliminar blue demasiado rápido. Espera un período de horneado antes de decomisionar.
  • Tamaño desigual de entornos. Green debe manejar 100% del tráfico; no sub-provisiones.
  • Olvidar sesiones persistentes. Los usuarios con estado de sesión pueden ver logout o pérdida de datos.

Variants

  • Infraestructura inmutable: Construir nuevos AMIs/contenedores en lugar de actualizar en su lugar
  • Blue-green con feature flags: Usar feature flags para controlar porcentaje de tráfico dentro de green
  • Blue-green multi-región: Cambiar regiones enteras entre blue y green
  • Blue-green de base de datos: Replicar base de datos y cambiar connection strings

FAQ

Q: ¿Cuánta infraestructura extra requiere blue-green? 100% — ejecutas dos entornos completos. Este es el trade-off por el rollback instantáneo.

Q: ¿Puedo usar blue-green con servicios stateful? Sí, pero con cuidado. El estado de sesión debe ser externalizado (Redis, base de datos). Los cambios de base de datos requieren migraciones compatibles hacia atrás.

Q: ¿Cuál es la diferencia entre blue-green y canary? Blue-green cambia todo el tráfico a la vez. Canary enruta un pequeño porcentaje primero, aumentando gradualmente.

Q: ¿Cuánto tiempo debo mantener el entorno viejo después del cambio? Manténlo por al menos un día hábil (24 horas) o hasta que estés seguro de que la nueva versión es estable.

Conclusion

El despliegue blue-green es el estándar de oro para releases sin downtime con rollback instantáneo. Requiere infraestructura duplicada pero proporciona confianza sin igual. Combínalo con health checks automatizados, migraciones de base de datos compatibles hacia atrás y monitoreo exhaustivo para un proceso de release a prueba de balas.