Текущие обновления в ферме веб-серверов?
Крупные веб-сайты (Amazon, Facebook, Yahoo и т.д.) Не планируют время простоя для обновлений. Обычно они выполняются "вживую" и постепенно прокручиваются через ферму серверов. У них также есть большая инфраструктура и команды для управления этим.
Небольшие веб-сайты обычно переводят весь сайт в автономный режим, чтобы обновить структуру базы данных и обновить код, запущенный на веб-серверах. Время простоя может быть очень минимальным, но оно все равно мешает клиентам.
Как ты перейти к непрерывным обновлениям без простоев? Каковы минимальные требования для этого? Что мы можем сделать для создания приложений, которые сделают это возможным с самого начала?
3 answers
Каковы минимальные требования для этого?
Как только у вас будет по крайней мере два сервера за балансировщиком нагрузки, вы можете последовательно удалить сервер из кластера, обновить его и добавить обратно в кластер для завершения обновления (в той мере, в какой это касается посетителя).
Что мы можем сделать для создания приложений что делает это возможным с самого начала?
Разработайте свое приложение с требованиями к балансировке нагрузки в ум.
0 время простоя - это эквивалент веб-сервера "дизайн должен выглядеть точно так же в каждом браузере". Запланированное время простоя - это нормально, просто запланируйте его и разместите статическое уведомление. Если только это на самом деле не стоит вам тонны просмотров или денег, что для небольшого веб-сайта было бы определением нет. Если вы не хотите, чтобы кто-нибудь видел это, сделайте это Четвертого июля (или в День благодарения, или в другой подходящий момент), если только ваш веб-сайт не является результатом поиска № 1 в Google для "Лечение ожогов фейерверком" или "Фрэнсис Скотт Ключевые слова песни "с тобой все будет в порядке.
Выполнение этого с самого начала обычно приводит к гораздо большему риску: чрезмерному проектированию.
Всегда есть какая-то причина для запланированного простоя, но его можно свести к минимуму.
В зависимости от вашей инфраструктуры различные стратегии могут минимизировать время простоя. Регулярные старые обновления не должны требовать простоя.
На ряде сайтов, управляемых 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-адреса для развертывания обновления. Применяются те же проблемы, связанные с обновлением активов, не связанных с кодом, но некоторые тщательные размышления и планирование могут сделать это не проблемой.
С более надежными настройками с балансировкой нагрузки, стратегии, подобные предложенным в ответе данлефри, также работают.