Erlang 在内部使用什么算法或设计模式来保证跨多个节点的唯一 pid?还有 Erlang 使用什么算法或设计模式来保持所有节点之间的全局节点名称映射同步?
这个问题的目的是在分布式 C#.Net 应用程序中创建类似的行为。C#.Net 系统已经具有高性能、并行消息传递和任务调度算法,与 Erlang 非常相似,可在多核上进行并行处理。
现在的目标是扩展它以在不同机器上的多个节点之间发送和接收消息。
一种简单的解决方案是使其成为“客户端和服务器”,以便只有一个节点是“主节点”,以保持节点的唯一 PID 和全局名称。
但是,在所有节点之间复制数据是一种诱人的设计,这样每次都可以避免网络查找来检查命名节点的实际位置,因为它可能会故障转移到另一台机器。
如果将节点名称表的任何更改复制到像 Erlang 中的所有节点,那么对于传递的每条消息都会更有效率。
另外,如果“主”节点发生故障怎么办?因此,分布式、复制和同步的解决方案是更好的设计。
任何人都可以直接理解 Erlang 是如何在幕后做到这一点的吗?