1、RPC 框架
RPC框架在微服务平台中,微服务间的服务调用,不可避免的会遇到一个问题,该选用哪一个RPC框架好呢?今天我们就请到三位RPC框架,来进行一场选美大赛,看看谁更适合微服务平台中的服务间调用。
Dubbo!阿里开源的分布式服务框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。
Motan!我是微博开源的一套高性能、易于使用的分布式远程服务调用(RPC)框架。
gRPC!我是Google开源的一套面向移动和HTTP/2设计的,高性能的、通用的远程调用框架。
2、RPC框架的配置
配置方式
Motan:我支持 Xml 配置和 Spring注解配置。
Dubbo:我支持 Xml 配置 、 注解配置、 属性配置 、 API 配置 !
gRPC:我,我只支持 API 配置 。
Xml 配置是用xml 文件来配置协议、服务、注册中心等信息,这是 rpc 框架最常用的配置方式,也是最基本的;
属性配置是用properties 文件来配置协议、服务、注册中心等信息,和Xml 配置使用上异曲同工 ;
注释配置是声明 Annotation 用来指定需要解析的包名,使用 spring-boot 启动服务 ,这是很多 RPC 所追求的,简化了我们代码的书写, Maton 也是最新版本才开始支持的;
API 配置是 Dubbo 的 API 配置仅用于 OpenAPI, ESB, Test, Mock 等系统集成 , API 属性与配置项一对一。
服务通信协议
Motan:我支持 Motan 协议,使用tcp 长连接模式,基于 netty通信。
Dubbo:我支持 Dubbo 协议、 Rmi 协议、 Hessian 协议、 HTTP 协议、 WebService 协议、Dubbo Thrift 协议、Memcached 协议!
gRPC:我,我支持 HTTP/2.0 协议,基于 Netty4.1.3 通信。
序列化
Motan:我默认使用对 java 更友好的 hessian2 进行序列化,还支持 Json 格式。
Dubbo:Dubbo 协议缺省序列化为hessian2 , rmi 协议缺省为java , http 协议缺省为 json!
gRPC:哼!说到序列化,我是独一无二的!我使用 ProtoBuf 来定义服务!
主持人: gRPC 使用的 ProtoBuf 是由 Google 开发的一种数据序列化协议,用户使用 .proto 文件定义服务,并支持定义多种类型的方法参数。 ProtoBuf 能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。不过,当前 gRPC 仅支持 Protobuf ,且不支持在浏览器中使用。但由于 gRPC 的设计能够支持支持多种数据格式,所以能够很容易实现对其他数据格式(如 XML 、 JSON 等)的支持。这就是我强大的 IDL 特性!
负载均衡
Motan:我支持 ActiveWeight 、Random 、 RoundRobin 、LocalFirst 、 Consistent 、ConfigurableWeight
Dubbo:我可以支持 Random 、RoundRobin 、ConsistentHash 、 LeastActive。
gRPC:我,我提供了可插拔负载均衡器的机制。
ActiveWeight / LeastActive :低并发度优先, referer 的某时刻的 call 数越小优先级越高。
Random :随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
RoundRobin :轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
LocalFirst :本地服务优先获取策略。
Consistent :一致性 Hash ,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
ConfigurableWeight :权重可配置的负载均衡策略。
容错
Motan:我支持 Failover 失效切换、Failfast 快速失败。
Dubbo:我支持 Failover 、 Failfast 、Failsafe 、 Failback 、 Forking、 Broadcast 。
gRPC:我,我 具有 Failover 失效切换的容错策略。
Failover :失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。
Failfast :快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe :失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback :失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking :并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
Broadcast :广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
注册中心与服务发现
Motan:我支持使用 Consul 作为注册中心、使用 Zookeeper 作为注册中心、点对点直连。
Dubbo:我支持使用 Zookeeper 作为注册中心、使用 Redis 注册中心、使用 Multicast 注册中心、使用 Simple 注册中心。
gRPC:我,我只能让用户自己扩展注册中心 。
性能
Motan:在高并发、高负载场景的场景下,我的 平均 TPS 和平均响应时间依旧保持良好,我具备在高压力场景下的高可用能力。
Dubbo:Dubbo2.0 相比较 Dubbo1.0(默认使用的都是 hessian2序列化)性能均有提升。如对性能有更高要求可以使用dubbo 序列化,由其是在处理复杂对象时。 Dubbo 的设计目的是为了满足高并发小数据量的 rpc 调用,在大数据量下的性能表现并不好,建议使用 rmi 或 http 协议。
gRPC:我采用的是 ProtoBuf 序列化协议 , ProtoBuf 与其他协议的性能对比 ,非常明显 的ProtoBuf 要远远优于其他 。
3、RPC框架的才艺角逐
Motan :通过 spring 配置方式集成,无需额外编写代码即可为服务提供分布式调用能力完全不需要任何 xml 配置文件, Dubbo 的注解配置还需要配合 xml 文件的哦 。
Dubbo :无论从支持的注册中心还是容错机制上看,都是我 Dubbo 的优势更大!
Motan : 明显支持负载均衡的模式我更多 。 我 拥有自定义动态负载均衡、跨机房流量调整等高级服务调度能力。
Dubbo :成熟度更高的我在健壮性和伸缩性上还能比你们差么?让我来一一例举。 说到健壮性 ,监控中心宕掉不影响使用,只是丢失部分采样数据;数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务;注册中心对等集群,任意一台宕掉后,将自动切换到另一台;注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯;服务提供者无状态,任意一台宕掉后,不影响使用;服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。至于伸缩性,注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心;服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者。
Motan :对,我在功能上或许不是那么全面,但我更注重简单、易用以及在高并发高可用场景的使用。服务发现灵活支持多种配置管理组件,基于高并发高负载场景的高可用策略优化,良好的 SPI(Service Provider Interface) 扩展,详细的调用统计,灵活支持多种 RPC 传输协议。
Dubbo :说了这么多你能支持泛型调用么?我能! Dubbo 提供 GenericService 泛型调用接口 , 让用户的调用更加灵活 。
Motan : 我的 工程依赖只涉及核心 5 个模块,且可以按需依赖,不要的说舍弃就舍弃。看看你那么一堆堆的工程,啧啧啧 ……
gRPC : 哼 ! 本宝宝支持 服务的跨语言调用,目前所支持语言类型有 C++ 、 JAVA 、 GO 、 Python 、 Ruby 、 Node.js 、 Android 、 C# 、 PHP 、 Objective-C ,你们可以么?
Motan : 额 ,是啊,我们不能,可是你有服务发现相关机制么?
Dubbo :而且你的负载均衡和容错也太弱了 …..
gRPC : 嘤嘤嘤 ……
4、RPC框架的终极PK
Dubbo作为阿里开源的分布式服务框架,实现高性能的 RPC 调用同时提供了丰富的管理功能
Motan作为微博的 Motan RPC 倾向于服务治理型,与 Dubbo 系列相比在功能上或许不是那么全,扩展实现也没有那么多,高性能轻量级易上手的RPC框架

