Dubbo 面试题及答案【五】

110 阅读3分钟
  1. dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多:

因 dubbo 协议采用单一长连接,假设网络为千兆网卡(1024Mbit=128MByte),根据测试经验数据每条连接最多只能压满 7MByte(不同的环境可能不一样,供参考),理论上 1 个服务提供者需要 20个服务消费者才能压满网卡。

  1. dubbo 通信协议 dubbo 协议为什么不能传大包:

因 dubbo 协议采用单一长连接,

如果每次请求的数据包大小为 500KByte,假设网络为千兆网卡(1024Mbit=128MByte),每条连接最大 7MByte(不同的环境可能不一样,供参考),单个服务提供者的 TPS(每秒处理事务数)最大为:128MByte / 500KByte = 262。

单个消费者调用单个服务提供者的 TPS(每秒处理事务数)最大为:7MByte / 500KByte = 14。如果能接受,可以考虑使用,否则网络将成为瓶颈。

  1. dubbo 通信协议 dubbo 协议为什么采用异步单一长连接:

因为服务的现状大都是服务提供者少,通常只有几台机器,而服务的消费者多,可能整个网站都在访问该服务,比如 Morgan 的提供者只有 6 台提供者,却有上百台消费者,每天有 1.5 亿次调用,如果采用常规的 hessian 服务,服务提供者很容易就被压跨,通过单一连接,保证单一消费者不会压死提供者,长连接,减少连接握手验证等,并使用异步 IO,复用线程池,防止 C10K 问题。

  1. dubbo 通信协议 dubbo 协议适用范围和适用场景

适用范围:传入传出参数数据包较小(建议小于 100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要用 dubbo 协议传输大文件或超大字符串。

适用场景:常规远程服务方法调用

dubbo 协议补充:

连接个数:单连接

连接方式:长连接

传输协议:TCP

传输方式:NIO 异步传输

序列化:Hessian 二进制序列化

  1. RMI 协议

RMI 协议采用 JDK 标准的 java.rmi.*实现,采用阻塞式短连接和 JDK 标准序列化方式,Java 标准的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:TCP

传输方式:同步传输

序列化:Java 标准二进制序列化

适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传文件。

适用场景:常规远程服务方法调用,与原生 RMI 服务互操作

  1. Hessian 协议

Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现基于 Hessian 的远程调用协议。

连接个数:多连接

连接方式:短连接

传输协议:HTTP

传输方式:同步传输

序列化:Hessian 二进制序列化

适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件。

适用场景:页面传输,文件传输,或与原生 hessian 服务互操作

想要了解更多Java基础知识,可以点击评论区链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇!给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili