当前位置: 首页 > article >正文

spring cloud alibaba-dubbo3 rpc运行原理

Dubbo3 运行原理

Dubbo3 是 Apache Dubbo 的最新版本,是一个高性能、轻量级的分布式服务框架,支持微服务架构。相比 Dubbo2,它在协议、扩展性、服务治理、流控等方面做了大量改进,特别是引入了 Triple 协议,使其更加适应现代微服务架构需求。


核心架构

Dubbo 的运行机制包括以下核心组件:

  1. 服务提供者(Provider)
  • 提供服务的具体实现。
  • 启动时通过注册中心暴露服务。
  1. 服务消费者(Consumer)
  • 调用远程服务。
  • 启动时从注册中心订阅服务。
  1. 注册中心(Registry)
  • 服务的元数据存储与发现。
  • 负责服务的动态注册和发现。
  • Dubbo3 支持 Zookeeper、Nacos、Consul 等作为注册中心。
  1. 协议层(Protocol)
  • Dubbo3 默认采用基于 gRPC 的 Triple 协议,支持 HTTP/2 和 protobuf。
  • 兼容旧版 Dubbo 协议,支持多协议。
  1. 调用链路
  • 支持透明化的 RPC 调用,通过拦截器实现动态过滤和增强。
  1. 治理与监控
  • 包括负载均衡、限流熔断、服务降级、监控和日志等。

Dubbo3 的运行流程

服务注册与发现
  1. 服务注册
  • Provider 启动时,向注册中心注册服务元数据(包括服务名称、地址、端口、接口信息等)。
  1. 服务发现
  • Consumer 启动时,从注册中心订阅所需服务列表,动态感知服务的上线、下线和变更。
服务调用
  1. 动态代理
  • Consumer 通过动态代理生成服务接口的本地实现,用户调用时,实际是发起一个远程 RPC 请求。
  1. 负载均衡
  • Consumer 根据配置的负载均衡策略(如随机、轮询、一致性哈希等)选择目标 Provider。
  1. 调用链路
  • Consumer 发起远程调用请求,经过协议层序列化后,通过网络传输到 Provider。
  1. 响应返回
  • Provider 接收到请求后,执行具体方法,结果通过网络返回给 Consumer。

Dubbo3 的主要特性

1. Triple 协议
  • 基于 gRPC 的高性能协议,支持 HTTP/2。
  • 使用 protobuf 作为默认序列化方式,极大提高了跨语言支持能力。
  • 支持流式通信(Streaming)和双向流通信(Bi-Directional Streaming)。
2. 服务元数据中心
  • Dubbo3 使用独立的元数据中心存储服务信息,支持 JSON 和 protobuf 格式。
  • 提供更灵活的服务治理能力,如版本控制、元数据的动态更新等。
3. 增强的服务治理
  • 限流熔断 :支持基于 QPS 和并发数的限流。
  • 负载均衡 :支持多种策略(随机、最少活跃调用、一致性哈希等)。
  • 服务降级 :当服务不可用时,提供兜底策略。
4. 多语言支持
  • 支持 Java、Go、Python 等多语言互通,适配混合语言开发场景。
5. 流控与链路增强
  • 支持链路追踪(如 OpenTelemetry)。
  • 内置流控和超时机制。

Dubbo3 的运行时组件

  1. Protocol(协议层)
    • 负责序列化、反序列化和通信。
    • Triple 协议是默认协议,也支持 Dubbo2 协议和 HTTP 协议。
  2. Cluster(集群层)
    • 提供负载均衡、失败重试、熔断降级等功能。
    • 默认策略为随机(Random)。
  3. Invoker(调用层)
    • 是 Dubbo 的核心接口,封装了服务调用逻辑。
  4. Filter(过滤器)
    • 类似拦截器的功能,可在服务调用前后执行自定义逻辑。
  5. SPI(可扩展机制)
    • Dubbo 的核心设计之一,基于 Java SPI 的增强实现,支持自定义扩展组件。

Dubbo3 的改进点

特性Dubbo2Dubbo3
协议Dubbo 自定义协议Triple(基于 gRPC)
序列化方式Hessian、Java 原生序列化Protobuf
多语言支持较差极好
服务元数据注册中心嵌套存储独立元数据中心
流式通信不支持支持流式和双向流通信
服务治理基础的限流、熔断增强的治理功能

Dubbo3 运行原理示意图

 
 
plaintext
复制代码
+-----------------------------------+ | 注册中心 | +-----------------------------------+ ↑ ↑ | 服务注册 | 服务订阅 | | +-----------+ +-----------+ | Provider | | Consumer | +-----------+ +-----------+ ↓ ↑ +-----------------------------------+ | Triple 协议通信层 | +-----------------------------------+ ↓ ↑ +-----------+ +-----------+ | 方法执行 | | 动态代理 | +-----------+ +-----------+

总结

Dubbo3 相较于 Dubbo2,适配了现代微服务架构的需求,尤其是在协议、跨语言支持和服务治理方面做出了显著提升。通过引入 Triple 协议和元数据中心,Dubbo3 提供了更高的性能和更灵活的扩展性,是大规模分布式服务的强大工具。


http://www.kler.cn/a/473024.html

相关文章:

  • 网络基础1 http1.0 1.1 http/2的演进史
  • Android 来电白名单 只允许联系人呼入电话
  • Eclipse配置Tomcat服务器(最全图文详解)
  • 《Spring Framework实战》4:Spring Framework 文档
  • 【第01阶段-基础必备篇-第二部分--Python之基础】04 函数
  • rabbitmq——岁月云实战笔记
  • 最新版Edge浏览器加载ActiveX控件之Adobe PDF阅读器控件
  • 【MySQL高可用】什么时候分库、分表?怎样进行分库分表?
  • 网络安全 | 网络安全的未来趋势
  • 数智大咖谈 | 志邦家居:智慧家居与智慧管理并驾齐驱
  • select下拉框,首次进入页面没有显示value的情况
  • 如何构建多层决策树
  • c#编写基于ffmpeg的视频裁剪
  • 【VBA】【EXCEL】将某列内容横向粘贴到指定行
  • 点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)
  • P1909 [NOIP2016 普及组] 买铅笔 题解
  • python初体验: 处理excel数据
  • redis的学习(四)
  • UART串口数据分析
  • 一个海外产品经理的 AI 日常
  • Linux下常用命令
  • Lua协同程序(线程)
  • 【Linux】进程铺垫——冯诺依曼体系与操作系统概念
  • 代码随想录-训练营-day1
  • SQL 数据类型
  • 个人博客搭建(二)—Typora+PicGo+OSS