2009-08-06 7 views
5

Je construis un logiciel qui suit le scénario:Systèmes distribués, meilleur cadre?

J'ai de nombreux ordinateurs, et d'ajouter chacun d'eux à un cluster. Chaque ordinateur du cluster peut ajouter un fichier à une table distribuée (dictionnaire, hashmap, devrait être assez rapide).

J'ai maintenant un endroit où tout le monde peut voir quels fichiers le groupe/cluster contient. Maintenant, un ordinateur du groupe/cluster demande un fichier. Il peut accéder à toutes les informations sur le fichier de la table distribuée (sur quel ordinateur il peut trouver le fichier etc ...).

Par un certain mécanisme, il devrait obtenir le fichier du point B (ordinateur qui a le fichier) au point A (l'ordinateur qui a demandé le fichier).

Fondamentalement, il devrait faire la réplication de données. (Mais pour des fichiers très volumineux)

Alors vous vous demandez probablement maintenant, quel est ce quy demander, la voici:

La réplication des données doit être aussi rapide que possible. Quelle serait la meilleure approche? J'ai pensé à quelque chose comme les réseaux de flux.

Quel serait le meilleur cadre, à utiliser pour un logiciel suivant le scénario?

JE RECHERCHE UN CADRE JAVA :). (JE DOIS EXÉCUTER CROSS-PLATEFORME)

Merci!

+0

N'oubliez pas d'upvoter & marquer la question comme réponse si vous avez trouvé votre solution! –

Répondre

0
+0

Je vais jeter un meilleur coup d'oeil. C'est dans mes options. –

+0

Depuis Hazelcast a des caractéristiques de persistance comme "store()" c'est aussi une option: http://code.google.com/docreader/#p=hazelcast&s=hazelcast&t=hazelcast C'est très facile à utiliser! –

1

JXTA est le cadre peer-to-peer Java de Sun, et le plus probable d'utilisation ici.

Ou consultez Jini et sa capacité pour la location de services, la découverte dynamique et la communication client/serveur indépendante du protocole. En utilisant Jini vous pouvez publier chaque service avec des attributs particuliers (dans ce cas votre nom de fichier?), Ou peut-être l'utiliser avec Javaspaces (je ne suis pas sûr de la pertinence des espaces ici, cependant)

+0

Oui c'est peer to peer, mais je ne veux pas implémenter une structure de données distribuée. –

+0

Notez que vous avez le problème de votre machine de reporting de structure de données B a un fichier, mais que se passe-t-il lorsque la machine B tombe en panne? –

+0

J'ai trouvé un framework, il s'appelle JGroups. J'en ai entendu parler? –

4

Comme je suis sûr que vous J'ai découvert qu'il y a beaucoup de bibliothèques pour java qui vous permettent d'implémenter ce type de carte perturbée.

  • Hazelcast - nouveau sur le bloc, d'utiliser très simple et fournit implmentations des interfaces standard java comme ConcurrentMap
  • JGroups - vraiment juste bibliothèque pour la messagerie de groupe, mais comprend une implémentation DisturbutedHashMap
  • jBoss Cache - construit en plus de jGroups fournit un système de mise en cache perturbé beaucoup plus complète avec la persistance optionnelle et les transactions
  • Terracotta - Big et très populaire, commercialement pris en charge
  • Oracle Coherence - Le papa de tous, avec une étiquette de prix pour correspondre

Il y a plus (beaucoup plus), ma préférence personnelle au moment est Hazelcast il est incroyablement facile de commencer.Tous les frameworks de cache que j'ai listés (je pense) se basent sur le fait de pouvoir (au moins temporairement) pouvoir charger toute l'entrée en mémoire, cela peut être un problème si vous essayez de mettre le contenu de gros fichiers dans leur. Dans votre cas, j'utiliserais probablement la carte perturbée pour stocker les données de localisation, c'est-à-dire certaines données pour indiquer à un autre nœud où se trouve un fichier particalar, puis je vais directement à ce nœud en utilisant une méthode hors limite telle que HTTP.

0

Il y a quelques bonnes réponses ci-dessus pour hashmap distribué.

Pour copier réellement le fichier si possible, je préférerais ne rien copier et avoir juste une solution de stockage partagé. Si vous devez utiliser des disques distincts pour chaque ordinateur, alors quelque chose de simple comme la configuration d'un serveur FTP sur chaque ordinateur devrait fonctionner. Cela ne doit pas nécessairement être basé sur Java, mais si vous voulez une solution Java, quelque chose comme Apache MINA pourrait fonctionner.

Questions connexes