43 votes

Environnement singleton en cluster

Quelle est la meilleure stratégie pour refactoriser un objet Singleton à un environnement de cluster?

Nous utilisons Singleton pour mettre en cache certaines informations personnalisées à partir de la Base de données. Ses surtout en lecture seule, mais sera mise à jour lorsqu'un événement particulier se produit.

Maintenant notre application doit être déployée dans un environnement en Cluster. Par définition, chaque JVM va avoir sa propre instance du Singleton. Ainsi, le cache peut être out-of-sync entre la JVM lors de l'actualisation de l'événement se produit sur un seul nœud et son cache est actualisé.

Quelle est la meilleure façon de conserver le cache de la synchronisation?

Merci.

Edit: Le cache est principalement utilisé pour fournir une liste de saisie semi-automatique (raisons de performance) de l'INTERFACE utilisateur et de nous utiliser Websphere. De sorte que toute Websphere les conseils de bienvenue.

16voto

Chris Vest Points 5622

Remplacez votre cache singleton par un cache distribué.

JBoss Infinispan pourrait être l'un de ces caches, mais je suis certain qu'il existe d'autres technologies de caches et de grilles distribuées, y compris des technologies commerciales qui sont probablement plus matures à ce stade.

Pour les objets singleton en général, je ne suis pas sûr. Je pense que j'essayerais de ne pas avoir de singletons en premier lieu.

9voto

pjp Points 7012

Les approches les plus simples sont:

  1. Ajoutez un minuteur d'expiration à votre cache singleton afin que de temps en temps le cache soit purgé et que des appels ultérieurs récupèrent les données mises à jour de la source (par exemple, une base de données).

  2. Implémentez un mécanisme de notification pour le cache en utilisant quelque chose comme une rubrique / tibRV JMS. Obtenez chaque instance de cache pour s'abonner et réagir à tout message de changement diffusé sur ce sujet.

8voto

Rick Points 2597

Vous pouvez utiliser le DistributedMap intégré à WAS.

-Meule

4voto

monkey_p Points 1618

Ou quelque chose comme memcached

http://www.danga.com/memcached/

Qu'est-ce que memcached? memcached est un haute performance, mémoire distribuée objet système de mise en cache, generiques la nature, mais prévu pour une utilisation dans l'accélération des applications web dynamiques par soulager la charge de base de données.

Danga Interactif développé memcached pour améliorer la vitesse de LiveJournal.com, un site qui a été déjà 20 millions+ page dynamique vues par jour pour 1 million d'utilisateurs avec un tas de serveurs web et un tas de serveurs de base de données. memcached abandonné la charge de base de données à presque rien, rendement plus rapide temps de chargement de page pour les utilisateurs, une meilleure utilisation des ressources, accès rapide aux bases de données sur un memcache manquer.

1voto

skaffman Points 197885

Si possible, utilisez votre application prise en charge du serveur pour ce, si possible (certains l'ont, d'autres pas). Par exemple, nous utilisons JBoss est favorable à un "HA Singleton" qui est un service qui s'exécute uniquement sur le cluster nœud maître. Il n'est pas parfait (vous avez à gérer le cas où parfois c'est le cerveau pète), mais il est assez bon.

À défaut, vous pourriez être en mesure de concevoir quelque chose à l'aide JGroups, qui fournit avec le nœud de cluster auto-découverte et à la négociation, mais c'est non-trivial.

En dernier recours, vous pouvez utiliser le verrouillage de base de données pour gérer les clusters singletons, mais c'est sérieusement fragile. Pas recommandé.

Comme une alternative à un cluster singleton, vous pouvez utiliser un cache distribué à la place. Je recommande JBossCache (qui n'a pas besoin de JBoss application server pour exécuter) ou EhCache (qui fournit un mécanisme de distribution). Vous devrez reconfigurer votre cache de travailler de manière distribuée (il ne sera pas comme par magie juste), mais il va probablement être une meilleure solution qu'un cluster de singleton.

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