Dubbo面试 - Dubbo通信协议

面试题

dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

面试官心理分析

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

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

面试题剖析

序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

dubbo 支持不同的通信协议

  • dubbo 协议

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

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

长连接,通俗点说,就是建立连接过后可以持续发送请求,无须再建立连接。而短连接,每次要发送请求之前,需要先重新建立一次连接。

  • rmi 协议

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

  • hessian 协议

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

  • http 协议

走 json 序列化。

  • webservice

走 SOAP 文本序列化。

dubbo 支持的序列化协议

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

说一下 Hessian 的数据结构

Hessian 的对象序列化机制有 8 种原始类型:

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

另外还包括 3 种递归类型:

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

还有一种特殊的类型:

  • ref:用来表示对共享对象的引用。

为什么 PB 的效率是最高的?

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

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

转载来源:https://github.com/doocs/advanced-java/blob/master/docs/distributed-system/dubbo-serialization-protocol.md

Dubbo面试 - Dubbo通信协议相关推荐

  1. Dubbo面试 - dubbo的工作原理

    Dubbo面试 - dubbo的工作原理 面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ.ES.Redis.Dubbo,上来 ...

  2. Dubbo面试 - dubbo 负载均衡策略和集群容错策略都有哪些?

    Dubbo面试 - dubbo 负载均衡策略和集群容错策略都有哪些? 面试题 dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢? 面试官心理分析 继续深问吧,这些都是用 dubbo 必须 ...

  3. Dubbo面试专题总结

    Dubbo面试专题总结 文章目录 Dubbo面试专题总结 1. Dubbo 中 zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? 2. dubbo 服务负载均衡策 ...

  4. Dubbo——面试问题集(4~14)

    4.默认使用什么序列化框架,你知道的还有哪些? 在Dubbo RPC中,同时支持多种序列化方式: dubbo序列化,阿里尚不成熟的java序列化实现. hessian2序列化:hessian是一种跨语 ...

  5. 分布式面试 - dubbo 的 spi 思想是什么?

    分布式面试 - dubbo 的 spi 思想是什么? 面试题 dubbo 的 spi 思想是什么? 面试官心理分析 继续深入问呗,前面一些基础性的东西问完了,确定你应该都 ok,了解 dubbo 的一 ...

  6. Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架?

    Dubbo面试 - 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试题 如何自己设计一个类似 Dubbo 的 RPC 框架? 面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 ...

  7. Dubbo——面试问题集(1~3)

    1.默认使用的是什么通信框架,还有别的选择吗? Dubbo默认使用netty,还支持mina, grizzy 配置方式: <dubbo:protocol name="dubbo&quo ...

  8. dubbo provider异步_Dubbo学习(六) Dubbo面试问题

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的 ...

  9. dubbo 面试18问

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...

最新文章

  1. Python 把列表转成元组
  2. Mac 安装多个版本jdk
  3. JFlow CCFlow工作流引擎北京培训邀请函
  4. 有学问,还是牛逼啊!
  5. AWS SageMaker机器学习训练营听课总结
  6. C专家编程--随记(二)
  7. J2Cache的学习
  8. 数据中心网络设计方案,数据中心网络规划设计
  9. python打印万年历_你会用Python打印一个万年历吗?像月历一样好看!
  10. 如何将图片批量转换成PDF
  11. 编程过程中常见几何数学公式汇总
  12. 赛博哈希CyberHash顺势而为,获数千万美金的融资
  13. 【SDOI2015】星际战争 网络流
  14. Neo4j之CQL基础
  15. MHD-UH40RK4K高清视频会议摄像头
  16. 向UBOOT 中添加自己的板子
  17. 2008ubuntu主题衣服已经出来了
  18. 默认计算机网络密码是多少,睿因路由器默认无线密码是多少?
  19. java解包_Java的原始类型自动包装与解包机制
  20. 若依前端vue角色、权限判断

热门文章

  1. Robust Regression_2016_鲁棒回归推导
  2. Linux中ACL权限设置
  3. 机器学习速成课程 | 练习 | Google Development——编程练习:使用 TensorFlow 的起始步骤
  4. 安装Vmware-tools时CD/DVD找不到Vmware-tools压缩包
  5. 【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA
  6. 1107班html大赛比赛说明 同学们需注意的事项
  7. Java 控制台程序的基本结构测试分析草稿
  8. 单循环 输入一行星花
  9. jdk安装与调试笔记 20200202
  10. 爬虫-14-利用代理爬取数据