Erlang的可扩展性如何?

时间:2011-02-18 17:33:16

标签: erlang scalability distributed

A部分:

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

假设我有许多(数万个)物理节点(在Linux上运行Erlang)需要通过LAN / WAN进行通信并同步少量不常数据。在什么时候我会遇到通信瓶颈,而不是代理之间,而是物理节点之间? (或者假设一个稳定的网络,这会正常工作吗?)

B部分:

我理解(作为Erlang新手,意思是我可能完全错误),Erlang节点尝试连接并相互了解,从而形成N ^ 2连接点对点网络。假设A部分不仅仅适用于N = 10K,可以轻松配置Erlang(使用开箱即用的配置或平凡的样板,而不是自己编写完整的分组/路由算法实现)到集群节点可管理通过群集/组层次结构分组和路由系统范围的消息?

1 个答案:

答案 0 :(得分:39)

我们应该指明我们谈论物理机的水平可扩展性 - 这是唯一的问题。一台机器上的CPU将由一台VM处理,无论其数量是多少。

node = machine。

首先,我可以说30-60个节点开箱即用(vanilla OTP安装),其中任何自定义应用程序都写在其上(在Erlang中)。证明:ejabberd。

优化的自定义应用程序可以实现

~100-150。我的意思是,它必须是良好的代码,用有关GC的知识,数据类型的特征,消息传递等编写。

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

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

利用创建高质量应用程序和可伸缩性的成本的最常见技术是~20-50个节点集群的联合。所以在内部它是一个有效的~50个erlang节点的网格,它通过任何合适的协议与另外50个节点集群连接。总而言之,这样的系统是N erlang集群的联合。

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

有很多配置选项,例如它们不会将所有节点相互连接。它可能会有所帮助,但在~50集群中,erlang开销并不重要。您还可以使用“隐藏”连接创建erlang节点的图形,该连接不会连接此完整网格,但也无法从连接到所有节点中受益。

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