批处理的高吞吐率和高延迟的解释

 2023-09-05 阅读 31 评论 0

摘要:在很多系统中都允许用户设置单条消息处理模式或者批处理模式。例如,在storm中,用户可以通过core和Trident两种API编写,区别是前者是一个tuple一个tuple地处理,而后者是多个tuple组成一个batch,然后一个batch一个batch地处理。 由于这两种处

在很多系统中都允许用户设置单条消息处理模式或者批处理模式。例如,在storm中,用户可以通过core和Trident两种API编写,区别是前者是一个tuple一个tuple地处理,而后者是多个tuple组成一个batch,然后一个batch一个batch地处理。

由于这两种处理模式的不同,导致二者在性能上的表现也不同,例如吞吐率和延迟。下面引用一个典型的测试结果,详情:https://github.com/ptgoetz/storm-benchmark。

 

测试环境:5 nodes on AWS,1zookeeper,1nimbus,3supervisor(配置一般)

测试程序:内存拷贝

 

吞吐率(tuple/sec)

延迟(ms)

Storm Core API

约150k

约80

Storm Trident API

约300k

约250

 

从结果可以看出,Trident相对于Core来说,吞吐率上升了1倍,而延迟也上升了2倍左右。在实际的开发过程中,一般Core API用地相对多一些。

上面只是“高吞吐率往往伴随着高延迟”的一个特例,下面我从理论上抽象地(不是针对某一种特定技术)对这一现象给予解释。

一个batch由多个tuple构成,因此抽象地看多个tuple和多个batch的处理过程可以用下图表示:

 

其中,一般情况下处理一个batch的时间比处理一个tuple的时间要长,但不会大于一个tuple处理时长的n倍,这是由于处理系统一般会为批处理做很多优化,提高其处理效率。同理,batch间的时间间隔比tuple间的时间间隔大,但小于tuple间时间间隔的n倍。因此,一个batch的延迟会大于一个tuple的延迟,但吞吐率会上升,即“高吞吐率往往伴随着高延迟”。

基于上述分析结果,文章开始的测试结果就不难理解了,并且这一测试结果只是普遍规律的一个特例。

转载于:https://www.cnblogs.com/kqdongnanf/p/4637518.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/1431.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息