分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较

Posted 微wx笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较相关的知识,希望对你有一定的参考价值。

Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。不过,略有遗憾的是,据说在淘宝内部,dubbo由于跟淘宝另一个类似的框架HSF(非开源)有竞争关系,导致dubbo团队已经解散(参见http://www.oschina.net/news/55059/druid-1-0-9 中的评论),反到是当当网的扩展版本仍在持续发展,墙内开花墙外香。其它的一些知名电商如当当、京东、国美维护了自己的分支或者在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 框架的比较,敬请收藏本文网址

以下是它们的功能比较:

 DubboMontanrpcxgRPCThrift
开发语言JavaJavaGo跨语言跨语言
分布式(服务治理)××
多序列化框架支持
 
√ 
(当前支持Hessian2、Json,可扩展)

 
× 
(只支持protobuf)
× (thrift格式)
多种注册中心××
管理中心××
跨编程语言×× (支持php client和C server)×

对于RPC的考察, 性能是很重要的一点,因为RPC框架经常用在服务的大并发调用的环境中,性能的好坏决定服务的质量以及公司在硬件部署上的花费。

本文通过一个统一的服务,测试这四种框架实现的完整的服务器端和客户端的性能。
这个服务传递的消息体有一个protobuf文件定义:

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       15
      
      
       16
      
      
       17
      
      
       18
      
      
       19
      
      
       20
      
      
       21
      
      
       22
      
      
       23
      
      
       24
      
      
       25
      
      
       26
      
      
       27
      
      
       28
      
      
       29
      
      
       30
      
      
       31
      
      
       32
      
      
       33
      
      
       34
      
      
       35
      
      
       36
      
      
       37
      
      
       38
      
      
       39
      
      
       40
      
      
       41
      
      
       42
      
      
       43
      
      
       44
      
      
       45
      
      
       46
      
      
       47
      
      
       48
      
      
       49
      
      
       syntax = 
       "proto2";
      
      
      
       package main;
      
      
      
       option optimize_for = SPEED;
      
      
      
      
       message BenchmarkMessage 
      
        
       required 
       string field1 = 
       1;
      
        
       optional 
       string field9 = 
       9;
      
        
       optional 
       string field18 = 
       18;
      
        
       optional 
       bool field80 = 
       80 [default=
       false];
      
        
       optional 
       bool field81 = 
       81 [default=
       true];
      
        
       required 
       int32 field2 = 
       2;
      
        
       required 
       int32 field3 = 
       3;
      
        
       optional 
       int32 field280 = 
       280;
      
        
       optional 
       int32 field6 = 
       6 [default=
       0];
      
        
       optional 
       int64 field22 = 
       22;
      
        
       optional 
       string field4 = 
       4;
      
        
       repeated 
       fixed64 field5 = 
       5;
      
        
       optional 
       bool field59 = 
       59 [default=
       false];
      
        
       optional 
       string field7 = 
       7;
      
        
       optional 
       int32 field16 = 
       16;
      
        
       optional 
       int32 field130 = 
       130 [default=
       0];
      
        
       optional 
       bool field12 = 
       12 [default=
       true];
      
        
       optional 
       bool field17 = 
       17 [default=
       true];
      
        
       optional 
       bool field13 = 
       13 [default=
       true];
      
        
       optional 
       bool field14 = 
       14 [default=
       true];
      
        
       optional 
       int32 field104 = 
       104 [default=
       0];
      
        
       optional 
       int32 field100 = 
       100 [default=
       0];
      
        
       optional 
       int32 field101 = 
       101 [default=
       0];
      
        
       optional 
       string field102 = 
       102;
      
        
       optional 
       string field103 = 
       103;
      
        
       optional 
       int32 field29 = 
       29 [default=
       0];
      
        
       optional 
       bool field30 = 
       30 [default=
       false];
      
        
       optional 
       int32 field60 = 
       60 [default=-
       1];
      
        
       optional 
       int32 field271 = 
       271 [default=-
       1];
      
        
       optional 
       int32 field272 = 
       272 [default=-
       1];
      
        
       optional 
       int32 field150 = 
       150;
      
        
       optional 
       int32 field23 = 
       23 [default=
       0];
      
        
       optional 
       bool field24 = 
       24 [default=
       false];
      
        
       optional 
       int32 field25 = 
       25 [default=
       0];
      
        
       optional 
       bool field78 = 
       78;
      
        
       optional 
       int32 field67 = 
       67 [default=
       0];
      
        
       optional 
       int32 field68 = 
       68;
      
        
       optional 
       int32 field128 = 
       128 [d

以上是关于分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较的主要内容,如果未能解决你的问题,请参考以下文章

分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较

分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较

分布式RPC框架性能大比拼 dubbomotanrpcxgRPCthrift的性能比较

Java分布式 RPC 框架性能大比拼,Dubbo最差?

Java RPC 分布式框架性能大比拼,Dubbo排老几?

2020 新春流行的RPC框架性能大比拼

(c)2006-2024 SYSTEM All Rights Reserved IT常识