分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较 
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见Druid 1.0.9 发布,Java 数据库连接池 - OSCHINA - 中文开源技术交流社区 中的评论),反到是当当网的扩展版本仍在持续发展,墙内开花墙外香。其它的一些知名电商如当当、京东、国美维护了自己的分支或者在dubbo的基础开发,但是官方的库缺乏维护,相关的依赖类比如Spring,Netty还是很老的版本(Spring 3.2.16.RELEASE, netty 3.2.5.Final),倒是有些网友写了升级Spring和Netty的插件。

Motan是新浪微博开源的一个Java 框架。它诞生的比较晚,起于2013年,2016年5月开源。Motan 在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。

rpcx是Go语言生态圈的Dubbo, 比Dubbo更轻量,实现了Dubbo的许多特性,借助于Go语言优秀的并发特性和简洁语法,可以使用较少的代码实现分布式的RPC服务。

gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。

thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。

后续还会增加更多的 RPC 框架的比较,敬请收藏本文网址

以下是它们的功能比较:

Motan

Dubbox

thrift

gRPC

rpcx

开发语言

Java

Java

跨语言

跨语言

go

分布式服务治理

Y

Y

可以配合zookeeper, Eureka等实现

可以配合etcd(go),zookeeper,consul等实现

自带服务注册中心,也支持zookerper,etcd等发现方式

底层协议

motan协议,使用tcp长连接

Dubbo 协议、 Rmi 协议、 Hessian 协议、 HTTP 协议、 WebService 协议、Dubbo Thrift 协议、Memcached 协议

tpc/http/frame

http2

tcp长链接

消息序列化

hessian2,json

hessian2,json,resr,kyro,FST等,可扩展protobuf等

thrift

protobuf

Gob、Json、MessagePack、gencode、ProtoBuf等

跨语言编程

N(支持php client和c server)

N

Y

Y

N

负载均衡

ActiveWeight 、Random 、 RoundRobin 、LocalFirst 、 Consistent 、ConfigurableWeight

Random 、RoundRobin 、ConsistentHash 、 LeastActive

Haproxy,

zookerper+客户端负载均衡等方案

负载均衡软件HaProxy等

支持随机请求、轮询、低并发优先、一致性 Hash等

容错

Failover 失效切换、Failfast 快速失败

Failover 、 Failfast 、Failsafe 、 Failback 、 Forking、 Broadcast

Failover

具有 Failover 失效切换的容错策略

失败重试(Failover)、快速失败(Failfast)

注册中心

consul

zookeeper

zookeeper

etcd,zookeeper,consul

zookerper,etcd

性能

★★

★★

★★★★

比grpc快2-5倍

★★★

比dubbox,motan快

★★★★★

比thrift快1-1.5倍

侧重优势

服务管理

服务管理

跨语言,性能++

跨语言,性能

性能++,服务治理

客户端异步调用方案

- 使用thrift IDL “oneway” 关键字(无返回结果),+callback

- tcp异步请求

- thrift IDL参数不支持函数或服务

- ping(service,req,res,callback)

- 客户端发送一个对象,服务端返回stream,客户端使用迭代处理

- 客户端发送stream对象,服务端返回一个对象

- 服务端客户端都使用stream传输

服务端异步处理

1、TNonblockingServer(java/c++,php); THsHaServer(java/c++); TThreadpoolServer(java/c++); TThreadSelectorServer(java/c++)

2、结合消息队列或中间件

3、swoole/goroutine等多任务支持

同上,使用stream传输。

proto支持stream对象。

Stream对象在传输过程中会被当做集合,用Iterator来遍历处理

首先看在四种并发下各RPC框架的吞吐率: 

吞吐率

rpcx的性能遥遥领先,并且其它三种框架在并发client很大的情况下吞吐率会下降。 
thrift比rpcx性能差一点,但是还不错,远好于gRPC,dubbo和motan,但是随着client的增多,性能也下降的很厉害,在client较少的情况下吞吐率挺好。

在这四种并发的情况下平均响应: 

平均响应时间

这个和吞吐率的表现是一致的,还是rpcx最好,平均响应时间小于30ms, Dubbo在并发client多的情况下响应时间很长。 
我们知道,在微服务流行的今天,一个单一的RPC的服务可能会被不同系统所调用,这些不同的系统会创建不同的client。如果调用的系统很多,就有可能创建很多的client。 
这里统计的是这些client总的吞吐率和总的平均时间。

平均响应时间可能掩盖一些真相,尤其是当响应时间的分布不是那么平均,所以我们还可以关注另外一个指标,就是中位数。 
这里的中位数指小于这个数值的测试数和大于这个数值的测试数相等。 

响应时间中位数

gRPC框架的表现最好。

另外一个就是比较一下最长的响应时间,看看极端情况下各框架的表现: 

最大响应时间

rpcx的最大响应时间都小于1秒,Motan的表现也不错,都小于2秒,其它两个框架表现不是太好。

php thrift server异步服务端开源例子(实现TNonblockingServer):

https://github.com/volca/thrift/lib/php/src

motan,dubbo,grpc对比参考:

http://p.primeton.com/articles/59030eeda6f2a40690f03629

