Я согласен с рекомендацией Райана использовать подход «синий/зеленый», хотя этот термин может быть незнакомым для тех новых развертываний облачного сервера. Мартин Фаулер суммирует проблему, обращается в BlueGreenDeployment:
Одна из проблем, с автоматизацией развертывания является бортовым над себя, принимая программное обеспечение от финальной стадии тестирования жить производства. Обычно вам нужно сделать это быстро, чтобы свести к минимуму время простоя . Сине-зеленый подход к развертыванию делает это, гарантируя, что имеют две производственные среды, максимально идентичные. При любом время один из них, скажем, синий для примера, жив. Как вы, , подготовьте новый выпуск своего программного обеспечения, и вы завершите финальную стадию тестирования в зеленой среде. Как только программное обеспечение работает в зеленой среде , вы переключаете маршрутизатор так, чтобы все входящие запросы переходили в зеленую среду - синий теперь не работает.
Решение этой проблемы является одним из основных преимуществ PaaS.
Это, в историческом контексте, стоит отметить, что эта сине-зеленая стратегия не является новой для облачных вычислений. Позвольте мне подробно остановиться на одном из «старых» способов решения этой проблемы:
Предположим, у меня есть сайт, размещенный на выделенном сервере, myexample.com
. IP-адрес моего публичного сервера («синий») будет представлен в записи DNS «@» или как псевдоним CNAME
; другой сервер («зеленый») будет размещать более новую версию приложения. Чтобы протестировать новое приложение публично, не влияя на производственную среду live, я просто обновляю /etc/hosts
, чтобы сопоставить доменное имя верхнего уровня с IP-адресом зеленого сервера. Например:
129.42.208.183 www.myexample.com myexample.com
После того, как я промывать локальные записи DNS и закройте все браузеры, все запросы будут направлены в зеленой среде предварительного производства.Как только я подтвержу все работы, как ожидалось, я обновляю запись DNS для живой среды (myexample.com
в этом случае). Предполагая, что DNS имеет достаточно короткое значение TTL, равное 300 секундам, я обновляю значение записи A
, если по IP или CNAME
значение записи, если по псевдониму, и изменение будет передано DNS-серверам за считанные минуты. Чтобы подтвердить распространение новых значений DNS, я прокомментирую вышеупомянутое изменение /etc/hosts
, сбросьте локальные записи DNS, а затем запустите traceroute
. Предполагая, что он правильно решает локально, я выполняю заключительную двойную проверку, все хорошо в остальном мире со свободной онлайн-проверкой DNS (например, whatsmydns.net).
Приведенное выше предполагает обновление для сервера контента, ориентированного на общественность (например, сервер Apache, подключающийся к базе данных или серверу приложений); переход от предварительного производства к производству более активно, если обновление относится к центральной базе данных или аналогичному серверу транзакционных данных. Если это не слишком разрушительно для посетителей сайта, я отключу вход в систему и удаляю все активные сеансы, эффективно предоставляя сайт только для чтения. Затем я перехожу к обновлению бэкэнд-сервера примерно так же, как описано выше, т. Е. Переключению готового зеленого переднего конца для ссылки на репликацию в готовом зеленом бэкэнде, тест, затем, когда все проверяется, переключите зеленый передняя часть - синяя и снова включите логин. Вуаля.
Хорошей новостью является то, что с Bluemix применяется такая же стратегия, но упрощена, так как нет необходимости суетиться с записями DNS или отдельными серверами.
Вместо этого вы создаете два приложения, одно из которых является «живым» («синим»), и одно, которое является предварительным («зеленый»). Вместо того, чтобы изменять записи DNS вашего сайта и ждать распространения распространения по всему миру, вы можете обновить свое предварительное приложение (cf push Green
подталкивает новый код к вашему предварительному приложению), протестируйте его со своим собственным URL-адресом (Green.ng.mybluemix.net
), и как только вы уверены, что готово к производству, добавьте приложение в таблицу маршрутизации (cf map-route Green ng.mybluemix.net -n Blue
), после чего оба приложения «синий» и «зеленый» получат входящие запросы. Затем вы можете отключить предыдущую версию приложения, сняв ее (cf unmap-route Blue ng.mybluemix.net -n Blue
).
Посетители сайта не будут испытывать никаких сбоев в работе и в отличие от «старого» способа, который я изложил ранее, команде развертывания (a) не придется укусить свои гвозди, ожидая, когда записи DNS будут распространяться по всему миру, прежде чем узнать, работа и (б) могут немедленно вернуться к предыдущей известной рабочей версии, если серьезная проблема обнаружена после развертывания.
Вы говорите, что у вас есть свобода в комплекте с вашим приложением? –