EAR Hot Implantar um Java para minimizar ou eliminar o tempo ocioso de um aplicativo em um servidor?

StackOverflow https://stackoverflow.com/questions/221846

  •  03-07-2019
  •  | 
  •  

Pergunta

Ouvi dizer que isso é o que JavaRebel faz, mas existe alguma outra boa maneira de implantar uma nova versão de um EAR, enquanto permitindo que os usuários permanecem ativos na versão anterior? Usamos JBoss para o servidor de aplicativos ...

Foi útil?

Solução

Não é o que JavaRebel faz. JavaRebel (de acordo com a descrição) hot-substitui as classes na memória. Não é aceitável no caso de conexões existentes para o sistema, uma vez que as classes atualizados podem quebrar a lógica do cliente.

Uma vez que uma empresa que eu estava trabalhando para teve um problema semelhante, e foi resolvido desta maneira:

  • um roteador inteligente foi usado como um balanceador de carga
  • a nova versão foi instalada a 50% dos nós do (novo) de cluster
  • novas conexões foram entregues rigorosamente esses nós atualizados, os antigos foram equilibrados entre os nós antigos
  • nós idade foram levou off-line (um por um, para manter número de clientes por nó dentro dos limites)
  • , ao mesmo tempo, a nova versão foi implantado para off-line "velhos" nós e eles foram trazidos como novos nós
  • devido ao agrupamento EJB, as sessões e feijão foram apanhados por outros nós velhos
  • finalmente (em poucas horas), apenas um nó velha esquerda, tendo uma única instância de versão antiga e todos os clientes que utilizam versão antiga foram conectados a ele
  • quando o último cliente antigo foi desconectado, esse nó foi também derrubado

Agora, eu não sou um cara de rede, e não pode dar-lhe muitos detalhes (como o que foi o hardware do roteador e tal). O meu entendimento isso pode ser configurado muito fácil, exceto, se bem me lembro, tínhamos de configurar um domínio adicional Weblogic para implantar novas versões do aplicativo (caso contrário seria estar em conflito com o antigo em nomes JNDI).

Espero que ajude.

P.S. Ichorus fornecido um comentário dizendo que o aplicativo é implantado em servidores dos clientes. Portanto, o truque roteador pode não ser viável. Agora, eu só vejo uma solução viável agora (é 21:52 agora, eu posso ignorar coisas :)) -

  • Desenvolver nova versão com "controle de versão" nomes JNDI; por exemplo. se feijão cliente estava sob ejb / Cliente na versão 1, na versão 2 seria sob ejb / Customer2
  • Tenha uma fachada de negócio na aplicação com um estável interface básica (Fábrica de estilo) que, quando pediu feijão Cliente, tenta encontrar o nome de maior controle de versão JNDI (não em cada chamada, é claro, pode armazenar em cache para um hora mais ou menos). Essa fachada pode (e deve) ser implantado como um aplicativo separado - e nunca ou muito raramente atualizados
  • Agora, cada novo cliente que tenha acesso à mais recente aplicativo implantado, e as aplicações não vai conflitos.

Esta abordagem leva um planejamento e testes cuidadosos, mas deve funcionar IMHO.

Eu recentemente modificado algumas aplicações de uma forma semelhante ao deixá-los coexistir no mesmo domínio (antes eles usaram o mesmo nome JNDI para diferentes fontes de dados).

Outras dicas

Como eu entendo WebLogic tem um recurso chamado implantação paralela para eliminar o tempo de inatividade durante a atualização de versão EAR. Você pode implantar a nova versão sem parar o aplicativo existente e uma vez que a nova versão implementada com sucesso, você pode passar de forma transparente a partir do antigo para novo.

Eu não tenho certeza se outros apoios de servidor de aplicativos isto.

Ref: http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490

A sugestão de Vladimir em torno de usar um balanceador de carga é uma maneira bastante certeza de conseguir o que deseja. Tenha em mente, ele não precisa necessariamente ser um high-end balanceador de carga de hardware. Em vez disso, se você frente o servidor JBoss com um servidor nativa web (Apache ou IIS) e mod_jk ou mod_proxy, você pode manter uma fachada web comum e implementar o carregamento aplicável e rotinas de roteamento em tempo de atualização EAR.

// Nicholas

Eu acho que você pode querer olhar em Primavera usando estrutura OSGi. http://www.springframework.org/osgi

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top