协议概述

协议概述

协议概述

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)