第十章 Sentinel流控规则

1.Sentinel流量控制功能

  • 流量控制(flow control)
    原理是监控应⽤流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进⾏控制,以避免被瞬时的流量⾼峰冲垮,从⽽保障应⽤的⾼可⽤性
  • 两种规则
    1)基于统计并发线程数的流量控制
    并发数控制⽤于保护业务线程池不被慢调⽤耗尽
    Sentinel 并发控制不负责创建和管理线程池,⽽是简单统计当前请求上下⽂的线程数⽬(正在执⾏的调⽤数⽬)
    如果超出阈值,新的请求会被⽴即拒绝,效果类似于信号量隔离
    2)基于统计QPS的流量控制
    当 QPS 超过某个阈值的时候,则采取措施进⾏流量控制
  • 控制⾯板介绍
    资源名:默认是请求路径,可⾃定义
    针对来源:对哪个微服务进⾏限流,默认是不区分来源,全部限流,这个是针对 区分上游服务进⾏限流, ⽐ 如 视频服务 被 订单服务、⽤户服务调⽤,就可以针对来源进⾏限流
    在这里插入图片描述

2.基于并发线程进⾏限流配置

  • 开发临时接⼝,⽅便测试

     @RequestMapping("list")
     public Object list(){
         try {
             TimeUnit.SECONDS.sleep(3);//线程睡眠模拟压测
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
         Map<String,String> map = new HashMap<>
                 ();
         map.put("title1","ALibabaCloud微服务专题");
         map.put("title2","SpringBoot专题");
         return map;
     }
    
  • 基于统计并发线程数的流量控制

    并发数控制⽤于保护业务线程池不被慢调⽤耗尽
    
    Sentinel 并发控制不负责创建和管理线程池,⽽是简单统计当前请求上下⽂的线程数⽬
    (正在执⾏的调⽤数⽬)
     
    如果超出阈值,新的请求会被⽴即拒绝,效果类似于信号量隔离。并发数控制通常在调⽤
    端进⾏配置 
    
  • 流控规则会下发到微服务,微服务如果重启,则流控规则会消失可以持久化配置

  • 选择阈值类型 ”线程数“ ,配置是1
    在这里插入图片描述

  • 刷新浏览器
    在这里插入图片描述

3.流控规则效果-直接拒绝-冷启动预热-匀速排队

  • 流量控制的效果包括以下⼏种

    直接拒绝:默认的流量控制⽅式,当QPS超过任意规则的阈值后,新的请求就会被⽴即拒绝

    Warm Up:冷启动/预热,如果系统在此之前⻓期处于空闲的状态,我们希望处理请求的数量是缓步的增多,经过预期的时间以后,到达系统处理请求个数的最⼤值

    匀速排队:严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法,主要⽤于处理间隔性突发的流量,如消息队列,想象⼀下这样的场景,在某⼀秒有⼤量的请求到来,⽽接下来的⼏秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,⽽不是在第⼀秒直接拒绝多余的请求
    在这里插入图片描述

  • 流控⽂档
    https://github.com/alibaba/Sentinel/wiki/流量控制

4.微服务⾼可⽤利器Sentinel熔断降级规则

  • 熔断降级(虽然是两个概念,基本都是互相配合)
    对调⽤链路中不稳定的资源进⾏熔断降级也是保障⾼可⽤的重要措施之⼀
    对不稳定的弱依赖服务调⽤进⾏熔断降级,暂时切断不稳定调⽤,避免局部不稳定因素导致整体的雪崩
    熔断降级作为保护⾃身的⼿段,通常在客户端(调⽤端)进⾏配置
  • 什么是Sentinel降级规则
    ⽂档:https://github.com/alibaba/Sentinel/wiki/熔断降级
    就是配置⼀定规则,然后满⾜之后就对服务进⾏熔断降级
  • Sentinel 熔断策略
    慢调⽤⽐例(响应时间): 选择以慢调⽤⽐例作为阈值,需要设置允许的慢调⽤ RT(即最⼤的响应时间),请求的响应时间⼤于该值则统计为慢调⽤
    ⽐例阈值
    熔断时⻓:超过时间后会尝试恢复
    最⼩请求数:熔断触发的最⼩请求数,请求数⼩于该值时即使异常⽐率超出阈值也不会熔断
    在这里插入图片描述异常⽐例:当单位统计时⻓内请求数⽬⼤于设置的最⼩请求数⽬,并且异常的⽐例⼤于阈值,则接下来的熔断时⻓内请求会⾃动被熔断
    ⽐例阈值
    熔断时⻓:超过时间后会尝试恢复
    最⼩请求数:熔断触发的最⼩请求数,请求数⼩于该值时,即使异常⽐率超出阈值也不会熔断
    在这里插入图片描述异常数:当单位统计时⻓内的异常数⽬超过阈值之后会⾃动进⾏熔断
    异常数
    熔断时⻓:超过时间后会尝试恢复
    最⼩请求数:熔断触发的最⼩请求数,请求数⼩于该值时即使异常⽐率超出阈值也不会熔断
    在这里插入图片描述

5.熔断状态和恢复

  • 服务熔断⼀般有三种状态
    熔断关闭(Closed):服务没有故障时,熔断器所处的状态,对调⽤⽅的调⽤不做任何限制
    熔断开启(Open):后续对该服务接⼝的调⽤不再经过⽹络,直接执⾏本地的fallback⽅法
    半熔断(Half-Open):所谓半熔断就是尝试恢复服务调⽤,允许有限的流量调⽤该服务,并监控调⽤成功率
    在这里插入图片描述
  • 熔断恢复
    经过熔断时⻓后熔断器会进⼊探测恢复状态(HALFOPEN 状态)尝试恢复服务调⽤,允许有限的流量调⽤该服务,并监控调⽤成功率
    如果成功率达到预期,则说明服务已恢复,进⼊熔断关闭状态;如果成功率仍旧很低,则重新进⼊熔断状态
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值