0

Erlang 在内部使用什么算法或设计模式来保证跨多个节点的唯一 pid?还有 Erlang 使用什么算法或设计模式来保持所有节点之间的全局节点名称映射同步?

这个问题的目的是在分布式 C#.Net 应用程序中创建类似的行为。C#.Net 系统已经具有高性能、并行消息传递和任务调度算法,与 Erlang 非常相似,可在多核上进行并行处理。

现在的目标是扩展它以在不同机器上的多个节点之间发送和接收消息。

一种简单的解决方案是使其成为“客户端和服务器”,以便只有一个节点是“主节点”,以保持节点的唯一 PID 和全局名称。

但是,在所有节点之间复制数据是一种诱人的设计,这样每次都可以避免网络查找来检查命名节点的实际位置,因为它可能会故障转移到另一台机器。

如果将节点名称表的任何更改复制到像 Erlang 中的所有节点,那么对于传递的每条消息都会更有效率。

另外,如果“主”节点发生故障怎么办?因此,分布式、复制和同步的解决方案是更好的设计。

任何人都可以直接理解 Erlang 是如何在幕后做到这一点的吗?

4

1 回答 1

0

正如评论中回答的那样,这里解释了如何保持 PID 的唯一性:有人可以解释 Erlang 中 Pid 的结构吗?(剧透:它实际上不是一个“全球”唯一的 id)。

关于命名进程的全局表:在分布式 Erlang 中,这是由模块管理global,它提供了一个全局名称注册工具。注册数据在节点之间复制,注册是原子的。

节点在分布式 Erlang 中是松散连接的。这意味着没有需要同步的集群的全局视图。

此外,Erlang 更多的是关于并发而不是并行。可以在这里找到对 Erlang 并发模型(以及与并行性的区别)的一个很好的解释。

于 2013-06-20T16:53:32.627 回答