Question

Je voudrais déployer un logiciel acteurs à distance fait avec akka sur un cluster. Le système est composé de plusieurs noeuds de travail et un seul noeud maître. Le problème est que je ne peux pas savoir à l'avance l'adresse IP des nœuds du cluster (mais je sais qu'ils font tous partie de la même sous-réseau). , J'ai besoin d'une belle façon de découvrir l'adresse IP de tout le monde après le démarrage, pour créer les refs acteur correct sur chaque nœud.

Je cherche une solution ligtweight (j'ai juste besoin pour la configuration initiale) distribué sous une licence de logiciel libre.

Était-ce utile?

La solution

Il y a quelque temps que je créé un prototype qui est destinée à résoudre votre problème (ne hésitez pas à réutiliser le code et / ou contribuer).

Quelques mots sur la façon dont fonctionne-t-il. Elle commence un acteur à distance pour chaque registre d'acteur (= noeud). RegistryActor détient des liens vers tous les autres registres en cours d'exécution dans une configuration distribuée. Lorsqu'un nouveau nœud est ajouté au système, il a besoin de savoir sur au moins un autre noeud (ActorRegistry) et en informe. ActorRegistry que laisse tous les autres noeuds connaissent le nouveau (donc, tout RegistryActor a des liens vers tous les autres RegistryActor de), et commence un processus d'échange des liens vers des acteurs - à la fin de celui-ci, tous les registres des acteurs ont des liens avec tous les acteurs ( soit local ou distant) en cours d'exécution dans un système.

Pour plus de détails, reportez-vous s'il vous plaît cette blogpost .

Autres conseils

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 automatique de groupe et la découverte en fonction de vos besoins - il prend en charge presque toutes les configurations de réseau -. Vous pouvez utiliser la multidiffusion, fichier partagé, ou unicast pour la découverte des membres du groupe

À moins que tous les nœuds partagent une certaine connaissance commune, je pense que votre solution devrait compter sur 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 fait que, bien que tous les nœuds de travailleurs écoutent, vous devriez pouvoir les connecter sans connaître les adresses IP a priori.

Je n'ai pas codé ce à Scala, mais voici un exemple assez lisible comment les messages de diffusion en java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html . Il devrait être facile de l'adapter à la Scala en utilisant les mêmes classes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top