gRPC作为google2015年才开源的跨语言调用型的RPC框架,侧重于服务的跨语言调用,能够支持大部分的语言进行语言无关的调用,非常适合多语言调用场景。如果你需要支持多语言,跨语言调用的RPC框架,选我吧!
相关推荐
本教程将深入探讨三个主流的Java RPC框架:Dubbo、Dubbox和Motan,以及gRPC,一个由Google推出的高性能、通用的开源RPC框架。以下是关于这些框架的详细讲解。 1. **Dubbo** Dubbo是由阿里巴巴开源的Java RPC框架,...
Go-rpcx 是一个高度可扩展的、功能丰富的分布式RPC(远程过程调用)服务框架,它的设计灵感来源于阿里巴巴的Dubbo和微博的Motan。这个框架是用Golang语言构建的,利用了Golang的net/rpc库,为开发者提供了高效、稳定...
rpc-framework-tutorials Java分布式RPC服务框架教程,包括Dubbo / Dubbox,Motan,gRPC。达博阿里巴巴达 Alibaba 。沙发-RPC 支付宝 。莫坦微。gRPC Google 。英国广播公司百度节约阿夫罗芒果本人基于Netty4 + ...
本项目"p_rpc"提供了一系列关于Java分布式RPC服务框架的示例,包括了Dubbo、Dubbox、Motan以及gRPC这四个知名的框架。 1. **Dubbo** Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架,它提供了丰富的监控...
市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架和spring一样,虽然号称是轻量级,但是用起来却是让我们很蹩脚,大量的配置,繁杂的API设计,其实...
> **注意** :我们这里说的 RPC 框架指的是:可以让客户端直接调用服务端方法就像调用本地方法一样简单的框架,比如我前面介绍的 Dubbo、Motan、gRPC 这些。 如果需要和 HTTP 协议打交道,解析和封装 HTTP 请求和...
与阿里巴巴的Dubbo和微博的Motan等知名RPC框架类似,Doge致力于为Python开发者提供高效、稳定且易于使用的解决方案。 **一、RPC基础与Doge的核心特性** 1. **RPC原理**:远程过程调用允许一个程序调用另一个不在...
描述中的博客链接可能详细介绍了某个特定的RPC实现,例如可能是作者自己开发的轻量级框架,或者是对现有框架如Dubbo、gRPC或Motan的分析。遗憾的是,由于没有实际内容,我们无法深入了解该框架的具体实现和特性。 ...
Dubbo - 阿里出品的使用范围很广的一款高性能,基于 Java 的开源 RPC 框架 Motan - 微博出品的一款用于快速开发高性能分布式服务的跨语言 RPC 框架 brpc - 百度出品的工业级 RPC 框架 grpc - gRPC 是一个先进的,...
目前存在多种RPC框架,它们大致可以分为两类:一类是偏重于服务治理的框架,如阿里巴巴开源的Dubbo和Motan等,这些框架支持高性能远程调用、服务发现与治理,非常适合大型服务的微服务化拆分及管理,但是它们与特定...
另外,还有一些其他的服务治理框架,如HSF(阿里云的高性能服务框架)、Motan(微博的开源服务框架)等,它们各自具备特定的优势和适用场景。 总结,系统拆分是应对大型项目复杂性的有效手段,Dubbo作为优秀的服务...
1:为什么要写这个RPC市面上常见的RPC框架很多,grpc,motan,dubbo等,但是随着越来越多的元素加入,复杂的架构设计等因素似使得这些框架和spring一样,虽然号称是轻量级,但是用起来却是让我们很蹩脚,大量的配置...
1. **Dubbo**:阿里巴巴开源的RPC框架,支持服务治理,高吞吐量,低延迟,适合大型分布式系统。 2. **gRPC**:Google开发的高性能、开源和通用的RPC框架,基于HTTP/2协议,支持ProtoBuf协议进行序列化。 3. **Thrift...
motan dubbo grpc zbus 6、MQ消息队列 rabbitmq redismq 阿里云商业MQ activemq zbus 7、缓存 ehcache redis 分布式二级缓存ehredis 8、分布式session 9、分布式锁 10、任务调度 cron4j ...
在实践中,为了克服RPC框架带来的测试复杂性,可能需要对开源框架进行扩展,例如支持RESTful接口,以简化测试数据的构造和集成。 总的来说,微服务框架的落地需要全面考虑业务需求、技术选型、运维挑战以及团队协作...
荣誉Kudos是一个基于微服务体系结构的简单,高性能,易于扩展和易于部署的分布式游戏服务框架,它基于rpcx的RPC,支持柚通信协议,... 它的性能远远高于Dubbo,Motan,thrift等框架,是grpc的两倍。 支持服务治理。
- **Dubbo/DubboX/Motan**:阿里巴巴开源的高性能、轻量级的微服务框架,支持多种序列化协议和丰富的服务治理特性。 - **gRPC**:Google开源的一款高性能、开放源代码的远程过程调用(RPC)框架,支持多种语言。 ...
Seata不仅限于特定的RPC框架,它已支持Dubbo、Spring Cloud、Sofa-RPC、Motan和gRPC等,这意味着它能够很好地与其他微服务框架集成,提供跨服务的事务一致性。 高可用性是Seata的另一个关键特性。Seata支持基于...
几乎所有的 RPC 框架都宣称自己是“高性能”的, 那么实际结果到底如何呢, 让我们来做一个性能测试吧. 测试结果 Round-5 2019-02-11 Round-4 2018-08-05 Round-3 2018-05-12 Round-2 2018-03-25 Round-1 2018-01-28 ...