2010-12-14 67 views
1

Je suis en train d'étudier la possibilité de distribuer une structure de données sur plusieurs machines. Je voudrais qu'il s'exécute dans un processus sur chaque machine, et en utilisant (Multicast?) Répliquer une copie de la structure de données complète sur toutes les machines.Structure de données distribuée sur plusieurs machines avec multidiffusion

Quelqu'un at-il une expérience dans ce domaine qui pourrait me diriger dans la bonne direction?

+0

De quelle taille parle-t-on? –

+0

pas très grand, aurait seulement comme 5-10 objets à tout moment donné. –

Répondre

0

Le verrouillage distribué est difficile - et vous pourriez avoir besoin de verrouiller, sauf si vous êtes en lecture seule. Je vous suggère de jeter un oeil à un cadre de mise en cache distribué comme Microsoft's Velocity (qui peut être renommé dans le cadre d'Azure maintenant), ou le libre, open source et très bon memcached.

Il existe d'autres options payantes, notamment GemFire et Coherence. Je donnerais un coup de pouce à memcache, ça marche plutôt bien.

+0

Le seul problème avec ceux-ci (j'ai seulement utilisé memcached) est qu'ils Shard les données sur chaque serveur. Ils ne gardent pas une copie complète. Donc, si un serveur tombe en panne ... ce fragment est perdu. –

+0

Vous pouvez prendre soin de cela dans votre application, mais a convenu que c'est un oubli et un travail supplémentaire. Avez-vous vu http://repcached.sourceforge.net/? –

+1

En outre, Gemfire et Coherence abordent explicitement cette question, et la solution de Microsoft (maintenant AppFabric) semble avoir aussi une option de haute disponibilité qui pourrait répondre à vos besoins (http://msdn.microsoft.com/en-us/library/ee790974. aspx) –

0

Vous pouvez écrire vos données dans une base de données centrale. Ensuite, chaque instance peut y accéder. Si vous voulez modifier les données d'une instance, vous devez implémenter un mécanisme de verrouillage des données dans la base de données. Est-ce de l'aide?

+0

Impossible d'utiliser une base de données. Je veux que ceci fonctionne en mémoire sur toutes les machines ... –

0

Publiez la structure via ØMQ en utilisant des sockets PUB/SUB et vous pourrez ensuite basculer entre la multidiffusion TCP ou IP en fonction de vos besoins et de la qualité du réseau.

Si votre structure de données est suffisamment organisée, vous devriez également être en mesure d'envoyer des mises à jour à la structure sans trop de problème.

0

Vous pouvez également regarder Hazelcast qui est une solution basée sur Java.

Voici un lien direct (1) qui parle de certains des internes.

(1) http://www.hazelcast.com/documentation.jsp#Internals

Et il y a déjà une suggestion d'utiliser (repcached) memcached qui devrait être facile à utiliser aussi bien.

0

Pour répondre à vos questions, vous devriez probablement en apprendre davantage sur state machine replication, puis chercher des implémentations de synchronisation virtuelle ou Paxos pour votre plate-forme, à utiliser comme un bloc de construction. D'un point de vue pragmatique, je conseillerais d'envisager un service de coordination tel que ZooKeeper, qui vous épargnerait beaucoup de problèmes.