Dubbo 协议迁移到 Triple 协议指南

Triple 协议迁移指南

Triple 简介

有关 Triple 协议的格式和原理,请参考 RPC 通信协议

根据 Triple 设计目标,Triple 协议具有以下优势

  • 能够进行跨语言交互。无论是传统的跨语言跨 SDK 模式,还是 Mesh 跨语言模式,都需要一个更加通用和可扩展的数据传输协议。
  • 提供更完整的请求模型。除了支持传统的 Request/Response 模型(Unary 单向通信)外,还支持 Stream(流式通信)和 Bidirectional(双向通信)。
  • 易于扩展,高渗透性,包括但不限于 Tracing / Monitoring 等支持,也应该被各级设备、网关设施等识别,对 Service Mesh 部署友好,降低用户理解难度。
  • 与 grpc 完全兼容,客户端/服务器可以与原生 grpc 客户端通信。
  • 可以复用现有 grpc 生态系统中的组件,满足云原生场景下的跨语言、跨环境、跨平台互通需求。

对于目前使用其他协议的 Dubbo 用户,框架提供了与现有序列化方式兼容的迁移能力。在不影响现有线上业务的情况下,协议迁移成本几乎为零。

Dubbo 用户需要新增连接到 Grpc 服务时,可以直接使用 Triple 协议实现连接,无需单独引入 grpc 客户端完成。不仅可以保留现有的 Dubbo 易用性,还可以降低程序复杂度,降低开发和维护成本,可以无缝连接现有生态,无需额外适配和开发。

对于需要网关接入的 Dubbo 用户,Triple 协议提供了一种更加原生的方式,使得网关开发或使用开源 grpc 网关组件更加容易。网关可以选择不解析负载,这极大地提高了性能。使用 Dubbo 协议时,语言相关的序列化方式是网关的一个痛点,传统的 HTTP-to-Dubbo 方式对于跨语言序列化几乎无能为力。同时,由于 Triple 的协议元数据存储在请求头中,网关可以轻松实现自定义需求,例如路由和限流。

Dubbo2 协议迁移过程

Dubbo2 用户使用 dubbo 协议 + 自定义序列化,例如 hessian2 完成远程调用。

默认情况下,Grpc 仅支持 Protobuf 序列化,无法支持 Java 语言中的多参数和方法重载。

Dubbo3 初期,一个目标是与 Dubbo2 完全兼容。因此,为了确保 Dubbo2 的平滑升级,Dubbo 框架做了很多工作,确保升级无缝衔接。目前,默认序列化与 Dubbo2 一致,为 hessian2

**所以,如果您决定升级到 Dubbo3 的 Triple 协议,您只需要在配置中修改协议名称为 tri(注意:不是 triple)。**

有关使用 Triple 协议的更多说明,请参考 Triple 协议迁移指南.


最后修改时间:2023 年 1 月 2 日:Enhance en docs (#1798) (95a9f4f6c1c)