SpringCloud Sentinel 熔断降级、热点参数限流、与系统自适应限流介绍与配置

一、熔断降级介绍与配置

概述:除了上一章节讲解的sentinel的流量控制之外,sentinel还提供了熔断降级功能。与处理高并发的系统自我保护机制不同的是,熔断降级主要防止当前接口不可用时,导致依赖该接口的服务也不可用,间接导致系统的雪崩效应。

通常接口调用都在客户端做弱依赖服务调用,来保证自身系统的功能稳定。(强依赖服务调:服务A依赖服务B,当B成功A成功,当B失败A失败,称为强依赖;若依赖,当A调用B成功,A成功,当A调用B失败,A做降级处理,保证A接口功能正常,称为弱依赖)

熔断降级包含三种处理方式:

  1. 慢调用比例
  2. 异常比例
  3. 异常数

1、慢调用比例

表示:单位时间内默认1秒内,当最小请求数达到5次以及超过200ms的请求数大于5/2=2时,则触发接口熔断,在熔断后的10秒内都将对该接口进行降级处理。

2、异常比例

表示:单位时间内(默认1秒)当最小请求次数达到5次以及失败的请求数量达到最小请求数量的一半时,则会触发熔断,熔断时间为10秒。

3、异常数

表示 单位时间内(1分钟)当请求数达到5次且异常数超过2次时进入熔断状态,熔断时间长度为65秒,熔断时间必须设置大于60秒。60秒之后关闭熔断状态。

 

二、热点参数限流介绍与配置

热点参数限流为,当一个接口中其中一个查询参数使用较高的情况下,可以针对该参数对该接口进行限流,比如查询人员列表时,人名的查询条件筛选的调用比较高,则可以对包含人名筛选的请求进行限流控制。不包含人名筛选的其他查询人员列表请求不做限流处理。

测试环境:在《SpringCloud Alibaba Sentinel 项目基础环境搭建》基础上修改controller 为:(添加consumer/product/get3接口,以及其熔断降级方法)

package com.xiaohui.springcloud.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.entities.Payment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class OrderController {

    @SentinelResource
    @GetMapping("/consumer/product/get2")
    public CommonResult<Payment> getPaymentById(Long id){
        CommonResult<Payment> commonResult = null;
        try{Thread.sleep(2000);}catch (Exception e){}
        if(id>1L){
            int i = 10/0;
        }else {
            commonResult = new CommonResult<>(401,"正常方法调用",null);
        }
        return  commonResult;
    }

    @SentinelResource(value = "consumer/product/get3",blockHandler = "getPaymentBlockHandler")
    @GetMapping("/consumer/product/get3")
    public CommonResult<Payment> getPaymentById2(@RequestParam(required = false) Long id,@RequestParam(required = false) Long id2){
        CommonResult<Payment> commonResult = null;
        try{Thread.sleep(1000);}catch (Exception e){}
        commonResult = new CommonResult<>(401,"正常方法调用",null);
        return  commonResult;
    }
    public CommonResult<Payment> getPaymentBlockHandler(Long id,Long id2, BlockException be){
        return new CommonResult<>(400,"熔断降级方法",null);
    }
}

在列表中给服务添加热点限流,设置需要给接口中第几个参数进行设置限流。以及设置的单位时间和请求的次数。在热点配置列表中可以对之前添加的热点进行高级设置,可以设置当前参数的例外值的特殊限流阈值。要求改参数为java8中基本数据类型。

这样,当使用该参数高并发查询时,将会对该请求进行限流。不包含改参数的服务将不会限流。当给该参数传递特殊值时,将根据高级配置中的阈值进行控流。

三、系统自适应限流介绍与配置

处理设置单一服务上的控流之外,sentinel还支撑应用级别上的限流设置。

系统规则支持以下的模式:

  • Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5
  • CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
  • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
  • 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值