sentinel流量控制、降级、熔断

  流量控制(flow control),其原理是监控资源(Resource)的统计指标,然后根据Token计算策略来计算资源的可用Token(也就是阈值),然后根据流量控制策略对请求进行控制,避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

流控配置

1.选择访问的簇点链路,选择具体流控规则 新增留空信息

流控规则名词解释与作用

QPS: 每秒请求访问量,配合阈值使用 并发线程数:当前请求每秒并发访问量,配合阈值使用 流控模式:  直接:单个接口访问  关联:关联两接口A、B。如当前A访问量达到阈值后,B同样限流  链路:分布式服务中,多服务调用总时常 流控效果:  快速失败:顾名思义,当请求达到配置阈值直接失败  warm up:慢加载,在指定时间内,慢慢达到请求阈值。如阈值:10,预热时长:5。当服务接收到第一次求请求,前5秒会以10/3的流量慢慢达到请求阈值10.  排队等待:类似于队列机制,先到先得,后到排队访问。

如上:当前请求/testA接口,当QPS大于10时,会直接触发失败 如上:当前/testA请求并发数,大于10时。接口/testB与/testA都会触发限流 如上:当/testA从无接口请求->有请求时。服务会以 10/3 -> 10的阈值过度,持续时间为5秒

降级配置

参考官方文档:

以上图为例:最大RT -> 最大request time

解读上图的意思就是:最少5次请求中,超过比例阈值50%的请求,每次响应时间大于200毫秒,则触发熔断,每次熔断触发时间为3秒

解读上图的意思就是:最少5次请求中,超过比例阈值70%的请求,出现异常时,则触发熔断,每次熔断触发时间为3秒 解读上图的意思就是:最少5次请求中,超过4次请求,出现异常时,则触发熔断,每次熔断触发时间为3秒

热点key限流

上图意思为:/testB资源,QPS最大为1,当超过时就会触发熔断。但是当请求参数包含10时,QPS可以是10。

@RequestMapping("/testB")
    @SentinelResource(value = "testB", blockHandler = "error_request")  // 不配置blockHandler会返回限流异常错误
    public String testB(@RequestParam("p1") Long p1) {
          
   
        log.info("request testB");
        return "test -- B";
    }

    public String error_request(@RequestParam("p1") Long p1, BlockException e) {
          
   
        log.info("request testB fallback");
        return "请求异常,请稍后再尝试";
    }

代码示例  另外 @SentinelResource 注解,只能fallback配置错误,当接口异常时,会返回原本的异常信息。

经验分享 程序员 微信小程序 职场和发展