2013-03-31 2 views
9

Мне нужна лучшая практика для обновления одного или нескольких файлов на моем веб-сайте, не заставляя его сходить;Как обновить веб-сайт без его снижения?

пример, если я обновляю файл Model.php, загрузка займет несколько секунд, например, за одну или две секунды до того, как он заменит файл на сервере, тем временем на веб-сайте появится некоторая ошибка, которая будет выглядеть Model.php не найден или не завершен, даже если я подавляю ошибки, веб-сайт в конце концов умрет.

Какова наилучшая практика для этого?

+0

Используйте базу данных. – jeremy

+1

есть режим обслуживания – ElefantPhace

+0

может перенаправить весь трафик на временную страницу? – Songo

ответ

10

Одна практика, я часто использовал и видел на практике -

  • использовать систему контроля версий (VCS), как SVN или Git

  • на живом сервере, сделать веб-сайта root символическая ссылка на каталог, содержащий последнюю версию вашего веб-сайта (например, /www/domain.com/r555) для версии №. 555

  • когда изменение приходит, проверьте, в изменениях в VCS

  • есть скрипт, который проверяет последнюю версию в новый каталог, носящий имя ревизии (скажем, /www/domain.com/r556)

  • , когда проверка сделана, измените символическую ссылку и укажите ее на /www/domain.com/r556.

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

Такие вещи, как изменения базы данных, могут по-прежнему нуждаться в некотором режиме обслуживания.

+0

может быть немного отвлечен ... как насчет координации обновления схемы базы данных с помощью php-кода? – Tucker

+1

Стандартная процедура заключается в том, чтобы перевести сайт в режим обслуживания, в то время как изменения схемы выполняются. В некоторых проектах базы данных допускаются такие вещи, как [«сине-зеленое» развертывание] (http://martinfowler.com/bliki/BlueGreenDeployment.html), где на самом деле есть два полных экземпляра приложения и базы данных с вещью впереди перерезать между ними как часть процесса обновления. – Charles

+0

достаточно хорошо, спасибо @Pekka. – Emad

1

При создании обновления создайте папку с именем 1.1 и разместите там новое приложение (независимо от того, вручную или через какой-то VCS), затем сопоставьте с ним общедоступную директорию html. Переключатель будет мгновенным.

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

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

0

Используйте кеширующий сервер/приложение для хранения кешированной копии для пользователей. Varnish - пример. Вы можете установить, что Varnish кэширует содержимое в течение установленного промежутка времени, и альтернативное количество времени, если сервер фактического сайта недоступен (ошибки Model.php not found и т. Д.).

В этом случае, если вы обновите свою производственную систему, лак может продолжать обслуживать кешированную копию веб-сайта до тех пор, пока бэкэнд не будет снова запущен и не будет работать должным образом (будь то 2 секунды или 2 часа). Просто не забудьте очистить кеш-лак после обновлений, если что-то изменит пользовательский интерфейс, содержимое и т. Д. Для пользователей.

Все веб-серверы имеют некоторые функции кеширования, но лак и тому подобное сделано для кэширования.

Другой вариант - запустить два или более экземпляра одного и того же веб-сайта за балансировщиком нагрузки, например HAProxy. Обновляйте по одному, и HAProxy может перенаправить трафик на тот, который вы в настоящее время не обновляете.

Перейдите на страницу Server Fault, если вам нужна дополнительная информация о кешировании на уровне сервера или балансировке нагрузки.