`
litaocheng
  • 浏览: 337156 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Boost message passing between erlang nodes

阅读更多
看这篇文章不错,有些实用性,特转来大家共享.
文章内容教长,咱们长话短说,首先说场景与结果
场景:
作者在本机进行多个Erlang Node之间的消息通信时,效率很高, 可是当两个Node位于不同的机器进行消息发送时,效率相差很大.

因此作者尝试进行优化,其在每个Node上加入一个Broker(中间人),进行消息缓冲.消息发送时,不是直接通过 ! 发送,而是交给这个Breoker, 由其进行消息的缓存, 当消息到达一定数目,或者规定的超时到达时, 将所有的消息发送给目标Node, 由目标Node发给对应的本机pocess. 这个做法其实是优化网络传输, 大块数据一次传输vs小数据多次传输, 最终提升消息传输性能.

作者测试的结果:

没有消息缓冲机制:
本机双节点    : 5.3 million messages/min;
不同机器双节点: 700 K messages/min.
   
加入消息缓冲机制:
本机双节点    : 5.3 million messages/min;
不同机器双节点: 2.1 million messages/min;

看一个示意图就清楚了:


原文地址:
http://www.ostinelli.net/boost-message-passing-between-erlang-nodes/

代码:
http://www.ostinelli.net/wp-content/uploads/2009/04/erlang_mq_boost.zip
  • 大小: 16.2 KB
分享到:
评论
8 楼 mryufeng 2009-04-16  
系统调用和CPU个数无关
7 楼 xvyu 2009-04-14  
mryufeng 写道
xvyu 写道
请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢?

700 K messages/min. 太低了点

700K每个发送80us, 包括发送和接受, 也就是说send/recv 操作各40us. 最简单的系统调用的开销是15us左右 所以说这个速度已经接近理论的值了。 也就是说虚拟机的底层提高的空间几乎没有了。

http://blog.yufeng.info

多谢
如果是这样的话,那么增加cpu核心数应该能成正比的提高吞吐率吧
6 楼 mryufeng 2009-04-13  
xvyu 写道
请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢?

700 K messages/min. 太低了点

700K每个发送80us, 包括发送和接受, 也就是说send/recv 操作各40us. 最简单的系统调用的开销是15us左右 所以说这个速度已经接近理论的值了。 也就是说虚拟机的底层提高的空间几乎没有了。

http://blog.yufeng.info
5 楼 xvyu 2009-04-13  
请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢?

700 K messages/min. 太低了点
4 楼 litaocheng 2009-04-11  
ShiningRay 写道

很好,很强大我记得看到有一种叫做promise pipeline的东西,可以极大提高消息的响应速度http://c2.com/cgi/wiki?PromisePipeliningErlang里面有没有类似 future/promise 的东西?

貌似,erlang里面没有看到这种优化..
3 楼 litaocheng 2009-04-11  
恩,对于某些场景,这个方法还是有一定提升,比如只是发送消息不等待对方应答, 类似gen_server cast, 如log记录. 采用这种消息缓冲不错.
2 楼 mryufeng 2009-04-11  
上面的那种节点间通信的问题就如tcp的nagle算法一样,用延迟太提高吞吐量,这个有时候是适用的,但是大多数时候会带来很大的问题,因为你根本不知道延迟是多少合适。所以就如我们平常会关闭nagle算法一样, 这个东西的价值也是要仔细考虑的。


1 楼 ShiningRay 2009-04-11  
很好,很强大
我记得看到有一种叫做promise pipeline的东西,可以极大提高消息的响应速度

http://c2.com/cgi/wiki?PromisePipelining

Erlang里面有没有类似 future/promise 的东西?

相关推荐

Global site tag (gtag.js) - Google Analytics