2011-06-10 9 views
10

Vorrei distribuire un software per gli attori remoti realizzato con akka su un cluster. Il sistema è composto da diversi nodi worker e un singolo nodo master. Il problema è che non posso sapere in anticipo l'indirizzo IP dei nodi del cluster (ma so che fanno tutti parte della stessa sottorete). Quindi, ho bisogno di un bel modo per scoprire l'indirizzo IP di tutti dopo l'avvio, per creare i refs degli attori corretti su ciascun nodo.Rilevamento server Remote Attack Akka

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

risposta

7

Un po 'di tempo fa ho creato un prototype destinato a risolvere il tuo problema (sentiti libero di riutilizzare il codice e/o contribuire).

Alcune parole su come funziona. Avvia un attore remoto per ciascun registro degli attori (= nodo). RegistryActor contiene collegamenti a tutti gli altri registri in esecuzione in una configurazione distribuita. Quando un nuovo nodo viene aggiunto al sistema, è necessario conoscere almeno un altro nodo (ActorRegistry) e notificarlo. ActorRegistry di consente a tutti gli altri nodi di sapere su quello nuovo (quindi, qualsiasi RegistryActor ha collegamenti a tutti gli altri RegistryActor), e avvia un processo di scambio di link con gli attori - alla fine, tutti i registri degli attori hanno link a tutti gli attori (locale o remoto) in esecuzione in un sistema.

Per ulteriori dettagli, fare riferimento a questo blogpost.

1

A meno che tutti i nodi non condividano una conoscenza comune, penso che la vostra soluzione dovrebbe basarsi sulla trasmissione IP. Il broadcasting è definito come l'invio di un pacchetto a tutti i nodi di rete su una sottorete, quindi se il tuo nodo principale lo fa mentre tutti i nodi worker lo ascoltano, dovresti essere in grado di connetterli tutti senza conoscere a priori gli indirizzi IP.

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

4

Dai un'occhiata a jgroups.

http://jgroups.org/

soddisfa tutti i criteri - è leggero, open source e molto maturo, prodotto stabile.

È possibile configurarlo facilmente per la gestione e l'individuazione automatica dei gruppi in base alle proprie esigenze: supporta quasi tutte le configurazioni di rete: è possibile utilizzare file multicast, condivisi o unicast per l'individuazione dei membri del gruppo.

+0

Buona risposta anche. Ho provato jgroup in passato e sono stato soddisfatto. – paradigmatic