Я согласен с подходом качелей больше, чем подходом качения, который вы ищете. Проблема в том, что вы попадаете в ситуации, когда балансировка нагрузки может перебрасывать пользователей назад и вперед между различными версиями приложения во время перехода.
Решения, которые мы придумали (до того, как нашли SeeSaw, которым мы не пользуемся), заключались в том, чтобы отсоединить половину шавок от линии балансировки нагрузки. Закройте их. Обнови их. Запустите их. Поместите этих шавок обратно в балансировщик нагрузки и снимите вторую половину. Закрой вторую половину вниз. Обновите второй тайм. Запустите их. Это значительно минимизирует время, когда у вас одновременно работают две разные версии приложения.
Я написал файл Windows Bat, чтобы сделать это. (Кстати, развертывание в Windows не рекомендуется)
Очень важно отметить, что перенос баз данных может сделать весь подход немного опасным. Если у вас есть только аддитивные миграции, вы можете запустить их в любое время до развертывания. Если вы удаляете столбцы, это необходимо сделать после развертывания. Если вы переименовываете столбцы, лучше разбить их на новый столбец и скопировать в него данные для запуска перед развертыванием и отдельный сценарий для удаления старого столбца после развертывания. На самом деле, может быть опасно использовать ваши регулярные миграции в производственной базе данных вообще, если вы не прилагаете особых усилий для их организации. Все это указывает на более частые поставки, чтобы каждое обновление было менее рискованным и менее сложным, но это тема для другого ответа.