Dubbo面试整理(持续更新)

Dubbo你了解多少?

2023新版 官网文档

  1. 是一款易用的、提供高性能通信和服务治理能力的微服务开发框架 (之前说是java的服务框架,现在是微服务,因为可以支持其他语言了,如 Golang、Node).
  2. 2017 年,Dubbo 被正式捐献 Apache 软件基金会并成为 Apache 顶级项目
  3. 阿里的开源java的项目
  4. …… 巴拉巴拉…… 可以再补充补充

RPC 请解释一下?

维基百科是这么定义RPC的: 在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议
该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

  • 所以,对于Java程序员而言,RPC就是远程方法调用
  • 远程方法调用和本地方法调用是相对的两个概念,本地方法调用指的是进程内部的方法调用,而远程方法调用指的是两个进程内的方法相互调用。

Dubbo 架构流程描述一下:

流程及解释

  1. 首先服务提供者Provider启动向注册中心注册自己所能提供的服务;
  2. 服务消费者Consumer启动向注册中心订阅自己所需的服务;
  3. 注册中心将提供者元信息通知给Consumer;
  4. Consumer可以通过负载均衡选择Provider直接调用;
  5. 监控中心会将服务的提供者和消费者会在内存中记录。

Dubbo 与 Spring Cloud

因为版本变化,建议参考 Dubbo3 最新文档解释,这里不做文本搬运工。
官方连接


Dubbo 负载均衡 策略介绍一下?

Dubbo3 最新文档解释:官方连接
这里后续应该附上算法(后期补充)暂时写上自己实现的思路

  1. 【默认】(加权)随机:节点序号放到一个数组上,用随机数做数组下标的取模操作即可。
  2. (加权)轮询:增加一个计数器在数组上轮询; — 平滑轮询:算法(合计权重减去本轮分数最高的,淘汰的增加自己的权重到一下轮)
  3. (加权)最小调用数:消费端会记录当前那个节点持有的请求数最小,最小则发送请求。
  4. 一致性Hash:对参数或者方法名做Hash计算,相同的参数调用同一个节点。
  5. 【Dubbo3新增】(加权)最小响应时间:消费端记录上一次请求的最小响应时间。

Dubbo集群容错?

参考 Dubbo v2.7版 文档

  1. 失败重试【默认】:调用失败后会切换服务节点并重试两次;
  2. 快速失败:调用失败直接给抛出异常;- 可以捕获异常,后续手动处理。
  3. 失败安全:失败则直接忽略;- 适合不重要的任务,如写日志操作。
  4. 失败恢复:调用失败需要定时去重复调用;- 非实时性任务的调用。
  5. 并发调用:多个服务节点同时调用,有一个成功则返回成功;
  6. 广播调用:多个服务节点同时调用,有一个报错则代表服务异常。

Dubbo的SPI机制是什么?

SPI:Service Provider Interface 服务提供接口
Dubbo的SPI借鉴了JavaSPI的机制,但是两者还是有很多不同的;
Dubbo的SPI过程如下:
1、 获取类型加载器:ExtensionLoader。通过类的泛型找到对应的类型加载器。
2、 扫描文件:三个目录下是否包含对应的文件,找到类型对应的key-value信息。
3、 构建一个Holder对象,通过Double Check方式通过反射构建对象。
4、 反射实现对象的IOC 属性注入等。
5、 判断对应的配置中是否有Wrapper对象,有的话则使用其包装类。
6、 没有配置Wrapper则自己进行包装,也就是AOP操作。然后返回。


Dubbo的服务暴露(导出)

服务导出的入口为 ServiceBean的export方法
1、首先Dubbo监听Spring容器的 ContextRefreshedEvent事件,触发服务导出
2、先进行配置扫描,将 操作系统、JVM、配置中心、应用配置、文件配置等加载为Map;
3、根据配置信息构建URL,分为所有注册中的URL和服务节点的URL,生成对应Invoker对象;
4、启动网络服务器,将Invoker对象和对应的请求执行方法映射为RequestHandler。
5、将服务对象注册到对应的注册中心上,同时在服务端设置监听,监听配置中心和应用配置。
5、发布服务导出完成的事件。


Dubbo的服务导入

服务导入的入口味主要为 RefrenceBean的get方法;
1、和服务导入一样,先验证Dubbo对应的配置并初始化
2、通过protocol的refer方法构建Invoker对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值