2013-08-28 1 views
2

Предположим, у меня есть сайт, работающий на PHP с использованием шаблона Kernel. Предположим, у меня есть 1000 запросов в секунду для доступа к файлу Kernel.php. Я хочу загрузить новую версию этого файла без включения режима обслуживания. Безопасно ли это делать? Могу ли я просто загрузить новый файл, и в какой-то момент запросы будут обработаны этим новым?Загрузка новой версии основного файла на веб-сайте без обслуживания

  • Kernel.php является безошибочным наверняка
  • файл включен require_once() в index.php
  • забыть о режиме обслуживания в этом случае, пожалуйста

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

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

Иногда обновление настолько простое, что включение режима технического обслуживания подобно остановке военного вторжения в страну, потому что один из рядовых (солдат) чихнул.

Поскольку мы говорим о раздувании вещей и взаимодействии между процессами: никто из нас не рискнет загружать основные файлы на веб-сайте без запроса на замораживание в течение нескольких секунд, но как насчет файлов шаблонов? Это, конечно, риторический вопрос, но теперь я думаю, что вы полностью это понимаете.

+1

Это зависит от множества факторов. – Paulpro

+2

, вообще говоря, файлы на unix могут быть удалены/заменены без проблем.Любые процессы, использующие старый файл, будут продолжать использовать «зомбическую» копию (он не будет удален, пока все открытые файлы на нем не будут закрыты), и любые новые процессы внезапно будут использовать новый файл. Вопрос в том, как будет реагировать ваше приложение, если у вас есть межпроцессные коммуникации. процесс A, используя старый файл, говорящий с процессом B, используя новый файл ... это что-нибудь взорвет? –

+0

@MarcB есть что-то подобное в Windows? Какие фразы я должен использовать, чтобы узнать это самостоятельно (и обновить вопрос, если я нашел что-то полезное)? – TheFrost

ответ

0

Включите кэширование кода PHP для вашего веб-сервера и установите интервал до 5 минут или более.

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

Я не могу сообщить, что произойдет, если вы нарушите количество зависимостей PHP-файлов или если сервер обновит 1 файл, но будет иметь разные кешированные копии других файлов.

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

+0

Вы имеете в виду - с зеркалом? И после успешного обновления переключите запросы на новую версию? – TheFrost

1

Прежде всего позвольте мне сказать, что это, вероятно, не очень хорошая идея.

Вы работаете на сервере Linux? Если это так, переименование файлов является атомной операцией, и лучший способ выполнить это - это загрузить новый файл с другим именем, а затем переименовать его поверх старого файла.

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

Смежные вопросы