微服务 Spring Cloud 8,开源RPC框架如何选型?

news/2024/7/10 18:45:50 标签: 微服务, spring cloud, 开源

在这里插入图片描述

目录

    • 一、开源RPC框架有哪些?
      • 1、跟语言平台绑定的开源RPC框架
      • 2、跨语言平台的开源RPC框架
    • 二、跟语言平台绑定的开源RPC框架 -- Dubbo
      • 1、Dubbo的架构主要包含四个角色
      • 2、Dubbo的调用框架是如何实现的?
    • 三、如何选择?
    • 四、跨语言平台的开源RPC框架 -- gRPC
    • 五、跨语言平台的开源RPC框架 -- Thrift
    • 六、对比选型
    • 七、总结

大家好,我是哪吒。

一、开源RPC框架有哪些?

1、跟语言平台绑定的开源RPC框架

  1. Dubbo:国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持Java语言。
  2. Motan:微博内部使用的RPC框架,于2016年对外开源,仅支持Java语言。
  3. Tars:腾讯内部使用的RPC框架,于2017年对外开源,仅支持C++语言。
  4. Spring Cloud:国外Pivotal公司2014年对外开源的RPC框架,仅支持Java语言。

2、跨语言平台的开源RPC框架

  1. gRPC:Google于2015年对外开源的跨语言RPC框架,支持多种语言。
  2. Thrift:最初是由Facebook开发的内部系统跨语言的RPC框架,2007年贡献给了Apache基金,成为Apache开源项目之一,支持多种语言。

如果你的业务场景仅仅局限于一种语言的话,可以选择跟语言绑定的RPC框架中的一种;如果涉及多个语言平台之间的相互调用,就应该选择跨语言平台的RPC框架。

二、跟语言平台绑定的开源RPC框架 – Dubbo

1、Dubbo的架构主要包含四个角色

  1. 服务提供者(Provider):提供服务的实体,通常是一个具体的业务服务实现类。
  2. 服务消费者(Consumer):调用远程服务的实体,通常是一个具体的业务服务调用方。
  3. 注册中心(Registry):负责服务的注册与发现,通常是一个高可用的分布式服务注册中心。
  4. 监控中心(Monitor):收集服务调用的统计信息,通常用于监控服务调用的性能、质量等。

在这里插入图片描述

具体的交互流程是Consumer一端通过注册中心获取到Provider节点后,通过Dubbo的客户端SDK与Provider建立连接,并发起调用。Provider一端通过Dubbo的服务端SDK接收到Consumer的请求,处理后再把结果返回给Consumer。

可以看出服务消费者和服务提供者都需要引入Dubbo的SDK才来完成RPC调用,因为Dubbo本身是采用Java语言实现的,所以要求服务消费者和服务提供者也都必须采用Java语言实现才可以应用。

2、Dubbo的调用框架是如何实现的?

Dubbo的调用框架的实现主要基于以下几个核心组件和服务治理策略:

  1. 服务注册与发现:Dubbo通过注册中心进行服务的注册与发现。服务提供者在启动时,将自己的元数据(如服务IP、Port等)注册到注册中心。服务消费者在启动时,向注册中心订阅服务提供者的元数据。注册中心将服务提供者地址列表提供给消费者,并在数据变更时推送给订阅的消费者。
  2. RPC调用:在获取服务提供者的元数据后,服务消费者可以发起RPC调用。Dubbo的RPC层负责建立网络通信连接,实现服务的远程调用。同时,RPC层还支持负载均衡、容灾和集群功能,以确保调用的稳定性和性能。
  3. 服务监控:在RPC调用前后,Dubbo会向监控中心上报统计信息,如并发数、调用接口等。这些信息可以用于服务的性能监控和调优。

此外,Dubbo的实现还采用了分层的思想,每层负责不同的职责,使得用户可以基于Dubbo框架进行二次开发,扩展其功能。同时,Dubbo还支持与Spring框架的无缝集成,使得用户可以更方便地将其应用于实际的业务场景中。

三、如何选择?

  • SpringCloud提供了服务注册组件、配置中心组件、负载均衡组件、断路器组件、分布式消息追踪组件等一系列组件;
  • Dubbo只提供了最基础的RPC框架的功能,其他微服务组件都需要自己去实现。
  • Spring Cloud的RPC通信采用了HTTP协议,相比Dubbo所采用的私有协议来说,在高并发的通信场景下,性能相对要差一些,所以对性能有苛刻要求的情况下,可以考虑Dubbo。

因此,在堆性能没有苛刻要求的场景下,都会选择SpringCloud。

四、跨语言平台的开源RPC框架 – gRPC

gRPC通过IDL(Interface Definition Language)文件定义服务接口的参数和返回值类型,然后通过代码生成程序生成服务端和客户端的具体实现代码,这样在gRPC里,客户端应用可以像调用本地对象一样调用另一台服务器上对应的方法。

在这里插入图片描述
它的主要特性包括三个方面。

  1. 通信协议采用了HTTP/2,HTTP/2提供了连接复用、双向流、服务器推送、请求优先级、首部压缩等机制,在通信过程中可以节省带宽、降低TCP连接次数、节省CPU、尤其对移动端来说,可以帮助延长电池寿命。
  2. IDL使用了ProtoBuf,ProtoBuf是由Google开发的一种数据序列化协议,它的压缩和传输效率极高,语法也简单,所以被广泛应用在数据存储和通信协议上。
  3. 多语言支持,能够基于多种语言自动生成对应语言的客户端和服务端的代码。

