Dubbo常见面试题

首先了解一下Dubbo是什么

Dubbo是阿里开源的一款分布式微服务开发框架,它提供了RPC通信和微服务治理两大能力,使用Dubbo开发的微服务,具备远程发现与通信能力,同时Dubbo提供了服务发现、负载均衡、流量调度能力。

1.Dubbo的工作流程

在这里插入图片描述

  1. 启动spring容器时,自动启动Dubbo的Provider
  2. Provider启动后会到注册中心注册内容,包括ip、端口、接口列表、版本、协议等信息
  3. Consumer启动时,自动去注册中心获取已注册的服务信息
  4. 当provider的信息发生变化时,自动向注册中心推送通知,注册中心再通知Comsumer

Dubbo服务暴露过程

Dubbo采用url的方式约定参数类型
在这里插入图片描述
1.基于spring的事件回调机制,监听ContextRefresh事件,在springIOC容器刷新完成后,出发服务暴露。根据dubbo的配置得到url,再根据url选择对应实现类,实现扩展。
2.通过javassit动态代理封装服务实现类,统一暴露出Invoker使得调用方便、屏蔽底层细节,然后封装成exporter存储起来,等待消费者调用,然后将url注册到注册中心,使消费者可以获取到服务提供者的信息。

面试题:dubbo的服务暴露过程
1、服务启动时根据dubbo的配置,组装成url
2、根据URL进行服务暴露、创建代理Invoker、根据URL的协议,通过SPI机制选择对应的实现类实现Exporter
3、如果只是本地暴露,将Exporter存入本地ServiceConfig缓存
4、远程暴露,将URL转换成Exporter,然后获取注册中心配置,将URL注册到注册中心,启动netty服务器,监听注册中心

Dubbo服务引入过程

1、获取注册中心实例,向注册中心注册消费者,订阅provider,订阅生产者注册协议、接口、ip和端口信息,cluster将多个invoker进行封装,返回一个invoker
2、根据注册中心的配置构建URL,再根据URL获取对应的Dubbo协议实现类构建Invoker。然后构建代理,封装Invoker返回服务引用,之后消费者调用代理类调用接口。

Dubbo服务调用过程

1、客户端调用某个接口的方法会调用服务引入过程生成的代理类,然后从cluster层经过过滤和负载均衡选择一个invoker进行远程调用,记录请求和请求的ID等待服务端的响应
2、服务端接受到请求后根据参数找到之前存储的map,找到exporter,通过exporter调用invoker找到真正的实现类,接口的具体实现类处理完请求后,组装结果返回,这个响应带有之前的请求ID
3、客户端收到响应以后根据ID找到之前记录的请求,把响应放到对应的future中,唤醒等待的线程,最后消费端得到响应

Dubbo支持的负载均衡策略

1、RandomLoadBalance随机负载均衡
2、LeastActive最小活跃数负载均衡
3、ConsistentHash一致性Hash负载均衡
4、RandomRobinLoadBalance加权轮询负载均衡

Dubbo支持的序列化方式

1、Java标准序列化,json序列化、Hession、KryO、FST

Dubbo支持的

1、dubbo协议(默认),适合小数据量、并发量大的服务调用
2、rmi协议,java标准的rmi协议,适用于并发量小、数据量也小的使用场景
3、hession协议,适用于大数据包,可传文件
4、http 协议,
5、webservice协议
6、thrift协议
7、memcached协议

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值