Я сделал это, используя различные методы. Тем не менее, я думаю, что лучшим является то, что я называю «скользящим» развертыванием.
Следующее предполагает развертывание только кода:
Переведите один или несколько веб-серверов в автономный режим, удалив их из списка распределения нагрузки. Давайте назовем эту группу A. Вы должны поддерживать достаточную скорость работы, чтобы не отставать от существующего трафика, мы назовем эту группу B. Нажмите код к автономным серверам (группа A).
Затем верните группу A во вращение и вытяните группу B наружу. Убедитесь, что приложение все еще работает с новым кодом. Если все хорошо, обновите группу B и верните их в ротацию. В случае возникновения проблемы просто верните группу B обратно и снова снимите A.
В случае обновления базы данных необходимо учитывать и другие факторы. Если вы можете отключить весь сайт в течение ограниченного периода времени, сделайте это и выполните все необходимые обновления. Это, безусловно, самый простой.
Однако, если вы не можете выполнить модифицированное «скользящее» развертывание, для которого требуется несколько серверов баз данных. Укажите момент времени и переместите копию рабочей базы данных во вторую. Примените свои изменения. Затем вытащите группу веб-серверов, обновите их код до рабочей и протестируйте. Если все хорошо, верните эти веб-серверы в ротацию и уберите группу B. Обновите код на B, указав их на второй сервер БД. Положите их обратно во вращение.
Наконец, примените все изменения данных, произошедшие в первичной производственной базе данных, к вторичной.
Обратите внимание, я не использую Web Deploy или MS Deploy для запуска в производство. Откровенно говоря, я хочу, чтобы файлы были готовы к копированию / вставке в правильный каталог на сервере, чтобы загрузка могла выполняться как можно быстрее. Опции Web и MS Deploy включают передачу этих файлов по сетевому соединению; что обычно намного медленнее, чем простое копирование / вставка из одного локального каталога в другой.