参考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分别由不同的线程执行。