五、跨语言平台的开源RPC框架 – Thrift

Thrift是一种轻量级的跨语言RPC通信方案,支持多达25种编程语言。为了支持多种语言,跟gRPC一样,Thrift也有一套自己的接口定义语言IDL,可以通过代码生成器,生成各种编程语言的Client端和Server端的SDK代码,这样就保证了不同语言之间可以相互通信。它的架构图可以用下图来描述。

在这里插入图片描述
从这张图上可以看出Thrift RPC框架的特性。

  • 支持多种序列化格式:如Binary、Compact、JSON、Multiplexed等。
  • 支持多种通信方式:如Socket、Framed、File、Memory、zlib等。
  • 服务端支持多种处理方式:如Simple 、Thread Pool、Non-Blocking等。

六、对比选型

那么涉及跨语言的服务调用场景,到底该选择gRPC还是Thrift呢?

从成熟度上来讲,Thrift因为诞生的时间要早于gRPC,所以使用的范围要高于gRPC,在HBase、Hadoop、Scribe、Cassandra等许多开源组件中都得到了广泛地应用。而且Thrift支持多达25种语言,这要比gRPC支持的语言更多,所以如果遇到gRPC不支持的语言场景下,选择Thrift更合适。

但gRPC作为后起之秀,因为采用了HTTP/2作为通信协议、ProtoBuf作为数据序列化格式,在移动端设备的应用以及对传输带宽比较敏感的场景下具有很大的优势,而且开发文档丰富,根据ProtoBuf文件生成的代码要比Thrift更简洁一些,从使用难易程度上更占优势,所以如果使用的语言平台gRPC支持的话,建议还是采用gRPC比较好。

七、总结

以上就是我对几种使用最广泛的开源RPC框架的选型建议,也是基于它们目前现状所作出的判断,从长远来看,支持多语言是RPC框架未来的发展趋势。正是基于此判断,各个RPC框架都提供了Sidecar组件来支持多语言平台之间的RPC调用。

  • Dubbo在去年年底又重启了维护,并且宣称要引入Sidecar组件来构建Dubbo Mesh提供多语言支持。
  • Motan也在去年对外开源了其内部的Sidecar组件:Motan-go,目前支持PHP、Java语言之间的相互调用。
  • Spring Cloud也提供了Sidecar组件spring-cloud-netflix-sideca,可以让其他语言也可以使用Spring Cloud的组件。

所以未来语言不会成为使用上面这几种RPC框架的约束,而gRPC和Thrift虽然支持跨语言的RPC调用,但是因为它们只提供了最基本的RPC框架功能,缺乏一系列配套的服务化组件和服务治理功能的支撑,所以使用它们作为跨语言调用的RPC框架,就需要自己考虑注册中心、熔断、限流、监控、分布式追踪等功能的实现,不过好在大多数功能都有开源实现,可以直接采用。


http://www.niftyadmin.cn/n/5196204.html

相关文章

分享个pyppeteer 通用爬虫

突然发现自己之前写过的代码 虽然现在爬虫都逆向了,但是有时候获取个一次性数据,或者不需要维护的时候 pyppeteer 还是非常好用的。 因为pyppeteer 是puppeteer的python 版本 所以不是特别火 网上资料也非常少 .简单记录一下 如果想详细了解https://z…

智慧城市安全监控的新利器

在传统的城市管理中,井盖的监控一直是一个难题,而井盖异动传感器的出现为这一问题提供了有效的解决方案。它具有体积小、重量轻、安装方便等特点,可以灵活地应用于各种类型的井盖,实现对城市基础设施的全方位监控。 智能井盖监测终…

Python大数据之linux学习总结——day11_ZooKeeper

ZooKeeper ZK概述 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构,ZooKeeper树中的每个节点被称为—Znode。且树…

上海亚商投顾:三大指数小幅上涨 HBM概念股全天强势

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数早盘窄幅震荡,午后集体拉升翻红,黄白二线走势分化,题材热点快速轮…

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐,都需要用到不同类型的软件,哪怕软件体积不大,也必须安装,否则到用时找不到就非常麻烦了。 其实,很多软件不一定一样不剩地全部安装一遍,一方面原因是用的不多,另一方面多少有点…

车载通信架构 —— 新车载总线类型下(以太网)的通信架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

时间序列预测实战(十七)利用Prophet实现电力负荷长期预测(附代码+数据集+详细讲解)

一、本文介绍 Prophet是一个由Facebook开发的开源工具,用于时间序列预测。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要思想是将数据分解为如下三个部分:趋势、季节性、节假日和特殊事件。这个模型非常适合…

大数据HCIE成神之路之数学(3)——概率论

概率论 1.1 概率论内容介绍1.1.1 概率论介绍1.1.2 实验介绍 1.2 概率论内容实现1.2.1 均值实现1.2.2 方差实现1.2.3 标准差实现1.2.4 协方差实现1.2.5 相关系数1.2.6 二项分布实现1.2.7 泊松分布实现1.2.8 正态分布1.2.9 指数分布1.2.10 中心极限定理的验证 1.1 概率论内容介绍…