Multi-tenancy JVMs

El concepto de multitenancy se refiere a las Arquitecturas Software en el que una única instancia de un Software es capaz de servir a múltiples organizaciones cliente (Tenants).

El multitenancy contrasta con Arquitecturas multi-instancia donde hay instancias separadas para cada organización cliente mientras que en arquitecturas multitenants se particiona virtualmente sus datos y configuración y cada aplicación cliente trabaja con una instancia virtual customizada.

Es un concepto especialmente importante cuando hablamos de Cloud y de SaaS.

Si relacionamos el concepto multitenancy con el de JVM llegamos a las JVMs multitenancy.

En los últimos años en el mundo Java se han realizado algunas aproximaciones a este concepto, que permitían compartir JVM entre diferentes aplicaciones, lo que consigue en esencia reducción de memoria y tiempo de procesador.

Hay varios proyectos que se quedaron en la cuneta como:

· Java Desktop Engine: http://www.beanizer.org/site/index.php/en/Software/Java-Desktop-Engine-ver-1.0.html

· Nailgun: http://www.martiansoftware.com/nailgun/

El primer proyecto interesante (aunque no usable) es Echidna que permitía correr diferentes procesos dentro de una misma JVM de forma sencilla aunque tenía/tiene grandes limitaciones.

Un proyecto mucho más reciente, interesante y usable es Waratek, del que ya hablamos hace tiempo., y sus productos asociados como ElastiCat que convierte el contenedor Tomcat en una solución multitenant donde las aplicaciones están independizadas y si se cae una no se afecta al resto.

A la espera de ver el soporte multitenant de Java 8 la beta de IBM Java 8 ya lo soporta, para lanzarlo basta usar el parámetro –Xmt:

Que funciona:

También soporta controlar el uso de recursos de cada tenant a nivel de

· Tiempo de procesador

· Tamaño Heap

· Threads

· File I/O

· Socket I/O:

Leer más