Обнаружение сервера удаленного актора Akka

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

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


person paradigmatic    schedule 10.06.2011    source источник


Ответы (3)


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

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

Для получения дополнительных сведений обратитесь к этому сообщение в блоге.

person Vasil Remeniuk    schedule 10.06.2011

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

http://jgroups.org/

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

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

person Nikolay Botev    schedule 11.06.2011
comment
Тоже хороший ответ. Я пробовал jgroups в прошлом и был доволен. - person paradigmatic; 28.06.2011

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

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

person Digitalex    schedule 10.06.2011