• 十九、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

  • 相关阅读:
    从云计算到容器到容器云
    聊聊 CDN 缓存与浏览器缓存
    我眼中的 Nginx(六):深入 Nginx/Openresty 服务里的 DNS 解析
    HSTS 详解,让 HTTPS 更安全
    Polaristech 刘洋:基于 OpenResty/Kong 构建边缘计算平台
    Hadoop 2.7.4 HDFS+YRAN HA增加datanode和nodemanager
    hadoop HA学习
    Hadoop 2.7.4 HDFS+YRAN HA部署
    Grafana + Prometheus 监控PostgreSQL
    MySQL 导出用户权限
  • 原文地址:https://www.cnblogs.com/houchen/p/15182547.html
Copyright © 2020-2023  润新知