二郎集群(Erlang clusters)

2019-08-02 06:44发布

我试图实现使用Erlang的作为保持其结合在一起的胶水集群。 我喜欢它创建节点的全连通图的想法,但在网上阅读不同的文章,就好像这不很好地扩展(具有50个最大值 - 100个节点)。 难道OTP的开发商征收的目的这个限制? 我不知道,你可以设置节点有明确的连接只以及有隐藏节点,等等。但是,它好像默认出的现成的设置是不是很可扩展性。

因此,对这些问题:

  1. 如果你有5个节点(A,B,C,d,E),所有有这样ABCDE明确的连接。 难道二郎/ OTP允许一个直接对话E或做了必须通过d的B传递消息去E,因而这对完全连通图的原因是什么? 再次,它是有道理的,但它不会从我所看到的缩放。

  2. 如果一个人试图去一个可扩展和容错系统,你有什么选择? 它好像,如果你不能创建一个完全连通图,因为你有太多的节点,未来最好的事情是创造某种形式的树。 不过,这似乎并不十分容错,因为如果根或子节点的任何父母死了,你会失去你的集群的显著部分。

  3. 在寻找到监事和工人,所有我见过的例子应用此工艺在单个节点上。 难道被应用到节点的集群,以帮助实现容错?

  4. 节点可以是几个集群的一部分吗?

感谢您的帮助,如果有一个半最近的网站或博客帖子,我已经错过了(大约1岁),我很乐意看看那些。 但是,我已经冲刷互联网相当不错。

Answer 1:

  1. 是的,可以在群集中的消息发送到过程中的任何远程节点上,例如,通过使用其进程标识符(PID)。 这被称为位置透明性。 是的,它很好地进行扩展(见了Riak,CouchDB的,RabbitMQ的,等等)。

  2. 请注意,一个节点可以运行数十万的过程。 二郎神已被证明是非常可扩展性和建容错能力。 还有其它的方法来构建CloudI的更大,如SOA的方法(见注释)。 你也可以构建使用集群隐藏节点 ,如果你真的需要。

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

  4. 节点可以离开,进入集群,但不能在同一时间多个集群的一部分。 连接节点共享其被用于识别所连接的节点一个簇的cookie。 您可以在虚拟机运行时设置Cookie(见分布式二郎 )。

阅读http://learnyousomeerlang.com/为更大的利益。



Answer 2:

分配协议是关于提供鲁棒性,可扩展性不。 你想要做什么是组群集中成更小的区域,然后用连接,这是不是在二郎但是,比方说,TCP会话分配。 你可以每次运行5组10台机器。 这意味着10台机器具有无缝的Pid分布:你可以调用一个PID另一台机器上。 但分配给另一组意味着你不能无缝地解决组这样。

你一般都希望某种“路由反射”的,如BGP。



Answer 3:

1)我认为你需要的节点进程间通讯之间的直接连接。 这不,但是,意味着你并不需要在所有节点之间的持久连接如果两个决不会沟通(比如,如果他们是工人,不是协调员)。

2)您可以创建Erlang节点的未完全连接图。 该文档是很难找到,并附带问题-禁用global系统处理集群中的全局名称,所以你必须通过本地注册的名称,或在远程节点上本地注册的名称做的一切。 或者只是使用PIDS,因为他们的工作了。 要启动这样一个Erlang节点上,使用erl ... -connect_all false ... 。 我希望你知道你在做什么,因为我无法相信自己做到这一点。

这也证明,Erlang节点的一个不完全连通图是当前的研究课题。 该RELEASE项目目前正在这么做了,于是想出了S-群体,这基本上是全连接组的概念。 然而,节点可以是多个S-组的成员和节点在不同的S-群体没有完全连接,但可以建立他们所需要的需求做直接的节点到节点通信的连接。 这是值得寻找他们的陈述,因为研究是非常有趣的。

值得指出的另一件事是,几个人都发现,你可以得到高达150-200节点全连接集群。 你真的有一个用例的比这更多的节点? 当然150-200难以置信的结实的电脑会做,你可以扔掉它们,除非你有一个荒谬的项目办最多的事。

3)虽然你可以使用无法启动的不同节点上的进程gen_server:start_link/3,4 ,你当然可以非常方便地调用一个外部节点上的服务器。 他们似乎已经忽略了能够外国节点上启动服务器,但可能有很好的理由 - 如错误情况荒谬的数字。

4)尝试寻找隐藏节点,并且在具有一个不完全连接的簇。 他们应该让你组节点,你认为合适。

TL; DR:缩放是很难的,让我们去购物。



Answer 4:

有一些很好的答案了,所以我想简单。

1)无,如果AE不直接连接, A不能跟E 。 分配协议直接TCP连接运行 - 包括没有路由。

2)我觉得一个树形结构是不够好 - 权衡始终存在。

3)有没有“的节点监督员”,但erlang:monitor_node是你的朋友。

4)是的。 节点可以从不同的“簇”交谈节点。 在本地节点上,使用erlang:set_cookie(OtherNode, OtherCookie)访问远程节点具有不同的cookie。



Answer 5:

1)是的。 他们互相交谈

2)3),4)一般来说,建立一个可扩展和容错系统时,你会想,以上的结束,需要将工作负载划分到不同的“区域”或“集群”。 主管/工人模式有这个设想这样的拓扑结构。 你需要的是协调一个单一集群内的集群和所有工作人员之间的工作几道工序会跟对方组内平衡了。

正如你所看到的,采用这种拓扑结构,则“限制”是不是真的,只要你仔细划分您的任务,并以平衡方式的限制。 就个人而言,我相信像结构监督员进程树是不是在大型系统可以避免的,这就是我下面的做法。 原因各有不同,但归结起来可扩展性,容错能力回落政策的实施,维护需要并且集群的便携性。

所以在最后,

2)采用树形拓扑结构为你的上司。 让职工明确相互连接,并与主管自己的域名内交谈。

3),而这是原生设计的环境,我想,我敢肯定,主管可以跟工人在不同的机器上。 我不建议这个容错可以在远程工作人员的情况地狱。

4)你永远不应该让一个节点是在同一时刻,两个不同群集的一部分。 您可以从一个集群切换到另一个虽然。



文章来源: Erlang clusters