ice-dubbo-thrift-grpc性能测试对比

10 篇文章 0 订阅

 ice-dubbo-thrift-grpc性能测试对比

测试说明

本测试只是个人为了对rpc进行技术选型,测试可能不够严谨,对某些rpc的参数可能也不是最优,如果你知道更优的参数配置或者改进意见等,欢迎反馈给我magicdoom@gmail.com。另外代码有些地方只是为了测试方便,不作为平时编程的范例。所有测试源码和运行均一起提供在附件里。

测试源码工程可用idea打开 http://git.oschina.net/whzhaochao/RPC-DEMO,其中dubbo,grpc需要maven支持。运行只需要运行对应bat脚本。如果想测试更多场景,可以直接改脚本的并发数和调用次数。

测试人

南哥   mycat核心commiter     http://mycat.io/

测试环境

测试程序

由于各rpc所自带的基准测试大多跟自己的rpc耦合性比较高,不太适合拿来对多个rpc同时进行公平的测试。所以写了个简单的并发测试程序,且对个rpc保持一致性。

系统环境

Jdk:jdk1.8.0_51x64

Ice:ice3.6

Dubbo:dubbox 2.8.4

Thrift:0.9.2

Grpc:0.7.1

 

测试准备

Ice:提前安装好ZeroC ICE 3.6,在path中设置好bin的路径。

Dubbo:准备好zookeeper

关闭杀毒软件防火墙之类以及其他一些后台程序

测试参数

所有jvm参数均设置为java -Xms2G -Xmx2G

Ice:


 

Dubbo:<dubbo:protocol name="dubbo" serialization="kryo" threads="200"/>

Thrift:

 

Grpc:

 



测试场景

分别并发1、5、20、50、100个客户端程序,每个客户端程序执行300000次调用。

服务方法均通过传入一个Order对象然后原样返回。

structOrder {
    1: i64 orderId      
    2: string phone     
    3: string name    
    4: string orderNum 
    5: i32 orderDate  
    6: i32 ticketType
    7: double amount  
    8: i32 orderStatus       
}

service MobileService {
    Order hello(1:Order order),
}

测试步骤

 ice

Ø  运行registry.bat启动iceregistry

Ø  运行gridnode.bat启动icegrid节点

Ø  分别执行 


进行测试,测试结果在对应的benchmark*.log里

 

dubbo

Ø  启动好zk

Ø  运行startProvider.bat启动服务

Ø  分别运行


 测试,测试结果在对应的benchmark*.log里

 

 

thrift

Ø  运行startServer.bat启动服务

 

Ø  分别运行


 测试,测试结果在对应的benchmark*.log里

 

 

grpc

 

Ø  运行startServer.bat启动服务

 

Ø  分别运行 


测试,测试结果在对应的benchmark*.log里

 

 

测试结果

1客户端

测试结果如下所示:

Rpc

并发客户端

每客户端调用次数

总调用次数

执行时间

每秒调用数tps

ice

1

300000

300000

16s

18329

dubbo

1

300000

300000

52s

5675

thrift

1

300000

300000

23s

12832

grpc

1

300000

300000

77s

3896

 从数据可以看出ice,thrift的tps最高,ice是thrift的1.4倍,是dubbo的3.2倍,是grpc的4.7倍

5客户端并发

测试结果如下所示:

Rpc

并发客户端

每客户端调用次数

总调用次数

执行时间

每秒调用数tps

ice

5

300000

1500000

20s

71575

dubbo

5

300000

1500000

77s

19371

thrift

5

300000

1500000

31s

47041

grpc

5

300000

1500000

95s

15722

 从数据可以看出ice,thrift的tps最高,ice是thrift的1.5倍,是dubbo的3.6倍,是grpc的4.5倍

20客户端并发

测试结果如下所示:

Rpc

并发客户端

每客户端调用次数

总调用次数

执行时间

每秒调用数tps

ice

20

300000

6000000

68s

87375

dubbo

20

300000

6000000

256s

23354

thrift

20

300000

6000000

94s

63708

grpc

20

300000

6000000

382s

15675

 从数据可以看出ice,thrift的tps最高,ice是thrift的1.3倍,是dubbo的3.7倍,是grpc的5.5倍

50客户端并发

测试结果如下所示:

Rpc

并发客户端

每客户端调用次数

总调用次数

执行时间

每秒调用数tps

ice

50

300000

15000000

165s

90679

dubbo

50

300000

15000000

676s

22157

thrift

50

