mod_proxy vs mod_proxy_ajp vs mod_jk

9

Estamos nos preparando para a migração do seguinte ambiente:

Apache 2.0.2 --AJP -> JBoss4.2.2

para

Apache 2.2.3 - ??? -> JBoss 5.1.0

Como você juntaria os dois?

As opções são:

  1. AJP clássico (significa construir mod_jk para Apache)
  2. mod_proxy (encaminhando solicitações HTTP para o JBoss)
  3. mod_proxy_ajp

A opção 2 é a solução mais popular no momento porque parece significar menos processamento devido à necessidade de traduzir as respostas do JBoss do AJP, e o tempo da CPU é algo que precisamos manter atento em nossa infraestrutura. As opções 2 e 3 também vêm com a compilação Apache suportada pela Red Hat.

No momento, não consigo ver a opção 1, pois temos o AJP 'de graça' com a opção 3.

Portanto, quais são os prós e os contras das opções 2 e 3? A preocupação com a carga da CPU é realmente algo com que precisamos nos preocupar? O que perdemos no processamento de dados binários (tráfego AJP) recuperamos com largura de banda reduzida e E / S?

Nossa infraestrutura será o Apache suportando até 9 JBosses altamente ajustados (mas geralmente cerca de metade disso), todos na mesma máquina RHEL 5, virtualizada em uma nuvem privada.

Agradecemos antecipadamente por qualquer indicação / conselho.

Rico

Rico
fonte

Respostas:

8

2 mod_proxy_http, a menos que você precise do cabeçalho Host do cliente.

Eu não recomendo o mod_jk clássico porque sua funcionalidade foi substituída por mod_proxy_ajp e, como você mesmo disse, requer a criação e a manutenção desse módulo.

Eu acho que mod_proxy_http é uma solução muito limpa e tira ajp da imagem. No entanto, você deve estar ciente de algumas advertências para mudar de ajp para http. Se você precisar acessar os cabeçalhos do servidor exatamente como foram recebidos pelo apache (incluindo o cabeçalho Host), deverá usar o ajp. O JBoss verá uma nova solicitação http vinda do apache, não do cliente original. Se você precisar apenas do IP remoto do cliente, ainda poderá obtê-lo com um cabeçalho especial que o apache possa definir nas novas solicitações. No entanto, se você estiver hospedando virtualmente a partir da camada de aplicativos, será melhor usar o ajp.

No que diz respeito ao desempenho, ajp ou http exigirá algum processamento pelo JBoss e algum tráfego TCP de soquete local. Você precisará tentar os dois para ver qual é mais eficiente, mas acho que no geral é uma porcentagem muito pequena da carga total do servidor. O HTTP é um protocolo mais complicado e o ajp é projetado especificamente para eficientemente entre as camadas da Web e de aplicativos, portanto, teoricamente, o ajp é provavelmente melhor. Dito isso, descobri que o http geralmente é melhor suportado fora da linha de servidores de aplicativos do Tomcat.

Eu uso mod_proxy_ajp e mod_proxy_http e não tive problemas.

e_tothe_ipi
fonte
O Hostcabeçalho serão passados através corretamente se você usarProxyPreserveHost On
Derf
Ao trabalhar com o Apache mod_proxy, consulte httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers . Se você configurar o RemoteIpValve como parte de seu Tomcat Servlet o código do aplicativo pode obter mais informações de forma transparente tomcat.apache.org/tomcat-8.0-doc/config/...
Scott Markwell