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

Dubbo2 与 Dubbo3 的主要区别与演进

Dubbo2 与 Dubbo3 的主要区别与演进

Dubbo 在 2.x 与 3.x 版本中经历了比较大的架构调整,尤其是在 协议层注册中心模式云原生支持 上。本文将重点对比两者在服务注册与发现模式上的区别,并解释为什么 Dubbo3 采用了 应用级注册元数据服务 (Metadata Service) 的新设计。


1. 协议层的变化

  • Dubbo2:主要使用自研的 Dubbo 协议,基于 TCP 长连接,但多路复用能力有限。
  • Dubbo3:引入 Triple 协议,基于 HTTP/2,兼容 gRPC,支持多路复用与流式调用,更加适合云原生和跨语言场景。

2. 服务注册模式

Dubbo2:接口级注册

  • 注册路径(以 Zookeeper 为例):

    /dubbo/com.xxx.api.OrderService/providers
    /dubbo/com.xxx.api.UserService/providers
    
  • Provider 注册内容:接口名、group、version、协议、地址、序列化方式等。

  • Consumer 订阅逻辑

    • 每消费一个接口,就要在注册中心建立一次订阅(watch)。
    • 接口越多,Consumer 与注册中心之间的订阅数量就越大。
  • 问题

    • 一个应用暴露 100 个接口,注册中心就有 100 个节点。
    • Consumer 想用 100 个接口,就要订阅 100 个节点。
    • 大规模场景下,订阅和推送的压力巨大。

Dubbo3:应用级注册

  • 注册路径

    /dubbo/OrderServiceApp/providers
    
  • Provider 注册内容:应用名、实例地址 (ip:port)、协议、实例元数据。

  • 接口信息存储:接口名、方法签名、治理配置等都放到 元数据服务 (Metadata Service)

  • Consumer 订阅逻辑

    • 只需订阅应用级节点,获得所有实例地址。
    • 再通过元数据服务获取接口清单和方法详情。
  • 优势

    • Consumer 与注册中心之间的订阅数量大幅下降。
    • 注册中心压力减少,更适合大规模和多语言场景。

3. 元数据服务 (Metadata Service)

Dubbo3 的应用级注册依赖 元数据服务 来存储接口和治理信息。

元数据的存储方式

  1. 注册中心存储(默认)
    Provider 启动时将 metadata 一起存入注册中心,Consumer 订阅时同步获取。

    • ✅ 简单,无需额外组件。
    • ❌ 注册中心压力依然较大。
  2. 远程元数据中心 (Remote Metadata Center)
    元数据存放在独立的存储(如 Nacos、Redis、Zookeeper),注册中心只存实例信息。

    • ✅ 注册中心轻量化,扩展性更好。
    • ❌ 部署复杂度上升。
  3. 本地缓存
    Provider 与 Consumer 会在本地持久化 metadata,作为兜底方案,保证在中心不可用时仍可运行。

元数据包含的内容

  • 接口名、方法签名、参数类型
  • 服务版本、分组
  • 路由规则、限流/熔断配置
  • 自定义扩展参数

4. Dubbo2 vs Dubbo3 对比表

对比项Dubbo2(接口级)Dubbo3(应用级 + Metadata)
注册粒度接口(serviceInterface)应用(applicationName)
节点数量接口数 × 实例数实例数
注册数据接口名、group、version、地址、参数应用名、实例地址、协议、metadata
订阅开销Consumer 每消费一个接口需订阅一个节点Consumer 只订阅应用节点,再解析 metadata
推送模式接口变更 → 注册中心推送应用实例变更 → 注册中心推送,接口信息走 metadata
扩展性接口多时注册中心压力大大规模更轻量,天然支持多语言和云原生

5. 总结

  • Dubbo2:接口级注册,直观但在大规模接口场景下订阅和推送压力过大。
  • Dubbo3:应用级注册 + 元数据服务,将实例信息与接口信息分离,显著降低注册中心压力,更适合大规模、云原生、跨语言的微服务架构。

可以简单理解为:

  • Dubbo2 注册中心是 “接口目录”
  • Dubbo3 注册中心是 “应用实例目录”,接口信息由 metadata service 维护。

文章转载自:

http://NclGZ6Yb.rcwzf.cn
http://HljHX2Ev.rcwzf.cn
http://v0dDmBdV.rcwzf.cn
http://TA0NB0iV.rcwzf.cn
http://FOfmNMsG.rcwzf.cn
http://nS5Ol185.rcwzf.cn
http://H7fdF9PH.rcwzf.cn
http://wCg2O7uN.rcwzf.cn
http://C27m8kon.rcwzf.cn
http://VwANxTyJ.rcwzf.cn
http://3RuCgJ5L.rcwzf.cn
http://jfuu5nAt.rcwzf.cn
http://Nk7fa7SM.rcwzf.cn
http://1H7JZ0aP.rcwzf.cn
http://36Ma65ol.rcwzf.cn
http://oFzQLzdW.rcwzf.cn
http://CjBhMsX5.rcwzf.cn
http://vSEoagEE.rcwzf.cn
http://FSEPFrd5.rcwzf.cn
http://PEoqfxKf.rcwzf.cn
http://tQxoQMFD.rcwzf.cn
http://Za9mk5JR.rcwzf.cn
http://pjFnyvjD.rcwzf.cn
http://wN7CIlnx.rcwzf.cn
http://pW0JJgDn.rcwzf.cn
http://veVZIbbD.rcwzf.cn
http://KGrfxnGQ.rcwzf.cn
http://FC66lAlN.rcwzf.cn
http://Uly8F4qI.rcwzf.cn
http://jLMM5paK.rcwzf.cn
http://www.dtcms.com/a/380780.html

相关文章:

  • 【二分查找】
  • 新疆移动中兴B862AV3.1-M2_晨星mso9385_uwe5621ds_优盘免拆卡刷固件包
  • C++:map容器
  • Java内存模型与线程私有共享区域与直接内存的理解
  • MCP专题五、MCP 的未来趋势与展望
  • SIFT特征匹配实战:KNN算法实现指纹认证
  • ETL 不只是数据搬运工:如何实现智能转换与清洗?
  • UDP套接字的使用
  • 【Vue2手录11】Vue脚手架(@vue_cli)详解(环境搭建+项目开发示例)
  • Vue 使用docx-preview,渲染word后,继续其他操作(word中内容相关)的实现
  • [优选算法专题二——NO.16最小覆盖子串]
  • Nginx生产级优化配置全解析和配置原因解析
  • 14自由度汽车动力学模型
  • FS950R08A6P2B 双通道汽车级IGBT模块Infineon英飞凌 电子元器件核心解析
  • 交换机协议栈FRR中使用
  • C++ 二叉搜索树的详解与实现
  • 记录:离线部署
  • python逆向-逆向pyinstaller打包的exe程序反编译获取源代码
  • 最大连续 1 的个数
  • LVS负载均衡群集和LVS+Keepalived群集
  • 嵌入式开发:中断配置全解析
  • 【Vue3】07-利用setup编写vue(2)-setup的语法糖
  • 使用 信号量(Semaphore) 来控制异步任务并发数
  • 1688 商品 API 实战指南:B2B 场景下的合规对接与批量运营方案
  • Qt Bridge for Figma
  • 解决docker配置了镜像源但还会拉取官方镜像源的问题
  • 【JavaEE】网络原理初识
  • 操作系统应用开发(七)mac苹果模拟器——东方仙盟练气期
  • PBI Plus 技术解析:全渠道协同架构下的数据协作效率提升方案​
  • 【C#】三个特殊的 Caller Info Attributes