StackPractices
intermediate Por Mathias Paulenko

Checklist de Despliegue sin Tiempo de Inactividad

Un checklist para garantizar que los despliegues en produccion se completen sin interrumpir el servicio usando patrones de rollout seguros.

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.

Descripcion General

Los despliegues sin tiempo de inactividad actualizan servicios de produccion sin interrumpir a los usuarios. Este checklist ayuda a los equipos a verificar que los health checks, el enrutamiento de trafico, las migraciones de base de datos y los planes de rollback esten en su lugar antes y durante un release.

Cuando Usar

  • For alternatives, see Blue-Green Deployment.

  • Liberar una nueva version de un servicio orientado al usuario.

  • Desplegar migraciones de esquema o datos que afecten multiples instancias.

  • Cambiar infraestructura que pueda impactar la disponibilidad.

  • Introducir una nueva estrategia de rollout como canary o blue-green.

  • Prepararse para un evento de alto trafico donde la estabilidad es prioritaria.

Prerequisitos

  • Un pipeline de despliegue con etapas automaticas de build, test y publish.
  • Endpoints de health check que representen la verdadera disponibilidad de la aplicacion.
  • Load balancer, ingress o controlador de trafico que soporte rollout gradual.
  • Estrategia de migracion de base de datos compatible hacia atras.
  • Plan de rollback con artefacto y estado de datos conocidos como buenos.
  • Monitoreo y alertas para tasa de error, latencia y metricas de negocio.
  • Plan de comunicacion para stakeholders y clientes.

Solucion

Checklist

1. Preparacion Pre-Despliegue

  • El cambio de despliegue esta aprobado y documentado.
  • El codigo esta mergeado y el artefacto esta construido y taggeado.
  • Las pruebas unitarias, de integracion y de contrato pasan automaticamente.
  • Las migraciones de base de datos se revisaron para compatibilidad hacia atras.
  • Los feature flags estan configurados para habilitacion segura.
  • La capacidad y limites de escalado son suficientes para el trafico esperado.
  • Los dashboards y alertas de monitoreo estan activos.
  • La rotacion de guardia conoce la ventana de despliegue.
  • Los pasos de rollback estan documentados y probados en un entorno no productivo.
  • La comunicacion orientada al cliente esta preparada si es necesario.

2. Configuracion de Health Checks

CheckEndpointCriterio de ExitoAccion ante Falla
Liveness/health/liveHTTP 200Reiniciar contenedor
Readiness/health/readyHTTP 200 y dependencias arribaDetener enrutamiento de trafico
Startup/health/startupHTTP 200Retrasar despliegue
Dependency/health/depsBase de datos, cache, cola alcanzablesAlertar y detener
Business/health/businessFlujo critico devuelve valor esperadoPaginar al guardia

3. Seleccion de Estrategia de Rollout

EstrategiaCaso de UsoNivel de RiesgoVelocidad de Rollback
Rolling updateServicios sin estado, bajo riesgoBajoMedia (terminar nuevos pods)
Blue-greenSesiones stateful, releases predeciblesMedioRapida (cambiar trafico de vuelta)
CanaryAlto riesgo, metricas mediblesMedioRapida (drenar canary)
Feature flagExposicion gradual de usuariosBajoInstantanea (apagar toggle)
A/B deploymentValidar comportamiento de usuariosMedioRapida (re-rutear trafico)

4. Pasos de Ejecucion del Despliegue

PasoAccionVerificacion
1Desplegar en staging y ejecutar pruebas de humoPruebas de staging pasan
2Desplegar canary o subconjunto pequenoHealth checks pasan, tasa de error estable
3Monitorear metricas clave durante la duracion del canaryLatencia, tasa de error, metricas de negocio dentro de la linea base
4Incrementar porcentaje de trafico gradualmenteCada etapa pasa health checks y verificaciones de metricas
5Completar rollout al 100%Todas las instancias saludables y sirviendo trafico
6Validar endpoints de produccionPruebas de humo y flujos criticos de usuario pasan
7Mantener version anterior disponible para rollbackRetener durante la ventana de rollback definida
8Confirmar que la ventana de rollback ha pasadoEliminar version anterior o actualizar la linea base del artefacto

