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

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

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

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, которая виртуализирована в частном облаке.

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

Богатый

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, и у меня не было никаких проблем.