Dubbo应用开发之Dubbo中协议的简介

45 阅读2分钟

Dubbo应用开发之Dubbo中协议的简介

简介

什么是协议?

Client[Consumer]与Server[Provider]在传输数据时双⽅的约定。

协议与序列化的关系

序列化是协议数据的传输⼀种格式。⽬的是为了提⾼协议在⽹络传输的效率。

Dubbo 3.x 官方支持 6 种协议,核心差异如下表:

协议报文序列化连接模型特点适用场景
dubbo(默认)自定义二进制Hessian2 / Fastjson2 / Protobuf单 TCP + 长连接 + NIO多路复用头部 16B,双工异步;支持泛化、回调、事件常规高并发服务
tripleHTTP/2 帧Protobuf(默认)单 TCP + HTTP/2 Stream100% 兼容 gRPC;支持流式、头部压缩、浏览器云原生、跨语言、网关
restJAX-RSJSONHTTP短连接直接浏览器/前端调用对外开放 API
grpcHTTP/2 帧Protobuf同 triple与原生 gRPC 互通Go/Node 混合集群
rmiJava RMIJava 原生单 TCP只能 Java 互调,防火墙穿透差遗留系统
webserviceSOAPXMLHTTP短连接重量级,WS-* 标准对接政企老系统

1. dubbo 协议帧格式(2.7/3.x 通用)

  • 双工异步:同一个 TCP 链接上客户端与服务端可同时发请求/响应/心跳。
  • 心跳:标志位 0x20,载荷长度 0,维持长连接。
  • 泛化调用:消费者无接口类也能调,网关必备。

2. triple 协议(Dubbo 3 首推)

  • 基于 HTTP/2,天然 多路复用、头部压缩、流式
  • IDL 默认 Protobuf,也可 application/json
  • gRPC 完全互通,可使用 Envoy、Istio 做负载与治理;
  • 支持 Unary / Server-Stream / Bi-Stream
  • 单端口双协议:同一 20880 端口同时跑 dubbo 与 triple,平滑迁移。

之前在配置文件中指定的协议都是dubbo的私有协议

不同协议的通信效率对⽐

image.png

可以发现REST代表的http协议和Dubbo协议的序列化技术无论是响应时间还是TPS都是天壤之别,所以一般情况我们还是尽量使用Dubbo协议