Quais as melhores práticas a serem aplicadas na manutenção de servidores web/JEE?

4 respostas
kicolobo

Olá,

estamos desenvolvendo uma aplicação de grande porte (é a primeira vez que fazemos algo deste tamanho) em Java com interface web usando JSF.
Nossa aplicação é composta por alguns módulos, que são codificados de maneira independente, de tal maneira que, no final das contas, temos umas 5 ou 6 aplicações web em execução em nosso servidor (no caso, estamos usando apenas o Tomcat 5.5).

E é aí que entram minhas dúvidas:

  • Como toda aplicação, de tempos em tempos temos de atualizá-las. E sempre há usuários logados no sistema. Como devemos proceder? Há como fazer uma atualização da aplicação de tal modo que não quebre as sessões dos usuários? Se for possível fazer isto, como devemos proceder?

  • É muito comum ao atualizar um módulo (seguindo a sequência Parar aplicação, fazer o “undeploy” e carregar a nova versão do WAR), jogarmos a memória do servidor Tomcat no chão, paralizando assim todas as demais aplicações. Há como evitar estes transtornos? Como proceder neste caso? Há como nos livrarmos das horríveis mensagens OutofMemoryError?

  • Já configurei o servidor para utilizar no máximo 512 Mb de memória, no entanto, ao ver o status do servidor pelo Tomcat Manager, observo algo como o seguinte: “Free memory: 2.83 MB Total memory: 43.16 MB Max memory: 508.06 MB”. Há algo de errado?

  • A melhor solução seria usar algum servidor JEE padrão mesmo, como o JBoss devido ao recurso de hot deploy? E com relação ao hot deploy, ele me fornece os recursos que necessitamos e que listei acima? Não estamos usando EJBs. Mesmo assim a mudança para o JBoss por exemplo traria alguma vantagem REAL?

Resumindo: como vocês costumam lidar com estes problemas? Existe algum bom livro, website ou artigo listando as melhors práticas a serem aplicadas na manutenção destes servidores?

4 Respostas

pcalcado

1 - Façam janelas de manutenção avisando aos usuários

2 - Tomcat em produção? Que tal Jetty?

3 - pelo visto sua aplicação está consumindo muita memória. De qualquer modo 512MB para uma aplicação com nível de uso alto é bem pouco, tente 700 (claro que depende da aplicação, é apenas um chute educado).

4 - Não façam hotdeployment em produção.

louds

Hotdeploy é para desenvolvimento, nunca use em produção. As dores de cabeça que você pode ter no caso de algum classloading leak são enormes.

Com java é impossivel ter hot-deployment que realmente funcione, então siga a sugestão do Phillip, tenha janelas de manutenção e avise os usuários.

Outra solução, dependendo do tamanho do sistema, é transicionar entre instancias atraves de um proxy, mas isso não evita de perder a sessão, apenas evita que o sistema saia do ar durante a transição.

kicolobo

Quais as vantagens do Jetty em relação ao Tomcat?

P

Que tal apache + mod_jk operando em modo sticky com instâncias clusterizadas ?

Na hora se virar a versão, o procedimento seria o seguinte:

  1. Derrube uma instância do cluster. Os usuários com sessão ativas na instância que cair “vão” para a instância remanescente.

  2. Atualize a versão da aplicação e suba a instância

  3. Derrube a versão desatualizada. Sessões em andamento agora irão para a instância atualizada

  4. Atualize e suba a segunda instância do cluster

Embora não resolva 100% dos casos (ex: mudanças radicais nas classes dos objetos armazenados em sessão ou quando a base de dados é incompatível), a manobra permite, no mínimo, fazer este tipo de atualização de forma ordenada.

Outros aspectos de aplicação que podem ajudar:

  • Adicionar um filtro que bloqueie novas sessões, controlado por alguma configuração que possa ser alterada dinamicamente via interface de administração

  • Minimizar o uso de tipos de aplicação armazenados em sessão.

  • Evitar ao máximo a inclusão de bibliotecas no classpath do servidor de aplicação. Inclua tudo o que vc. precisa no seu war/ear e garanta que o servidor está operando em modo J2EE compliant (isto é mais para o caso de vc. estar usando o JBoss e seu “infamoso” UCL).

Criado 27 de fevereiro de 2007
Ultima resposta 7 de mar. de 2007
Respostas 4
Participantes 4