2011-02-18 70 views
26

A部分:Erlang的可扩展性如何?

Erlang有很多关于运行并发代理的成功案例,例如,数百万的Facebook同时聊天。这是数百万的代理商,但它当然不是网络中的数百万个CPU。我无法找到关于Erlang在LAN/WAN上进行“水平”缩放时如何进行缩放的指标。

假设我有很多(数万个)物理节点(在Linux上运行Erlang)需要通过局域网/广域网同步少量不常见的数据。在什么时候我会遇到通信瓶颈,而不是代理之间,而是物理节点之间? (还是将只是工作,假设一个稳定的网络?)

部分B:

我的理解(如一个Erlang新手,这意味着我可能是完全错误的)是Erlang节点尝试所有的连接和互相了解,导致N^2连接点对点网络。假设A部分不会仅仅使用N = 10K,那么Erlang可以很容易地配置(使用开箱即用的配置或简单的样板,而不是自己编写完整的分组/路由算法的实现)来将节点集群化为可管理的通过群集/组层次结构路由系统范围的消息?

回答

34

我们应该说明我们谈论物理机器的水平可伸缩性 - 这是唯一的问题。一台机器上的CPU将由一台虚拟机处理,无论这些虚拟机的数量是多少。

node = machine。

首先,我可以说30-60个节点是你在盒子(香草OTP安装)中使用任何自定义应用程序(在Erlang中)写的。证明:ejabberd。

〜100-150可能与优化的定制应用程序。我的意思是,它必须是很好的代码,写入关于GC的知识,数据类型的特征,消息传递等。

超过+150是好的,但是当我们谈论像300,500这样的数字时,它需要优化& TCP层的自定义。另外,我们的应用必须知道例如在群集中同步呼叫。

另一件事是数据库层。 Mnesia(内置)由于其功能将不会有效超过20个节点(我的经验 - 我可能是错的)。解决方案:只需使用其他东西:发电机数据库,独立的MySQL集群,HBase等。

利用创建高质量应用程序和可伸缩性成本的最常见技术是约20-50个节点集群的联合。因此它内部有效的约50个erlang节点,并通过任何适当的协议与N个另外50个节点集群相连。总之,这样的系统是N erlang集群的联合。

分布式erlang旨在运行在一个数据中心。如果您需要更多,地理上距离较远的节点,则使用联合。

有很多配置选项,例如它们不会将所有节点彼此连接。这可能是有帮助的,但是在约50个簇中,erlang开销并不重要。您也可以使用“隐藏”连接创建一个erlang节点图,该节点不加入这个完整的网格,但也不能从与所有节点的连接中受益。

我在这类系统中看到的最大问题是将其设计为无主系统。如果你不需要,一切都应该没问题。

+2

您提到的范围(<60,60/150,> 150)是经验性的还是您从研究/研究报告/白皮书中提取的? – 2012-03-27 13:21:38