2011-06-10 13 views
10

Me gustaría implementar un software de actores remotos hecho con akka en un clúster. El sistema está compuesto por varios nodos de trabajador y un único nodo maestro. El problema es que no puedo saber de antemano la dirección IP de los nodos del clúster (pero sé que todos son parte de la misma subred). Entonces, necesito una forma agradable de descubrir la dirección IP de todos después del inicio, para crear las referencias de actor correctas en cada nodo.Descubrimiento de servidor de actor remoto Akka

Estoy buscando una solución ligera (solo la necesito para la configuración inicial) distribuida bajo cualquier licencia de software libre.

Respuesta

7

Hace un tiempo creé un prototype que está destinado a resolver su problema (no dude en volver a utilizar el código y/o contribuir).

Algunas palabras sobre cómo funciona. Comienza un actor remoto para cada registro de actor (= nodo). RegistryActor tiene enlaces a todos los demás registros que se ejecutan en una configuración distribuida. Cuando se agrega un nuevo nodo al sistema, necesita conocer al menos otro nodo (ActorRegistry) y notificarlo. ActorRegistry que permite que todos los otros nodos conozcan el nuevo (por lo tanto, cualquier RegistryActor tiene enlaces a todos los otros RegistryActor), y comienza un proceso de intercambio de enlaces a actores. Al final, todos los registros de actores tienen enlaces a todos los actores (ya sea local o remoto) ejecutándose en un sistema.

Para obtener más información, consulte este blogpost.

1

A menos que todos los nodos compartan algunos conocimientos comunes, creo que su solución debería basarse en la transmisión IP. La radiodifusión se define como enviar un paquete a todos los nodos de red en una subred, por lo que si su nodo maestro hace eso mientras todos los nodos de trabajador lo escuchan, debe poder conectarlos todos sin conocer las direcciones IP a priori.

No he codificado esto en Scala, pero aquí hay un ejemplo bastante legible de cómo transmitir mensajes en java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html. Debería ser sencillo adaptarlo a Scala utilizando las mismas clases.

4

Eche un vistazo a jgroups.

http://jgroups.org/

cumple con todos los criterios - que es ligero, de código abierto y muy maduro producto, estable.

Puede configurarlo fácilmente para la administración y descubrimiento automático de grupos según sus requisitos; admite casi cualquier configuración de red; puede usar multidifusión, archivos compartidos o unicast para la detección de miembros de grupos.

+0

Buena respuesta también. Intenté jgroups en el pasado y me sentí satisfecho. – paradigmatic

Cuestiones relacionadas