Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que se trata o artigo:

Nesse artigo mostraremos como configurar um cluster com balanceamento de carga no GlassFish para alcançar alta disponibilidade. Em seguida, veremos como efetuar tuning no desenvolvimento de aplicações e nas configurações do servidor para conseguirmos ganho de performance.

Em que situação o tema é útil:

O modelo de alta disponibilidade de aplicações Java web baseado em cluster e balanceamento de carga se torna extremamente importante quando há necessidade de se reduzir a possibilidade de falha em sistemas e de aumentar o poder de processamento das requisições. Aplicações que exigem alta disponibilidade, como sistemas bancários ou sites de comércio eletrônico, devem usar uma arquitetura como esta, acompanhada de um monitoramento real-time dos nós da solução.

Resumo DevMan:

Com o forte crescimento na utilização das aplicações web, a alta disponibilidade de sistemas se tornou uma necessidade em muitos ambientes computacionais da atualidade. Nesse cenário, o GlassFish 3 – inclusive na sua distribuição open source – fornece uma solução robusta utilizando uma arquitetura baseada em cluster combinada com o Apache HTTP Server no papel de balanceador de carga.

Para aumentar ainda mais a confiabilidade da solução, é possível ganhar em performance efetuando tuning na programação, no servidor de aplicação, na JVM, no hardware e até mesmo no sistema operacional. Veremos que pequenos ajustes podem significar uma melhoria significativa, permitindo um crescimento maior na escalabilidade. É sobre tudo isso que analisaremos nesse artigo.

Os servidores de aplicação surgiram na década de 1990 para dar suporte aos desenvolvedores através de um ambiente para execução de sistemas web, abstraindo do programador a complexidade da infraestrutura de comunicação e de acesso aos sistemas publicados. Esse tipo de software fornece vários recursos essenciais em um cenário de deployment, como barreiras de segurança, garantia de disponibilidade, tratamento global de exceções, gravação do log de aplicações, pool de conexões com bancos de dados e serviços de diretório, sessões javamail, entre outros. Atualmente, existem várias soluções de servidores de aplicação, sendo algumas pagas e outras gratuitas.

Nesse contexto, o GlassFish surgiu de forma tímida em 2006 através do Projeto GlassFish, ainda pelas mãos da Sun Microsystems. Hoje é considerado por muitos especialistas a melhor solução gratuita da categoria, possuindo recursos diferenciados e uma comunidade ativa por meio do fórum java.net.

Para servir conteúdo web, o servidor de aplicações da Oracle emprega uma derivação do Apache Tomcat, e a fim de obter maior performance e escalabilidade, faz uso do componente Grizzly, uma biblioteca baseada no Java New I/O (NIO) que exerce um papel fundamental na arquitetura do GlassFish, já que permite o crescimento no número de requisições através de múltiplas threads.

De forma isolada, porém, o Grizzly não é capaz de atender a um grande volume de acessos, normalmente encontrado em sistemas críticos. Neste caso, é preciso montar um ambiente que apresente uma grande capacidade de throughput, aliado a soluções de redundância e balanceamento de carga, oferecendo transparência de acesso ao usuário final.

O GlassFish possui suporte à criação de cluster e integração com balanceadores de carga para a montagem de ambientes críticos. O cluster, nesse cenário, permite que se rode o mesmo programa de forma paralela em múltiplas máquinas, oferecendo melhor experiência através da redundância proporcionada por essa configuração. O balanceador de carga, por sua vez, é o nó central da solução que recebe toda requisição de entrada e a direciona para algum dos nós do cluster de acordo com um algoritmo. É através dele que conseguimos a transparência de acesso, isentando o usuário de modificar a URL da requisição de acordo com o nó do cluster que fornecerá o recurso.

No entanto, independente de se montar um ambiente de alta disponibilidade com cluster e balanceamento de carga, é sempre aconselhada a realização de algumas práticas que melhorem o desempenho do ambiente como um todo. Esse processo é conhecido como tuning de performance (ou simplesmente tuning), e tem sido aplicado principalmente em aplicações web. Várias técnicas podem ser empregadas para realização dessa tarefa, porém as mais comuns são otimização de código, estratégia de cache, tuning do servidor de aplicação e tuning da JVM.

