dubbo 支持哪些通讯协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为何 PB 的效率是最高的?web
上一个问题,说说 dubbo 的基本工做原理,那是你必须知道的,至少要知道 dubbo 分红哪些层,而后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。面试
接着就能够针对底层进行深刻的问问了,好比第一步就能够先问问序列化协议这块,就是平时 RPC 的时候怎么走的?json
序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程当中所生成的二进制串转换成数据结构或者对象的过程。数据结构
默认就是走 dubbo 协议,单一长链接,进行的是 NIO 异步通讯,基于 hessian 做为序列化协议。使用的场景是:传输数据量小(每次请求在 100kb 之内),可是并发量很高。并发
为了要支持高并发场景,通常是服务提供者就几台机器,可是服务消费者有上百台,可能天天调用量达到上亿次!此时用长链接是最合适的,就是跟每一个服务消费者维持一个长链接就能够,可能总共就 100 个链接。而后后面直接基于长链接 NIO 异步通讯,能够支撑高并发请求。异步
长链接,通俗点说,就是创建链接事后能够持续发送请求,无须再创建链接。高并发
而短链接,每次要发送请求以前,须要先从新创建一次链接。性能
走 Java 二进制序列化,多个短链接,适合消费者和提供者数量差很少的状况,适用于文件的传输,通常较少用。优化
走 hessian 序列化协议,多个短链接,适用于提供者数量比消费者数量还多的状况,适用于文件的传输,通常较少用。编码
走 json 序列化。
走 SOAP 文本序列化。
dubbo 支持 hession、Java 二进制序列化、json、SOAP 文本序列化多种序列化协议。可是 hessian 是其默认的序列化协议。
Hessian 的对象序列化机制有 8 种原始类型:
另外还包括 3 种递归类型:
还有一种特殊的类型:
可能有一些同窗比较习惯于 JSON
or XML
数据存储格式,对于 Protocal Buffer
还比较陌生。Protocal Buffer
实际上是 Google 出品的一种轻量而且高效的结构化数据存储格式,性能比 JSON
、XML
要高不少。
其实 PB 之因此性能如此好,主要得益于两个:第一,它使用 proto 编译器,自动进行序列化和反序列化,速度很是快,应该比 XML
和 JSON
快上了 20~100
倍;第二,它的数据压缩效果好,就是说它序列化后的数据量体积小。由于体积小,传输起来带宽和速度上会有优化。