zoukankan      html  css  js  c++  java
  • 十九、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

  • 相关阅读:
    mongodb
    python中读取文件的read、readline、readlines方法区别
    uva 129 Krypton Factor
    hdu 4734
    hdu 5182 PM2.5
    hdu 5179 beautiful number
    hdu 5178 pairs
    hdu 5176 The Experience of Love
    hdu 5175 Misaki's Kiss again
    hdu 5174 Ferries Wheel
  • 原文地址:https://www.cnblogs.com/houchen/p/15182547.html
Copyright © 2011-2022 走看看