alibaba-sentinel

流控

资源名

可以是requestMapping的url,也可以是@SentinelResource("资源名")注解的方法

流控方式

QPS

每秒通过的请求数 只关注请求不关注返回

流控模式
直接

请求数超过阈值直接返回错误信息
在这里插入图片描述

关联

在这里插入图片描述
如果xxx关联资源被触发 那么自身就会触发流控

链路

在这里插入图片描述
如果被调用者是xxx资源,就会触发

流控效果
快速失败

只要1秒内超过阈值 直接返回错误信息

Warm Up

在这里插入图片描述
默认coldFactor为3,即请求QPS从(阈值/3)开始,经多少预热时长才逐渐升至设定的QPS

排队等待

在这里插入图片描述
如果1秒内的QPS超过阈值 超过的部分会在下一秒内请求(前提是不超过超时时间)

线程数

web容器处理请求的线程数量;与hystrix线程隔离不一样:hystrix结合feign在远程服务调用时会为每一个服务维护一个线程池,限制的是这个线程池,而不是web容器处理请求的线程

降级

RT

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

一秒内(单位统计时长)设置的最小请求数目(请求数大于等于 5)响应时间超过设定的值,那么在指定的时间窗口内触发降级策略

异常比例

异常比例 (ERROR_RATIO):当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
一秒内(单位统计时长)设置的最小请求数(请求数大于等于 5)的错误比率超过指定值,那么在指定的时间窗口内触发降级策略

异常数

异常数 (ERROR_COUNT):当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
一分钟内(位统计时长内)的错误数量超过指定值(阈值),那么在指定的时间窗口内触发降级策略

热点

可以对参数进行限流
方法
在这里插入图片描述
对资源进行热点设置
在这里插入图片描述
当请求带上对应参数并且达到阈值就会出现异常
在这里插入图片描述
如果是集群 貌似得对每一个都要设置规则
在这里插入图片描述

自定义限流降级处理

bug:如果资源名使用的是@SentinelResource自定义的不会生效
BlockExceptionHandler 接口

@Component
public class MyHandler implements BlockExceptionHandler {
    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                       BlockException e) throws Exception {
        httpServletResponse.setContentType("application/json");
        httpServletResponse.setCharacterEncoding("utf-8");
        //限流异常
        if(e instanceof FlowException){
            httpServletResponse.getWriter().write("限流异常");
        }
        //降级异常
        else if(e instanceof DegradeException){
            httpServletResponse.getWriter().write("限流异常");
        }
        //参数限流异常
        else if(e instanceof ParamFlowException){
            httpServletResponse.getWriter().write("限流异常");
        }
        //授权异常
        else if(e instanceof AuthorityException){
            httpServletResponse.getWriter().write("限流异常");
        }
        //系统负载异常
        else if(e instanceof SystemBlockException){
            httpServletResponse.getWriter().write("限流异常");
        }
        else{
            httpServletResponse.getWriter().write("限流异常");
        }
        httpServletResponse.getWriter().flush();
        httpServletResponse.getWriter().close();
    }
}

BlockException 子类
AuthorityException 授权异常
DegradeException 降级异常
FlowException 限流异常
ParamFlowException 参数限流异常
SystemBlockException 系统负载异常

持久化规则

以上的配置都是保存在内存中,重启就会失效;整合nacos进行保存
sentinel整合nacos
在这里插入图片描述
nacos创建配置文件
在这里插入图片描述

Field说明取值
resource资源名@SentinelResource或url
count限流阈值
grade限流阈值类型,QPS/线程数0/1
limitApp流控针对的调用来源default
strategy流控效果:自身/关联/链路0/1/2
controlBehavior流控效果(直接拒绝 /预热/ 排队等待 )0/1/2
[
  {
    "resource": "xxxparam",
    "controlBehavior": 0,
    "count": 1,
    "grade": 1,
    "limitApp": "default",
    "strategy": 0
  }
]

如何指定是限流、降级、热点... 在配置中的rule-type
在这里插入图片描述
rule-type
flow:限流
degrade:降级
param-flow:参数限流
authority:授权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值