SpringCloud Alibaba学习(七):Sentinel的降级规则

简介: Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。

一、降级规则是什么


     

Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。

     

当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。


二、降级规则有什么



1、RT

     

平均响应时间,秒级  


平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足后触发降级;

窗口期过后关闭断路器;


RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)


2、异常比例


秒级。


QPS >= 5 且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级


3、异常数


分钟级。


异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级


三、配置实战



1、RT


(1)是什么  


c0c203eb3d0d43a6b12d0cc106f44be7.pngb42069889a6f457aa13eb808fb0df42e.png


(2)配置方法


446e1b14147d4cb08f997520e790551c.png


(3)测试


testD方法:

@GetMapping("/testD")
    public String testD() {
        //暂停几秒钟线程
        try { 
            TimeUnit.SECONDS.sleep(1); 
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("testD 测试RT");
        return "------testD";
    }


使用 JMeter 工具来进行压力测试

060e1a65f2bf449d973fecd0a008ab57.pngdd3fbcbfe9f547968b86fac749de2475.pngb7b47a49c14b43e0b589ab1f5ef746e5.png


然后点击上方的绿色三角形,开始压力测试。


再次刷新testD

01d0853dcce24a8da37754d48f7dd77d.png


已经被限流。


(4)结论

在刚刚JMeter的设置中,永远在1秒钟打进来10个线程(大于5个)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完(testD睡眠时间为1秒),在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。而永远每秒10个线程,那就永远在下一秒微服务不可用。

后续如果停止jmeter,没有这么大的访问量了,断路器关闭(保险丝恢复),微服务恢复正常。


2、异常比例


(1)是什么


eeb6d06002af46d19b533d118aaf2995.png1950fd10307847a69362d062a2fe8e85.png


(2)配置方法


fbbdeb2928784ab89b8700cbdddbe503.png


(3)测试


testD:

@GetMapping("/testD")
    public String testD() {
        //测试异常比例
        int m = 10/0;
        log.info("testD 测试异常比例");
        return "------testD";
    }


再次JMeter压力测试

01d0853dcce24a8da37754d48f7dd77d.png


暂停后,再次访问,直接报错。

aff35fd5e5024fc6977d124af3d096c9.png


(4)结论


按照上述配置,单独访问一次,必然来一次报错一次(int m = 10/0),调一次错一次(错误占比为100%);而当开启jmeter后,直接高并发发送请求,多次调用达到我们的配置条件了,这时断路器开启(保险丝跳闸),微服务不可用,不再报错error而是服务降级了。


当暂停JMeter后,不满足配置条件,再次访问后直接报错。


3、异常数


(1)是什么

e9d56b1e9c0c4cf88d725ccca9268bba.png


也就是说,时间窗口一定要大于60s


e086a5b677864351813a8431661b48d4.png


(2)配置方式


751af869049049c4ad65c622f09afd4d.png


(3)测试

 

testE:

@GetMapping("/testE")
public String testE()
{
    log.info("testE 测试异常比例");
    int age = 10/0;
    return "------testE 测试异常比例";
}


第一次访问testE,报错;而当访问5次后,进入限流。


(4)结论


按照上述配置,单独访问一次,必然来一次报错一次(int age = 10/0),而当访问五次(异常数达到我们设置的五次)后,服务进入熔断。


相关文章
|
3月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
4月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
90 1
|
2月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
159 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
1月前
|
算法 Java API
Sentinel学习圣经:从入门到精通 Sentinel,最全详解 (40+图文全面总结)
尼恩给大家做一下系统化、体系化的梳理,联合社群小伙伴,来一个Sentinel学习圣经:从入门到精通Sentinel。
|
2月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
3月前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
107 0
|
4月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
1455 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
3月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
134 1