gpt4 book ai didi

erlang - 分布式 Erlang 的可扩展性如何?

转载 作者:行者123 更新时间:2023-12-03 08:57:07 29 4
gpt4 key购买 nike

A部分:

Erlang 有很多关于运行并发代理的成功案例,例如数百万同时进行的 Facebook 聊天。那是数百万个代理,但当然不是网络中的数百万个 CPU。当跨 LAN/WAN 进行“水平”扩展时,我无法找到有关 Erlang 扩展程度的指标。

假设我有许多(数万个)物理节点(在 Linux 上运行 Erlang),它们需要跨 LAN/WAN 进行通信和同步少量不频繁的数据。什么时候会出现通信瓶颈,不是在代理之间,而是在物理节点之间? (或者假设网络稳定,这是否可行?)

B部分:

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

最佳答案

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

节点=机器。

首先,我可以说你开箱即用的 30-60 个节点(普通 OTP 安装)以及在其顶部编写的任何自定义应用程序(在 Erlang 中)。证明:ejabberd。

使用优化的自定义应用程序可以实现 ~100-150。我的意思是,它必须是好的代码,编写时包含关于 GC、数据类型特征、消息传递等方面的知识。

超过 +150 是可以的,但是当我们谈论像 300、500 这样的数字时,它将需要 TCP 层的优化和自定义。此外,我们的应用程序必须了解成本,例如跨集群同步调用。

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

利用创建高质量应用程序和可扩展性成本的最常用技术是约 20-50 个节点集群的联合。因此,在内部,它是一个由约 50 个 erlang 节点组成的高效网格,并通过任何合适的协议(protocol)与另外 N 个 50 个节点集群连接。总而言之,这样的系统是 N erlang 集群的联邦。

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

有很多配置选项,例如它不会将所有节点相互连接。这可能会有所帮助,但是在约 50 个集群中,erlang 开销并不显着。您还可以使用“隐藏”连接创建 erlang 节点图,它不会加入这个完整的网格,但它也不能从与所有节点的连接中受益。

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

关于erlang - 分布式 Erlang 的可扩展性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com