Skip to content

Commit 5709f0f

Browse files
committed
docs: update dubbo-serialization, fix doocs#3
- Update dubbo-serialization-protocol.md - Fix doocs#3
1 parent 8747eeb commit 5709f0f

8 files changed

Lines changed: 52 additions & 11 deletions

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# 互联网 Java 工程师进阶知识完全扫盲
22

33
[![license](https://img.shields.io/badge/license-Attribution--NonCommercial%204.0%20-brightgreen.svg)](https://github.com/doocs/advanced-java/blob/master/LICENSE)
4-
[![original](https://img.shields.io/badge/original-%E4%B8%AD%E5%8D%8E%E7%9F%B3%E6%9D%89-blue.svg)](https://github.com/doocs/advanced-java)
4+
[![original](https://img.shields.io/badge/original-%E4%B8%AD%E5%8D%8E%E7%9F%B3%E6%9D%89-orange.svg)](https://github.com/doocs/advanced-java)
5+
[![stars](https://img.shields.io/github/stars/doocs/advanced-java.svg)](https://github.com/doocs/advanced-java/stargazers)
6+
[![forks](https://img.shields.io/github/forks/doocs/advanced-java.svg)](https://github.com/doocs/advanced-java/network/members)
57
[![PRs Welcome](https://img.shields.io/badge/PRs-Welcome-brightgreen.svg)](http://makeapullrequest.com)
68

79
本系列知识出自中华石杉,我对这部分知识做了一个系统的整理,方便学习查阅。By the way,微信公众号**石杉的架构笔记**(id:shishan100)有其它很多架构知识,墙裂推荐~
810

9-
一点小建议:学习本系列知识之前,如果你完全没接触过 `MQ``ES``Redis``Dubbo``Hystrix` 等,那么我建议你可以先在网上搜一下每一块知识的快速入门,玩一下入门 Demo,然后再开始每一块知识的学习这样效果更好噢~
11+
一点小建议:学习本系列知识之前,如果你完全没接触过 `MQ``ES``Redis``Dubbo``Hystrix` 等,那么我建议你可以先在网上搜一下每一块知识的快速入门,跟着入门 Demo 玩一下,然后再开始每一块知识的学习这样效果更好噢~
1012

1113
## 高并发架构
1214

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,73 @@
11
## 面试题
2-
dubbo 支持哪些通信协议?支持哪些序列化协议?
2+
dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
33

44
## 面试官心理分析
5-
上一个问题,说说 dubbo 的基本工作原理,那是你必须知道的,至少知道 dubbo 分成哪些层,然后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。
5+
上一个问题,说说 dubbo 的基本工作原理,那是你必须知道的,至少要知道 dubbo 分成哪些层,然后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。
66

7-
接着就可以针对底层进行深入的问问了,比如第一步就可以先问问序列化协议这块,就是平时rpc的时候怎么走的
7+
接着就可以针对底层进行深入的问问了,比如第一步就可以先问问序列化协议这块,就是平时 RPC 的时候怎么走的
88

99
## 面试题剖析
10+
**序列化**,就是把数据结构或者是一些对象,转换为二进制串的过程,而**反序列化**是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
11+
12+
![serialize-deserialize](/img/serialize-deserialize.png)
13+
1014
### dubbo 支持不同的通信协议
1115
- dubbo 协议
1216

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

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

21+
长连接,通俗点说,就是建立连接过后可以持续发送请求,无须再建立连接。
22+
23+
![dubbo-keep-connection](/img/dubbo-keep-connection.png)
24+
25+
而短连接,每次要发送请求之前,需要先重新建立一次连接。
26+
27+
![dubbo-not-keep-connection](/img/dubbo-not-keep-connection.png)
28+
1729
- rmi 协议
1830

19-
走 Java 二进制序列化,多个短连接,适合消费者和提供者数量差不多,适用于文件的传输,一般较少用。
31+
走 Java 二进制序列化,多个短连接,适合消费者和提供者数量差不多的情况,适用于文件的传输,一般较少用。
2032

2133
- hessian 协议
2234

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

2537
- http 协议
2638

27-
走 json 序列化
39+
走 json 序列化
2840

2941
- webservice
3042

31-
走 SOAP 文本序列化
43+
走 SOAP 文本序列化
3244

3345
### dubbo 支持的序列化协议
34-
dubbo 支持 hession、Java 二进制序列化、json、SOAP 文本序列化多种序列化协议。但是 hessian 是其默认的序列化协议。
46+
dubbo 支持 hession、Java 二进制序列化、json、SOAP 文本序列化多种序列化协议。但是 hessian 是其默认的序列化协议。
47+
48+
### 说一下 Hessian 的数据结构
49+
Hessian 的对象序列化机制有 8 种原始类型:
50+
51+
- 原始二进制数据
52+
- boolean
53+
- 64-bit date(64 位毫秒值的日期)
54+
- 64-bit double
55+
- 32-bit int
56+
- 64-bit long
57+
- null
58+
- UTF-8 编码的 string
59+
60+
另外还包括 3 种递归类型:
61+
62+
- list for lists and arrays
63+
- map for maps and dictionaries
64+
- object for objects
65+
66+
还有一种特殊的类型:
67+
68+
- ref:用来表示对共享对象的引用。
69+
70+
### 为什么 PB 的效率是最高的?
71+
可能有一些同学比较习惯于 `JSON` or `XML` 数据存储格式,对于 `Protocal Buffer` 还比较陌生。`Protocal Buffer` 其实是 Google 出品的一种轻量并且高效的结构化数据存储格式,性能比 `JSON``XML` 要高很多。
72+
73+
其实 PB 之所以性能如此好,主要得益于两个:**第一**,它使用 proto 编译器,自动进行序列化和反序列化,速度非常快,应该比 `XML``JSON` 快上了 `20~100` 倍;**第二**,它的数据压缩效果好,就是说它序列化后的数据量体积小。因为体积小,传输起来带宽和速度上会有优化。
16.3 KB
Loading
10.9 KB
Loading
10.3 KB
Loading

img/dubbo-keep-connection.png

16.3 KB
Loading

img/dubbo-not-keep-connection.png

10.9 KB
Loading

img/serialize-deserialize.png

10.3 KB
Loading

0 commit comments

Comments
 (0)