Nesse artigo, apresentaremos como instalar o GlassFish, criar clusters, instâncias, configurar o balanceamento de carga e empregar técnicas de tuning através de simples configurações e padrões de programação. Nosso objetivo é aumentar a confiabilidade das aplicações publicadas, visto que em um ambiente de cluster como o que vamos criar, se uma das máquinas envolvidas apresentar problemas, a outra responde pelas requisições. Outro fator importante para a prevenção de falhas é a realização de tuning. Veremos que ao seguir algumas práticas no desenvolvimento de sistemas e efetuando certas configurações no servidor de aplicação, podemos obter um rendimento muito superior, melhorando o gerenciamento de memória, o desempenho de aplicações e o tempo de resposta para as requisições.

Passos para instalação

Em primeiro lugar, antes de instalarmos o GlassFish, precisamos ter a máquina virtual Java configurada. Para a versão do servidor de aplicação que vamos trabalhar (3.1.2), é necessário que seja a versão 1.6 da JVM. Portanto, realize antecipadamente a instalação da JDK nas duas máquinas que farão parte do cluster na nossa simulação.

Agora devemos instalar e iniciar o GlassFish. Há duas opções disponíveis para download:

· Open Source Edition, disponível no site da comunidade GlassFish em https://glassfish.dev.java.net;

· Oracle Glassfish Server, versão paga que pode ser baixada em http://www.oracle.com/technology/products/glassfish/index.html.

Nesse artigo faremos uso da distribuição open source. É importante ressaltar, entretanto, que o GlassFish 3 trouxe o conceito de profile nas opções de download. Assim, foram criados os perfis Web e Full Platform, onde a grande diferença entre os dois está no fato de a segunda opção ter sido projetada para desenvolvedores que utilizam APIs Java EE avançadas. Nessa simulação, faremos uso do profile Full Platform, e nossa instalação será realizada nas duas máquinas através de arquivo compactado, que é independente de plataforma. Os passos a serem seguidos são:

1. Baixe o arquivo compactado de instalação em http://glassfish.java.net/downloads/3.1.2-final.html;

2. Descompacte o arquivo na pasta desejada (o diretório de destino será onde o Servidor de Aplicação ficará instalado);

3. Por fim, entre na pasta /<dir_glassfish_v3.1.2>/bin e inicialize o GlassFish através do executável asadmin:


  cd /<dir_glassfish_v3.1.2>/bin
  asadmin start-domain

Como podemos perceber, estamos iniciando o domínio padrão domain1 – criado automaticamente quando instalamos o servidor de aplicação – com o comando start-domain, através do utilitário asadmin.

O asadmin é o principal comando utilizado pelo administrador do servidor de aplicação. Ele serve para diversas tarefas, como parar e iniciar o servidor, gravar configurações, publicar aplicações, entre outras. Existem, no entanto, várias outras maneiras de efetuarmos o controle do GlassFish, porém as mais utilizadas são:

· Através do console administrativo, no endereço http://host_do_servidor:4848;

· Através de ferramentas de linha de comando. Como mencionado, asadmin é uma delas e será utilizada durante todo esse artigo.

O Servidor de Aplicação é composto por um ou mais domínios que, conceitualmente, podem ser encarados como repositórios que armazenam grupos de instâncias autônomas (standalone) ou de cluster. Uma instância é um processo da JVM que armazena as aplicações do servidor, possui sua própria árvore de diretórios e algumas configurações individuais. Cada domínio, por sua vez, utiliza uma área de memória separada, possui vários recursos exclusivos, como Pools JDBC e EJB Timers, armazena seus logs particulares e tem sua área administrativa chamada de Servidor de Administração de Domínio (em inglês, Domain Administration Server – DAS).

Instância Autônoma: ...

Quer ler esse conteúdo completo? Tenha acesso completo