浏览 2400 次
精华帖 (3) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-11
文章内容教长,咱们长话短说,首先说场景与结果 场景: 作者在本机进行多个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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-11
很好,很强大
我记得看到有一种叫做promise pipeline的东西,可以极大提高消息的响应速度 http://c2.com/cgi/wiki?PromisePipelining Erlang里面有没有类似 future/promise 的东西? |
|
返回顶楼 | |
发表时间:2009-04-11
上面的那种节点间通信的问题就如tcp的nagle算法一样,用延迟太提高吞吐量,这个有时候是适用的,但是大多数时候会带来很大的问题,因为你根本不知道延迟是多少合适。所以就如我们平常会关闭nagle算法一样, 这个东西的价值也是要仔细考虑的。
|
|
返回顶楼 | |
发表时间:2009-04-11
恩,对于某些场景,这个方法还是有一定提升,比如只是发送消息不等待对方应答, 类似gen_server cast, 如log记录. 采用这种消息缓冲不错.
|
|
返回顶楼 | |
发表时间:2009-04-11
ShiningRay 写道 很好,很强大我记得看到有一种叫做promise pipeline的东西,可以极大提高消息的响应速度http://c2.com/cgi/wiki?PromisePipeliningErlang里面有没有类似 future/promise 的东西? 貌似,erlang里面没有看到这种优化.. |
|
返回顶楼 | |
发表时间:2009-04-13
请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢?
700 K messages/min. 太低了点 |
|
返回顶楼 | |
发表时间:2009-04-13
xvyu 写道 请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢? 700 K messages/min. 太低了点 700K每个发送80us, 包括发送和接受, 也就是说send/recv 操作各40us. 最简单的系统调用的开销是15us左右 所以说这个速度已经接近理论的值了。 也就是说虚拟机的底层提高的空间几乎没有了。 http://blog.yufeng.info |
|
返回顶楼 | |
发表时间:2009-04-14
mryufeng 写道 xvyu 写道 请问,假如一个软实时的应用,不能用缓冲机制,修改虚拟机的哪些设置或者提高机器哪方面的配置,能够改善不同机器双节点间消息的传递的效率呢? 700 K messages/min. 太低了点 700K每个发送80us, 包括发送和接受, 也就是说send/recv 操作各40us. 最简单的系统调用的开销是15us左右 所以说这个速度已经接近理论的值了。 也就是说虚拟机的底层提高的空间几乎没有了。 http://blog.yufeng.info 多谢 如果是这样的话,那么增加cpu核心数应该能成正比的提高吞吐率吧 |
|
返回顶楼 | |
发表时间:2009-04-16
系统调用和CPU个数无关
|
|
返回顶楼 | |