协议概述
协议概述
Dubbo 作为一款 RPC 框架内置了高效的 RPC 通信协议,帮助解决服务间的编码与通信问题,目前支持的协议包括:
- triple,基于 HTTP/1、HTTP/2 的高性能通信协议,100% 兼容 gRPC,支持 Unary、Streming 等通信模式;支持发布 REST 风格的 HTTP 服务。
- dubbo,基于 TCP 的高性能私有通信协议,缺点是通用性较差,更适合在 Dubbo SDK 间使用;
- 任意协议扩展,通过扩展 protocol 可以之前任意 RPC 协议,官方生态库提供 JsonRPC、thrift 等支持。
协议选型
开发者该如何确定使用哪一种协议那? 以下是我们从使用场景、性能、编程易用性、多语言互通等方面对多个主流协议的对比分析:
协议 | 性能 | 网关友好 | 流式通信 | 多语言支持 | 编程API | 说明 |
---|---|---|---|---|---|---|
triple | 高 | 高 | 支持,客户端流、服务端流、双向流 | 支持(Java、Go、Node.js、JavaScript、Rust) | Java Interface、Protobuf(IDL) | 在多语言兼容、性能、网关、Streaming、gRPC 等方面最均衡的协议实现,官方推荐。 支持 application/json 格式 payload http 直接访问。 |
dubbo | 高 | 低 | 不支持 | 支持(Java、Go) | Java Interface | 性能最高的私有协议,但前端流量接入、多语言支持等成本较高 |
以下是 triple、dubbo 两个主要协议的具体开发、配置、运行态信息:
协议名称 | 配置值 | 服务定义方式 | 默认端口 | 传输层协议 | 序列化协议 | 是否默认 |
---|---|---|---|---|---|---|
triple | tri | - Java Interface - Java Interface+SpringWeb注解 - Java Interface+JaxRS注解 - Protobuf(IDL) | 50051 | HTTP/1、HTTP/2 | Protobuf Binary、Protobuf-json | 否 |
dubbo | dubbo | - Java Interface | 20880 | TCP | Hessian、Fastjson2、JSON、JDK、Avro、Kryo 等 | 是 |
注意
- 自 3.3 版本开始,triple 协议支持以 rest 风格发布标准的 http 服务,因此框架中实际已不存在独立的 rest protocol 扩展实现,
- 考虑到对过往版本的兼容性,当前 Dubbo 各个发行版本均默认使用
dubbo
通信协议。对于新用户而言,我们强烈建议在一开始就明确配置使用triple
协议,老用户也尽快参考文档 实现协议的平滑迁移。
多协议扩展
以下是当前 Dubbo 官方生态库提供的拓展协议实现。如果要扩展更多自定义协议,请参考 SPI 扩展手册 或 使用教程 - 协议扩展。
协议 | 配置值 | 说明 |
---|---|---|
Hessian | hessian | Hessian 定义的 RPC 通信协议,具体查看 hessian协议 |
Spring HTTP | http | Spring 定义的基于 HTTP 的私有协议,具体查看 hessian协议 |
Apache Thrift | thrift | Thrift 协议,具备高性能、支持多语言的特点,具体查看 Thrift协议 |
JsonRPC | jsonrpc | 具体查看 JsonRPC |
RMI | rmi | 具体查看 RMI协议 |
WebService | webservice | 具体查看 WebService协议 |
最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)