Я управляю довольно ресурсоемким сайтом на базе Magento с помощью комбинации Apache httpd, redis и php-fpm.
Когда я вношу изменения в основные файлы PHP, необходимо перезапустить вышеуказанные службы, чтобы убедиться, что старый код не кэшируется, поскольку это может (и действительно) испортить Magento.
Раньше, когда я использовал только httpd, я просто запускал его service httpd graceful
для корректного перезапуска, не влияя на посетителей сайта, но теперь, когда мне приходится перезапускать несколько служб (и очищать Redis), сайт становится недоступен в течение нескольких секунд.
Можно ли этого избежать?
решение1
Если вы посмотрите на Апачидокументациявы увидите, что Apache использует USR1
сигнал для этого. Таким образом, это пользовательская процедура. Вам придется проверить документацию других компонентов, чтобы узнать, предлагают ли они подобные опции. Один хит для php-fpm, напримерМожно ли перезагрузить один из пулов PHP-FPM, не нарушая работу других?.
Если один из компонентов не имеет такой опции, вы не сможете сделать это с одним сервером/сайтом. Вам понадобится какой-то кластер или балансировщик, который позволит вам перенаправлять пользователей на новую версию и отключать старую версию через некоторое время. Альтернативой может быть планирование перезапуска на некоторое время с низким трафиком (например, ночью).