5. Seguridad de Migraciones de Base de Datos

  • Las migraciones son aditivas y compatibles hacia atras con la version anterior.
  • El codigo viejo puede leer el nuevo esquema sin errores.
  • El codigo nuevo puede leer el esquema viejo si se requiere rollback.
  • Los indices se crean concurrentemente donde se soporta.
  • Las migraciones grandes se dividen en lotes mas pequenos.
  • Los jobs de relleno de datos o migracion son idempotentes.
  • El script de rollback o operacion compensatoria esta disponible.
  • Los cambios de base de datos se prueban en staging con datos similares a produccion.

6. Disparadores de Rollback

DisparadorUmbralAccion
Pico de tasa de error> 0.5% durante 2 minutosPausar despliegue e investigar
Aumento de latenciap99 > linea base + 30% durante 5 minutosRevertir trafico
Caida de metrica de negocioTasa de conversion cae > 5%Rollback inmediato
Falla de health check> 10% fallandoRollback inmediato
Alerta criticaCualquier incidente P1Rollback y paginar al guardia
Timeout de canaryLa etapa canary excede la duracion sin aprobarRollback del canary

7. Validacion Post-Despliegue

  • Los logs de aplicacion no muestran errores inesperados.
  • La tasa de error y latencia estan dentro de la linea base.
  • Las metricas de negocio son estables o mejoran.
  • Todos los feature flags estan en el estado deseado.
  • Los recursos antiguos se limpian despues de la ventana de rollback.
  • El resumen del despliegue se comparte con el equipo.
  • Cualquier problema se registra en el issue tracker con duenos.

Explicacion

Los despliegues sin tiempo de inactividad dependen de tres cosas: mecanismos de rollout seguros, senales de salud confiables y rollback rapido. Un checklist asegura que cada release considere el enrutamiento de trafico, la compatibilidad de datos y la observabilidad antes de que cualquier usuario sea expuesto. Combinar esta disciplina con la automatizacion reduce el riesgo de incidentes en produccion y mejora la confianza en los releases.

Configuracion de Rolling Update en Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
spec:
  replicas: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 0
  template:
    spec:
      containers:
        - name: api
          image: registry.example.com/api:v2.3.1
          readinessProbe:
            httpGet:
              path: /health/ready
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 5
            failureThreshold: 3
          livenessProbe:
            httpGet:
              path: /health/live
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 10
            failureThreshold: 3
          lifecycle:
            preStop:
              exec:
                command: ["sh", "-c", "sleep 15 && kill -SIGTERM 1"]
      terminationGracePeriodSeconds: 60

Configuracion de Canary con Argo Rollouts

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: api-gateway
spec:
  replicas: 10
  strategy:
    canary:
      steps:
        - setWeight: 10
        - pause: { duration: 5m }
        - analysis:
            templates:
              - templateName: success-rate
            args:
              - name: service-name
                value: api-gateway
        - setWeight: 30
        - pause: { duration: 5m }
        - analysis:
            templates:
              - templateName: success-rate
            args:
              - name: service-name
                value: api-gateway
        - setWeight: 50
        - pause: { duration: 10m }
        - setWeight: 100
  selector:
    matchLabels:
      app: api-gateway
  template:
    metadata:
      labels:
        app: api-gateway
    spec:
      containers:
        - name: api
          image: registry.example.com/api:v2.3.1
          ports:
            - containerPort: 8080

Variantes

  • Checklist de rolling update en Kubernetes: Enfoque en readiness probes, max surge, max unavailable y pod disruption budgets.
  • Checklist de despliegue blue-green: Enfoque en el switch de trafico, compatibilidad de base de datos y retencion de versiones.
  • Checklist de despliegue canary: Enfoque en umbrales de metricas, pesos de trafico progresivos y puertas de rollback automatico.
  • Checklist de despliegue serverless: Enfoque en versionado de funciones, enrutamiento de alias y gestion de etapas de API Gateway.
  • Checklist de despliegue con mucha base de datos: Enfoque en compatibilidad de esquema, orden de migraciones y scripts de rollback.
  • Checklist de despliegue movil o cliente: Enfoque en rollout escalonado, manejo de actualizaciones forzadas y compatibilidad de API.

