63 votes

hazelcast vs ehcache

La question est claire, comme vous le voyez dans le titre, je serais ravi d’entendre vos idées sur adv./disadv. différences entre eux.

MISE À JOUR: J'ai décidé d'utiliser Hazelcast en raison de ses avantages, tels que le mécanisme de mise en cache / verrouillage distribué, ainsi que de la configuration extrêmement simple tout en l'adaptant à votre application.

93voto

Berkay Points 662

nous avons essayé les deux pour l'une des plus grandes petites annonces en ligne et e-commerce plate-forme.Nous avons commencé avec ehcache/terre cuite(tableau de serveur) car c'est bien connu, soutenu par terre Cuite et de plus en plus le soutien de la communauté de hazelcast..mais quand nous arrivons sur l'environnement de production(distribué,au-delà d'un nœud de cluster), les choses ont changé, notre backend architecture est très cher, donc nous avons décidé de donner hazelcast une chance.

Hazelcast est mort simple, il fait ce qu'il dit et effectue vraiment bien sans aucune configuration de frais généraux.

Notre couche de mise en cache sur le haut de hazelcast depuis plus d'un an, nous sommes très heureux avec elle.

19voto

DarthVader Points 10955

Même si Ehcache a été populaire parmi les systèmes Java, je le trouve moins souple que d'autres solutions de mise en cache. J'ai joué un peu avec Hazelcast et oui il a fait le travail, il était facile de le faire fonctionner, etc, et il est plus récent que Ehcache. Je peux dire que Ehcache a beaucoup plus de fonctionnalités que Hazelcast, est plus mature, et a grand soutien derrière elle.

Il y a plusieurs autres bonnes cache de solutions, avec toutes les différentes propriétés et des solutions telles que la bonne vieille Memcache, Membase (maintenant CouchBase), Redis, AppFabric, même plusieurs solutions NoSQL qui fournit la valeur de la clé de magasins avec ou sans persistance. Ils ont tous des caractéristiques différentes, dans le sens ou ils mettent en œuvre le théorème CAP, ou de la BASE du théorème avec les transactions.

Vous devriez être plus préoccupés, qui sont les fonctionnalités que vous voulez dans votre application, encore une fois, vous devriez considérer le théorème CAP ou de la BASE de théorème pour votre application.

Ce test a été fait très récemment avec Cassandra sur le cloud par Netflix. Ils ont atteint à millions écrit par seconde avec environ 300 cas. Cassandra n'est pas une mémoire cache, mais vous le modèle de données est comme un cache, qui est composé de paires clé-valeur. Vous pouvez ainsi utiliser Cassandra distribuée de la mémoire cache.

12voto

james Points 121

Hazelcast a été un cauchemar à l'échelle et de la stabilité est encore un problème majeur.

Le client dédié à la grille des choix de composantes sont

  1. Le désordre version ne peux pas survivre nœud de la perte de n'importe où, en niant le point de sauvegardes (superclient), ou
  2. Un incroyablement lent native client option qui n'autorise pas pour n'importe quel type d'équilibrage de la charge pour le traitement des nœuds de la grille.

Si un hôte peut demander des documents à partir de cette grille de données, il serait d'un design doux, mais vous êtes coincé avec ces deux terne option pour obtenir quelque chose hors de lui.

Aussi plusieurs problèmes avec la base de données des pools de threads de verrouillage sur les membres individuels et de ne pas écrire n'importe quoi pour les bases de données, causant des dossiers permanents de la perte est un problème fréquent et souvent, nous avons à prendre la chose entière vers le bas pendant des heures pour actualiser tout de la JVM. Split-brain est également toujours un problème, même si, dans 1.9.6 il semble avoir calmé un peu.

De ralliement pour passer à Ehcache et l'amélioration de la couche de base de données au lieu d'utiliser cela comme un band-aid.

7voto

user1425335 Points 21

Hazelcast sérialise tout chaque fois qu'il y a un nœud (un standard), donc les données que vous sauvegarderez dans Hazelcast doivent implémenter la sérialisation.

http://open.bekk.no/efficient-java-serialization/

6voto

Dean Peterson Points 126

Hazelcast a été un cauchemar pour moi. J'ai été capable de le faire "travailler" dans un cluster environnement Websphere. J'utilise le terme "travail" à la légère. Tout d'abord, tous Hazelcast la documentation est pas à jour et ne montre que des exemples d'utilisation déconseillée appels de méthode. Essayez d'utiliser le nouveau code sans commentaires dans la Javadoc et pas d'exemples dans la documentation est très dur. Aussi, le conteneur J2EE code ne fonctionne tout simplement pas à ce point, car il ne prend pas en charge les transactions XA dans Websphere. Une erreur est renvoyée de l'appel de code qui suit leur seul J2EE exemple explicitement(il ne ressemble Étape 3.0 aborde cette). J'ai dû oublier de joindre Hazelcast à J2EE transaction. Il semble Hazelcast est définitivement orienté vers une non EJB/Non-conteneur J2EE environnement. Faire des appels à l'Hazelcast.getAllInstances() ne parvient pas à conserver toutes les informations au sujet de Hazelcast de l'état lors du passage d'une entreprise java bean à l'autre. Qui m'oblige à créer un nouveau Hazelcast exemple, juste pour lancer des appels qui me donnent accès à mes données. Qui provoque de nombreux Hazelcast Instances de démarrer sur la même JVM. En outre,l'extraction de données à partir de Hazelcast n'est pas rapide. J'ai essayé de récupérer les données en utilisant à la fois le Native Client et directement en tant que membre du cluster. J'ai stocké 51 listes, chacune contenant seulement 625 objets dans Hazelcast. Je ne pouvais pas exécuter une requête directement sur une liste et ne souhaitez pas stocker une carte juste pour obtenir l'accès à cette fonctionnalité (SQL opérations peuvent être effectuées sur une carte). Il a fallu environ une demi-seconde pour récupérer chaque liste de 625 objets, car Hazelcast Sérialise l'ensemble de la liste et l'envoie sur le fil plutôt que de simplement me donner le delta (ce qui a changé). Une autre chose, j'ai dû passer à une configuration TCPIP et explicitement la liste des adresses ip des serveurs, j'ai voulu être dans le cluster. La valeur par défaut configuration de la Multidiffusion n'a pas de travail et des discussions de groupe, de google, d'autres personnes connaissent et qui ont de la difficulté. Pour résumer, je n'ai finalement obtenu 8 machines à communiquer dans un cluster grâce à de nombreuses heures de tortueux programmatique de configuration et d'essai et d'erreur (la documentation sera de peu d'aide) mais quand je l'ai fait, j'ai toujours pas eu de contrôle sur le nombre d'instances et de partitions sur chaque JVM en raison de la demi-fini la nature de Hazelcast pour EJB/J2EE et il était TRÈS LENT. J'ai mis en place un véritable cas d'utilisation de l'assurance chômage application que je travail et que le code a été beaucoup plus rapide de faire directement des appels à la base de données. Il aurait été cool si Hazelcast fonctionné comme annoncé, car je n'ai vraiment pas envie d'utiliser un service distinct à mettre en œuvre ce que je suis en train de faire. J'ai utilisé MongoDB largement afin que je puisse sauter le tout dans la mémoire cache et juste sérialiser mes objets comme des documents dans un autre référentiel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X