nacos面试分析

1.为什么将服务注册到nacos?

答:微服务里有很多服务,为了更好的管理和查找服务,将服务注册到nacos中,nacos孵化于阿里巴巴,成长于十年双十一的洪峰考研,简单易用,稳定可靠,性能卓越。

2.在nacos中服务提供者是如何向nacos注册中心(registry)续约的?

答:nacos服务客户端(要注册到nacos的服务)启动时会每隔一段时间(默认5秒)向nacos发送心跳包,nacos注册中心15秒内没有检测到心跳包会默认认为nacos处于一种不健康的状态,30秒还没收到则认为这个服务已不可用。

3.对于nacos服务来讲它是如何判断服务实例的状态的?

答:nacos服务客户端(要注册到nacos的服务)启动时会每隔一段时间(默认5秒)向nacos发送心跳包,nacos注册中心15秒内没有检测到心跳包会默认认为nacos处于一种不健康的状态,30秒还没收到则认为这个服务已不可用。

4.服务启动时如何查找服务启动注册配置类?

答:通过NacosNamingService

5.服务消费方是如何调用服务提供方的资源?

答:通过RestTemplate第三方类来实现

6.@Bean注解的作用是什么?

答:一般用于配置类的内部,描述相关方法,用于告诉spring此方法的返回值要交给spring管理,bean的名字默认为方法名,假如需要指定名字可以@Bean(“bean的名字”)最多的应用场景是整合第三方资源对象

7.@Autowired注解的作用?

答:此注解描述属性,构造方法,set方法等,用于告诉spring框架,按照一定的规则为属性进行DI注入,默认按属性,方法参数类型查找对应的对象,假如只找到一个,则直接注入;类型多时,还会按照属性名或方法参数名

8.nacos中负责负载均衡底层是如何实现的?

答:通过Ribbon实现,Ribbon中定义了负载均衡算法,然后基于这些算法从服务实例中获取一个实例为想要服务方提供服务

9.Ribbon是什么?

答:Netfix公司提供的负载均衡客户端,一般用于服务的消费方法

10.Ribbon内置的负载均衡策略有哪些?

答:7种

(1)RoundRobinRule轮询(默认):

第一次到A,第二次就到B,第三次又到A,第四次又到B…
具体实现是一个负载均衡算法:第N次请求 % 服务器集群的总数 = 实际调用服务器位置的下标
那么怎么保证线程安全问题呢?因为N次请求次数会自增,怎么保证不会多次请求都拿到同一个N进行自增?答案就是简单的CAS:
在这里插入图片描述

(2)RandomRule随机
在这里插入图片描述
在这里插入图片描述

(3)RetryRule轮询重试(重试采用的默认也是轮询)
在这里插入图片描述

(4)WeightedResponseTimeRule响应速度决定权重:

其实是对RoundRobbin的一种增强,加入了权重和计算响应时间的概念,其中响应速度最快的权重越大,权重越大则选中的概率越大。

(5)BestAvailableRule最优可用(底层也有RoundRobinRule):

最优可用,判断最优其实用的是并发连接数。选择并发连接数较小的server发送请求。

在这里插入图片描述

(6)AvailabilityFilteringRule可用性过滤规则(底层也有RoundRobinRule):

可用过滤规则,其实它功能是先过滤掉不可用的Server实例,再选择并发连接最小的实例。

在这里插入图片描述

(7)ZoneAvoidanceRule区域内可用性能最优:

基于AvailabilityFilteringRule基础上做的,首先判断一个zone的运行性能是否可用,剔除不可用的区域zone的所有server,然后再利用AvailabilityPredicate过滤并发连接过多的server。

11.@LoadBalanced注解的作用是什么?

答:描述Restemplate对象,用于告诉spring框架,在使用RestTemplate进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略

12.什么是配置中心?

答:存储项目中配置信息的一个服务

13.为什么使用配置中心?

答:集中管理配置信息,动态发布配置信息

14.配置中心一般都会配置什么内容?

