Pregunta

Nuestra aplicación actual se queda en una única JVM.

Ahora estamos separando la aplicación en los servicios lógicos separados, donde cada servicio se ejecuta en su propia máquina virtual Java.

La división se hace para permitir que un solo servicio a ser modificado y desplegado sin afectar a todo el sistema. Esto reduce la necesidad de control de calidad de todo el sistema -. Sólo tiene un control de calidad de la interacción con el servicio que se cambió

Para la comunicación entre el servicio se utiliza una combinación de descanso, un bus de sistema MQ, y vistas de bases de datos.

Lo que no me gusta de esto:

  • RESTO significa que tenemos que reunir datos a / desde XML
  • DB ve acoplar los sistemas de juntas, que vence a todo el concepto de servicios separados
  • complejidad
  • se añade bus MQ / sistema
  • No es inevitable cierta duplicación de código entre los servicios
  • Ha configurado n configuraciones de servidor JBoss, tenemos que hacer un número n de las implementaciones, un número n de secuencias de comandos creados, etc, etc.

¿Hay una mejor manera de estructurar una aplicación interna para permitir el desarrollo y despliegue modular permitiendo al mismo tiempo la aplicación se ejecute en una única máquina virtual Java (y la consecución de los beneficios asociados)?

¿Fue útil?

Solución

Estoy un poco confundido en cuanto a lo que realmente está pidiendo aquí. Si se divide a su candidatura en diferentes servicios que se ejecutan a través de la red, a continuación, los datos de clasificación tiene que ocurrir en algún lugar.

Una vez dicho esto, ¿ha investigado OSGi ? Se pueden implementar diferentes paquetes (básicamente, archivos jar con metadatos adicionales que define las interfaces) en el mismo servidor OSGi, y el servidor facilitará la comunicación entre estos paquetes de forma transparente, ya que todo está funcionando dentro de la misma JVM - es decir, llamar a métodos en los objetos en diferentes paquetes como lo haría normalmente.

Un servidor OSGi permitirá la descarga y actualizaciones de paquetes en tiempo de ejecución y las aplicaciones debe funcionar normalmente (si de una forma degradada) proporcionó el OSGi haz de ciclo de vida .

Otros consejos

Parece que su equipo tiene un proceso de control de calidad manual y el verdadero problema es la automatización de pruebas de regresión de modo que se puede implementar nuevas versiones de forma rápida y con confianza. Romper el código en servidores independientes es una solución para eso.

Si usted está dispuesto a reiniciar el servidor entonces un enfoque podría ser para compilar el código en archivos jar separados, y desplegar un módulo dejando caer en un nuevo frasco y volver a arrancar. Esto es en gran medida una cuestión de la estructuración de su base de código para que los malos dependencias no se introduzcan y las llamadas entre los frascos se realizan a través de interfaces que no cambian. (O, alternativamente, usar clases abstractas para que pueda añadir un nuevo método con una implementación por defecto.) Su sistema de construcción podría ayudar asegurándose de que los módulos desplegados por separado sólo pueden dependen de interfaces comunes y cualquier otra cosa es un error de compilación. Pero tenga en cuenta que el compilador no va a ayudarle a detectar incompatibilidades cuando se está intercambiando en tarros que usted no se compile contra, así que no estoy seguro de que esto realmente evita tener un buen proceso de control de calidad.

Si desea implementar el nuevo código sin necesidad de reiniciar la JVM continuación OSGi es la manera estándar de hacer eso. (Pero uno que sé muy poco.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top