SpringCloud面试题——Sentinel

发布时间:2023年12月17日

一:什么是Sentinel?

Sentinel是一个面向分布式架构的轻量级服务保护框架,实现服务降级、服务熔断、服务限流等功能

二:什么是服务降级?

比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备选方案

三:什么是服务熔断?

当某个服务出现问题,卡死了,不能让用户一直等待,需要关闭所有对此服务的访问,然后调用服务降级的方法并返回友好提示

四:什么是服务限流?

限流,比如秒杀场景,不能让用户瞬间都访问服务器,限制一次只可以有多少请求

五:流控规则

  1. 阈值类型:QPS和线程数
  2. 流控模式:直接 ,关联,链路
    关联:当关联的资源达到阈值时,就限流自己
    链路:多个请求调用同一个微服务
  3. 流控效果:快速失败,预热,排队等待
    预热:根据冷加载因子(默认3)的值,从阈值/冷加载因子,经过预热时长,才逐渐达到设置的QPS阈值
    在这里插入图片描述
    例子:这里默认设置的阈值是10,但是由于开启了warm UP,那么实际上默认的阈值不是10,默认阈值为 10/3 = 3,也就是最开始启动时,阈值只有3,当经过5秒后(预热时长),才慢慢的将阈值提升到10
    排队等待:让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
    在这里插入图片描述
    设置含义:/testA每秒1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

六:QPS和线程数的区别

QPS:每秒钟的请求数量,当调用该api的QPS达到阈值的时候,进行限流
线程数:服务端的处理请求的线程超过阈值的时候,就报错
例子:a请求过来,处理很慢,在一直处理,此时b请求又过来了此时因为a占用一个线程,此时要处理b请求就只有额外开启一个线程那么就会报错
在这里插入图片描述

七:服务降级有哪三种策略?

  1. RT(平均响应时间):平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足后触发降级,窗口期过后关闭断路器
    在这里插入图片描述
    永远一秒钟打进来10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完,在未来1秒钟的时间窗口内,断路器打开,微服务不可用,保险丝跳闸断电了
    在这里插入图片描述
    2、异常比例:QPS >= 5 且异常比例(秒级统计)超过阈值时,触发降级,时间窗口结束后,关闭降级
    在这里插入图片描述

3、异常次数:(分钟统计)超过阈值时,触发降级,时间窗口结束后,关闭降级
在这里插入图片描述
一分钟之内,有5个请求发生异常,进入熔断

八:热点规则

  1. 热点参数限流:会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
    例子:
    localhost:8080/aa?name=aa
    localhost:8080/aa?name=bb
    假如两个请求中,带有参数aa的请求访问频次非常高,我们就现在name==aa的请求,但是bb的不限制
  2. 如何自定义降级方法,而不是默认的抛出异常?
    使用@SentinelResource直接实现降级方法
    在这里插入图片描述
  3. 定义热点规则
    在这里插入图片描述
  4. 设置热点规则中的其他选项
    在这里插入图片描述
    测试结果:
    在这里插入图片描述

九:@SentinelResource注解

  1. 按照资源名称限流:指的是@SentinelResource注解value的值,
    在这里插入图片描述

在这里插入图片描述
2. 按照Url地址限流:资源名,是以url指定
在这里插入图片描述
3. 自定义限流处理逻辑
第一步:单独创建一个类,用于处理限流
在这里插入图片描述
第二步:在controller中,指定使用自定义类中的方法作为降级方法
在这里插入图片描述

十:服务熔断

  1. fallback:用于管理异常的,当业务方法发生异常,可以降级到指定方法
    在这里插入图片描述

  2. blockHandler:只对sentienl定义的规则降级
    在这里插入图片描述

  3. fallback和blockHandler都配置呢?
    当两个都同时生效时,blockhandler优先生效
    在这里插入图片描述

十一:规则持久化

1. 是什么:一旦我们重启应用,sentinel规则将消失,生产环境需要将配置规则进行持久化
2. 怎么存储:将限流配置规则持久化进Nacos保存,只要刷新8401某个rest地址,sentinel控制台的流控规则就能看到,只要Naeos里面的配置不删除,针对8401上sentinel上的流控规则持续有效
3. 配置步骤:
(1):我们的规则要保证在哪个名称空间的哪个分组下
在这里插入图片描述
(2):在nacos中创建一个配置文件,dataId就是上面配置文件中指定的
在这里插入图片描述

==json中,这些属性的含义:==
resource:资源名称;
limitApp:来源应用;
grade:阈值类型,0表示线程数,1表示QPS;
count:单机阈值;
strategy:流控模式,0表示直接;1表示关联,2表示链路;
controlBehavior:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
clusterMode:是否集群。
文章来源:https://blog.csdn.net/weixin_44582492/article/details/134938082
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。