有大量节点或二进制数据时的 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 消息的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 是不是有任何框架以 plist 或 xml 形式提供大量任意二进制数据?