2011-06-10 4 views
10

Je voudrais déployer un logiciel d'acteurs à distance fait avec akka sur un cluster. Le système est composé de plusieurs nœuds de travail et d'un seul nœud maître. Le problème est que je ne peux pas connaître à l'avance l'adresse IP des nœuds du cluster (mais je sais qu'ils font tous partie du même sous-réseau). Donc, j'ai besoin d'un bon moyen de découvrir l'adresse IP de tout le monde après le démarrage, pour créer les bonnes références d'acteur sur chaque nœud.Akka remote actor server discovery

Je suis à la recherche d'une solution de poids léger (dont j'ai juste besoin pour la configuration initiale) distribuée sous n'importe quelle licence de logiciel libre.

Répondre

7

Il ya quelque temps, j'ai créé un prototype qui est destiné à résoudre votre problème (n'hésitez pas à réutiliser le code et/ou contribuer).

Quelques mots sur comment ça marche. Il démarre un acteur distant pour chaque registre d'acteur (= noeud). RegistryActor contient des liens vers tous les autres registres exécutés dans une configuration distribuée. Lorsqu'un nouveau nœud est ajouté au système, il doit connaître au moins un autre nœud (ActorRegistry) et le notifier. ActorRegistry permet à tous les autres nœuds de connaître le nouveau (donc tout RegistryActor a des liens vers tous les autres RegistryActor), et lance un processus d'échange de liens avec les acteurs - à la fin, tous les registres des acteurs ont des liens avec tous les acteurs local ou distant) fonctionnant dans un système.

Pour plus de détails, veuillez vous référer à blogpost.

1

À moins que tous les nœuds partagent des connaissances communes, je pense que votre solution devrait dépendre de la diffusion IP. La diffusion est définie comme l'envoi d'un paquet à tous les nœuds du réseau sur un sous-réseau, donc si votre nœud maître le fait alors que tous les nœuds travailleurs l'écoutent, vous devriez pouvoir les connecter sans connaître les adresses IP a priori.

Je n'ai pas codé cela dans Scala, mais voici un exemple assez lisible de la façon de diffuser des messages dans Java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html. Il devrait être facile de l'adapter à Scala en utilisant les mêmes classes.

4

Jetez un oeil à jgroups.

http://jgroups.org/

Il répond à tous vos critères - il est léger, open source et très mature, produit stable. Vous pouvez facilement le configurer pour la gestion de groupe automatique et la découverte en fonction de vos besoins - il prend en charge presque toutes les configurations réseau - vous pouvez utiliser la multidiffusion, le partage de fichier ou la monodiffusion pour la découverte des membres du groupe.

+0

Bonne réponse aussi. J'ai essayé jgroups dans le passé et j'ai été satisfait. – paradigmatic