我正在尝试使用 Erlang 作为将所有组件粘合在一起的粘合剂来实现一个集群。我喜欢它创建一个完全连接的节点图的想法,但在在线阅读不同的文章后,似乎这不能很好地扩展(最多有 50 - 100 个节点)。 OTP 的开发者是否故意施加此限制?我确实知道您可以将节点设置为仅具有显式连接以及隐藏节点等。但是,默认的开箱即用设置似乎不太可扩展。
那么对于问题:
如果您有 5 个节点(A、B、C、D、E),它们都具有显式连接,例如 A-B-C-D-E。 Erlang/OTP 是否允许 A 直接与 E 对话,还是 A 必须从 B 通过 D 传递消息才能到达 E,这就是全连接图的原因?再说一遍,这是有道理的,但从我所看到的来看,它并不能很好地扩展。
如果要尝试建立一个可扩展且容错的系统,您有哪些选择?似乎,如果由于节点太多而无法创建完全连接的图,那么下一个最好的办法就是创建某种树。但是,这似乎不太容错,因为如果根节点或子节点的任何父节点死亡,您将丢失集群的很大一部分。
在研究主管和工作人员时,我看到的所有示例都将其应用于单个节点上的进程。它可以应用于节点集群来帮助实现容错吗?
节点可以属于多个集群吗?
感谢您的帮助,如果我错过了半新的网站或博客文章(大约 1 年前),我很乐意查看它们。但是,我已经在互联网上进行了很好的搜索。
是的,您可以将消息发送到集群中任何远程节点上的进程,例如,通过使用其进程标识符 (pid)。这称为位置透明性。是的,它的扩展性很好(参见 Riak、CouchDB、RabbitMQ 等)。
请注意,一个节点可以运行数十万个进程。 Erlang 已被证明具有很强的可扩展性,并且是为容错而构建的。还有其他方法可以建造更大的建筑,例如CloudI 的 SOA 方法(参见评论)。您还可以构建使用的集群隐藏节点 http://www.erlang.org/doc/reference_manual/distributed.html#id83017如果你真的really需要。
在节点级别,您将采取不同的方法,例如,构建相同的节点,这些节点在发生故障时很容易替换,并且工作由其余节点接管。看看 Riak 如何处理这个问题(看看riak_core
并查看博客文章Riak 核心简介 http://basho.com/blog/technical/2010/07/30/introducing-riak-core/).
节点可以离开和进入集群,但不能同时属于多个集群。连接的节点共享一个集群 cookie,用于识别连接的节点。您可以在虚拟机运行时设置 cookie(请参阅分布式Erlang http://www.erlang.org/doc/reference_manual/distributed.html).
Read http://learnyousomeerlang.com/ http://learnyousomeerlang.com/为了更大的利益。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)