Я вырос в .NET, и в нем есть много вещей, которые мне нравятся, а также многие вещи, которые я ненавидел. В общем, IIS был одной из тех вещей, которые я ненавидел.
Однако одной действительно приятной особенностью IIS было то, что вы могли поставить «остановку слива» на своем серверном узле. Это перенаправит весь новый трафик на другие узлы, но позволит пользователям, которые в данный момент находятся в сети, завершить свои сеансы до полного выключения IIS.
Это было исключительно удобно для развертывания без прерывания пользовательских сеансов.
В моей новой компании мы не .NET, и нам это нравится. Мы работаем в JRuby и Java на EC2, используя Apache в качестве интерфейса и Tomcat в качестве серверной части.
Кто-нибудь когда-нибудь сталкивался с каким-либо решением, которое предоставляет аналогичные функции с Tomcat, Nginx или Apache?
Я немного поискал, но ничего полезного не нашел. Как насчет Axis2? У кого-нибудь есть опыт в этом?
Если вы хотите завершить работу локального сайта apache, позволяя текущим пользователям завершить свою текущую задачу, выполните изящную остановку Apache. Я предполагаю, что у вас есть другая архитектура, которая перенаправляет пользователей на другой работающий веб-сайт, чтобы позволить им продолжить (например, балансировщик нагрузки и т. Д.).
С сайта Apache:
Сигнал: WINCH apachectl -k graceful-stop
«Сигнал WINCH или graceful-stop заставляет родительский процесс посоветовать дочерним процессам выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают). Затем родительский файл удалит свой PidFile и прекратит прослушивание на всех портах. Родитель продолжит работу и будет следить за дочерними элементами, обрабатывающими запросы. После завершения работы всех дочерних элементов или выхода из него или истечения тайм-аута, указанного в GracefulShutdownTimeout, родительский элемент также выйдет. Если истечет время ожидания, все оставшиеся дочерние элементы будут отправил сигнал TERM, чтобы заставить их выйти.
Сигнал TERM немедленно завершает родительский процесс и всех дочерних процессов, когда они находятся в "изящном" состоянии. Однако, поскольку PidFile будет удален, вы не сможете использовать apachectl или httpd для отправки этого сигнала. "
На практике просто
apache2ctl graceful
изящно перезапустит процесс apache, позволяя загрузить новую конфигурацию
Вот, например, допустим, у вас есть в производстве www.v1 и dev в www.v2
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/vhosts/example.com/www.v1
[...]
</VirtualHost>
<VirtualHost *:80>
ServerName dev.exemple.com
DocumentRoot /var/www/vhosts/example.com/www.v2
[...]
</VirtualHost>
Готовы к запуску разработки? Отредактируйте конфигурацию (ничего не изменится в сети, пока вы не выполните перезапуск apache / изящный, лучше посмотрите, когда произойдет ваш logrotate, он выдаст "apache2ctl graceful")
<VirtualHost *:80>
ServerName old.example.com
DocumentRoot /var/www/vhosts/example.com/www.v1
[...]
</VirtualHost>
<VirtualHost *:80>
ServerName www.exemple.com
DocumentRoot /var/www/vhosts/example.com/www.v2
[...]
</VirtualHost>
Когда вы почувствуете, что все готово ... скрестите пальцы, что ваша новая версия работает на новом доменном имени;)
apache2ctl graceful
И волхвов должно случиться :)
обратите внимание, что «apache2ctl graceful» автоматически выполняет «apache2ctl configtest» и не выйдет из строя, если вы сделаете очевидную ошибку в конфигурации apache.