Zero Downtime Deployment — è la pratica di aggiornare un'applicazione senza interrompere il funzionamento e senza renderla inaccessibile per gli utenti. Questo si ottiene dismettendo gradualmente le vecchie istanze e introducendo quelle nuove.
Esempio di implementazione per un'applicazione stateless nel cloud (ad esempio, utilizzando Kubernetes):
Esempio di 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
Caratteristiche chiave:
Zero Downtime Deployment è impossibile quando si cambia lo schema dei dati?
È possibile, se le migrazioni dello schema vengono eseguite in due fasi: prima il codice diventa compatibile con lo schema vecchio e nuovo, poi — la migrazione stessa e l'eliminazione del codice legacy.
Se l'applicazione è stateless, lo zero downtime deployment è sempre garantito?
No! Un fattore limitante può essere lo stato esterno, i timeout delle connessioni, le richieste non elaborate o modifiche non compatibili al reverse nell'API.
Zero Downtime Deployment è necessario solo per grandi aziende?
No. Anche per piccole startup e soluzioni SaaS, lo zero downtime è un fattore critico per l'esperienza utente (soprattutto nei mercati globali e ad alto carico).