Sun Inner Circle: For Business & Technology Leaders Sun Inner Circle: For Business & Technology Leaders

GlassFish ou Tomcat: Qual é o melhor para você?


Se você dá valor a desempenho, usabilidade e agilidade da aplicação, dê uma olhada melhor.

O CEO tem sempre perguntas muito simples para o gerenciamento de TI. Por quê é que os clientes estão reclamando do novo sistema de pedidos online? Por quê é que o lançamento desse novo serviço Web está demorando oito meses? Por quê é que o meu aplicativo de relatórios financeiros sofreu um crash hoje de manhã?

O que o CEO raramente pergunta da gerência de TI é qual a tecnologia de servidor de aplicações que a empresa está usando. Mas, em muitos casos, essa é a questão relevante, porque existe uma ligação direta entre o servidor de aplicações utilizado pelas equipes de desenvolvimento e o desempenho e flexibilidade das aplicações da empresa.

Mais especificamente, a tecnologia de contêineres da Web utilizada no servidor de aplicações pode ser um fator determinante na qualidade da aplicação e na produtividade do desenvolvedor. Com a tecnologia certa de contêineres da Web, a sua equipe de desenvolvedores consegue realizar mais e as aplicações são entregues mais rapidamente e com um desempenho melhor. A escolha errada pode ser uma fonte de preocupações — agora e mais tarde.

Consequentemente, se as aplicações são o seu negócio, compensa dar uma olhada melhor nos aspectos internos do servidor de aplicações, na tecnologia de contêineres da Web e o seu impacto nas equipes de desenvolvedores. Este artigo compara as duas opções de software livre mais populares: GlassFish e Tomcat.

Duas opções populares — muitas diferenças importantes

GlassFish é um servidor de aplicações livre fornecido pela Comunidade GlassFish, lançado pela Sun em 2005 e que provou ser muito popular entre os desenvolvedores. Atualmente existem duas versões prevalentes: GlassFish v2 e a Glassfish v3 Prelude, recentemente lançada. Até agora, já foram feitos downloads de quase 9.000.000 de cópias do GlassFish v2, com 300.000 registros de produto só em 2009. O GlassFish v3 Prelude oferece novos recursos e aperfeiçoamentos. É uma excelente plataforma para implementar aplicações de Internet ricas suportadas por Java ou linguagens dinâmicas como jRuby.

Enquanto o GlassFish é um conjunto de contêineres Java EE, um dos quais é um contêiner da Web, o Tomcat é apenas um contêiner da Web. Esta diferença crucial conduz a algumas das maiores vantagens do GlassFish.

O servidor de aplicações Tomcat foi lançado pela Apache, por um grupo que incluía desenvolvedores da Sun e JServ; o código inicial é proveniente da Sun. O Tomcat foi vital para a adoção inicial de Java no lado do servidor, estava disponível sob licença livre e contribuiu para a popularidade do software livre dentro das grandes empresas.

Em geral, as aplicações que são executadas no Tomcat também podem ser executadas no GlassFish, sem quaisquer mudanças. No entanto, há importantes diferenças que têm impacto no desempenho, na escalabilidade e usabilidade da aplicação e na produtividade do desenvolvedor.

Para compreender essas diferenças, é importante ver a tecnologia subjacente de contêineres da Web. O contêiner da Web é a parte de um servidor de aplicações que gerencia servlets, JavaServer Pages (JSPs) e outros componentes de nível Web.