Lo que funciona

  • Manten los despliegues pequenos y frecuentes para reducir el riesgo.
  • Haz que los cambios de base de datos sean compatibles hacia atras con el codigo viejo y nuevo.
  • Usa health checks que verifiquen dependencias reales, no solo la vida del proceso.
  • Automatiza el rollback basado en metricas, no solo en puertas de decision manual.
  • Monitorea metricas de negocio, no solo metricas tecnicas.
  • Manten un artefacto baseline conocido como bueno para rollback rapido.
  • Practica rollbacks en staging o durante game days.
  • Documenta las decisiones y resultados del despliegue para futuras revisiones.

Errores Comunes

  • Omitir health checks o usar verificaciones HTTP 200 triviales.
  • Desplegar cambios de base de datos que no son compatibles hacia atras.
  • Enrutar el 100% del trafico antes de validar metricas.
  • No tener un plan de rollback antes de iniciar el despliegue.
  • Ignorar el aumento de latencia a favor solo de la tasa de error.
  • Limpiar versiones antiguas demasiado pronto.
  • Desplegar durante picos de trafico sin planificacion de capacidad.

Troubleshooting

  • Pipeline fails silently: enable verbose logging and store pipeline artifacts between stages so you can inspect the exact state that failed.
  • Container crashes on startup: check that environment variables, secrets, and config files are mounted correctly. Read the first 50 lines of logs before scaling replicas.
  • Deployment rolls back repeatedly: verify health checks, resource limits, and startup probes. A failing readiness probe is a common cause of rolling restarts.
  • Slow CI builds: cache dependencies and docker layers. Split large test suites into parallel jobs to reduce wall-clock time.
  • Drift between environments: use infrastructure-as-code and immutable artifacts.

Lectura Adicional

  • Documentación oficial: consulta la referencia actualizada del framework o herramienta utilizada.
  • Guías relacionadas: explora las guías de deployment y zero-downtime para profundizar.
  • Patrones complementarios: revisa los patrones de diseño aplicables a tu stack tecnológico.
  • Postmortems públicos: estudia incidentes reales de equipos que enfrentaron problemas similares en producción.

Notas de Producción

  • Despliega gradualmente usando canary o blue-green para detectar regresiones temprano.
  • Configura alertas para errores, latencia p99 y tasa de fallos antes de habilitar en producción.
  • Documenta el rollback en el runbook; prueba el procedimiento en staging al menos una vez por trimestre.
  • Revisa logs estructurados con correlation IDs para trazar requests end-to-end en incidentes.

Puntos Clave

  • Aplica checklist de despliegue sin tiempo de inactividad cuando necesites una solución práctica para tu caso de uso.
  • Monitorea el rendimiento después de implementar; mide latencia, errores y uso de recursos antes y después.
  • Revisa la sección de Troubleshooting ante errores comunes; la mayoría tienen causa raíz documentada con solución.
  • Mantén dependencias actualizadas y ejecuta tests en CI para prevenir regresiones en producción.

Errores Comunes en Producción

  • Dejar campos requeridos vacíos o usar respuestas vagas de una palabra.
  • Llenar el documento una vez y nunca actualizarlo cuando cambia el alcance o las decisiones.
  • Guardar el documento donde el equipo no lo busque durante incidentes o revisiones.
  • No asignar un responsable, fecha límite o cadencia de revisión.
  • Copiar texto base sin eliminar secciones que no aplican.
  • Saltar el control de versiones, lo que impide rollback y responsabilidad.
  • No vincular el documento con decisiones relacionadas o acciones de seguimiento.
  • Evitar revisiones trimestrales que retirarían secciones obsoletas o sin uso.

Preguntas frecuentes

Cual es la diferencia entre despliegue rolling y canary?

