我一直在研究移动代理,想知道是否可以将正在运行的进程发送到 erlang 中的另一个节点。我知道可以向另一个节点上的进程发送消息。我知道可以在集群中的所有节点上加载模块。是否可以将可能在特定节点上处于某种状态的进程移动到另一个节点并恢复它的状态。也就是说,erlang 是否提供了强大的移动性?或者是否有可能在 erlang 中提供强大的移动性?
问问题
1819 次
1 回答
11
是的,这是可能的,但没有“将进程移动到节点”调用。但是,如果进程构建了迁移功能,您当然可以通过将进程的功能及其状态发送到另一个节点并在那里安排生成来实现。为了正确识别进程,您需要使用全局进程注册表或 gproc,因为进程会更改pid。
还有其他考虑因素:该进程可能正在使用一个 ETS 表,其数据不存在于另一个节点上,或者它可能在进程字典中存储了一些内容(想到来自 random 模块的状态)。
Erlang 的普遍共识是进程不会在机器之间移动。相反,如果节点死亡,要么安排接管节点之间的应用程序。或者用于系统的分发,因此数据已经分发到另一台机器。无论如何,在发生错误时使状态持久化的主要问题仍然存在,移动性与否 - 分发是解决持久性问题的好工具。
于 2011-02-27T20:54:29.477 回答