Эксплуатация6 мин чтения
Zero-downtime деплой на сервере, где всего по одному
Кластер не нужен. Что на самом деле вызывает разрыв при деплое и три приёма, которые убирают его на одной машине.
Деплой без простоя обычно описывают через балансировщики и rolling-обновления, что бесполезно, если сервер один. На одной машине причина разрыва проще: старый процесс останавливается раньше, чем новый готов отвечать.
Закройте разрыв
- Сначала запустите новый процесс на втором порту и переключайтесь, только когда он отвечает.
- Пусть старый процесс дорабатывает начатые запросы, а не рвёт их: это обработчик сигнала и примерно десять строк.
- Прогоняйте миграции до деплоя и пишите их так, чтобы со схемой ужились обе версии кода.
Миграция — самая сложная часть
Добавить колонку безопасно. Переименовать — нет, потому что несколько секунд работают обе версии. Добавьте, задеплойте, заполните, а удалите в следующем релизе: три скучных деплоя вместо одного увлекательного.