Strom及DRPC性能测试与改进

参考1:storm性能测试报告

  参考2:Storm DRPC 使用

  参考3:Storm DRPC 使用及访问C++ Bolt问题的解决方法

  参考4:Storm 多语言支持之ShellBolt原理及改进

  参考5:Base64编码及编码性能测试

  参考6:Base64编码及编码性能测试 [改进]

  参考7:zlib使用与性能测试

  参考8:十分简单的redis使用说明及性能测试

  [参考1]的结论与局限

  参考种对Storm性能进行测试,得出了以下结论:

  storm单条流水线的处理能力大约为20000 tupe/s, (每个tuple大小为1000字节)

  storm系统本省的处理延迟为毫秒级

  在集群中横向扩展可以增加系统的处理能力,实测结果为1.6倍

  Storm中大量的使用了线程,即使单条处理流水线的系统,也有十几个线程在同时运行,所以几乎所有的16个CPU都在运行状态,load average 约为 3.5

  Jvm GC一般情况下对系统性能影响有限,但是内存紧张时,GC会成为系统性能的瓶颈

  使用外部处理程序性能下降明显,所以在高性能要求下,尽量使用storm内建的处理模式

  作者对strom的处理能力和可扩展性进行了测试,给出了很有说服力的数据。但还不能满足我们的需要:

  1)由于作者使用的tuple为1000字节,也就是1K,数据量相对较小,而在实际使用过程中,storm作为实时流处理系统,处理的数据可能比较大。比如我们用来进行图像处理,一个图片可能有1M左右。这时候storm的性能如何呢?

  2)为了简化storm的集成,我们使用DRPC来访问storm,具体用法可参见[参考2]和[参考3],在DRPC访问时,数据需要从DRPCClient发送至DRPCServer,再由DRPCServer发送给topology中的spout,spoout发送给Bolt........;当数据处理完毕后,还要由Bolt返回给DPRCServer,由DRPCServer返回给DRPCClient。

  增加了这些步骤以后,Strom DRPC的性能究竟如何呢?

  3)作者在[参考1]中提到,使用外部处理程序时Storm的性能明显下降,大概只有1/10的性能。但是我们在实际使用中,可能经常是在已有的基础上,将功能集成到Storm中运行。通俗点说:实际情况是我们经常使用外部处理程序,这种情况下,怎么能提高Storm的性能呢?关于这点可以查看[参考4]。我们使用JNI来解决。

  测试与结论

  1)测试环境

  测试环境如图所示

  有客户端和两台服务器组成。

  客户端为虚拟机,单核3.2GHz  1G 内存,100M带宽。

  服务器也是虚拟机,8核2.2GHz,8G内存,1G带宽。

  DRPC Topology由一个DRPCSpout,CPPBolt和一个ReturnResult组成。功能是接收一个字符串并返回。

  Topology运行在一个work中,Spout,Bolt分别由不同的线程执行。

 2)测试方法

  在Client启动0-100多个线程,不停的访问Topology,向其发送一个字符串(1K-1M)。Topology会原封不动的返回该字符串。

  测试过程就不详细展开了。直接说测试结果。

  3)测试结论

  该测试中,处理速度主要受限于客户端带宽。也就是说由于数据量大,客户端发的速度慢,低于Storm中topology的处理速度。

  因此该测试只能得出DRPC方式中单个请求在不同数据大小时,storm的延迟时间。

  简而言之,StormDRPC方式中,最小延迟为50ms(数据小于1K),当数据量大时,256K数据,延迟为125ms,512K时延迟为208ms。

  所以Storm数据量较大的时,处理的延迟还是比较大的。

  当然以上仅是在特定环境中的测试,仅供参考。

  改进方法

  根据个人经验,针对以上Storm延迟可以由以下改进方法:

  1)数据可以先压缩后再交给storm处理,在具体的bolt中对其进行解压缩。根据个人测试zlib压缩1M的数据,压缩率为80%,既可以将数据研所为原来的20%。从而可以减小数据量,提高效率。而zlib对1M数据进行压缩、解压缩所用时间在10ms以内。可以使情况选用。见[参考7]

  2)storm本身采用字符型传输,对于二进制数据必须进行编码。可采用base64编码。参见[参考5],base64对1M数据的编码,解码时间也分别小于10ms。

  3)在DRPC测试中,数据从Clinet到DRPCServer,到DRPC SPOUT,到BOLT,到RETURN Result,在到DRPCSERVER,最后返回Client传输多次,可以考虑使用内存数据库如redis,Client直接将数据放入redis,将其在redis中的路径进行传输,在需要时,由bolt从redis中获取。参见[参考8]。将1M数据在redis中存取,耗时也分别在10-20ms。

  4)对于外部处理程序,如C++,可以采用JNI的方式,对ShellBolt进行改进,而不是启动新的进程在通过Json编码,Pipe传输与之通讯,从而也可以提交效率。参见[参考4]。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-21 15:07:47

Strom及DRPC性能测试与改进的相关文章

