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

#java #scala #actor #akka

#java #scala #актер #akka

Вопрос:

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

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

Ответ №1:

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

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

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

Ответ №2:

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

http://jgroups.org/

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

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

Комментарии:

1. Тоже хороший ответ. Я пробовал jgroups в прошлом, и я был удовлетворен.

Ответ №3:

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

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