如何分发 Erlang 进程(主管行为)?

Posted

技术标签:

【中文标题】如何分发 Erlang 进程(主管行为)?【英文标题】:How to distribute Erlang processes (supervisor behaviour)? 【发布时间】:2014-05-19 17:53:54 【问题描述】:

我有一个运行主管行为的 Erlang 应用程序。现在我想将它分布在不同的节点上,这意味着受监督的进程应该在不同的计算机上运行。

虽然我阅读了 OTP 文档,但我还没有掌握如何配置我的应用来执行此操作。

目前,.app 文件如下所示:

application, my_application,
[description, "My Description",
 vsn, "1",
 modules, [my_application, my_supervisor, supervised_process, my_monitor],
 registered, [my_supervisor],
 applications, [kernel, stdlib],
 mod, my_application,[],
 env, [file, "/usr/local/log"]
].

如果我有两台计算机运行名为 Erlang 的 VM,如何配置应用程序以在两台计算机上运行一些受监督的进程?

【问题讨论】:

【参考方案1】:

一旦每个 Erlang VM 使用相同的 Erlang cookie 在同一个内部网络上运行,您就可以使用 net_adm 模块检查另一个节点是否存在,并使用 rpc 模块在它们之间进行通信。

这是一个检查其他节点是否正在响应并向其发送同步消息的示例:

 Remote = app2@localhost,
 pong = net_adm:ping(Remote),
 ok = rpc:call(Remote, supervised_process, do_something, []).

据我所知,您不能让一个节点上的主管监督另一个节点上的进程。您只能通过消息控制其他节点。

【讨论】:

您绝对可以监控/链接其他节点上的进程。考虑到了解网络连接中真正发生的事情的挑战,这是否是一个明智的想法是一个单独的问题。 哇,我不知道。我想我应该查看 spawn 和 monitor 的文档。 macintux:但我想我不能依靠虚拟机透明地做到这一点,只需配置远程节点。我必须访问代码中的配置,对吧? 实际上在使用 OTP 主管时,是主管进程产生了受监督的进程。因此,这不是创建链接的可能性问题,而是主管在其他节点上启动和重新启动进程的问题。建议阅读mailing list 中的细线。

以上是关于如何分发 Erlang 进程(主管行为)?的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 主管进程

OTP 主管可以监控远程节点上的进程吗?

我怎么知道这是由 erlang 中的主管重新启动我的进程的最后一个周期

Erlang 语言中的进程与并发

分发一个 Erlang 聊天系统

Erlang:supervisor(3),添加子进程