Transfiero el código de cliente de Java a una arquitectura de servidor con un cliente lean.Múltiples JVM frente a tareas simultáneas
El servidor necesita ejecutar una instancia del código para cada cliente. El código es multiproceso y se ejecuta durante largos períodos de tiempo (semanas), pero solo tiene una interacción ocasional con el cliente. La cantidad de clientes será de miles. Cada cliente necesita ~ 20MB de Heap.
que tengo ahora dos opciones,
- iniciar una JVM independiente en el servidor para cada cliente
- modificar mi código para que todas las solicitudes y los cálculos se realizan en el espacio compartido para cada cliente (como en una web-application)
Puedo ver los pros y los contras de cada uno. Por varias JVM:
Pros:
- procesos son independientes, si se cuelga simplemente matarlo y reinicie. A todos los demás no les importará.
- recursos pueden ser limitados, de modo que un cliente no puede comer encima de todas las CPU/memoria
- fácilmente distribuidos en varias máquinas
Contras:
- la biblioteca completa de clases JRE se carga varias veces
- no es la forma de hacer las cosas de Java EE
- ¿Todos los clientes necesitarán hablar por un puerto diferente?
¿Hay alguna recomendación que recomiende?
¿Conoces algún buen libro de referencia/artículo sobre el tema?
¿Hay un marco que utiliza solo una JVM pero ejecuta varias copias de código como si fuera un espacio de proceso separado (con recursos limitados, etc.)?