Обнаружение удаленного актера Akka - PullRequest
10 голосов
/ 10 июня 2011

Я хотел бы развернуть программное обеспечение для удаленных актеров, созданное с помощью akka, в кластере. Система состоит из нескольких рабочих узлов и одного главного узла. Проблема в том, что я не могу заранее знать IP-адрес узлов кластера (но я знаю, что они все являются частью одной подсети). Итак, мне нужен хороший способ узнать IP-адрес каждого после запуска, чтобы создать правильные ссылки на актеров на каждом узле.

Я ищу легковесное решение (оно мне просто нужно для начальной настройки), распространяемое по любой лицензии бесплатного программного обеспечения.

Ответы [ 3 ]

7 голосов
/ 10 июня 2011

Некоторое время назад я создал прототип , предназначенный для решения вашей проблемы (не стесняйтесь повторно использовать код и / или внести свой вклад).

Несколько слово том, как это работает.Запускает удаленного актера для каждого реестра акторов (= узел).RegistryActor содержит ссылки на все остальные реестры, работающие в распределенной установке.Когда новый узел добавляется в систему, он должен знать по крайней мере об одном другом узле (ActorRegistry) и уведомлять его.ActorRegistry затем сообщает всем новым узлам о новом (таким образом, любой RegistryActor имеет ссылки на все остальные RegistryActor) и запускает процесс обмена ссылками на акторов - в конце все реестры актеров имеют ссылки на всех актеров (или локальный или удаленный), работающий в системе.

Для получения более подробной информации, пожалуйста, обратитесь к этому blogpost .

4 голосов
/ 12 июня 2011

Взгляните на jgroups.

http://jgroups.org/

Он соответствует всем вашим критериям - это легкий, открытый исходный код и очень зрелый, стабильный продукт.

Вы можете легко настроить его для автоматического управления и обнаружения групп на основе ваших требований - он поддерживает практически любую конфигурацию сети - вы можете использовать многоадресную рассылку, общий файл или одноадресную рассылку для обнаружения членов группы.

1 голос
/ 10 июня 2011

Если все узлы не обладают общими знаниями, я думаю, что ваше решение должно полагаться на широковещательную рассылку IP. Вещание определяется как отправка пакета всем сетевым узлам в подсети, поэтому, если ваш главный узел делает это, пока все рабочие узлы его прослушивают, вы сможете подключить их все, не зная IP-адресов априори.

Я не кодировал это в Scala, но вот довольно читаемый пример того, как транслировать сообщения в Java: http://download.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html. Должно быть легко адаптировать его к Scala, используя те же классы.

...