当前位置: 首页 > news >正文

SpringCloud alibaba-Sentinel服务降级策略

在这里插入图片描述

文章目录

    • RT:
    • 异常比例:
    • 异常数:

RT:

平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

在这里插入图片描述

上图表示 需要1s持续进入5个请求,并且 平均响应时间大于 阈值,才会触发降级,打开断路器,等时间窗口结束,再关闭降级

1、添加testD接口,接口中设置1秒睡眠时间,即模拟响应时间为1s

    @GetMapping("/testD")public String testD(){try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}log.info(Thread.currentThread().getName()+"\t"+"...testD 测试RT");return "------testD 测试RT";}

2、Sentinel-dashboard中进行接口testD的RT设置,需要先请求一次testD,要不然dashboard中不会出现,设置降级策略为RT,RT值为200毫秒,时间窗口之降级时间间隔为1s,单位是秒
在这里插入图片描述
3、通过Jmeter做压力测试,设置请求testD接口,1秒内10个线程请求,永远循环

在这里插入图片描述
4、先请求一次testD接口没问题,再开启Jmeter压测,再浏览器请求一次testD发现已经快速失败了

在这里插入图片描述
5、测试结果表明RT策略成功,因为一秒10个线程请求满足了 RT的一秒5个请求,然后testD休眠1s满足了RT策略里的200ms阈值,所以能测试成功。

永远一秒钟打进来10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,
如果超过200毫秒还没处理完,在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。后续我停止jmeter,没有这么大的访问量了,断路器关闭(保险丝恢复),微服务恢复OK

异常比例:

异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

在这里插入图片描述

上图表示 QPS>=5 且异常比例超过阈值,触发降级,打开断路器,等时间窗口结束,再关闭降级

1、添加testF接口,接口中设置10/0,即模拟运行时异常

    @GetMapping("/testF")public String testF(){log.info(Thread.currentThread().getName()+"\t"+"...testF 测试 异常比例");int i = 10/0;return "------test 测试 异常比例";}

2、Sentinel-dashboard中进行接口testD的 异常比例 设置,设置降级策略为 异常比例 ,异常比例为0.2即20%,时间窗口为3s
在这里插入图片描述
3、通过Jmeter进行压测,设置请求testF接口,1秒内10个线程请求,永远循环

在这里插入图片描述4、先请求一次testF接口,会报by zero异常,当开启Jmeter压测后,再访问testF会快速失败,等关闭Jmeter后,再请求接口,又会报by zero异常
在这里插入图片描述
5、按照上述配置,单独访问一次,必然来一次报错一次(int age = 10/0), 调一次错一次;

开启jmeter后,直接高并发发送请求,多次调用达到我们的配置条件了。断路器开启(保险丝跳闸),微服务不可用了,不再报错error而是服务降级了。等关闭jmeter后,又恢复了,所以又请求一次报错一次

异常数:

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

异常数是按分钟来统计的,所以时间窗口必须大于等于60s
在这里插入图片描述
上图就是表示,在一分钟内统计异常数超过阈值了,然后出发降级,打开断路器,等时间长款结束,关闭降级

1、添加testE接口,接口中设置10/0,即模拟运行时异常

    @GetMapping("/testE")public String testE(){log.info(Thread.currentThread().getName()+"\t"+"...testE 测试 异常数");int i = 10/0;return "------testE 测试 异常数";}

2、在sentinel-dashboard中设置testE的降级策略为异常数,异常数为5,时间窗口为70s
在这里插入图片描述
3、请求接口testE,请求一次为by zero异常,请求两次也是报错,等请求到五次后就会出现服务降级,直接快速失败,等超过70s窗口期后,再请求testE,又会开始 异常数策略统计
在这里插入图片描述
至此,Sentinel中的服务降级 三种策略 RT、异常比例、异常数的demo演示案例上述已经演示完毕~~~~

http://www.lryc.cn/news/14614.html

相关文章:

  • python常用函数——random()函数
  • PX4之启动脚本
  • Java零基础入门到精通(持续更新中)
  • 杂七杂八(12):Bilibili视频缓存 m4s音视频合并 shell脚本
  • Qt 某光谱仪程序开发
  • 蛋白质组学技术与常见分析培训班火热招生中!
  • 唤醒手腕 Java 后端 Springboot 框架结合 socketio 学习笔记
  • C++入门:内联函数、auto关键字、基于范围for循环及指针空值nullptr
  • Python遗传算法
  • GEE学习笔记 六十四:绿色中国报告(个人版)
  • 【Kubernetes】【十八】数据存储 高级存储 配置存储
  • 传输层TCP与UDP协议
  • 字节数组的通俗解释
  • 硬件学习 软件Cadence day06 原理图网表导入PCB (过程和操作的错误),开始的画板
  • OCT 医学图像分类
  • 华为OD机试 - 合并数组 | 机试题算法思路 【2023】
  • 前端开发页面样式通用约定法则
  • 向上跳空缺口选股公式,选出回补后再启动的标的
  • 【IoT】做短视频之前,你需要先做好内容定位
  • 苏宁基于 AI 和图技术的智能监控体系的建设
  • 3、内存管理
  • 【蓦然回首忆Java·基础卷Ⅰ】
  • 类属性和对象属性
  • 【TensorFlow 】查看Tensorflow和python对应版本、将现有的TensorFlow更新到指定的版本
  • VO、DTO、BO、PO、DO区别
  • 速看!!!一套能直接拿捏大厂面试官的软件测试面试宝典
  • 超级完整 的 Maven 讲解 以及私服搭建
  • 数据结构之算法的时间复杂度和空间复杂度
  • 【微信小程序】使用页面跳转并携带多个特定参数
  • CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子