Erlang集群

Sol*_*onS 17 cloud erlang distributed-computing cluster-computing

我正在尝试使用Erlang作为粘合剂来实现一个集群.我喜欢它创建一个完全连接的节点图的想法,但是在网上阅读不同的文章时,似乎这不能很好地扩展(最多有50到100个节点).OTP的开发人员是否故意强制实施此限制?我知道您可以将节点设置为仅具有显式连接以及具有隐藏节点等.但是,似乎默认的开箱即用设置不是非常可扩展.

那么问题:

  1. 如果您有5个节点(A,B,C,D,E),它们都具有明确的连接,例如ABCDE.Erlang/OTP是否允许A直接与E通信,或A是否必须将消息从B传递到D才能到达E,这就是完全连接图的原因?同样,它是有道理的,但它不能从我所见的很好地扩展.

  2. 如果要尝试使用可扩展且容错的系统,您有什么选择?好像,如果由于节点太多而无法创建完全连接的图形,那么下一个最好的方法就是创建某种树.但是,这似乎不是容错的,因为如果子节点的根节点或任何父节点死亡,您将丢失很大一部分集群.

  3. 在调查主管和工作人员时,我看到的所有示例都将此应用于单个节点上的进程.它可以应用于节点集群以帮助实现容错吗?

  4. 节点可以成为多个集群的一部分吗?

感谢您的帮助,如果有一个我最近错过的半新网站或博客帖子(大约1岁),我很乐意看看这些.但是,我已经很好地搜索了互联网.

Til*_*man 12

  1. 是的,您可以将消息发送到群集中任何远程节点上的进程,例如,使用其进程标识符(pid).这称为位置透明度.是的,它可以很好地扩展(参见Riak,CouchDB,RabbitMQ等).

  2. 请注意,一个节点可以运行数十万个进程.事实证明,Erlang具有很高的可扩展性,专为容错而打造.还有其他方法可以构建更大的,例如CloudI的SOA方法(请参阅注释).如果确实需要,您还可以构建使用隐藏节点的集群.

  3. 在节点级别,你会采取不同的方法,例如,建立一个很容易,如果他们失败,并且工作由其余节点接管更换相同的节点.看看Riak如何处理这个问题(查看riak_core并查看博客文章介绍Riak Core).

  4. 节点可以离开并进入群集,但不能同时成为多个群集的一部分.连接的节点共享一个群集cookie,用于标识连接的节点.您可以在VM运行时设置cookie(请参阅分布式Erlang).

阅读http://learnyousomeerlang.com/获得更大的好处.


I G*_*ERS 8

分发协议是关于提供稳健性,而不是可伸缩性.您要做的是将群集分组到较小的区域,然后使用连接,这些连接不是在Erlang中分发,而是在TCP会话中分发.您可以运行5组,每组10台机器.这意味着10台机器具有无缝的Pid分配:您可以在另一台机器上调用pid.但是分发给另一个群体意味着你无法像这样无缝地解决这个群体问题.

您通常需要在BGP中进行某种"路由反射".