sentinel怎样实现熔断降级? | 带你读《Spring Cloud Alibaba(2019)》之十六

简介: 本节介绍了sentinel实现熔断降级执行的策略:1.平均响应时间 (DEGRADE_GRADE_RT),2.异常比例(DEGRADE_GRADE_EXCEPTION_RATIO),3.异常数(DEGRADE_GRADE_EXCEPTION_COUNT)

上一篇:SpringCloud网关如何实现限流? | 带你读《Spring Cloud Alibaba(2019)》之十五
下一篇:Sentinel实现热点词限流 | 带你读《Spring Cloud Alibaba(2019)》之十七

本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。

sentinel实现熔断降级

熔断降级介绍

sentinel支持服务的熔断降级
熔断类似于保险丝,在超出了阈值的情况下,在一定的时间内不会执行业务逻辑,直接执行服务降级的方法。

服务降级:利用本地fallback方法,返回一个有好的提示给客户端,不会真实的去执行业务逻辑。

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

降级的策略

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

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

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

平均的响应时间

image.png

如果在1s秒,平均有5个请求的响应时间大于配置的10rt毫秒时间 阈值,则会执行一定时间窗口的熔断和降级。

基于平均相应时间实现降级代码:

@SentinelResource(value = "getOrderDowngradeRtType", fallback = "getOrderDowngradeRtTypeFallback")
@RequestMapping("/getOrderDowngradeRtType")
public String getOrderDowngradeRtType() {
    try {
        Thread.sleep(300);
    } catch (Exception e) {
    }
    return "getOrderDowngradeRtType";
}

public String getOrderDowngradeRtTypeFallback() {
    return "服务降级啦,当前服务器请求次数过多,请稍后重试!";
}

异常的比例

image.png

当我们每秒的请求大于5的时候,会根据一定比例执行我们的熔断降级的策略。

@SentinelResource(value = "getOrderDowngradeErrorType", fallback = "getOrderDowngradeErrorTypeFallback")
@RequestMapping("/getOrderDowngradeErrorType")
public String getOrderDowngradeErrorType(int age) {
    int j = 1 / age;
    return "正常执行我们的业务逻辑";
}

public String getOrderDowngradeErrorTypeFallback(int age) {
    return "服务降级啦,当前服务器请求次数过多,请稍后重试!";
}

异常的次数

image.png

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

相关文章
|
1月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
1457 54
|
1月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
2814 42
|
1月前
|
人工智能 监控 Java
Spring AI Alibaba实践|后台定时Agent
基于Spring AI Alibaba框架,可构建自主运行的AI Agent,突破传统Chat模式限制,支持定时任务、事件响应与人工协同,实现数据采集、分析到决策的自动化闭环,提升企业智能化效率。
Spring AI Alibaba实践|后台定时Agent
|
2月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
1703 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
7月前
|
人工智能 Java API
MCP协议重大升级,Spring AI Alibaba联合Higress发布业界首个Streamable HTTP实现方案
本文由Spring AI Alibaba Contributor刘军、张宇撰写,探讨MCP官方引入的全新Streamable HTTP传输层对原有HTTP+SSE机制的重大改进。文章解析Streamable HTTP的设计思想与技术细节,并介绍Spring AI Alibaba开源框架提供的Java实现,包含无状态服务器模式、流式进度反馈模式等多种场景的应用示例。同时,文章还展示了Spring AI Alibaba + Higress的完整可运行示例,分析当前实现限制及未来优化方向,为开发者提供参考。
|
3月前
|
人工智能 Java 开发者
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!
邀您参与 “直通乌镇” Spring AI Alibaba 开源竞技挑战赛!