一种改进的轻量级.NET应用程序性能测试框架

摘要:本文从实际应用出发,提出一种轻量级.NET应用程序性能测试框架设计方案.该方案是对已有结果的进一步扩充,具有更强的实用性和扩展性.  1 引言 文[1]提出一种.NET应用程序"性能测试框架",其基本思路是通过多个线程执行通过委托传递过来的待测试的程序块,各线程所运行的程序块的主逻辑是相同的,不同的是执行条件(如初始参数.执行次数等).这样就可以得到不同"环境"下算法的执行时间,进而得到整体的时间消耗分布情况.应该说,这种方法的思路是很清晰的,使用也很方便.文

性能测试知多少---系统架构分析

有些事儿一旦放一放就难再拾起来,突然发现<性能测试知多少>这个系列两月没更新,关键时我都不知道啥时候放下的,总容易被各种技术所吸引走,如饥似渴的想学更多的东西,这几天一直有朋友问我为啥不写了,我才意识,事情要一样一样做,我现在要把这个系列完成.   之前有对性能需求进行过分析,那篇主要从项目业务.背景等角度如何抽丝剥茧的将项目的需求抽离出来.在我们进行需求的时候也需要对被测项目的架构有一定的认识,如果不了解被测系统的架构,那么在后期的性能分析与调优阶段将无从下手.   简单系统架构介绍    

改进性能和样式的 25+ ASP 技巧

技巧|性能 改进性能和样式的 25+ ASP 技巧 --------------------------------------------------------------------------------Len Cardinal - Microsoft Consulting Services 高级顾问George V. Reilly - Microsoft IIS Performance 主管 更新时间:2000年4月 根据 Nancy Cluts 的文章(英文)改写Nancy Clut

Yaf 2.1性能测试(Yaf 2.1 Benchmark)

Thanks to Ruilog agian for his work of second benchmark of Yaf 2.1. Yaf 2.1 (docs) did a lot of work to improve performance and reduce memory usage, so let's take a look at the result(Yaf 2.1重写了很多逻辑来提升性能, 并且降低内存使用率, 改进结果见测试对比): First of all, I have t

Gatling:新一代服务器性能测试工具

21世纪是云的世纪, 大规模云网已经出现了,而且在未来几年内会得到高速发展,从而使得基于云的系统也会越来越多.如果要开发一款高性能的云系统,服务器性能测试是一个必不可少的环节.今天,就来介绍一款新一代服务器性能测试工具Gatling. 一,什么是Gatling Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标.Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外它拥

Linux操作系统线程库性能测试与分析

NPTL 成为 glibc "正选" 线程库后,它的性能如何受到很多人的关注.本文就针对 NPTL 与 LinuxThreads 的性能比较,以及超线程.内核可抢占等特性对线程性能的影响进行了全面评测. 一. 前言 在 Linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分 [1].NPTL(Native Posix Thread Library)[2] 使用内核的新特性重写了 Linux 的线程库,取代历史悠久而备受争议的 LinuxThreads [3] 成为 gl

《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一 1.10 持续改进

1.10 持续改进 2011年是我们自动化测试之旅的第8年,总是要面临新的挑战.正如本章所述,我们的GUI测试套件已经增长到需要2个多小时来运行.这个时间太长了,所以我们将它划分为两个测试套件,并在两个从属机器上并行运行.这需要进行大量的工作,因为有些测试依赖于其他测试,过去没有好好实施而是采取了折中的方法,现在要为此付出代价.我们有超过5400(这个数字还在增长)个JUnit,并且重构的FitNesse测试套件在30分钟内完成. 我们知道在单元级别中的测试覆盖率,但是并不知道在功能性或GUI级

性能测试:自建数据库对比RDS中应当注意的地方(适用于MySQL,SQL SERVER,MongoDB)

性能测试:自建数据库对比RDS中应当注意的地方 背景 常常很多用户对比测试自建数据库和RDS的性能差异,其测试结果往往是RDS不如ECS自建,用户往往怀疑难道我花了那么多的钱买的RDS难道还不如自己在ECS上搭建?   从数据库测试的角度来看,测试首先必须是的公平的进行,其结果才具有说服力.RDS作为一个公共的关系数据库服务,其必须要包括稳定高可用,高安全,然后才是高性能.没有前面的两者,我相信没有多少人愿意去使用即不稳定又不安全的服务.所以RDS在稳定性上必须上主备双节点的,双节点甚至是在不同

《全栈性能测试修炼宝典 JMeter实战》目录—导读

版权 全栈性能测试修炼宝典 JMeter实战 • 著 [美] Rogers Cadenhead 译 袁国忠 责任编辑 傅道坤 • 人民邮电出版社出版发行 北京市丰台区成寿寺路11号 邮编 100164 电子邮件 315@ptpress.com.cn 网址 http://www.ptpress.com.cn • 读者服务热线:(010)81055410 反盗版热线:(010)81055315 版权声明 全栈性能测试修炼宝典 JMeter实战 Rogers Cadenhead: Sams Teach