微服务rpc框架选美

Perfectionist Perfectionist     2022-11-18     418

关键词:

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

1、RPC 框架谁最美?

 

技术分享图片
Hello,everybody!说到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 调用同时提供了丰富的管理功能,是一款应用广泛的优秀的 RPC 框架,但现在较少维护更新。如果你需要一款高成熟度的服务治理型的RPC框架,不如选我!

技术分享图片
Motan作为微博的 Motan RPC 倾向于服务治理型,与 Dubbo 系列相比在功能上或许不是那么全,扩展实现也没有那么多,但如果你需要一款高性能轻量级易上手的RPC框架,记得选我!

技术分享图片

gRPC作为google2015年才开源的跨语言调用型的RPC框架,侧重于服务的跨语言调用,能够支持大部分的语言进行语言无关的调用,非常适合多语言调用场景。如果你需要支持多语言,跨语言调用的RPC框架,选我吧!

技术分享图片

看了以上三位RPC框架的选美比赛不知道大家是否都有了自己的选择。当然,现如今的市场中开源的RPC远远不止这三个,到底哪个才是你现在所需要的,这里也只是个参考,也是我们在微服务中RPC框架选择的一个方向,最终的选择还是要“因地制宜”。

 

技术分享图片

 

作为踏入微服务行列的普元,我们的微服务平台采用了 Maton RPC 框架,高并发高负载 、轻量易维护 以及无需任何额外代码和配置的 Spring 注解配置,都是我们所需要的。当然我们也并不是完全满足于当前的Maton 功能,不过 Motan 良好的扩展机制,也给我们提供了便利,我们扩展了 ETCD 注册中心以及我们自己的日志记录方式,当然还有更多的贴合我们实际应用的改造。相信在每个正在寻找微服务交互的 RPC 框架的你们,经过反复的对比研究,也能找到你们心中的那个唯一!




微服务治理平台的rpc方案实现

导读:本文主要探讨了rpc框架在微服务化中所处的位置,需要解决的问题。同时介绍了用友云微服务治理平台的rpc解决方案,为什么选择该方案、该方案提供的好处是什么。同时也会介绍用友RPC框架的基本结构以及在实现时所用... 查看详情

布道微服务_10注册中心与rpc框架的选型

文章目录开源注册中心Nacos其他关注的问题高可用性数据一致性CAP三者不能被同时满足选型经验RPC框架选型gRPCThrift开源注册中心Nacos毫无疑问,现在就选Nacos即可 查看详情

布道微服务_10注册中心与rpc框架的选型

文章目录开源注册中心Nacos其他关注的问题高可用性数据一致性CAP三者不能被同时满足选型经验RPC框架选型gRPCThrift开源注册中心Nacos毫无疑问,现在就选Nacos即可 查看详情

分布式与微服务系列分布式rpc框架apachedubbo服务(代码片段)

分布式RPC框架ApacheDubbo服务一、ApacheDubbo概述1.1、Dubbo简介1.2、什么是RPC?1.3、什么是服务发现?1.3、Dubbo架构二、服务注册中心Zookeeper2.1、Zookeeper介绍2.2、安装Zookeeper2.3、启动、停止Zookeeper三、Dubbo快速入门3.1、服务提供... 查看详情

常用rpc框架及如何设计一个rpc框架

参考技术A上一篇<<<微服务架构与SOA面向服务架构的区别下一篇>>>SpringCloud与SpringCloudAlibaba的区别推荐阅读:<<<架构演变之单体架构<<<架构演变之分布式架构<<<架构演变之面向服务架构(SOA)<<&l... 查看详情

腾讯正式对外开源高性能rpc开发框架与微服务平台tars

Tars是将腾讯内部使用的微服务架构TAF(TotalApplicationFramework)多年的实践成果总结而成的开源项目,目前已于4月10日正式对外开源。 作为支持多语言的高性能RPC开发框架和配套一体化的服务治理平台,Tars可以帮助企业或者用户... 查看详情

rpc-client异步收发核心细节?

第一章聊了【“为什么要进行服务化,服务化究竟解决什么问题”】第二章聊了【“微服务的服务粒度选型”】第三章聊了【“为什么说要搞定微服务架构,先搞定RPC框架?”】上一章聊了【“微服务架构之RPC-client序列化细节... 查看详情

golanggolang微服务框架介绍

...阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golangnet/rpc实现。谈起分布式的RPC框架,比较出名的是阿里巴巴的dubbo,包括由当当网维护的dubbox。 不知道dubbo在阿里的内部竞争中败给了HSF,还是阿里有... 查看详情

go-zero微服务框架rpc的使用(代码片段)

...blog.csdn.net/yyz_1987/article/details/118358038以终端状态上送监控服务为例,记录下go-zero微服务的简单使用,实现一个简易的后台监控云服务,监控所有出厂状态上报的终端状态。新建一个Golang服务后台项目代码的目录, 查看详情

go微服务——rpc(代码片段)

...实现RPC1.1.4.RPC调用流程1.1.5.网络传输数据格式1.1.6.实现RPC服务端1.1.7.实现RPC客户端1.1.8.实现RPC通信测试1.RPC1.1.1.RPC简介远程过程调用(RemoteProcedureCall,RPC)是一个计算机通信 查看详情

rpc原理

今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢?一、需求缘起服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,... 查看详情

用友云服务治理平台助力企业微服务架构落地

本文主要阐述使用微服务架构时,治理框架或者平台需要解决的主要问题,微服务落地实施过程中所遇到的关键问题和对应解决方案。同时,文章也介绍用友云旗下的微服务治理平台的核心功能和技术架构,以及微服务治理平台... 查看详情

从rpc到服务化框架设计

...:allendbwu,腾讯PCG后台开发工程师目前互联网系统都是微服务化,那么就需要RPC调用,因此本文梳理了从RPC基本框架协议到整个服务化框架体系建设中所包含的知识点,重点在于RPC框架和服务治理能力的梳理,本文定位于一个科... 查看详情

计网-怎样实现rpc框架(代码片段)

...名注册和发现负载均衡的设计可用性和容灾小结Pre随着微服务架构的盛行,远程调用成了开发微服务必不可少的能力,RPC框架作为微服务体系的底层支撑,也成了日常开发的必备工具。当下,RPC框架已经不仅是进... 查看详情

从rpc到服务化框架设计

...lendbwu,腾讯PCG后台开发工程师目前互联网系统都是微服务化,那么就需要RPC调用,因此本文梳理了从RPC基本框架协议到整个服务化框架体系建设中所包含的知识点,重点在于RPC框架和服务治理能力的梳理,本... 查看详情

微服务框架-springcloud简介

SpringCloud是一个微服务框架,相比Dubbo等RPC框架, SpringCloud提供的全套的分布式系统解决方案。 SpringCloud对微服务基础框架Netflix的多个开源组件进行了封装,同时又实现了和云端平台以及和SpringBoot开发框架的集成。SpringClou... 查看详情

servicemesh&istio

参考技术A服务网格(ServiceMesh)号称是下一代微服务架构。互联网公司,经常使用的是微服务分层架构。画外音:为什么要服务化,详见服务化解决了什么问题?随着数据量不断增大,吞吐量不断增加,业务越来越复杂,服务的... 查看详情

微服务

微服务业务采用模块化的分层式架构实现高内聚,松耦合,利于重构代码服务注册,服务发现,健康检查  注册在服务端框架,健康检查逻辑由具体的业务定制,服务发现,负载均衡在服务客户端框架  RPC/RESTful  对浏览... 查看详情