面试-Dubbo 常见问题
1. 什么是Dubbo?
Dubbo 是一个RPC框架,包含注册中心,服务提供方,服务消费方,控制台,监控中心。
2. Dubbo启动时依赖服务不可用,会怎么样?
Dubbo 启动时会从注册中心拉取消费者需要的提供方信息,如果依赖的服务提供方不可用,Dubbo消费方会启动失败,并且不停的向注册中心请求提供方信息,抛出异常找不到对应的提供方。可以通过check="false"关闭检查,只有在调用时才检查是否有提供方。
3. Dubbo 线程模型
Dubbo 提供了以下几种线程模型
all: 所有的请求一律进工作线程池(默认)
direct: 一律使用IO线程池
message: 除了请求和响应走线程池,其他都是IO线程池(推荐)
execution: 除了请求,其他都走IO线程池
connection: 连接和断连进队列,其他都走工作线程池
4. Dubbo有哪些负载均衡策略?
轮询,随机,最少活跃调用,一致性hash
5. 当同一个服务注册多个时,如何指定到某一个服务?
可以通过绕开注册中心,直接做点对点的请求,指定某一个服务提供方的地址
6. Dubbo 与SpringCloud 区别?
定位不同: Dubbo 是一个高性能的RPC 框架,SpringCloud 是微服务一站式解决方案
调用方式: Dubbo 是采用Dubbo 协议,SpringCloud 是采用Http协议
组件差异: SpringCloud 有较好的生态环境,丰富的组件,Dubbo 组件较少,但是灵活性强,可自由拓展。
7. Dubbo的配置纬度有哪些?
Application 应用纬度(如服务名等)
Service 服务纬度 (如超时时间;)
Method 方法纬度
Provider 提供者纬度
Consumer 消费者纬度
8. Dubbo 服务降级
当提供方服务出现异常时,注册中心会向提供方的消费者发送广播,通知消费方服务,消费方更新本地缓存,在执行调用提供方的代码时,就会抛出异常,可以封装统一的RPC返回体,当发生RPC异常时,return null,消费方只需要判断返回的内容是否为空,就不会因为异常导致业务中断。
9.限流方案
单机的熔弹方案
1:限制某一个接口的一段时间内的并发次数,可以在接口请求时,采用切面方式,获取内存中的阈值,并记录次数,如开始时配置了阈值为10 ,一个请求进来后,记录加1,判断当记录值大于阈值时,拒绝请求,否则放行请求,当请求操作完成后再将记录值减1。
2:采用令牌桶的方式,如初始化令牌桶的数量为10,每次请求进入后,都获取1个令牌,令牌桶数量减1,判断令牌桶减1后的数值,小于0,拒绝请求,否则放行请求,再通过外部程序或者线程,每隔一段时间就重置令牌桶的数量。从而达到限流目的。
如果是集群部署的情况下,可以通过分布式限流系统,进行限流,业务系统接收到请求后,统一向分布式限流系统获取一定数量的令牌桶,业务系统拿到令牌桶后,再自己内存中进行限流,当令牌消耗完后,再次向分布式限流系统获取。这样就可以达到限流的目的。文章来源:https://www.toymoban.com/news/detail-474226.html
10.熔断及熔断恢复
当请求调用的服务链路较长时,其中某个服务出现异常,导致线程阻塞,引起上游服务甚至整个链路的崩坏,所以要加入熔断机制,设定链路服务之间请求的超时时间,当超过超时时间后,释放线程,返回上游服务RPC超时,当短时间内这样的异常达到一定的比例或者次数后,可以认为这个下游服务出现了异常,这条RPC链路先断开,不在请求,过一段时间后,尝试回复部分请求,当部分请求都成功后,可以继续扩大恢复请求比例,或者全部恢复。文章来源地址https://www.toymoban.com/news/detail-474226.html
到了这里,关于面试-Dubbo常见问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!