300000

15000000

255s

58765

grpc

50

300000

15000000

987s

15186

 从数据可以看出ice,thrift的tps最高,ice是thrift的1.5倍,是dubbo的4倍,是grpc的5.9倍

 

100客户端并发

测试结果如下所示:

Rpc

并发客户端

每客户端调用次数

总调用次数

执行时间

每秒调用数tps

ice

100

300000

30000000

361s

83014

dubbo

100

300000

30000000

1599s

18760

thrift

100

300000

30000000

597s

50211

grpc

100

300000

30000000

2186s

13721

 从数据可以看出ice,thrift的tps最高,ice是thrift的1.6倍,是dubbo的4.4倍,是grpc的6倍

 

 

 

总结

从测试结果可以看出ice的tps遥遥领先,而且并发越高tps比其他越高,其次thrift,dubbo和grpc则差了很多。Grpc最差估计跟用了HTTP2有关。

另外dubbox还支持rest,官方测试rest比kyro要慢1.5倍,本次未对rest测试。

从功能完备性来说ice和dubbo都算比较完备,都有大型生产案例,thrift的服务化功能比较缺失,grpc可能还不够成熟。

Dubbo的插件化机制的确不错,ice初次接触有些概念比较晦涩,经过封装和有详细的资料后要好上许多。

另外《Zeroc Ice权威指南》作者Leader-us对ice的测试结果如下:

Leader-us测试结果Ice则是2.5万,性能差不多是Avro的一倍,综合起来看Avro和thrift的性能应该差不多。

•  Apache Avro框架简单,非接口编译的模式灵活度很高,用Json定义的RPC消息结构和方法简单并容易理解

•Http协议的编码和传输机制效率远远低于长连接的Socket模式,本机对比了Avro的Http协议与Netty实现的Socket协议,请求应答消息相同的情况下,HTTP的TPS是500左右,而Netty Socket模式则是1.5万左右,相差很悬殊

•多语言客户端支持并不是那么容易的事情,Avro的Python客户端目前只实现了基本的Http协议,(Java的同时实现了Netty客户端协议),这种情况下,服务端只能也采用Http协议,从而导致并发性能问题

支付宝的一个惊人秘密

在测试icegrid的过程中发现性能比较直接连server的方式性能下降了40%,通过几天的调测,调过各种参数配置均未发现原因。直到一次测试过程中偶然打开任务管理器,看到了这货

Alipay security business service占用cpu异常偏高,把这个服务停掉,再测试,刷刷性能恢复正常了。

再反复测试几次,用dubbo等测,均是如此。


Alipay securitybusiness service应该了拦截了所有的网络流量,拦截程序可能写的有问题,但是。。。。。。你拦截跟支付宝淘宝有关的流量就好,为啥其他流量全拦截呢,至于有没有把流量偷偷传回服务器这个有待进一步监测。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DubbogRPC是两种常见的远程过程调用(RPC)框架,它们都用于构建分布式系统。下面是它们的性能对比: 1. 性能特点: - DubboDubbo是一种基于Java的开源RPC框架,具有较低的延迟和较高的吞吐量。它使用Netty作为底层通信框架,支持多种序列化协议和负载均衡策略,适用于构建高性能的微服务架构。 - gRPCgRPC是由Google开发的高性能RPC框架,支持多种编程语言。它使用HTTP/2作为传输协议,基于Protocol Buffers进行序列化,支持双向流式通信和多种负载均衡策略。 2. 序列化和传输: - DubboDubbo支持多种序列化协议,包括Hessian、JSON、Protostuff等。它使用Netty进行网络传输,默认使用NIO方式。 - gRPCgRPC使用Protocol Buffers作为默认的序列化协议,具有高效的编解码性能。它使用HTTP/2传输协议,支持双向流式通信。 3. 扩展性: - DubboDubbo提供了丰富的扩展机制,例如,可以自定义负载均衡、容错、路由等扩展点,以满足不同的业务需求。 - gRPCgRPC也支持扩展,可以通过自定义拦截器、负载均衡策略等对其进行定制。 4. 生态系统: - DubboDubbo在国内有较为广泛的应用和社区支持,拥有成熟的生态系统,提供了丰富的文档和示例。 - gRPCgRPC是一个跨语言的RPC框架,具有活跃的开源社区和丰富的生态系统。 需要注意的是,性能对比还取决于具体的使用场景和配置参数。在实际应用中,建议根据自身的需求和技术栈选择适合的RPC框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值