Pregunta

Me gustaría implementar un software de actores remoto hecho con Akka en un clúster. El sistema está compuesto por varios nodos de trabajadores y un solo nodo maestro. El problema es que no puedo saber de antemano la dirección IP de los nodos de clúster (pero sé que todos forman parte de la misma subred). Por lo tanto, necesito una buena manera de descubrir la dirección IP de todos después del inicio, para crear las referencias de actores correctas en cada nodo.

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

¿Fue útil?

Solución

Hace un tiempo creé un prototipo Eso pretende resolver su problema (no dude en reutilizar el código y/o contribuir).

Algunas palabras sobre cómo funciona. Comienza un actor remoto para cada registro de actores (= nodo). RegistrayActor contiene enlaces a todos los demás registros que se ejecutan en una configuración distribuida. Cuando se agrega un nuevo nodo al sistema, necesita saber al menos otro nodo (ActorRegistry) y notificarlo. ActorRegistry que deja que todos los demás nodos sepan sobre el nuevo (por lo tanto, cualquier registro activo tiene enlaces a todos los demás registros de activadores) e comienza un proceso de intercambio de enlaces a los actores; al final, todos los registros de actores tienen enlaces a todos los actores ( ya sea local o remoto) ejecutando en un sistema.

Para más detalles, consulte esto entrada en el blog.

Otros consejos

Echa un vistazo a JGroups.

http://jgroups.org/

Cumple con todos sus criterios: es ligero, de código abierto y producto muy maduro y estable.

Puede configurarlo fácilmente para la administración y el descubrimiento automático de grupos en función de sus requisitos (admite casi cualquier configuración de red, puede usar multidifusión, archivo compartido o unidifusión para el descubrimiento de miembros del grupo.

A menos que todos los nodos compartan algún conocimiento común, creo que su solución tendría que depender de la transmisión de IP. La transmisión se define como enviar un paquete a todos los nodos de red en una subred, por lo que si su nodo maestro lo hace mientras todos los nodos de trabajadores lo escuchan, debería poder conectarlos a 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. Debe ser sencillo adaptarlo a Scala utilizando las mismas clases.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top