SpringCloudAlibaba(十)——sentinel组件的熔断降级和热点规则
2021/7/21 6:10:02
本文主要是介绍SpringCloudAlibaba(十)——sentinel组件的熔断降级和热点规则,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
熔断降级规则简介
熔断:用来避免微服务架构中雪崩现象,达到某个阈值条件之后自动出发熔断
原理:当监控到调用链路中某一个服务,出现异常(20个以上异常)自动出发熔断,在出发熔断之后对于该微服务调用不可用
熔断降级规则的使用
RT:根据请求响应时间熔断
异常比例:根据请求调用过程中出现异常百分比进行熔断
异常数:根据请求调用过程中异常数进行熔断
平均响应时间
当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。
异常比例
当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%
异常数
当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。
热点参数限流规则使用
热点:经常访问的数据称之为热点
热点限流:也称之为热点参数限流,日后访问资源中携带了指定参数进行限流
@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:
- value:资源名称,必需项(不能为空)
- entryType:entry 类型,可选项(默认为 EntryType.OUT)
- blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
- fallback / fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:
- 返回值类型必须与原函数返回值类型一致;
- 方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
- fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 --fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
- defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:
- 返回值类型必须与原函数返回值类型一致;
- 方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
- defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
- exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。
注意:使用热点参数限流时,不能使用资源路径,必须使用资源别名,sentinel提供资源别名注解 @SentinelResource(value = "别名")
package com.study.springcloudAlibaba.controller; import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException; import com.alibaba.csp.sentinel.slots.block.flow.FlowException; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController { @RequestMapping("/demo/{id}") //blockHandler = "" 使用sentinel进行不同规则控制时的默认处理方案 //fallback = "" 自定义业务出错时默认处理方案 //defaultFallback = "" 指定一个业务错误时默认方案 @SentinelResource(value = "aaa",blockHandler = "blockHandler",fallback = "fallCustomer",defaultFallback = "fall") //作用代表这是一个sentinel资源 public String demo(@PathVariable("id") int id){ if (id<0)throw new RuntimeException("id无效"); return "demo ok!!!id="+id; } public String blockHandler(int id, BlockException e){ if (e instanceof FlowException){ return "当前请求过于火爆,您已被流量控制!!!"; } if (e instanceof DegradeException){ return "当前请求过于火爆,您已被降级!!!"; } if (e instanceof ParamFlowException){ return "当前请求过于火爆,您已被热点参数限流!!!"; } return "服务器快爆了,请稍后再试!!!"; } public String fallCustomer(int id){ return "自定义处理----我们服务器出错了"+id; } public String fall(int id){ return "默认处理----我们服务器出错了"+id; } @RequestMapping("/test") public String test(){ return "test ok!!!"; } }
一、
二、
三、
四、
五、
这篇关于SpringCloudAlibaba(十)——sentinel组件的熔断降级和热点规则的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign服务间调用学习入门
- 2024-12-27OpenFeign学习入门:轻松掌握微服务通信
- 2024-12-27OpenFeign学习入门:轻松掌握微服务间的HTTP请求
- 2024-12-27JDK17新特性学习入门:简洁教程带你轻松上手
- 2024-12-27JMeter传递token学习入门教程
- 2024-12-27JMeter压测学习入门指南
- 2024-12-27JWT单点登录学习入门指南
- 2024-12-27JWT单点登录原理学习入门
- 2024-12-27JWT单点登录原理学习入门