Zero Downtime Deployment — практика обновления приложения без прерывания работы и недоступности для пользователей. Это достигается последовательным выводом старых и вводом новых инстансов приложения.
Пример реализации для stateless приложения в облаке (например, с помощью Kubernetes):
Пример deployment.yaml с 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
Ключевые особенности:
Zero Downtime Deployment невозможен при изменении схемы данных?
Возможен, если миграции схемы делаются in two steps: сначала код становится совместим со старой и новой схемой, потом — сама миграция и удаление legacy-кода.
Если приложение stateless, zero downtime deployment всегда гарантирован?
Нет! Ограничивающим фактором может быть внешний state, таймауты соединений, неотработанные запросы или неподдерживаемые reverse-incompatible изменения в API.
Zero Downtime Deployment нужен только крупным компаниям?
Нет. Даже для небольших стартапов и SaaS решений zero downtime — критичный фактор для пользовательского опыта (особенно глобальные рынки и highload).