Текущие обновления в ферме веб-серверов?


Крупные веб-сайты (Amazon, Facebook, Yahoo и т.д.) Не планируют время простоя для обновлений. Обычно они выполняются "вживую" и постепенно прокручиваются через ферму серверов. У них также есть большая инфраструктура и команды для управления этим.

Небольшие веб-сайты обычно переводят весь сайт в автономный режим, чтобы обновить структуру базы данных и обновить код, запущенный на веб-серверах. Время простоя может быть очень минимальным, но оно все равно мешает клиентам.

Как ты перейти к непрерывным обновлениям без простоев? Каковы минимальные требования для этого? Что мы можем сделать для создания приложений, которые сделают это возможным с самого начала?

Author: Gareth Farrington, 2010-08-14

3 answers

Каковы минимальные требования для этого?

Как только у вас будет по крайней мере два сервера за балансировщиком нагрузки, вы можете последовательно удалить сервер из кластера, обновить его и добавить обратно в кластер для завершения обновления (в той мере, в какой это касается посетителя).

Что мы можем сделать для создания приложений что делает это возможным с самого начала?

Разработайте свое приложение с требованиями к балансировке нагрузки в ум.

 5
Author: danlefree, 2010-08-14 20:21:22

0 время простоя - это эквивалент веб-сервера "дизайн должен выглядеть точно так же в каждом браузере". Запланированное время простоя - это нормально, просто запланируйте его и разместите статическое уведомление. Если только это на самом деле не стоит вам тонны просмотров или денег, что для небольшого веб-сайта было бы определением нет. Если вы не хотите, чтобы кто-нибудь видел это, сделайте это Четвертого июля (или в День благодарения, или в другой подходящий момент), если только ваш веб-сайт не является результатом поиска № 1 в Google для "Лечение ожогов фейерверком" или "Фрэнсис Скотт Ключевые слова песни "с тобой все будет в порядке.

Выполнение этого с самого начала обычно приводит к гораздо большему риску: чрезмерному проектированию.

 0
Author: Thomas, 2010-08-14 23:34:27

Всегда есть какая-то причина для запланированного простоя, но его можно свести к минимуму.

В зависимости от вашей инфраструктуры различные стратегии могут минимизировать время простоя. Регулярные старые обновления не должны требовать простоя.

На ряде сайтов, управляемых PHP, которыми я управляю, я поддерживаю параллельные копии базы кода, скажем, версии 1.0, 1.1 и 1.2:

/sites/site-1-0-0
/sites/site-1-1-0
/sites/site-1-2-0

А затем создайте символические ссылки, которые может использовать веб-сервер:

/sites/production --> /sites/site-1-1-0
/sites/staging    --> /sites/site-1-2-0

Таким образом, я могу разместить свой код на производственный сервер для проверки в последнюю минуту вменяемости, и когда я хочу выйти в эфир, я просто:

$ rm /sites/production; ln -s /sites/site-1-2-0 /sites/production

Веб-сервер использует символические ссылки в спецификации DocumentRoot, поэтому отключение происходит практически мгновенно.

Здесь, конечно, есть и свои подводные камни. Нужно убедиться, что внешние данные хранятся где-то, э-э, снаружи. Вы не хотите записывать временные файлы или хранить пользовательский контент в файловой системе в каталогах site-x-y-z.

Другой альтернативой, если у вас несколько серверов, является переключение через маршрутизацию. Некоторые поставщики VPS (на ум приходит Linode) позволяют легко использовать две виртуальные машины и менять их IP-адреса. Таким образом, вы настраиваете свою новую версию на новом сервере, выполняете все необходимое тестирование, а затем меняете IP-адреса для развертывания обновления. Применяются те же проблемы, связанные с обновлением активов, не связанных с кодом, но некоторые тщательные размышления и планирование могут сделать это не проблемой.

С более надежными настройками с балансировкой нагрузки, стратегии, подобные предложенным в ответе данлефри, также работают.

 0
Author: timdev, 2010-08-15 20:50:46