Dubbo通信协议,序列化协议,Hessian数据结构以及PB效率为什么最高

前言

关于Dubbo,你必须要掌握的有dubbo的工作原理,至少要知道dubbo分成哪些层,然后平时怎么发起RPC请求的,注册,发现,调用,这些都是基本的,接着还需要对底层有一定的了解,需要知道序列化协议有哪些,平时RPC是怎么走的,支持哪些通信协议,Hessian的数据结构,PB的了解,以及为什么PB的效率是最高的?
下面我对上述这些问题逐个做了整理总结

dubbo支持哪些通信协议

1、dubbo协议
默认就是走 dubbo 协议,单一长连接,进行的是 NIO 异步通信,基于 hessian 作为序列化协议。
使用的场景是:传输数据量小(每次请求在100kb以内),但是并发量很高。

为了要支持高并发场景,一般是服务提供者就几台机器,但是服务消费者有上百台,可能每天调用量达到上亿次!此时用长连接是最合适的,就是跟每个服务消费者维持一个长连接就可以,可能总共就100个连接,然后后面直接基于长连接 NIO 异步通信,可以支撑高并发请求。

长连接:就是建立连接过后可以持续发送请求,无须再建立连接。
Dubbo通信协议,序列化协议,Hessian数据结构以及PB效率为什么最高
短连接:一次连接发一次请求。
Dubbo通信协议,序列化协议,Hessian数据结构以及PB效率为什么最高2、rmi 协议
走java 二进制序列化,多个短连接,适合消费者和提供者数量差不多的情况,适用于文件的传输,一般较少用。

3、hessian 协议
走hessian序列化协议,多个短连接,适用于提供者数量比消费者数量还多的情况,适用于文件的传输,一般较少用。

4、HTTP 协议
走 json 序列化。

5、webservice
走 SOAP 文本。

dubbo 支持哪些序列化协议

dubbo 支持hessian,java二进制序列化,json,SOAP文本序列化多种序列化协议。但是 hessian 是其默认的序列化协议。

(1)序列化:将数据结构或对象转换成二进制串的过程
(2)反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
目的:保存对象状态或者用于网络传输。

Hessian的数据结构

Hessian 的对象序列化机制有 9 种 基本类型:boolean、32-bit int、64-bit long、64-bit double、64-bit date、UTF8-encoded string、UTF8-encoded xml、raw binary data、remote objects

  • 原始二进制数据
  • boolean
  • 64-bit date (64位毫秒值的日期)
  • 64-bit double
  • 32-bit int
  • 64-bit long
  • null
  • UTF-8 编码的 string

另外还包括 2 个组合结构:

  • list for lists and arrays
  • map for maps and dictionaries
  • object for objects

还有一种特殊的类型:

  • ref:用来表示对共享对象的引用
  • null for null values

为什么PB的效率是最高的

可能一些同学比较习惯于 JSON 或 XML 数据存储格式,对于 Protocol Buffer 还比较陌生。Protocol Buffer 其实是 Google 出品的一种轻量并且高效的结构化数据存储格式,性能比 JSON,XML要高很多。

其实PB之所以性能如此好,主要得益于两个原因:
1、它使用 Proto 编译器,自动进行序列化和反序列化,速度非常快,应该比 XML 和JSON 快上了 20-100倍。
2、它的数据压缩效果好,就是说它序列化后的数据量体积小。因为体积小,传输起来带宽和速度上会有优化。