Enquanto o GlassFish é um conjunto de contêineres Java EE, um dos quais é um contêiner da Web, o Tomcat é apenas um contêiner da Web. Esta diferença crucial conduz a algumas das maiores vantagens do GlassFish:

  • Caminho de migração mais fácil. Com o GlassFish v2, existe uma forma clara e direta de levar vantagem de tecnologias como Enterprise Java Beans (EJBs), Java Persistence API (JPA), Java Message Service (JMS) e outras capacidades. Com o Tomcat, essas tecnologias têm de ser adicionadas gradualmente, uma de cada vez. É responsabilidade do desenvolvedor implementar as capacidades e certificar-se de que tudo funciona e que funciona em conjunto.
  • Suporte criativo para clustering e failover. O GlassFish v2 pode fornecer capacidades de alta disponibilidade sofisticadas e de cluster, permitindo que as aplicações cumpram os mais rigorosos acordos de nível de serviço de classe empresarial (SLAs). O GlassFish v3 Prelude suporta o clustering através de um equilibrador de carga, mas ainda não tem o perfil de cluster.
  • Administração/monitoramento superior. Tanto o GlassFish v2 quanto o v3 Prelude suportam ambos uma administração centralizada através de um console de gerenciamento e através de uma Interface de Linha de Comandos (CLI). O GlassFish v2 fornece monitoramento de fluxo de chamadas, que permite a um desenvolvedor de aplicações ou administrador de servidor determinar onde a aplicação gasta a maior parte do tempo. Este recurso também estará disponível no GlassFish v3. Além disso, os fornecedores terceiros podem disponibilizar o seu software através do GlassFish Update Center para uma configuração fácil no GlassFish. Com o Tomcat, o novo software deve ser configurado gradativamente. O Update Center também fornece acesso inicial a versões mais recentes de tecnologias como EJB 3.1, que permite o bundling de EJB num WAR ao invés de ter de colocar a aplicação em pacote como um arquivo EAR.
  • Suporte para linguagens de script. GlassFish suporta ou suportará em breve Ruby/JRuby, Python/Jython, Groovy, PHP, JavaScript/Phobos, Scala e outras linguagens.

Os aspectos essenciais: diferenças adicionais de contêiner da Web

Além das vantagens gerais mencionadas acima, o GlassFish distingue-se do Tomcat também nas capacidades de contêiner da Web. Apenas alguns exemplos:

  • A capacidade de reter sessões através de novas implementações da aplicação (v3 Prelude) economiza tempo aos desenvolvedores que criam aplicações Java de Web.
  • GlassFish v2 e v3 Prelude fornecem suporte para reconfiguração dinâmica de servidores virtuais e HTTP Listeners, não sendo necessário reiniciar o servidor. Com o Tomcat, se fizer uma mudança em um conjunto de recursos, normalmente, terá que reiniciar o servidor de aplicações.
  • Grizzly Framework, de elevado desempenho e altamente escalável, no v2 e v3 Prelude, que melhora o rendimento de pedidos/respostas. As camadas inferiores de Web Tier no GlassFish são implementadas através do Grizzly Framework. A estrutura é escrita em Java, beneficiando das NIO APIs (rede escalável e E/S de arquivos) para proporcionar escalabilidade e é também altamente personalizável.
  • GlassFish v2 e v3 Prelude incluem várias otimizações de desempenho como “flattened valve invocation” (invocação de válvulas nivelada), uma modificação da arquitetura de válvulas que simplifica a forma como cada válvula é chamada, resultando em uma menor profundidade da pilha e um melhor desempenho. O GlassFish v3 Prelude pode, também, suportar válvulas de tipo Tomcat.

A Sun realizou testes abrangentes de escalabilidade para comparar os conectores NIO do Tomcat e do GlassFish. Esses testes utilizam um servlet simples para minimizar o tempo dispendido no contêiner e para medir quantas operações por segundo os vários contêineres conseguem para um número cada vez maior de usuários. Por exemplo, com 16.000 usuários, o nosso marco de referência fornece os seguintes resultados:

  GLASSFISH TOMCAT
Operações/Segundo 6988.9 6615.3
Tempo méd. resposta 0.242 0.358
Tempo máx. resposta 1.519 3.693
90% tempo resp. 0.6 0.75

Veja os detalhes e faça a melhor escolha

A seleção de um servidor de aplicações tem impacto em muitos aspectos das opreações de uma empresa, não apenas nas equipes de desenvolvedores. É uma decisão altamente estratégica para a empresa. A Sun defende que o GlassFish provou ser uma opção superior para os desenvolvedores de aplicações da próxima geração. Mas nós o encorajamos a obter mais informações e a ponderar cuidadosamente as suas alternativas. Mais detalhes e comparações entre o GlassFish e o Tomcat estão disponíveis no nosso white paper.