Я застрял в прошлом. Пишу веб-приложения на сервлетах (ну т.е. сверху там и Spring MVC может быть и Wicket и JSP, но снизу сервлеты), пакую их в .war, пускаю в томкате. Приложений около десятка, все работают с двумя базами (ну т.е. баз две, какие-то работают с одной, какие-то со второй, какие-то с обоими).
Что я имею:
- Унифицированный конфиг. Все значения определяю в server.xml в глобальном JNDI, к которому линкую приложения. Общий пул соединений с базой.
- Унифицированные логи. Хотя раньше делал логгирование в каждом приложении отдельно, удобней пользоваться великим и ужасным java.util.logging-ом.
- Parallel deployments. Очень крутая фича. Выкатываешь новую версию, ждёшь, пока на старой сессии не истекут, убираешь старую, никто ничего не заметил. Ну если надо, можно сразу старую убрать, тогда вроде сессия вылетит, надо перезайти. Наверное можно и без перезахода это всё сделать.
- Можно на венде одним движением руки создать сервис. На линуксе тоже актуально, если хочется запускаться от рута и потом сбрасывать привилегии (например для биндинга на 80-й порт).
- Всё в одном месте, порты там указать, ключи из keystore подгрузить для https, всё уже в конфигах, всё написано.
- На всё про всё одна JVM, за все накладные расходы платишь один раз.
Но по сути это всё несколько устарело. Java EE сдохла, все пишут на спринге. Но как реплицировать подобное окружение, я не совсем понимаю.
Вроде как нынче пишут всё в толстых жарах, куда засовывают HTTP-сервер (тот же томкат).
Получается, что мне нужно запускать десять JVM-ов? Не очень хорошо с точки зрения потребления ресурсов. Тем более, что Java не отдаёт память.
Будет десять тред-пулов? Опять же не очень хорошо. Сейчас тред пул один (в смысле два), видно, сколько коннектов надо. Оцениваешь все приложения в сумме. А так придётся каждое приложение исследовать и давать огромный запас, чтобы потом в СУБД разрешить столько соединений. Вроде тоже не очень хорошо с точки зрения потребления ресурсов. Тем более, что коннект к базе данных порой по 10 секунд висит, пока соединит.
В каждом приложении свои настройки логов будут. Получается нужен ещё какой-то сервис, куда сваливать все логи, чтобы хотя бы error-ы в одном месте видеть.
Всякие сервисы надо будет делать самому, причём для каждого приложения отдельно. Гемор.
Придётся ставить реверсивный прокси перед приложениями. Кстати какой? Чтобы позволял деплоить без даунтайма.
И причём не понятно, зачем всё это. Собственно тред про это - посоветуйте, как это всё нынче делают и зачем это всё делают? А то вроде томкат старый, но чем его заменять - не понимаю.
Пожалуй единственный существенный плюс: баг в одном приложении не повлияет на другие. Например если начнёт течь память, достаточно перезапустить одно приложение. Ну и при обновлении нет риска того, что старое приложение останется висеть из-за какой-нибудь ссылки (хотя это маловероятно, если аккуратно всё писать).