2011-06-10 2 views
10

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

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

ответ

7

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

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

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

1

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

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

4

Посмотрите на jgroups.

http://jgroups.org/

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

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

+0

Хороший ответ тоже. Я пробовал jgroups в прошлом, и я был насыщен. – paradigmatic

Смежные вопросы