Un rolling update reemplaza instancias viejas una a la vez a lo largo de todo el fleet. Un canary despliega primero un subconjunto pequeno, valida metricas y luego aumenta gradualmente el trafico a la nueva version.

Como hacemos que los cambios de base de datos sean seguros para cero downtime?

Usa cambios aditivos primero (agregar columnas, tablas, indices), despliega codigo que lee tanto el esquema viejo como el nuevo, y luego elimina el esquema viejo en un release posterior. Esto se conoce como patron expand-contract.

Cuando debemos hacer rollback inmediatamente?

Haz rollback cuando los health checks fallan ampliamente, la tasa de error se dispara, caen metricas criticas de negocio o se dispara una alerta P1. Un rollback mas rapido preserva la confianza del usuario y los ingresos.

Como manejamos conexiones de larga duracion durante el despliegue?

Las conexiones de larga duracion (WebSockets, SSE, gRPC streams) requieren manejo especial. Usa un preStop hook para dar tiempo a las conexiones para drenar naturalmente. Configura el load balancer con connection draining (AWS: deregistration delay, GCP: connection draining timeout). Establece terminationGracePeriodSeconds lo suficientemente alto para la conexion mas larga esperada. Para WebSockets, envia un close frame del lado del servidor antes de terminar. Monitorea el conteo de conexiones activas durante el rollout y espera a que llegue a cero antes de forzar el kill de pods.

Cual es el patron expand-contract para migraciones de base de datos?

Expand-contract es un patron de tres fases para cambios de esquema sin downtime. Fase 1 (Expand): agrega nuevas columnas, tablas o indices sin remover las viejas. Tanto codigo viejo como nuevo pueden ejecutarse. Fase 2 (Migrate): despliega codigo que escribe a ambos esquemas viejo y nuevo, backfill de datos existentes, y lee del nuevo esquema. Fase 3 (Contract): despliega codigo que solo usa el nuevo esquema, luego elimina columnas viejas en un despliegue posterior. Cada fase es un despliegue separado con su propio periodo de validacion.

Como probamos despliegues sin downtime antes de produccion?

Prueba en staging con carga realista: usa un generador de carga que simule patrones de trafico de produccion. Despliega mientras la carga esta corriendo y mide: tasa de error durante el rollout, percentiles de latencia (p50, p95, p99), tasa de conexiones dropeadas, y tasa de exito de requests. Verifica que el rollout complete dentro del tiempo esperado. Prueba rollback bajo carga tambien. Ejecuta estas pruebas en CI para cada release mayor. Documenta el comportamiento esperado y alerta si los rollouts de produccion se desvian de los resultados de staging.

Como manejamos toggles de feature flags durante el despliegue?

Despliega con el feature flag deshabilitado. Verifica que el despliegue es estable. Luego habilita el flag para un pequeno porcentaje de usuarios (1-5%). Monitorea metricas por 10-15 minutos. Incrementa gradualmente el porcentaje (10%, 25%, 50%, 100%) con monitoreo en cada paso. Si aparecen problemas, deshabilita el flag instantaneamente sin rollback. Mantén el flag en el codigo por al menos un ciclo de release despues de la habilitacion completa antes de removerlo. Documenta el ciclo de vida del flag: creado, habilitado, verificado, removido.

Que monitoreo necesitamos durante despliegues sin downtime?

Monitorea: tasa de error (alerta si > 0.5% por 2 min), latencia p99 (alerta si > baseline + 30%), tasa de exito de health checks (alerta si < 95%), progreso del despliegue (alerta si estancado), conteo de reinicios de pod (alerta si > 2 en 5 min), y metricas de negocio (alerta si conversion cae > 5%). Usa un dashboard de despliegue que superponga eventos de despliegue con metricas de aplicacion. Configura triggers de rollback automatizados basados en estas metricas. Revisa metricas de despliegue en la validacion post-despliegue.

Revisa y actualiza esta checklist despues de cada incidente de despliegue. Elimina pasos que no agregan valor, agrega pasos que habrian detectado el problema, y refina los gates de automatizacion.

Fin del documento. Revisar trimestralmente.

End of document. Review and update quarterly.