Zero Downtime Deployment es la práctica de actualizar una aplicación sin interrumpir su funcionamiento y sin que esté fuera de servicio para los usuarios. Esto se logra mediante la desactivación secuencial de las instancias antiguas y la introducción de nuevas instancias de la aplicación.
Ejemplo de implementación para una aplicación sin estado en la nube (por ejemplo, usando Kubernetes):
Ejemplo de deployment.yaml con rolling update:
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 4 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: my-app spec: containers: - name: app image: my-app:v2
Características clave:
¿Es imposible el Zero Downtime Deployment al cambiar el esquema de datos?
Es posible, si las migraciones de esquema se realizan en dos pasos: primero, el código se vuelve compatible con el esquema antiguo y el nuevo, luego, se realiza la migración y se elimina el código legado.
Si la aplicación es sin estado, ¿el zero downtime deployment siempre está garantizado?
¡No! Factores limitantes pueden ser el estado externo, los tiempos de espera de conexiones, las solicitudes no procesadas o los cambios incompatibles inversos no admitidos en la API.
¿El Zero Downtime Deployment solo es necesario para grandes empresas?
No. Incluso para pequeñas startups y soluciones SaaS, el zero downtime es un factor crítico para la experiencia del usuario (especialmente en mercados globales y alta carga).