mod_proxy vs mod_proxy_ajp vs mod_jk

8

Estamos nos preparando para migrar do seguinte ambiente:

Apache 2.0.2 --AJP--> JBoss4.2.2

para

Apache 2.2.3 --???--> JBoss 5.1.0

Como você uniria os dois?

As opções são:

  1. AJP clássico (significa criar mod_jk para o 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 à falta de necessidade de traduzir as respostas do JBoss da AJP, e o tempo de CPU é algo que precisamos manter sob controle em nossa infraestrutura. As opções 2 e 3 também vêm com a compilação do Apache suportada pela Red Hat.

No momento, não posso ver a opção 1, já que temos AJP 'de graça' com a opção 3.

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

Nossa infra-estrutura será composta pelo JBosses do Apache, mas com quase metade disso tudo, na mesma máquina do RHEL 5, que é virtualizada em uma nuvem privada.

>

Agradecemos antecipadamente por quaisquer dicas / conselhos.

Rich

    
por Rich 17.09.2010 / 14:44

1 resposta

7

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

Eu não recomendo mod_jk clássico porque sua funcionalidade foi substituída por mod_proxy_ajp e como você mesmo disse, é necessário criar e manter esse módulo você mesmo.

Eu acho que mod_proxy_http é uma solução muito limpa e tira um pouco da imagem. No entanto, você deve estar ciente de algumas advertências para passar de ajp para http. Se você precisar acessar os cabeçalhos do servidor exatamente como foram recebidos pelo apache (incluindo o cabeçalho do Host), você deve usar o ajp. O JBoss verá uma nova solicitação http proveniente 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 pode definir nas novas solicitações. No entanto, se você estiver fazendo hospedagem virtual a partir da camada de aplicativos, é melhor fazer isso com o ajp.

No que diz respeito ao desempenho, o ajp ou o http exigirão algum processamento pelo JBoss e algum tráfego TCP do soquete local. Você terá que tentar ambos para ver qual é o mais eficiente, mas acho que no geral é uma porcentagem muito pequena da carga total do servidor. Http é um protocolo mais complicado e ajp é especificamente projetado para eficientemente entre web e aplicativos, então, teoricamente, o ajp provavelmente é melhor. Dito isso, descobri que muitas vezes o http é melhor suportado fora da linha do servidor de aplicativos do Tomcat.

Eu uso mod_proxy_ajp e mod_proxy_http e não tive nenhum problema.

    
por 17.09.2010 / 19:11