rpcx具体参考:

http://www.udpwork.com/item/15521.html

thrift,grpc,motan,dubbx性能参考:

http://blog.csdn.net/zixiao217/article/details/53675678?locationNum=7&fps=1

关键信息截图:

https://github.com/smallnest/RPC-TEST

每10000请求消耗的毫秒数:

http://szelei.me/rpc-benchmark-part1/

cpu平均请求耗时(越小越好)

php thrift客户端异步调用参考:

https://github.com/yuxel/thrift-examples

grpc 异步参考:

参考:

https://blog.csdn.net/xuduorui/article/details/77938644

分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较_一个千万开发人员中的程序员-CSDN博客_rpcx和grpc

分布式RPC框架dubbo、motan、rpcx、gRPC、thrift简介与性能比较相关推荐

  1. 【Java23】maven加强,分布式RPC框架Dubbo

    文章目录 1.maven的继承 2.maven的聚合 3.RPC 4.软件演进 5.Dubbo和注册中心zookeeper 6.Dubbo创建接口工程 7.Dubbo创建服务提供者(Provider) ...

  2. grpc框架_分布式RPC框架dubbo、motan、rpcx、gRPC、thrift简介与性能比较

    Dubbo Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.曾有一段时间放弃维护,不过当前 ...

  3. 分布式RPC框架Dubbo详解

    目录 1.架构演进 1.1 单体架构 1.2  垂直架构 1.3 分布式架构 1.4 SOA架构 1.5 微服务架构 2.RPC框架 2.1 RPC基本概念介绍 2.1.1 RPC协议 2.1.2 R ...

  4. dubbo 自定义路由_高性能可扩展分布式RPC框架Dubbo内核原理揭秘

    一.前言 整体来说,一个公司业务系统的演进流程基本都是从单体应用到多体应用.在单体应用时,不同业务模块相互调用直接在本地 JVM 进程内就可以完成;而变为多个应用时,相互之间进行通信的方式就不能简单的 ...

  5. 分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较

    Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成.不过,略有遗憾的是,据说在淘宝内部,dub ...

  6. dubbo-快速入门-分布式RPC框架Apache Dubbo

    文章目录 分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 D ...

  7. 分布式RPC框架Apache Dubbo

    分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 软件架构的发展经历了由单体架构.垂直架构.SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构. 1.1 单体架构 1. ...

  8. 支撑微博千亿调用的轻量级RPC框架:Motan

    随着微博容器化部署以及混合云平台的高速发展,RPC 在微服务化的进程中越来越重要,对 RPC 的需求也产生了一些变化.今天主要介绍一下微博 RPC 框架 Motan,以及为了更好的适应混合云部署所做的 ...

  9. 还发愁项目经验吗?基于Netty实现分布式RPC框架[附完整代码]

    写给大家的话 最近我收到很多读者的来信,对如何学习分布式.如何进行项目实践和提高编程能力,存在很多疑问. 分布式那么难,怎么学?为什么看了那么多书还是掌握不了? 开源的框架比如Dubbo代码太多了,完 ...

最新文章

  1. 中科大硬核“毕业证”:“一生一芯”计划下,5位本科生带自研芯片毕业
  2. java中的递归算法_java中的递归算法
  3. java面试题标签_java面试笔试题 (WEB)
  4. linux多进程知识汇总
  5. 一个ABAP调试器里查看类的静态属性的小技巧
  6. 调用高德逆地理接口_地理编码与逆地理编码
  7. 线性表:1.什么是线性表
  8. MongoDB入门系列(二):Insert、Update、Delete、Drop
  9. 顺序执行命令需要哪个符号链接_18年MBA联考如何安排答题时间及顺序
  10. 《迅雷链精品课》第二课:区块链核心技术框架
  11. Python小工具:批量给视频加水印
  12. 6款程序员必备的免费在线画图工具,贼好用!
  13. 关于自己在大学的一些经历
  14. 管理员技术(二): 访问练习用虚拟机、 命令行基础技巧 、 挂载并访问光盘设备、ls列表及文档创建、复制删除移动...
  15. 新型冠状病毒传染模型SI、SIS、SIR、SEIR
  16. MyBatis 报错 Could not initialize class
  17. 普通程序员怎么赚多份钱?解锁更多赚钱新姿势
  18. 新中大SE(ngpower)增加操作员
  19. Docker快速上手
  20. moviepy中视频帧大小crop

热门文章

  1. 差分法~超详细(公式+原理+例题)
  2. Python Flask 搭建微信小程序后台详解
  3. STM32F407ZGT6使用SDIO方式驱动SD卡
  4. 直播购物商城系统源码
  5. c语言温度检测查表,ntc 测温 单片机 C语言 查表 表格 温度系数表 计算公式
  6. 计算机更新失败变的很卡,电脑升级后还是很卡,到底是哪出问题了?这些错误请你对号入座!...
  7. 支付宝支付 开放平台设置以及公钥私钥生成配置
  8. 2022全网最稳定淘宝商品简版,淘宝主图接口,主图标题
  9. html5 drawimage参数,小程序中canvas的drawImage方法参数详解
  10. Flask框架 请求与响应 模板语法