Ich betreibe eine ziemlich ressourcenintensive Magento-basierte Site über eine Kombination aus Apache httpd, Redis und php-fpm.
Wenn ich Änderungen an den PHP-Kerndateien vornehme, muss ich die oben genannten Dienste neu starten, um sicherzustellen, dass kein alter Code zwischengespeichert wird, der Magento durcheinanderbringen kann (und dies auch tut).
Früher, als ich nur httpd verwendet habe, habe ich einfach service httpd graceful
einen ordnungsgemäßen Neustart ausgeführt, ohne die Besucher der Website zu beeinträchtigen. Jetzt muss ich jedoch mehrere Dienste neu starten (und Redis leeren), und die Website ist einige Sekunden lang nicht verfügbar.
Kann man das vermeiden?
Antwort1
Wenn Sie sich den Apache ansehenDokumentationSie werden sehen, dass Apache USR1
hierfür das Signal verwendet. Es handelt sich also um eine benutzerdefinierte Routine. Sie müssen die Dokumentation der anderen Komponenten überprüfen, um zu sehen, ob sie ähnliche Optionen bieten. Ein Treffer für php-fpm ist beispielsweiseKönnen wir einen der PHP-FPM-Pools neu laden, ohne andere zu stören?.
Wenn eine der Komponenten eine solche Option nicht hat, können Sie dies nicht mit einem einzelnen Server/einer einzelnen Site tun. Sie benötigen eine Art Cluster oder Balancer, mit dem Sie Ihre Benutzer auf die neue Version umleiten und die alte Version nach einiger Zeit abschalten können. Eine Alternative könnte darin bestehen, den Neustart für eine Zeit mit geringem Datenverkehr (z. B. nachts) zu planen.