有大量节点或二进制数据时的 Erlang 消息

Posted

技术标签:

【中文标题】有大量节点或二进制数据时的 Erlang 消息【英文标题】:Erlang messages when there are lots of nodes or binary data 【发布时间】:2017-02-22 00:18:16 【问题描述】:

当有大量节点或二进制数据时,原生 Erlang 消息会提供合理的性能吗?

案例 1:有一个 大约 50-200 台机器(erlang 节点)的动态池。它在不断变化,每 10 分钟增加或移除大约 5-50 台机器。

案例 2:假设我们正在使用此集群构建 youtube-clone 并计划通过消息流式传输视频数据

我的意思是合理的性能 - 慢 2-3 倍 比复杂的 Erlang 代码所能达到的最高性能,慢 10 倍是不行的 .

【问题讨论】:

【参考方案1】:

发送消息和二进制数据之间没有任何显着区别。消息只是使用term_to_binary 转换为二进制数据包并通过 TCP 发送,同样适用于二进制数据。 (嗯,它比这更聪明一点,因为相同原子的文本形式不会像简单的term_to_binary 那样一次又一次地发送。)所以差异可以忽略不计。

【讨论】:

【参考方案2】:

有重要的细节:

1) 在超过 100 个节点的集群中,全连接集群中的 ping 噪声将是网络流量的重要组成部分。更大的部署需要对 Erlang 虚拟机和操作系统进行深度更改。

2) 如果您想流式传输视频或音频,您需要计划单个节点的容量:每个节点的客户端、tcp/udp 数据包速率、网络带宽。

3) 不同节点上的 2 个进程之间的消息性能限制约为 150-200K/s。

【讨论】:

以上是关于有大量节点或二进制数据时的 Erlang 消息的主要内容,如果未能解决你的问题,请参考以下文章

erlang程序优化点的总结(转)

iOS - 是不是有任何框架以 plist 或 xml 形式提供大量任意二进制数据?

Erlang中二进制字符串的棘手模式匹配

进程名,节点名!跨 Erlang 节点的消息 VS rpc:call/4 VS HTTP/1.1

将二进制文件传递给erlang nif

Erlang 二进制泄漏?