SpringCloud Alibaba——Sentinel服务熔断与限流(二、降级规则)

简介: SpringCloud Alibaba——Sentinel服务熔断与限流(二、降级规则)

1.开篇



上一篇文章说完了sentinel的流控规则,其中包括流控模式(直接、关联、链路)、流控效果(快速失败、预热、排队等待)。


更详细的内容可以参考:https://szh-forever-young.blog.csdn.net/article/details/119568801

这篇文章再来聊聊sentinel的降级规则。官方文档:https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

这三种降级规则分别是:RT、异常比例、异常数。


·       RT(平均响应时间,秒级)

         平均响应时间   超出阈值     在时间窗口内通过的请求>=5,两个条件同时满足后触发降级。窗口期过后关闭断路器。
          RT
最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)

·       异常比列(秒级)

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

·       异常数(分钟级)

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

这里需要注意:之前SpringCloud H版中的Hystrix服务熔断降级中是有半开状态的;而SpringCloud AlibabaSentinel的断路器是没有半开状态的,通俗来说,你的保险丝要么是断开,要么就闭合。

2.项目源码


github源码地址:https://github.com/2656307671/SpringCloud-Alibaba-Sentinel

gitee源码地址:https://gitee.com/szh-forever-young/SpringCloud-Alibaba-Sentinel

本次做Sentinel测试的代码请参考上面的仓库。


2.1 RT


我们在sentinel的界面中来配置RT


首先设置RT的阈值为200ms,是说testD的请求必须在200ms内完成,如果无法完成,则在未来的1秒内将进行服务熔断降级;1秒持续进入5个请求是默认的。


之后在Postman中,设置testD这个请求,永远一秒钟打进来10个线程(大于5个了)调用testD,我们希望200毫秒处理完本次任务,如果超过200毫秒还没处理完(代码中每个testD请求都会sleep 1秒),在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。后续Postman中的Run停止了,访问量逐渐减少了,再次访问testD可以看到恢复正常了。


2.2 异常比例


这里我们设置了异常比例是0.2,即20%。如果出错,在未来1秒钟的时间窗口内,断路器打开(保险丝跳闸)微服务不可用,保险丝跳闸断电了。


对应代码中的testE请求。其中有一行:int age = 10/0; 这明显是一个运行时异常。但是我们在Postman中设置了访问10testE;直接高并发发送请求,多次调用达到我们的异常比例配置条件了。因为一出现异常,那异常比例就是100%啊,所以此时不再报错error而是服务降级了。


不使用Postman,直接访问了话,则会报error,此时与服务降级就无关了。单独访问一次,必然来一次报错一次(int age  = 10/0),调一次错一次;


2.3 异常数


首先异常数是按分钟来统计的。这里对应代码中的testF请求方法。

这里设置的意思是:当异常数达到5次的时候,就会进行服务熔断降级,也即看到的是sentinel默认的出错页面信息,而不是error page

相关文章
|
3月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
186 1
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
74 3
|
4月前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
4月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
76 1
|
4月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
5月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
107 1
|
7月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
182 3
|
3月前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
4月前
|
监控 Java Nacos
SpringCloud基础5——微服务保护、Sentinel
sentinel、雪崩问题、流量控制、隔离和降级、授权规则、规则持久化
SpringCloud基础5——微服务保护、Sentinel
|
6月前
|
监控 Java 应用服务中间件
SpringCloud面试之流量控制组件Sentinel详解
SpringCloud面试之流量控制组件Sentinel详解
274 0