Un despliegue directo es riesgoso: si algo está malo, todos los usuarios lo ven. Despliegue seguro significa rollout progresivo donde solo un porcentaje ve el cambio al inicio.
Blue-Green: dos ambientes idénticos
Tienes dos ambientes: azul (actual) y verde (nuevo). Verificas verde completamente. Luego switcheas traffic de azul a verde en un segundo.
Si verde tiene un problema, vuelves a azul en segundos. Zero downtime, muy rápido rollback.
- Ambiente Blue (actual): sirve traffic.
- Ambiente Green (nuevo): se prepara en background.
- Switch traffic: Blue → Green en un click.
Canary: expone cambio a un % de usuarios primero
En lugar de 0% a 100%, empiezas con 5% de usuarios viendo la versión nueva. Monitoreas métricas de esos usuarios. Si todo está bien, subes a 10%, después 25%, hasta llegar a 100%.
Si algo falla, solo 5% afectados. Haces rollback y la mayoría nunca notó.
- 5% de usuarios → versión nueva.
- Monitorea métricas.
- Si bien, sube a 25%, después 50%, 100%.
Progressive Rollout: parecido a canary pero más controlado
Progressive rollout toma canary un paso más allá: en lugar de humanos decidir cuándo subir %, lo haces automáticamente si métricas lucen bien.
Eso requiere observabilidad sólida pero el resultado es despliegues más rápidos con menos supervisión.
- Despliegue a 5% automáticamente.
- Si error rate normal, sube a 25% después 5 minutos.
- Continúa hasta 100% si todo bien.
Shadow Traffic: testa con tráfico real sin usuarios verlo
Redirige un % del tráfico a versión nueva sin realmente usarla. Registra respuestas. Compara con versión vieja. Si las respuestas difieren, detectas bugs sin afectar usuarios.
Shadow traffic te permite testear con tráfico 100% real sin que usuarios lo sientan. Es como tener testing automático en producción.
Monitoreo durante rollout
Durante canary, monitorea: latencia, errores, memoria, CPU. Si cualquiera de eso se degrada, rollback automático. Eso es el criterio para detener la propagación.
Las herramientas modernas lo automatizan, pero necesitas métricas bien definidas primero.