Назад |
Перейти на главную страницу
Развертывание производства на EC2 с минимальным временем простоя
У меня есть простое веб-приложение, развернутое на большом экземпляре с EC2. Теперь я хочу развернуть последний код на этом сервере, но я хочу сделать это таким образом, чтобы минимизировать время простоя и максимально упростить работу для конечного пользователя. Вот мой план:
- Запустите еще один большой экземпляр
- Установите все уровни программного обеспечения на этот экземпляр
- Восстановите и подключите диск EBS к экземпляру
- Разверните наш последний готовый производственный код на новом экземпляре
- Запустить все тесты (включая ручное тестирование приложения)
- (Если тесты пройдены) Поместите уведомление «Сайт находится на обслуживании» на действующем сайте.
- Сделайте резервную копию экземпляра EBS на работающем сайте
- Отсоедините экземпляр EBS от нового сервера и замените его последней резервной копией.
- Используйте ec2-associate-address, чтобы переместить IP-адрес в новый экземпляр
- Устройтесь поудобнее и дождитесь, пока трафик начнет течь через новый экземпляр
- Завершить старый экземпляр
Кажется, это хорошая стратегия? Есть ли какие-нибудь учебники или книги, которые могут охватывать эту тему? Я уже прочитал «Архитектуры облачных приложений» Джорджа Риза, это отличная книга, но она не касается развертывания. Кроме того, я знаю, что есть инструменты, которые могут помочь в этом, например RightScale или enStratus, которые я буду использовать, когда начну использовать более одного экземпляра.
Хорошо, это было задано некоторое время назад, но я все равно отвечу на свои 2 цента. думаю вы упускаете преимущества облачных вычислений.
Прежде всего, вы должны разделить код приложения и постоянные данные на 2 разных виртуальных машинах. Это немного снизит задержку связи между виртуальными машинами, но значительно упростит администрирование. Помните, что иметь две маленькие виртуальные машины вместо одной большой не дороже; поэтому выберите количество хостов, которое лучше всего соответствует вашим потребностям.
Если возможно, вы хотите, чтобы ваши серверы приложений были «не имеющими состояния» в том смысле, что они не должны иметь постоянных данных, и вы должны иметь возможность создавать новый экземпляр с минимумом ручной работы.
Во-вторых, вам следует подумать, подходят ли некоторые из управляемых сервисов Amazon, таких как SimpleDB или Relational Database Service (размещенный MySQL), для вашего постоянного хранилища данных.
Идеальный поток выглядит примерно так:
- Сначала измените "самую заднюю" бэкэнд-систему. Например, если ваше изменение требует добавления столбца в таблицу базы данных, добавьте его с помощью обычных инструментов MySQL в работающий экземпляр RDS. (Это предполагает, что ваша архитектура позволяет вашему хранилищу данных изменяться при сохранении обратной совместимости, или что вы сначала обновляете код сервера приложения, чтобы он был прямой совместимостью.)
- Создать новый экземпляр сервера приложений, используя настроенный, готовый к использованию AMI, который вы подготовили заранее.
- Установите обновленный код на новом сервере приложений, то есть в новом коде, который использует новый столбец и имеет новые функции.
- Тест.
- Перенести часть или весь трафик, то есть перейти по IP-адресу / переключиться через эластичную балансировку нагрузки на новый сервер приложений. (В идеальном мире вы бы сначала переместили только небольшой процент, скажем 5% вашего трафика, а затем наблюдали бы за какими-либо проблемами. AFAIK Elastic Load Balancing еще не поддерживает взвешенную липкую маршрутизацию, поэтому вам, вероятно, не следует этого делать. Постепенное переключение также может быть достигнуто за счет наличия двух путей выполнения в вашем коде, но это отнимает много времени и утомляет - взвешенная липкая балансировка нагрузки проще.)
- Сохраните старый экземпляр сервера приложений в течение нескольких дней, на случай, если в новом коде есть регрессии и вам потребуется откат.
Это похоже на хороший общий подход. Вы можете вырезать шаг 2 и, таким образом, сократить время запуска, создав собственный AMI, включающий все необходимые программные уровни; Сказав это, я бы все равно обновил все пакеты при запуске, чтобы убедиться, что вы получаете все последние обновления безопасности.
Вы также можете подумать об использовании Экземпляр с поддержкой EBS - таким образом у вас может быть загрузочный том, программный стек и ваше приложение на EBS, что избавит вас от некоторых шагов, описанных выше.