Erlang系统中节点的最大(实际)数量是多少

问题描述:

我希望在使用Erlang/Elixir的金融市场中创建一个平台即服务。我将在金融市场提供AWS lambda风格的功能,但我不打算通过web/rest/http访问,我打算将自己的基于ARM的硬件终端分发给客户端(基于Nvidia Jetson TX2或类似的硬体) 。他们将从这些终端访问功能。我想让终端成为系统中的完整节点。因此,他们将使用演员模型向我的*服务器发送消息,并且实际上,如果终端用户决定将自己的功能在线,则终端之间可能会相互传递消息。Erlang系统中节点的最大(实际)数量是多少

这是一个可行的模型?我可以运行这样的1000个终端吗? 100 000?我可能会遇到什么样的限制?如果我们的软实时金融市场流动数据流动,Erlang的消息路由是否可扩展到足以想象这样的网络仍然具有高性能? (大部分从*服务器到终端,但是很大比例可能直接从终端到终端)。我们可以建立一个系统,其中可以使用高达10万个或更多不同的“订阅”数据通道进程,其中许多进程每秒都会进行输入和生成输出。

基本上我想要一个类似上面的Erlang系统的可伸缩性功能的规范指南。理想情况下,我也想要一些这样的系统安全影响的指南,即。全球路由表或系统的任何其他部分是否可以被恶意终端用户破解,或者边缘节点是否可以从Erlang网络其余部分的敏感部分“*”?

请注意,我想大量使用端口/ NIF的高计算过程。

我不会追究这条大道因各种原因,所有这些都让人想起那种系统是Erlang的分配机制是为开发 - 无源背板上的一组电路板:“免费”本地带宽,并且整个机器位于相同的安全域中。 Erlang的分发协议可能过于琐碎,无法在广泛传播的大型网络上正常运行,而且它肯定太不安全。当然,除非你希望节点能够相互执行:os.cmd("rm -rf /")

在您的*系统中使用Erlang分配协议来处理您的心脏内容,并让这些终端通过SSL向该系统和对方讲话。最重要的是,您可以非常简单地构建一种覆盖网络来执行您想要的任何操作。

我建议仔细阅读this,我建议将您的服务划分为小型微服务。
另一个基准是Investigating the Scalability Limits of Distributed Erlang
在乔Armstorng的书编程二郎,他说:
“几年前,当我有我的研究的帽子上,我与PlanetLab的工作,我已经获得了PlanetLab的网络,所以我安装空所有PlanetLab机器上的Erlang服务器(其中大约450台)
我真的不知道我会如何处理这些机器,所以我只是设置服务器基础设施以便稍后执行某些操作。
不要使用外部端口,而应使用用C或C++编写的内部驱动程序。

+0

好吧我假设你的意思是每个节点都有n-1个连接,意思是整个系统的n *(n-1)?看起来这个事实使得我提出的架构不可行,因为它本质上是一个网格。实际上没有任何路由?是的,我会问Erlang的邮件列表。 –

+1

是的,n-1是正确的。我搜索了一些基准,在我最后的编辑中,我将它们添加到了帖子中。 – Pouriya

+0

你为什么不使用外部端口?另外,@普里亚 - 请不要通过提供外部参考来回答。 – cdegroot

你会发现很多关于Erlang的架构信息是这样的回答:How scalable is distributed Erlang?

简短的回答是,有一个集群节点的限制之实践,但这种限制可以用违约联合会相当容易。

EDIT 1 /更进一步,我会建议读这本书:Designing for scalability with Erlang/OTP