Domanda

Vorrei distribuire un software di attori a distanza realizzato con Akka in un cluster. Il sistema è composto da diversi nodi lavoratori e un unico nodo master. Il problema è che non riesco a sapere in anticipo l'indirizzo IP dei nodi del cluster (ma so che sono tutti parte della stessa sottorete). Così, ho bisogno di un bel modo di scoprire l'indirizzo IP del tutto dopo l'avvio, per creare gli arbitri attore corrette in ogni nodo.

Sto cercando una soluzione ligtweight (ho solo bisogno per la configurazione iniziale) distribuito sotto una licenza di software libero.

È stato utile?

Soluzione

Qualche tempo fa ho creato un prototipo che è destinato a risolvere il vostro problema (sentitevi liberi di riutilizzare il codice e / o contribuire).

Qualche parola su come funziona. Inizia un attore remoto per ciascun registro attore (= nodo). RegistryActor detiene link a tutti gli altri registri in esecuzione in una configurazione distribuita. Quando un nuovo nodo viene aggiunto al sistema, ha bisogno di conoscere almeno un altro nodo (ActorRegistry) e notifica. ActorRegistry che consente a tutti gli altri nodi conoscono quello nuovo (quindi, qualsiasi RegistryActor ha collegamenti a tutti gli altri RegistryActor di), e avvia un processo di scambio di link ad attori - alla fine di esso, tutti i registri attore hanno legami con tutti gli attori ( locale o remoto) che funziona in un sistema.

Per ulteriori informazioni, si prega di fare riferimento questo blogpost .

Altri suggerimenti

Date un'occhiata a JGroups.

http://jgroups.org/

Si riunisce tutti i tuoi criteri -. È leggero, open source e molto maturo, prodotto stabile

È possibile configurare facilmente per la gestione dei gruppi automatici e di scoperta in base alle vostre esigenze - Supporta quasi qualsiasi configurazione di rete -. Si può utilizzare il multicast, file condiviso, o unicast per la scoperta di membro del gruppo

A meno che tutti i nodi condividono una certa conoscenza comune, penso che la soluzione avrebbe dovuto fare affidamento su IP broadcast. Trasmissione radiotelevisiva si intende l'invio di un pacchetto a tutti i nodi di rete su una sottorete, quindi se il vostro nodo master fa che, mentre tutti i nodi lavoratori ascoltano per esso, si dovrebbe essere in grado di connettersi a tutti senza conoscere gli indirizzi IP a priori.

Non ho codificato questo a Scala, ma qui è un esempio abbastanza leggibile di come messaggi broadcast in Java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html . Dovrebbe essere semplice per adattarlo a Scala usando le stesse classi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top