thrift,gRPC,rpcx,motan,dubbox等rpc框架对比
thrift,gRPC,rpcx,motan,dubbox等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来遍历处理 |
|
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.****.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 异步参考:
http://blog.****.net/u011262847/article/details/75944548