答:会经常配置变化的配置中心,连接池,日志,线程池,限流熔断规则

15.项目中为什么要定义bootstarp.yml文件?

答:此文件被读取的优先级比较高,在服务启动时读取配置中心的数据

16.nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?

答:可以从内存,客户端获取配置信息后,会将配置信息在本地保存一份

17.微服务中我们的客户端如何获取配置中心的内容?

答:服务首先会从内存中读取配置信息,同时我们的服务还会向nacos配置中心发请求拉取更新配置信息

sentinel限流熔断

1.sentinel是什么?

答:sentinel是分布式的流量防卫兵

2.跟sentinel类似的产品是什么?

答:hystrix

3.你了解限流算法吗?

答:计数器、令牌桶、漏斗算法、滑动窗口

(1)计算器算法:计数器算法是一种比较简单的限流实现算法,在指定周期内累加访问次数,当访问次数达到设定的阙值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零。

在这里插入图片描述

在这里插入图片描述

(2)令牌桶算法:是网络流量整形(traffic shaping)和速率限制(Rate Limiting)中最常用的一种算法。对于每个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要触发限流策略。

系统会以一个恒定速度(r tokens/sec)往固定容量的令牌桶中放入令牌,如果此时有客户端请求过来,需要先从令牌桶中拿到令牌以获得访问资格。

在这里插入图片描述

令牌桶算法机制:
假设令牌生成速度是每秒10个,也就等同于QPS=10,此时在请求获取令牌的时候,会存在三种情况:

请求速度 > 令牌生成速度:那么令牌会很快被取完,后续再进来的请求会被限流
请求速度 = 令牌生成速度:此时流量处于平稳状态
请求速度 < 令牌生成速度:说明此时系统的并发数并不高,请求能被正常处理

由于令牌桶有固定大小,当请求速度小于令牌生成速度时,令牌桶会被填满
所以令牌桶能够处理突发流量,也就是在短时间内新增的流量系统能够正常处理

(3)漏斗算法:令牌桶算法(Token Bucket)和 Leaky Bucket 效果一样但方向相反的算法,更加容易理解.随着时间流逝,系统会按恒定1/QPS时间间隔(如果QPS=100,则间隔是10ms)往桶里加入Token(想象和漏洞漏水相反,有个水龙头在不断的加水),如果桶已经满了就不再加了.新请求来临时,会各自拿走一个Token,如果没有Token可拿了就阻塞或者拒绝服务。令牌桶的另外一个好处是可以方便的改变速度. 一旦需要提高速率,则按需提高放入桶中的令牌的速率. 一般会定时(比如100毫秒)往桶中增加一定数量的令牌, 有些变种算法则实时的计算应该增加的令牌的数量。

在这里插入图片描述

漏桶限流算法机制:
请求速度 > 漏桶流出水滴的速度:也就是请求数超出当前服务所能处理的极限,将会触发限流策略
请求速度 <= 漏桶谁出水滴的速度:也就是服务端处理能力正好满足客户端的请求量,将正常执行

漏桶限流算法和令牌桶限流算法的实现原理相差不大
唯一区别:漏桶无法处理短时间内的突发流量,漏桶限流算法是一种恒定速度的限流算法

(4)滑动窗口:主要作用是控制数据注入网络的速度,平滑网络上的突发流量。

在这里插入图片描述

4.你了解sentinel默认的限流算法是什么?

答:滑动窗口

5.sentinel中的阈值应用类型吗?

答:QPS:每秒请求数,线程数

6.sentinel有哪些限流模式?

答:直连模式,关联模式,链路模式

7.sentinel限流效果是什么?

答:快速失败,预热,排队

gateway网关面试

1.什么是网关?

答:网关是服务访问流量的一个入口,类似于生活中的网关

2.为什么使用网关?

答:服务安全,同意服务入口管理,负载均衡,限流,认证

3.网关层面是如何实现负载均衡的?

答:通过服务名查找具体的服务实例

4.网关层面是如何通过服务查找服务实例的?

答:Ribbon

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