协议概述
Triple 概述
有关 Triple
协议的格式和原理,请参阅 RPC 通信协议
根据 Triple 设计目标,Triple
协议具有以下优势
- 能够进行跨语言交互。传统的多种语言和多种 SDK 模式以及 Mesh 跨语言模式都需要更通用和可扩展的数据传输协议。
- 提供更完整的请求模型。除了支持传统的请求/响应模型(Unary 单向通信)外,还支持流(流式通信)和双向(双向通信)。
- 易于扩展,渗透率高,包括但不限于对 Tracing/Monitoring 等的支持,也应该被各级设备所识别,网关设施等可以识别数据包,对服务网格部署友好,降低用户理解难度。
- 完全兼容 grpc,客户端/服务器可以与原生 grpc 客户端通信。
- 可以复用现有 grpc 生态系统中的组件,以满足云原生场景下的跨语言、跨环境、跨平台互通需求。
对于目前使用其他协议的 Dubbo 用户,框架提供了与现有序列化方法兼容的迁移能力。在不影响现有在线业务的情况下,迁移协议的成本几乎为零。
grpc 对接
需要添加 grpc 服务的 Dubbo 用户可以直接使用 Triple 协议打通,无需单独引入 grpc 客户端即可完成,不仅可以保留 Dubbo 现有的易用性,还可以降低程序的复杂度和开发维护成本,无需额外适配和开发即可接入现有生态。
网关接入
对于需要网关接入的 Dubbo 用户,Triple 协议提供了一种更原生的方式,使网关开发或使用开源 grpc 网关组件更加容易。网关可以选择不解析有效负载,这大大提高了性能。在使用 Dubbo 协议时,与语言相关的序列化方法是网关的一大痛点,传统的 HTTP 到 Dubbo 方法对于跨语言序列化几乎无能为力。同时,由于 Triple 的协议元数据存储在请求头中,网关可以轻松实现自定义需求,例如路由和限流。
常见问题
找不到 protobuf 类
由于 Triple 协议的底层需要依赖 protobuf 协议进行传输,因此即使定义的服务接口没有使用 protobuf,也需要在环境中引入 protobuf 依赖。
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.19.4</version>
</dependency>
上次修改时间:2023 年 2 月 9 日:将 docsy 更新至 0.6.0 (#2141) (20081578326)