Запуск удаленных узлов Erlang - PullRequest
9 голосов
/ 02 июля 2010

Я хочу написать приложение master-slave на Erlang. Я думаю о следующих вещах, которые мне нужны от архитектуры:

  • рабы не должны умирать, когда мастер умирает, а скорее пытаться подключиться к нему, пока мастер не работает

  • мастер должен автоматически запускать удаленные узлы, если они не подключаются автоматически или не работают (возможно, поведение супервизора в OTP )

Есть ли OTP-ориентированное поведение для этого? Я знаю, что могу запускать удаленные узлы с slave:start_link(), и я могу контролировать узлы с erlang:monitor(), но я не знаю, как это можно включить в поведение gen_server.

Ответы [ 2 ]

1 голос
/ 10 января 2011

Если вы заинтересованы в изучении других реализаций, фреймворк Basho riak_core довольно неплохо подходит для децентрализованных распределенных приложений.

riak_core_node_watcher.erl имеет большую частьинтересный код наблюдения узла в нем.

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

1 голос
/ 03 января 2011

Я согласен с комментариями по поводу использования erlang: monitor_node и использования распределенных приложений.

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

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

Если вам нужно было использовать несколько виртуальных машин Erlang, вам следует тщательно обдумать, сколько из них вы используете, так как большое количество из них может вызвать проблемы с производительностью из-за подмены процессов ОС.Основное правило для достижения максимальной производительности - стремиться к тому, чтобы на каждое ядро ​​процессора приходилось не более одного процесса ОС (т.е. одной виртуальной машины Erlang).

...