Можно ли в Erlang отправить запущенный процесс на другой узел?

Я изучал мобильные агенты, и мне было интересно, можно ли отправить запущенный процесс на другой узел в erlang. Я знаю, что можно отправить процессу на другом узле сообщение. Я знаю, что можно загрузить модуль на все узлы кластера. Можно ли переместить процесс, который может находиться в каком-то состоянии на определенном узле, на другой узел и возобновить его состояние. То есть обеспечивает ли erlang сильную мобильность? Или можно ли в эрланге обеспечить сильную мобильность?


person Matthew Sowders    schedule 27.02.2011    source источник


Ответы (1)


Да, это возможно, но нет вызова «Переместить процесс в узел». Однако, если процесс построен с возможностью миграции, вы, безусловно, можете сделать это, отправив функцию процесса и его состояние на другую ноду и организовав там спавн. Чтобы правильно определить идентификатор процесса, вам нужно будет использовать либо глобальный реестр процессов, либо gproc, так как процесс изменит pid.

Есть и другие соображения: процесс может использовать таблицу ETS, данные которой отсутствуют на другом узле, или он может хранить данные в словаре процесса (на ум приходит состояние из случайного модуля).


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

person I GIVE CRAP ANSWERS    schedule 27.02.2011