Pergunta

Nossos atuais corridas de aplicativos em uma única JVM.

Estamos agora dividir o aplicativo em serviços lógicos separados, onde cada serviço é executado em sua própria JVM.

A divisão está sendo feito para permitir que um único serviço a ser modificado e implantado sem afetar todo o sistema. Isso reduz a necessidade de QA todo o sistema -. Apenas necessidade de QA a interação com o serviço que está sendo mudado

Para comunicação de serviço entre nós usamos uma combinação de descanso, um barramento de sistema MQ, e vistas de banco de dados.

O que eu não gosto sobre isso:

  • RESTO significa que temos de dados marechal de / para XML
  • DB vê par os sistemas em conjunto, que derrota o conceito de serviços separados
  • complexidade MQ / bus de sistema é adicionado
  • Há, inevitavelmente, alguma duplicação de código entre os serviços
  • Você configurou n configurações de servidor JBoss, nós temos que fazer n número de implantações, n número de configurar scripts, etc, etc.

Existe uma maneira melhor de estruturar um aplicativo interno para permitir o desenvolvimento e implantação modular, permitindo que o aplicativo seja executado em uma única JVM (e alcançar os benefícios associados)?

Foi útil?

Solução

Estou um pouco confuso quanto ao que você está realmente perguntando aqui. Se você dividir o seu aplicativo se em diferentes serviços em execução em toda a rede, em seguida, triagem de dados tem que ocorrer em algum lugar.

Dito isto, você já investigou OSGi ? Você pode implantar diferentes pacotes (basicamente, arquivos jar com metadados adicionais que define as interfaces) para o mesmo servidor OSGi, eo servidor irá facilitar a comunicação entre estes pacotes transparente, uma vez que tudo está sendo executado dentro do mesmo JVM - ou seja, você chamar métodos em objetos em pacotes diferentes, como você faria normalmente.

Um servidor OSGi permitirá descarga e atualizações de pacotes em tempo de execução e aplicações devem funcionar normalmente (se de uma forma degradada), desde que o pacote OSGi ciclo de vida estados são respeitados.

Outras dicas

Parece que a sua equipa tem um processo de QA manual e a verdadeira questão é automatizar testes de regressão para que você possa implantar novos lançamentos rapidamente e com confiança. Quebrando o código em servidores separados é uma solução para isso.

Se você está disposto a reiniciar o servidor, em seguida, uma abordagem poderia ser a de compilar o código em arquivos JAR separados, e implantar um módulo, largando em um novo frasco e reiniciar. Esta é em grande parte uma questão de estruturação sua base de código para que os maus dependências não entrar e as chamadas entre frascos são feitos através de interfaces que não mudam. (Ou alternativamente, use classes abstratas para que você possa adicionar um novo método com uma implementação padrão.) O seu sistema de compilação poderia ajudar, certificando-se de que os módulos implantados separadamente só pode depender de interfaces comuns e qualquer outra coisa é um erro de compilação. Mas nota que o seu compilador não vai ajudar a detectar incompatibilidades quando você está trocando em frascos que você não compilar contra, por isso não estou certo de que este realmente evita ter um bom processo de QA.

Se você deseja implantar novo código sem reiniciar o JVM então OSGI é a maneira padrão de fazer isso. (Mas um que eu sei pouco sobre.)

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