95-Dubbo高频面试题

来点Dubbo相关的面试题

1,问:当zookeeper挂了之后,生产者和消费者之间还能通信吗?

答:可以。

因为当启动dubbo容器时,消费者会去zookeeper拉取注册的生产者地址列表,并将其缓存在本地。每次发起调用时,都会按照本地的地址列表,以负载均衡的策略去进行调用。

但是如果zookeeper挂掉了,则后续新的生产者无法被消费者发现。

2,问:当监控中心monitor挂了之后,生产者和消费者之间还能通信吗?

答:可以。

因为监控中心主要是起到一个收集数据的作用,监控中心宕机,只会影响采集数据,不影响生产者和消费者之间的通信。

3,问:zookeeper实际是如何存储生产者和消费者信息?

答:zookeeper采用树状结构来存储相关的信息,会创建相关的znode节点来存储信息。

如图所示:

img

流程说明:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

4,谈谈采用注册中心和直连的区别?

首先,生产者和消费者可以采用直连的方式进行通信,即点对点的通信方式,但是我们更推荐采用注册中心的方式,因为注册中心在这其中,起到了一个解耦的作用,而消费者只需要获取到生产者的地址列表,就可以采用负载均衡的方式去调用。

5,谈谈Dubbo底层的通信原理

Dubbo底层通信,默认采用高性能的Netty通信框架,实现网络通信,Netty是一个高性能的NIO通信框架,所以聊到底层原理,就要从NIO的特点来聊起。

NIO是如何做到多路复用机制的,以及Netty在此基础之后,又增加了主从线程池来进行优化,结合这两方面进行讲解即可。