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

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

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

Ответ 1

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

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

Подробнее см. blogpost.

Ответ 2

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

http://jgroups.org/

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

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

Ответ 3

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

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