Назад | Перейти на главную страницу

Есть ли явное преимущество в наличии нескольких экземпляров Tomcat за сервером Apache?

У нас есть 5 физических серверов, перед которыми установлен аппаратный балансировщик нагрузки, на каждом из них есть сервер Apache, который использует mod_jk для подключения к трем (на сервер) экземплярам Tomcat, на всех развернуты одни и те же веб-приложения. Я привел аргумент, чтобы отказаться от одного из Tomcats (для каждого сервера) и увеличить выделение памяти до двух оставшихся. Мне интересно, нужны ли даже два или нам нужно иметь только одну пару Apache-Tomcat на физический сервер. Я не мог понять, почему это было создано с самого начала, но именно так было, когда я присоединился к команде разработчиков.

Думаю, я мог бы также спросить, есть ли явные недостатки? Мне приходит в голову, что, как я уже отмечал, в целом будет доступно меньше памяти (до такой степени, что, в зависимости от того, сколько у вас веб-приложений, вы голодаете), а также больше объединенных соединений, находящихся за по каждому экземпляру.

Это вопрос, очень специфичный для конкретного приложения. Есть множество причин, по которым я могу думать, почему это может быть полезно в любом случае. Большинство положительных отзывов о "множественных котах" опровергнуты фразой "ну, не делайте этого". который, то ", но" так мы всегда это делали "- мощный аргумент для людей, которым, вероятно, не следует принимать такого рода решения (но обычно так и поступают).

Причины Я сталкиваются с тем, почему используются несколько независимых экземпляров Tomcat, включая:

  • 32-разрядная ОС означает только 4 ГБ адресного пространства на процесс; машина имеет более 4 ГБ ОЗУ, вам нужно несколько процессов, чтобы использовать всю системную ОЗУ. Реальное решение: перейти в нынешний век и установить 64-битную ОС.
  • У вас 64-битная ОС, но вашему приложению требуется только 32-битное расширение, и поэтому вы должны запустить 32-битную JVM (которая переходит к предыдущему пункту. Реальное решение: сломайте кому-нибудь пальцы - Medicare Australia, I '' я смотрю на ТЫ.
  • Приложение страдает от утечек памяти или конфликтов блокировок, что означает, что существует ограниченный возможный параллелизм, прежде чем все попадет в кучу. Это можно обойти, запустив несколько процессов. Реальное решение: если действительно несколько процессов делает работать на вашу рабочую нагрузку (то есть нет внешний ресурс для борьбы), то отсутствие внутреннего параллелизма - это просто ошибка. Реальное решение: сломать еще несколько пальцев. желательно, чтобы тот, кто считал себя умнее авторов приличных библиотек параллельной обработки.

Причины, по которым один процесс лучше, включают:

  • Балансировщики нагрузки никогда не могут так хорошо распределять работу по бэкэндам, как внутрипроцессный алгоритм (либо потому, что внутрипроцессный процесс имеет доступ ко всем видам информации, которой нет у подсистемы балансировки нагрузки, либо, предпочтительно, потому что внутрипроцессный алгоритм просто переходит к сценарию очереди работ). Таким образом, балансировка нагрузки между несколькими JVM менее эффективна.
  • Накладные расходы на каждую JVM как с точки зрения использования ЦП, так и памяти. Надеюсь, это говорит само за себя.

Как настроить несколько экземпляров Tomcat .....http://mytecharticle.com/how-to-configure-multiple-tomcat-instances/