mod_proxy против mod_proxy_ajp против mod_jk

9

Мы готовимся к миграции из следующей среды:

Apache 2.0.2 - AJP -> JBoss4.2.2

в

Apache 2.2.3 - ??? -> JBoss 5.1.0

Как бы вы присоединились к двум вместе?

Варианты:

  1. Классический AJP (означает сборку mod_jk для Apache)
  2. mod_proxy (пересылка HTTP-запросов в JBoss)
  3. mod_proxy_ajp

Вариант 2 является самым популярным решением на данный момент, потому что, похоже, он требует меньше обработки из-за того, что больше не нужно переводить ответы JBoss из AJP, а время ЦП - это то, что нам нужно внимательно отслеживать в нашей инфраструктуре. Варианты 2 и 3 также поставляются со сборкой Apache, поддерживаемой Red Hat.

В настоящее время я не вижу, чтобы мы выбрали вариант 1, поскольку мы получаем AJP «бесплатно» с вариантом 3.

Следовательно, каковы плюсы и минусы вариантов 2 и 3? Стоит ли беспокоиться о загрузке процессора? Что мы теряем при обработке двоичных данных (трафик AJP), получаем ли мы обратно в условиях ограниченной полосы пропускания и ввода-вывода?

В нашей инфраструктуре Apache будет иметь до 9 сильно настроенных JBosses (но обычно около половины) на одной машине RHEL 5, виртуализированной в частном облаке.

Заранее спасибо за любые указатели / советы.

Богатые

Богатые
источник

Ответы:

8

2 mod_proxy_http, если вам не нужен заголовок Host от клиента.

Я не рекомендую классический mod_jk, потому что его функциональность была заменена на mod_proxy_ajp, и, как вы сказали сами, он требует сборки и поддержки этого модуля самостоятельно.

Я думаю, что mod_proxy_http - очень чистое решение, и оно убирает ajp из картинки. Однако вам следует помнить о нескольких предостережениях при переходе с ajp на http. Если вам нужен доступ к заголовкам сервера в точности так, как они были получены apache (включая заголовок Host), вам следует использовать ajp. JBoss увидит новый http-запрос от apache, а не от оригинального клиента. Если вам нужен только удаленный IP-адрес клиента, вы все равно можете получить его с помощью специального заголовка, который apache может установить для новых запросов. Однако, если вы делаете виртуальный хостинг на уровне приложений, вам лучше использовать ajp.

Что касается производительности, то для ajp или http потребуется некоторая обработка JBoss и некоторый трафик TCP локального сокета. Вам нужно попробовать оба варианта, чтобы увидеть, какой из них более эффективен, но я думаю, что в целом это очень небольшой процент от общей нагрузки на сервер. Http - более сложный протокол, а ajp специально разработан для эффективной работы между веб-уровнями и уровнями приложений, поэтому теоретически ajp, вероятно, лучше. Тем не менее, я обнаружил, что http часто лучше поддерживается за пределами линии сервера приложений Tomcat.

Я использую mod_proxy_ajp и mod_proxy_http, и у меня не было никаких проблем вообще.

e_tothe_ipi
источник
HostЗаголовок будет получить прошли через правильно , если вы используетеProxyPreserveHost On
Дерф
При работе с Apache mod_proxy посмотрите httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Если настроить RemoteIpValve как часть вашего Tomcat Servlet код приложения может получить большую часть информации прозрачно tomcat.apache.org/tomcat-8.0-doc/config/...
Скотт Марквелл