Открытие удаленного сервера 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 с использованием тех же классов.