From e2761e098b7f8921afaf314fa84404be84a98afc Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 28 Mar 2021 09:37:53 +0800 Subject: [PATCH] =?UTF-8?q?[feat]Dubbo=20=E5=B8=B8=E8=A7=81=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rpc/关于Dubbo的重要知识点.md | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md b/docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md index f75aa536..27f10f52 100644 --- a/docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md +++ b/docs/system-design/distributed-system/rpc/关于Dubbo的重要知识点.md @@ -207,6 +207,10 @@ src xxx=com.xxx.XxxLoadBalance ``` +其他还有很多可供扩展的选择,你可以在[官方文档@SPI扩展实现](https://dubbo.apache.org/zh/docs/v2.7/dev/impls/)这里找到。 + +![](https://img-blog.csdnimg.cn/20210328091015555.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70) + ### Dubbo 的微内核架构了解吗? Dubbo 采用 微内核(Microkernel) + 插件(Plugin) 模式,简单来说就是微内核架构。微内核只负责组装插件。 @@ -464,5 +468,34 @@ public class RpcStatus { Dubbo 中的 `RoundRobinLoadBalance` 的代码实现被修改重建了好几次,Dubbo-2.6.5 版本的 `RoundRobinLoadBalance` 为平滑加权轮询算法。 -## Dubbo 序列化协议(代办) +## Dubbo序列化协议 + +### Dubbo 支持哪些序列化方式呢? + +![](https://img-blog.csdnimg.cn/20210328092219640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70) + +Dubbo 支持多种序列化方式:JDK自带的序列化、hessian2、JSON、Kryo、FST、Protostuff,ProtoBuf等等。 + +Dubbo 默认使用的序列化方式是 hession2。 + +### 谈谈你对这些序列化协议了解? + +一般我们不会直接使用 JDK 自带的序列化方式。主要原因有两个: + +1. **不支持跨语言调用** : 如果调用的是其他语言开发的服务的时候就不支持了。 +2. **性能差** :相比于其他序列化框架性能更低,主要原因是序列化之后的字节数组体积较大,导致传输成本加大。 + +JSON 序列化由于性能问题,我们一般也不会考虑使用。 + +像 Protostuff,ProtoBuf、hessian2这些都是跨语言的序列化方式,如果有跨语言需求的话可以考虑使用。 + +Kryo和FST这两种序列化方式是 Dubbo 后来才引入的,性能非常好。不过,这两者都是专门针对 Java 语言的。Dubbo 官网的一篇文章中提到说推荐使用 Kryo 作为生产环境的序列化方式。(文章地址:[https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/rest/](https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/rest/)) + +![](https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2020-8/569e541a-22b2-4846-aa07-0ad479f07440.png) + +Dubbo 官方文档中还有一个关于这些[序列化协议的性能对比图](https://dubbo.apache.org/zh/docs/v2.7/user/serialization/#m-zhdocsv27userserialization)可供参考。 + +![](https://img-blog.csdnimg.cn/20210328093219609.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70) + +##