Dubbo 协议迁移到 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 协议迁移指南.