Dubbo中的Triple协议和应用级服务发现

Dubbo3引入了应用级服务发现与Triple协议,旨在提高云原生环境下的跨语言兼容性和系统间互操作性。应用级服务发现减少了注册中心的压力,Triple协议则提升了与网关和Sidecar组件的配合能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章部分内容摘录自Dubbo官方文档应用级服务发现 | Apache Dubbo[这里是图片001]https://dubbo.apache.org/zh/docs/examples/service-discovery/

Triple协议和新的服务注册发现机制,很大程度上都是出于适配云原生。一方面新的协议对应云原生中跨语言的要求,使得Dubbo服务不再局限于特定的开发语言,通过新协议都可以兼容通信。在Cloud Native的潮流下,跨平台、跨厂商、跨环境的系统间互操作性的需求必然会催生基于开放标准的RPC技术,而gRPC顺应了历史趋势,得到了越来越广泛地应用。在微服务领域,Triple协议的提出与落地,是 Dubbo3 迈向云原生微服务的一大步。另一方面服务发现机制的调整也是为了对齐主流微服务(如SpringCloud)模型,调注册中心不再包含 RPC 信息,同时也解决了更大规模的微服务集群中的性能瓶颈。

应用级服务发现

在官方文档中对于 应用即服务发现是这样介绍的:

“社区版本 Dubbo 从 2.7.5 版本开始,新引入了一种基于应用粒度的服务发现机制,这是我们为 Dubbo 适配云原生基础设施的一步重要探索,也是 Dubbo 迈出的重要一步。 简单来说,以前 Dubbo 是将接口的信息全部注册到注册中心,而一个应用实例一般会存在多个接口,这样一来注册的数据量就要大很多,而且有冗余。 全新的应用级服务发现机制是同一个应用实例仅在注册中心注册一条数据,注册中心的数据只与实例数量相关,大大降低了注册中心数据的存储与推送压力。”

接口粒度 VS 应用粒度

简单来说,以前 Dubbo2 是将接口的信息全部注册到注册中心,而一个应用实例一般会存在多个接口,这样一来注册的数据量就要大很多,而且有冗余。 应用级服务发现的机制是同一个应用实例仅在注册中心注册一条数据,对于注册中心、订阅方的存储压力都是一个极大的释放。 更重要的是,地址发现容量彻底与业务 RPC 定义解耦开来,整个集群的容量评估对运维来说将变得更加透明:部署多少台机器就会有多大负载, 不会像 Dubbo2 一样, 因为业务 RPC 重构就会影响到整个集群服务发现的稳定性。

  • 数据映射关系变了:从RPC Service->Instance变为Application->Instance
  • **数据变少了:**注册中心没有了 RPC Service 及其相关配置信息。

新一代RPC协议-Triple协议

不仅限于服务发现从接口粒度调整为应用级粒度,在Dubbo 3 版本中提供了新一代RPC协议Triple协议,它是基于 HTTP/2 上构建的 RPC 协议,完全兼容 gRPC,并在此基础上扩展出了更丰富的语义。使用 Triple 协议,用户将获得以下能力:

  • 更容易到适配网关、Mesh架构,Triple 协议让 Dubbo 更方便的与各种网关、Sidecar 组件配合工作。
  • 多语言友好,推荐配合 Protobuf 使用 Triple 协议,使用 IDL 定义服务,使用 Protobuf 编码业务数据。
  • 流式通信支持。Triple 协议支持 Request Stream、Response Stream、Bi-direction Stream
### Triple协议Dubbo集成 #### 1. Triple协议简介 Triple协议是基于gRPC的改进版本,在保持其高效性广泛支持的同时,增强了灵活性服务治理功能[^1]。 #### 2. Dubbo3中的Triple协议配置 为了在Dubbo应用中启用Triple协议,需调整`application.properties`文件如下: ```properties dubbo.protocol.name=triple dubbo.protocol.port=20880 ``` 对于Spring Boot项目,则可以通过YAML方式进行设置: ```yaml spring: dubbo: protocol: name: triple port: 20880 ``` #### 3. Fast2 (假设为Dubbo2) Triple共存方案 当需要在同一环境中运行Fast2(这里指代Dubbo2)Triple两种不同协议的服务时,可以采用多端口监听的方式。具体做法是在同一个应用程序实例上开启多个服务提供者节点,分别对应不同的协议类型及其对应的端口号。 例如,在`application.properties`中定义两个独立的服务暴露方式: ```properties # For Dubbo2/Fast2 Protocol dubbo.provider.dubbo2.address=dubbo://0.0.0.0:20881 # For Triple Protocol dubbo.provider.triple.address=triple://0.0.0.0:20880 ``` 这样既实现了双协议的支持又不会造成冲突。 #### 4. 编写接口以适应Triple协议 为了让现有API能更好地适配Triple协议的要求,建议遵循gRPC风格来编写IDL文件,并利用Protobuf作为序列化工具。下面是一个简单的例子展示如何创建一个兼容Triple的服务接口: ```protobuf syntax = "proto3"; option java_package = "com.example"; option java_outer_classname = "GreeterProto"; service Greeter { rpc SayHello (HelloRequest) returns (HelloResponse); } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } ``` 之后通过maven插件或其他构建工具自动生成相应的Java类,从而简化开发过程并提高代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值