hazelcast vs ehcache
(6)
A pesar de que Ehcache ha sido popular entre los sistemas Java, me parece menos flexible que otras soluciones de almacenamiento en caché. Jugué con Hazelcast y sí, hizo el trabajo, fue fácil correr, etc. y es más nuevo que Ehcache. Puedo decir que Ehcache tiene muchas más funciones que Hazelcast, es más maduro y tiene un gran respaldo detrás.
También hay varias otras soluciones de caché buenas, con todas las propiedades y soluciones diferentes, como Memcache, Membase (ahora CouchBase), Redis, AppFabric, e incluso varias soluciones NoSQL que proporcionan almacenes de valor clave con o sin persistencia. Todos tienen características diferentes en el sentido de que implementan el teorema de CAP o el teorema BASE junto con las transacciones.
Debería preocuparse más acerca de cuál tiene la funcionalidad que desea en su aplicación; nuevamente, debería considerar el teorema de CAP o el teorema BASE para su aplicación.
Esta test se realizó muy recientemente con Cassandra en la nube por Netflix. Llegaron a un test con unas 300 instancias. Cassandra no es un caché de memoria, pero su modelo de datos es como un caché, que consiste en pares de valores clave. También puedes usar Cassandra como memoria caché distribuida.
La pregunta es clara como se ve en el título, me agradecería escuchar sus ideas sobre adv./disadv. Diferencias entre ellos.
ACTUALIZACIÓN: He decidido usar Hazelcast debido a las ventajas como el mecanismo de almacenamiento en caché / bloqueo distribuido, así como la configuración extremadamente sencilla, mientras que la adaptación a su aplicación.
Hazelcast ha sido una pesadilla para la escala y la estabilidad sigue siendo un problema importante.
El cliente dedicado a las opciones de componentes de la red son
- La versión desordenada que no puede sobrevivir a la pérdida de nodo en cualquier lugar, negando el punto de las copias de seguridad (supercliente), o
- Una opción de cliente nativo increíblemente lenta que no permite ningún tipo de equilibrio de carga para procesar nodos en la cuadrícula.
Si cualquier host pudiera solicitar registros de esta cuadrícula de datos, sería un diseño dulce, pero estás atascado con esas dos opciones deslucidas para sacar algo de ello.
Además, los problemas múltiples con los grupos de subprocesos de la base de datos se bloquean en miembros individuales y no escriben nada en las bases de datos, lo que provoca la pérdida permanente de registros es un problema frecuente y, a menudo, tenemos que eliminar todo el proceso durante horas para actualizar cualquier JVM. El cerebro dividido también sigue siendo un problema, aunque en 1.9.6 parece haberse calmado un poco.
Reunirse para pasar a Ehcache y mejorar la capa de la base de datos en lugar de usar esto como una curita.
Hazelcast ha sido una pesadilla para mí. Pude hacerlo "funcionar" en un entorno de clúster de Websphere. Utilizo el término "trabajar" a la ligera. Primero, toda la documentación de Hazelcast está desactualizada y solo muestra ejemplos que usan llamadas a métodos en desuso. Intentar usar el nuevo código sin comentarios en los Javadocs y ningún ejemplo en la documentación es muy difícil. Además, el código contenedor de J2EE simplemente no funciona en este punto porque no admite transacciones XA en Websphere. Se arroja un error al llamar al código que sigue explícitamente a su único ejemplo de J2EE (parece que Milestone 3.0 está abordando esto). Tuve que olvidarme de unirme a Hazelcast en una transacción J2EE. Parece que Hazelcast está definitivamente orientado a un entorno de contenedor no EJB / Non-J2EE. Hacer llamadas a Hazelcast.getAllInstances () no retiene ninguna información sobre el estado de Hazelcast al cambiar de un bean Java empresarial a otro. Eso me obliga a crear una nueva instancia de Hazelcast solo para ejecutar llamadas que me dan acceso a mis datos. Eso hace que muchas instancias de Hazelcast se inicien en la misma JVM. Además, la recuperación de datos de Hazelcast no es rápida. Intenté recuperar datos usando Native Client y directamente como miembro del clúster. Guardé 51 listas, cada una con solo 625 objetos en Hazelcast. No podía realizar una consulta directamente en una lista y no quería almacenar un mapa solo para obtener acceso a esa función (las operaciones de SQL se pueden realizar en un mapa). Tomó aproximadamente medio segundo recuperar cada lista de 625 objetos porque Hazelcast serializa la lista completa y la envía por cable en lugar de simplemente darme el delta (lo que ha cambiado). Otra cosa, tuve que cambiar a una configuración TCPIP y listar explícitamente las direcciones IP de los servidores que quería que estuvieran en el clúster. La configuración de multidifusión por defecto no funcionó y, debido a las discusiones grupales en Google, otras personas también están experimentando esa dificultad. Para resumir; Eventualmente conseguí que 8 máquinas se comunicaran en un clúster a través de muchas horas de configuración programática tortuosa y de prueba y error (la documentación será de poca ayuda) pero cuando lo hice, todavía no tenía control sobre la cantidad de instancias y particiones que se creaban en cada una. JVM debido a la naturaleza semiacabada de Hazelcast para EJB / J2EE y fue MUY LENTO. Implementé un caso de uso real en la aplicación de seguro de desempleo en la que trabajo y el código fue mucho más rápido haciendo llamadas directas a la base de datos. Hubiera sido genial si Hazelcast funcionara como se anunciaba porque realmente no quería usar un servicio separado para implementar lo que estoy tratando de hacer. He usado MongoDB ampliamente, por lo que puedo omitir todo en la memoria caché y simplemente serializar mis objetos como documentos en un repositorio separado.
Hazelcast serializa todo cada vez que hay un nodo (estándar-uno), por lo que los datos que guardará en Hazelcast deben implementar la serialización.
Probamos ambos para una de las mayores plataformas de comercio electrónico y anuncios clasificados en línea. Comenzamos con ehcache / terracotta (matriz de servidores) porque es bien conocido, está respaldado por Terracotta y tiene un mayor apoyo comunitario que hazelcast.
Cuando lo conseguimos en el entorno de producción (distribuido, más allá de un clúster de nodos) las cosas cambiaron, nuestra arquitectura backend se volvió realmente costosa, así que decidimos darle una oportunidad a hazelcast.
Hazelcast es completamente simple, hace lo que dice y funciona realmente bien sin ningún tipo de sobrecarga de configuración.
Nuestra capa de almacenamiento en caché está encima de hazelcast durante más de un año, estamos muy satisfechos con ello.
Una de las ventajas de Ehcache es que está respaldado por una empresa (Terracotta) que realiza pruebas exhaustivas de rendimiento, conmutación por error y plataforma en un laboratorio de gran rendimiento. La terracota proporciona apoyo, indemnización, etc. Para muchas compañías, ese tipo de cosas es importante.
No he usado Hazelcast, pero he oído que es fácil de usar y que funciona. No he escuchado nada con respecto a la escalabilidad o el rendimiento de Hazelcast vs Terracotta / Ehcache, pero dada la cantidad de pruebas de escalabilidad y conmutación por error que realiza Terracotta, me cuesta imaginar que Hazelcast sea competitivo en un despliegue de producción. Pero supongo que funcionaría bien para usos más pequeños.
[Sesgo: Soy un ex empleado de Terracota.]