Я задавался вопросом, существует ли 'гладкий способ' повторного развертывания ВОЙНЫ Java к рабочему серверу (никакой кластер, никакой OSGi)?
Все, что я могу придумать, является сервером остановки, файлом обновления, сервером перезапуска. И 10 минут заранее я должен отобразить предупреждение обслуживания на сайте.
Каков Ваш подход?
Во-первых, горячее развертывание не всегда работает. Мы потратили так много времени, чтобы убедиться, что каждый новый модуль загружается, и решили, что это не стоит того. То, что вы делаете, может показаться плохим, но это самый надежный способ развертывания нового WAR.
Наш текущий подход заключается в использовании коммутатора с балансировщиком нагрузки перед всеми серверами. Мы запускаем как минимум 2 экземпляра серверов приложений. Когда мы отключаем один сервер для обслуживания, трафик автоматически переходит на другой.
Некоторые коммутаторы действительно недороги. Если у вас нет достаточной нагрузки, чтобы оправдать покупку новой коробки, ваши 2 экземпляра могут работать на одной коробке.
В некоторых обстоятельствах коммутаторы могут реально сэкономить деньги. Например, у нас есть SSL-страница, которая раньше использовала 6 коробок, а теперь она отлично работает на 2 коробках с SSL-ускорением в коммутаторе.
Вы можете взглянуть на JRebel , хотя я бы не стал использовать его в продакшене. В производстве мы делаем в основном то же самое, хотя наш босс продолжает мечтать о горячих передислокациях. К сожалению, они поддерживаются в основном на бумаге - в большинстве сложных приложений всегда что-то идет не так с горячим повторным развертыванием. То же самое справедливо и для дополнительных горячих переделок ...
Некоторые серверы приложений поддерживают передислокацию без прерывания обслуживания. Это, по крайней мере, верно для WebLogic, смотрите Использование производственной передислокации для обновления приложений. Обратите внимание, что это не горячее развертывание (и я бы НИКОГДА не использовал горячее развертывание на производственных серверах).
Без поддержки сервера приложений, я боюсь, вы не сможете сделать настоящую "гладкую" передислокацию. Если вы хотите минимизировать время простоя, один из подходов заключается в параллельном развертывании нового приложения (на том же сервере или на другом) и изменении правил маршрутизации после завершения. Но клиенты потеряют свою сессию.
Обычно mv old.war new.war
и пусть AS берет его оттуда, хотя при очень загруженных 24 / 7 услуг, я полагаю, это был бы не вариант.