é realmente necessário rodar o Apache como front-end para o Glassfish / JBoss / Tomcat?

14

Sou principalmente um desenvolvedor de Java e venho a você com uma pergunta que abrange a divisão entre os desenvolvedores e os administradores de sistema.

Anos atrás, quando era uma novidade rodar o Tomcat como um servidor de aplicativos, era costume enfrentá-lo com o Apache. Pelo que entendi, isso foi feito porque:

  1. O Java foi considerado "lento" e foi útil que o Apache fornecesse conteúdo estático diretamente.
  2. O Tomcat não podia escutar as portas 80/443, a menos que fosse executado como root, o que era perigoso.

O Java não é mais considerado lento, e eu duvido que adicionar o Apache ao mix realmente ajude a acelerar as coisas.

Quanto ao problema das portas, provavelmente existem maneiras mais simples de conectar os servidores de aplicativos às portas 80/443 atualmente.

Então, minha pergunta é: realmente há algum benefício em fazer frente ao Java Webapps com o Apache atualmente? Em caso afirmativo, o Apache ainda é o caminho a percorrer? Eu deveria olhar para o Nginx? Em vez do Tomcat, estou usando o Glassfish, se isso importa.

    
por Caffeine Coma 03.02.2011 / 16:56

5 respostas

8

A maioria das pessoas vai dizer que você precisa de algo na frente por causa de arquivos estáticos.

Isso é um pouco idiota porque:

  • Você pode configurar o Tomcat para usar o mesmo IO como apache com APR
  • Você deve estar usando um CDN (rede de entrega de conteúdo) de qualquer maneira.

A verdadeira razão pela qual você precisa de algo na frente do tomcat / jetty / jboss para balancear a carga e lidar com o failover.

Eu recomendo que você não ouça " ... O mecanismo do Tomcat é o calcanhar de Aquiles de toda a ecosfera ... " como todos sabemos que não é verdade ... seu banco de dados e seu pool de conexão será isso.

    
por 21.02.2011 / 18:06
4

Depende do ecossistema em torno do seu aplicativo. Em um ambiente de intranet, você provavelmente não precisa de nada na frente do Tomcat.

Se sozinho na internet como serviço público, isso depende. O Apache é bom por causa dos módulos que ele fornece como mod_security. Mas se você não está familiarizado com a configuração do apache (ou ngix) - então você pode se expor a mais ataques ou pontos de falha devido a um erro de configuração.

O Apache na frente é útil para a exibição de páginas de interrupção, nos casos em que você precisa atualizar o aplicativo da Web e esperar pela reinicialização. Mas se as reinicializações forem raras ou forem cronometradas corretamente - então é outro motivo para se tornar independente do Tomcat.

O Tomcat FAQ também fala sobre isso também, que aborda alguns pontos adicionais: link

    
por 03.02.2011 / 17:47
1

O Apache não é um bom candidato para fornecer conteúdo estático devido à sua natureza de vários processos. O Nginx é mais adequado, pois utiliza E / S assíncrona para processar solicitações. Os Tomcats modernos também podem usar E / S assíncronas (NIO na terminologia Java). Por exemplo, você deve instalar o pacote tomcat-native no Fedora para fazer com que o Tomcat use E / S assíncrona.

    
por 03.02.2011 / 17:04
1

Por incrível que pareça, algumas dessas respostas - algum de vocês, na verdade, executam sites de alto desempenho multi-camadas e multi-servidor suportados pelo Tomcat? OP, sua suposição original de que o Tomcat não é "lento" ... wow. O motor Tomcat é o calcanhar de Aquiles de toda a ecosfera.

Sim, você quer o Apache na frente - ele fornece primeiramente o mod_rewrite (você já implementou o UrlRewriteFilter no seu Tomcat?), bem como os arquivos htaccess que tornam a proteção de um servidor da Web tão importante. O Apache pode permitir que você faça o balanceamento de carga dos nós do Tomcat, sirva seu conteúdo estático muito mais rápido e obtenha um desempenho melhor do Tomcat porque você não está sobrecarregando o pipe de solicitação com o não-Java (js / css / html / jpg / etc.) coisas. Você pode descarregar seu SSL no Apache (se não descarregar em um LB de hardware) com facilidade e nem mesmo ter que lidar com esse travesti chamado Java Keystore. Há tantas vitórias - você pode ajustar o mod_jk em seus nós de back-end para evitar sobrecarregar o pobre cérebro de Java, porque ele normalmente não pode lidar com o tráfego massivo com as classes médias do codificador Java.

Cuidado com qualquer um que lhe diga que o Apache (ou nginx, etc - mas o desempenho do Apache vai ofuscar o Tomcat de qualquer maneira, então não importa) não é uma boa idéia na frente do Tomcat.

    
por 05.02.2011 / 16:07
0

Se for apenas uma questão de vincular a porta de privilégios sem ser root ao usar o Tomcat, você não precisará usar o Apache httpd. Tomcat por padrão vem com jsvc que você precisa compilar.

jsvc é um wrapper de serviço java para iniciar o Tomcat como um serviço. Este serviço inicia como root, mas inicia o Tomcat como um usuário normal. Então você pode vincular seu Tomcat a portas privilegiadas.

Eu não sei sobre o Glassfish, mas tenha certeza de que as soluções existem e, se não, você certamente pode usar as técnicas de redirecionamento de portas (iptables, etc ...)

Acho que a escolha de fazer frente a um servidor de aplicativos com um servidor da Web (Apache httpd por exemplo) é para balanceamento de carga, cluster ou servir recursos estáticos apenas com um servidor da Web e recursos dinâmicos com um servidor de aplicativos.

    
por 03.02.2011 / 18:26