java grid load-balancing gridgain

¿Cuál es la mejor biblioteca para Java para grid/cluster-enable su aplicación?



load-balancing gridgain (12)

Esta es la capacidad de ejecutar su aplicación en un clúster de servidores con la intención de distribuir la carga y también proporcionar redundancia adicional.

He visto una presentación para GridGain y quedé muy impresionado con ella.

¿Conoces otros?


¿Has considerado Infinispan ? Es una plataforma de red de datos de código abierto, de JBoss.org. Para obtener más información, le recomiendo que lea esta (antigua) publicación de blog que anuncia el proyecto, junto con notas de blog más interesantes, incluida una sobre el uso de Infinispan con Hibernate y como un caché independiente . Incluso más recientemente, en la red de datos empresariales de Red Hat . Hay una guía rápida de "inicio" y una DZone RefCard también, incluso un video de YouTube :)


Creo que el resumen de @ cletus es bastante bueno. Quería mencionar que Terracotta proporciona mucho más que solo un caché distribuido en forma de mapa. Agrupa las primitivas de sincronización y montón de Java, convirtiendo un programa Java simultáneo en un programa Java distribuido. Puede hacer el almacenamiento en caché con él (incluido el uso de versiones distribuidas de bibliotecas de caché de código abierto) o un montón de otras cosas.

Para la distribución del trabajo, hay algunas librerías adicionales escritas encima de Terracota, en particular las tim-pipes (para mensajes) y tim-masterworker (para la distribución de estilo Master-Worker) son grandes abstracciones sobre Terracotta. Esta biblioteca está en Terracotta Forge:

Esta página recientemente agregada puede agregar un poco de información adicional en comparación con otras tecnologías de datos potenciales:


Creo que su pregunta ha sido interpretada de diferentes maneras, usted pregunta acerca de una biblioteca que puede usar para "activar en conjunto" su aplicación.

Si bien algunas de las bibliotecas nombradas anteriormente pueden ayudar a proporcionar funcionalidad de clúster específica, como el almacenamiento en caché distribuido, la forma más convencional de habilitar la administración de carga de trabajo es a través del uso de un contenedor J2EE.

Al configurar una instancia de contenedor agrupado, esto le permite utilizar las características de HA y la administración de la carga de trabajo, la agrupación es casi transparente a nivel de la aplicación. Digo casi porque cuando se escriben aplicaciones que van a agruparse, hay que tener cuidado con la administración del estado, por ejemplo, si implementó algún tipo de caché, necesitaría replicar el estado de la caché en cada máquina.

Un buen punto de partida sería descargar glassfish e intentar configurar una instancia de glassfish en clúster.

Espero que ayude.

Karl


Es posible que desee comprobar Hazelcast también. Hazelcast es una implementación transaccional, distribuida / particionada de código abierto de cola, tema, mapa, conjunto, lista, bloqueo y servicio del ejecutor. Es muy fácil trabajar con él; simplemente agrega hazelcast.jar en tu classpath y comienza a codificar. Casi no se requiere configuración.

Si está interesado en ejecutar sus tareas Ejecutables e Invocables de forma distribuida, consulte la documentación del Servicio de Ejecutor Distribuido en http://code.google.com/docreader/#p=hazelcast

Hazelcast se lanza bajo la licencia de Apache y el soporte de grado empresarial también está disponible.


Hay varios:

Ahora no he usado todos estos pero he usado o investigado la mayoría de ellos.

GridGain y GigaSpaces están más centrados en la computación grid que en el almacenamiento en caché y (imho) más adecuados para calcular cuadrículas que las cuadrículas de datos (consulte esta explicación de las cuadrículas de cálculo frente a las cuadrículas de datos ). Encuentro que GigaSpaces es una tecnología realmente interesante y tiene varias opciones de licencia, incluidas una versión gratuita y una versión completa gratuita para startups.

Coherence y Terracotta intentan tratar los caches como Maps , que es una abstracción bastante natural. He usado mucho Coherence y es un excelente producto de alto rendimiento pero no es barato. Terracota con la que estoy menos familiarizado. La documentación de Coherence me parece un poco escasa a veces, pero realmente es un producto poderoso.

OSCache Lo he usado principalmente como un medio para reducir el uso de memoria y la fragmentación en aplicaciones web Java, ya que tiene una etiqueta JSP bastante clara. Si alguna vez ha mirado los JSP compilados, verá que realizan muchas concatenaciones de cadenas. Esta etiqueta le permite almacenar efectivamente en caché los resultados de un segmento de código JSP y HTML en una sola Cadena, lo que puede mejorar enormemente el rendimiento en algunos casos.

EHCache es una solución de almacenamiento en caché fácil que también he usado en aplicaciones web. Nunca como un caché distribuido, pero puede hacer eso. Tiendo a verlo como una solución rápida y sucia, pero ese es quizás mi prejuicio.

memcached es particularmente preventivo en el mundo de PHP (y utilizado por sitios tales como Facebook). Es una solución realmente ligera y fácil, y tiene la ventaja de que no se ejecuta en el mismo proceso y, posiblemente, tendrá mejores opciones de interoperabilidad con otras pilas de tecnología, si esto es importante para usted.


Otro que puede agregar a la lista es Appistry CloudIQ . Es un entorno de computación distribuida. Está disponible como una descarga gratuita de hasta 5 máquinas. Incluye la distribución de la carga y la recuperación automática del trabajo en caso de falla del hardware, entre otras características.


Para la computación grid, también podría considerar Ice Grid o DataSynapse GridServer . Ambos proporcionan mecanismos muy efectivos para distribuir tareas y proporcionar recuperación de fallas y redundancia.


Si desea ir un poco más abajo, hay JGroups , que le proporciona los conceptos básicos de la agrupación de procesos Java.


También revisa Fura


Una respuesta muy tardía, pero depende en parte de la forma en que se configure su aplicación. Es posible que desee ejecutar un ejecutable de forma remota en lugar de utilizar uno de los enfoques anteriores.

Disculpas por la falta de enlaces, pero hasta que mis representantes no puedan publicar más de uno. Los productos en cursiva deberían ser fáciles de usar para Google.

Si desea ejecutar un ejecutable en una búsqueda paramétrica, por ejemplo, si desea girar el mismo ejecutable con un rango de opciones para cada instancia, entonces un enfoque por lotes tradicional funciona bien. Este es un enfoque de cómputo de alto rendimiento muy tradicional que todavía tiene un amplio uso: las infraestructuras adecuadas para manejar esto a escala empresarial son Platform LSF , DataSynapse GridServer , PBS o a medida que madura HPC Server de Windows . También es posible que desee echar un vistazo a productos de código abierto como Globus y Cóndor . Dependiendo de cuán grande sea su aplicación, también puede ver gLite , que se utiliza para proyectos científicos a gran escala como el LHC.

El enfoque tradicional HPC se beneficia al tener su código de aplicación aislado de los procesos que conforman su infraestructura de cómputo, pero puede tener un impacto en el rendimiento, mientras que otros pueden mostrar un rendimiento más rápido pero propenso a fugas de memoria y otros problemas para sistemas de larga duración.



JPPF también es agradable.