Loading

十九、SpringCloud Alibaba Sentinel实现熔断和限流 (二 流控+降级+热点key)

四、流控规则

1、介绍模式

在sentinel控制台哪儿配置?

clipboard


2、流控模式

1)直接快速失败

①、配置及说明

/testA请求每秒请求数(QPS)超过单机域值1,直接快速失败然后响应给客户端

clipboard


②、测试

clipboard

缺点:直接返回报错信息,是否可以由自己编写限流处理方法


2)关联模式

①、关联模式是什么?

当关联的资源达到阈值时,就限流自己

可以理解为:当支付模块挂了时,需要对订单模块进行限流


②、配置

当 /testB QPS达到域值 ,testA请求就不能使用

clipboard


③、测试

postman 20个线程每0.3秒访问一次testB,然后查看testA的请求结果

clipboard


3、流控效果

1)直接 -> 快速失败 (默认的流控效果)


2)预热

①、说明

阈值除以coldFactor(默认值是3),经过多少预热时长后才会达到阈值


②、配置

clipboard

clipboard


③、应用场景

秒杀系统开开启的瞬间,会有很多流量上来,很有可能会将系统打死,预热的方式就是慢慢的将阈值

增长到设置的阈值


3)排队等待

①、排队等待是什么?

clipboard


②、排队等待的设置

设置 testA每秒一次请求,超过的话就排队等待,等待的超时时间为20000毫秒

clipboard


五、降级规则

1、官网

https://github.com/alibaba/Sentinel/wiki


2、基本介绍

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

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


【注意 2020年的cloud ,现在是由HALF OPEN状态的】Sentinel断路器是没有半开状态的

参考Hystrix

半开的状态系统自动去检测是否有请求异常

没有异常就关闭断路器恢复使用


3、降级策略实战

1)RT

①、是什么?

clipboard

clipboard

②、配置测试



2)异常比例 (暂时未写,以后补上)



3)异常数(暂时未写,以后补上)




六、热点key限流

1、是什么?

对热点参数进行限流(例如促销商品的主键)


2、官网

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81


3、@SentinelResource注解

为服务降级申明兜底方法


4、controller中声明兜底方法

@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "del_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
             @RequestParam(value = "p2",required = false) String p2){

    return "testHotKey";
}

public String del_testHotKey(String p1, String p2, BlockedException exception){
    return "========del_testHotKey,o(╥﹏╥)o";
}


5、在sentinel中添加热点限流配置

根据代码:

@SentinelResource(value = "testHotKey",blockHandler = "del_testHotKey")


在Sentinel控制台中添加配置

方法testHotKey里第一个参数,只要QPS超过每秒1次,马上进行降级处理

clipboard



6、测试

clipboard


7、参数例外项

普通的时候:超过1秒钟一个后,达到阈值后马上被限流

我们期待当p1参数是某个特殊值时,它的限流和平时不一样

配置如下

意思是:当p1的参数为1,每秒200次请求才会达到阈值

clipboard


七、系统规则(总的配置 不常用)

https://github.com/alibaba/Sentinel/wiki/%E7%B3%BB%E7%BB%9F%E8%87%AA%E9%80%82%E5%BA%94%E9%99%90%E6%B5%81

配置全局QPS

posted @ 2021-08-24 21:12  青岑  阅读(194)  评论(0编辑  收藏  举报