Dubbo通信协议

①、Dubbojava

  Dubbo 缺省协议采用单一长链接和 NIO 异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况。json

  反之,Dubbo 缺省协议不适合传送大数据量的服务,好比传文件,传视频等,除非请求量很低。浏览器

  • Transporter: mina, netty, grizzy
  • Serialization: dubbo, hessian2, java, json
  • Dispatcher: all, direct, message, execution, connection
  • ThreadPool: fixed, cached

  特性缓存

  缺省协议,使用基于 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 交互。安全

  • 链接个数:单链接
  • 链接方式:长链接
  • 传输协议:TCP
  • 传输方式:NIO 异步传输
  • 序列化:Hessian 二进制序列化
  • 适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者没法压满提供者,尽可能不要用 dubbo 协议传输大文件或超大字符串。
  • 适用场景:常规远程服务方法调用

 

②、RMI服务器

  RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短链接和 JDK 标准序列化方式。注意:若是正在使用 RMI 提供服务给外部访问,同时应用里依赖了老的 common-collections 包的状况下,存在反序列化安全风险。并发

  特性frontend

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:TCP
  • 传输方式:同步传输
  • 序列化:Java 标准二进制序列化
  • 适用范围:传入传出参数数据包大小混合,消费者与提供者个数差很少,可传文件。
  • 适用场景:常规远程服务方法调用,与原生RMI服务互操做

 

③、Hessian 异步

  Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通信,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 做为服务器实现。memcached

  Dubbo 的 Hessian 协议能够和原生 Hessian 服务互操做,即:

  • 提供者用 Dubbo 的 Hessian 协议暴露服务,消费者直接用标准 Hessian 接口调用。
  • 或者提供方用标准 Hessian 暴露服务,消费方用 Dubbo 的 Hessian 协议调用。

  特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:Hessian二进制序列化
  • 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。
  • 适用场景:页面传输,文件传输,或与原生hessian服务互操做

 

④、Http

基于 HTTP 表单的远程调用协议,采用 Spring 的 HttpInvoker 实现

  特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:表单序列化
  • 适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。
  • 适用场景:需同时给应用程序和浏览器 JS 使用的服务。

 

⑤、WebService

  基于 WebService 的远程调用协议,基于 Apache CXF 的 frontend-simple 和 transports-http 实现。

  能够和原生 WebService 服务互操做,即:

  • 提供者用 Dubbo 的 WebService 协议暴露服务,消费者直接用标准 WebService 接口调用,
  • 或者提供方用标准 WebService 暴露服务,消费方用 Dubbo 的 WebService 协议调用。

  特性

  • 链接个数:多链接
  • 链接方式:短链接
  • 传输协议:HTTP
  • 传输方式:同步传输
  • 序列化:SOAP 文本序列化
  • 适用场景:系统集成,跨语言调用

 

⑥、Thrift

  当前 dubbo 支持的 thrift 协议是对 thrift 原生协议 的扩展,在原生协议的基础上添加了一些额外的头信息,好比 service name,magic number 等。

  使用 dubbo thrift 协议一样须要使用 thrift 的 idl compiler 编译生成相应的 java 代码,后续版本中会在这方面作一些加强。

 

⑦、缓存

  基于 memcached 实现的 RPC 协议 。

  基于 Redis 实现的 RPC 协议 。