Node.js vs Java EE

No he podido resistirme a comentar este post de Marc Fasel en DZone en la que se compara el rendimiento de Node.js frente a JavaEE

La prueba consiste en leer un dato JSON de CouchDB y devolverlo, en el caso de Node.js

Y en el caso de Java tenemos:

Más allá de que este Servlet parece realmente creado por un programador Node.js (ni el init han usado :)) la realidad es que según comenta Marc:

“The Java servlet was run on an Apache Tomcat version 7.0.21, default configuration running on Java 1.6. The database driver was CouchDB4J version 0.30. The driver has no caching options available, so no configuration was done.”

Lo que implica que se está arrancando el Tomcat con un conjunto de Servicios (JSPs, Consola Web, JMX,…) que están consumiendo recursos y tiempo de proceso. En mi opinión para que la prueba fuese más veraz en lugar de un Tomcat podrían haber elegido un Jetty arrancado con sólo el Servicio de Servlets.

En cualquier caso ahí están los datos :):

En Java:

En Nojde.js:

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

The Second Coming of Java: A Relic Returns to Rule Web

Un artículo imprescindible especialmente a los que ya llevamos años con Java, que sin duda debemos estar agradecidos a las grandes redes sociales por el resurgir de Java y su JVM (aunque haya mucho Scala también 🙂 )

The Second Coming of Java: A Relic Returns to Rule Web