Sentinel 简单使用

Sentinel

熔断降级: 削峰填谷,集群流量控制,熔断

实时监控: 控制台,看到接入单台机器秒级数据

SPI扩展点: 简单易用,SPI扩展接口,快速制定逻辑,规则

官网官网中文官中控制台

image-20220509135643409

Docker 安装客户端

# 拉取镜像
docker pull bladex/sentinel-dashboard

# 运行实例
docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard

访问地址http://localhost:8858

账户密码: sentinel

熔断降级

服务之间调用时,调用路径中某一个资源出现了不稳定或者不可用,最终会导致请求发生积压,熔断降级,是为了解决这样的问题。

熔断降级: 当请求时间过长,或者异常比例提升,则对这个资源的请求做限制,让请求快速失败,等避免其他的业务受到影响,造成服务雪崩

image-20220509141351204

@SentinelResource 属性 ‼️

注解方式 不支持 private 方法

属性描述
value资源名称(必填)
entryType资源调用方向,可选项(默认EntryType.OUT)
resourceType资源分类
blockHandler对应处理 BlockException 的方法(方法需要 public)
blockHandlerClass处理Class对象,方法必须为 static
fallbackClass抛出异常的时候 提供 fallback处理逻辑
execptionsToTrace异常类跟踪列表(默认为 Throwable.class)
execptionsTolgnore排除掉的异常类型(指定异常 不会进入异常统计,和fallback逻辑,只是原样抛出)
fallback用于抛出异常的时候提供 fallback处理
    /*
    value : 资源名
    blockHandler 限流处理方法
     */
    @SentinelResource(value = TEST, blockHandler = "methodA",fallback ="methodB" )
    @GetMapping("annotation")
    public String hello(){
        return "注解方式";
    }

    /*
    方法被限流时,调用此方法
    参数需要与 原方法参数一致
     */
    public String methodA(BlockedException e) {
        e.printStackTrace();
        return "注解方式限流!";
    }

    /*
        服务熔断降级处理,参数与原方法一样,最多 最后 加一个 Throwable 参数
     */
    public String methodB(Throwable e) {
        System.out.println( e.getMessage());
        return " 服务被熔断处理=="+ e.getMessage();
    }

流控规则

image-20220510133347569

选项说明
资源名唯一名称,默认请求路径
针对来源Sentinel可以针对调用者进行限流,填写微服务名称,默认default(不区分来源)
阈值类型/单机阈值QPS:(每秒请求数量):当调用该api的 QPS 达到阈值的时候,进行限流
线程数:当调用该api 的线程达到阈值的时候,进行限流
是否集群不需要集群
流控模式直接: api达到限流条件时,直接限流
关联: 当关联的资源达到限流阈值时,就限流自己
链路: 只记录自定链路上的流量(指定资源从入口资源进来的流量,如果达到峰值,就进行限流)【API级别针对来源】
流控效果快速失败:直接失败,抛异常
Warm Up: 根据coldFactor(冷加载因子,默认3)的值,从阈值/coldFactor,经过预热时长才达到设置的QPS阈值
排队等待: 匀速排队,让请求以匀速通过,阈值类型必须设置为QPS,否则无效

代码设置 流控规则

    /**
     * 当前类的构造函数执行之后执行此方法
     */
    @PostConstruct
    public void initFlowRules() {
        // 创建存放流控规则的集合
        List<FlowRule> rules = new ArrayList<>();
        // 创建流控规则
        FlowRule rule = new FlowRule();
        // 定义资源,表示Sentinel会对哪个资源生效
        rule.setResource(HELLO);
        // 定义流控规则的类型
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        // 定义QPS每秒能通过的请求数
        rule.setCount(2);
        // 将流控规则存放在集合中
        rules.add(rule);
        // 加载流控规则
        FlowRuleManager.loadRules(rules);
    }
}

image-20220510134637411

流控规则 FlowRule

属性说明
resource资源名,资源名是限流规则的作用对象
limitApp流控针对的调用来源,若为default则不区分调用来源
grade限流阈值类型,QPS模式(1)
或并发先线程模式(0)
count限流阈值
strategy调用关系限流策略:直接、链路、关联
controlBehavior流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode是否集群限流

同一个资源有多个限流规则,检测时会依次检测

降级规则

image-20220510161439441

资源被降级后,默认行为抛出DegradeException

同一个资源可以有多个降级规则

熔断策略

  • 慢调用比例(SLOW_REQUEST_RATIO):选择慢调用比例作为阈值,需要设置 RT(最大响应时间),请求的响应时间大于,最大响应时间,统计为慢调用,单位统计时长(statlntervalMs)内请求数目大于设置的最小请求数目,并且慢调用比例大于阈值,则接下来的熔断时长内请求会自动熔断,经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求响应时间小于设置慢调用RT则结束熔断,若大于RT则再次熔断。
  • 异常比例(ERROR_RATIO):当单位统计时长(statlntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF_OPEN状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则再次被熔断。异常比率的阈值范围是[0.0,1.0]代表0%-100%。
  • 异常数(ERROR_COUNT): 当单位统计时长内的异常数目超过阈值后会自动进行熔断。进过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN状态),若接下来的一个请求成功完成(没有错误),则结束熔断,否则再次被熔断。

异常降级仅针对业务异常,对Sentinel限流降级本身(BlockException) 不生效

DegradeRule 属性

属性说明
resource资源名,即规则的作用对象
grade熔断策略,支持慢调用比例/异常比例/异常策略(默认 慢调用比例)
count设置 RT 值
timeWindow熔断时长,单位 s
minRequestAmount熔断出触最小请求数,请求数小该值时即使用异常比率超出阈值也不会熔断(1.7.0引入 默认是 5)
statIntervalMs统计时长(单位ms),如60*1000(1.8.0 引入 默认是1000ms)
slowRatioThreshold慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)

代码

 // 生成 熔断降级规则
    @PostConstruct
    public void initDegradeRules() {
        //存放熔断降级规则的集合
        ArrayList<DegradeRule> rules = new ArrayList<>();
        // 创建规则
        DegradeRule rule = new DegradeRule();
        // 规则名
        rule.setResource("degradeDemo");
        // 降级类型
        rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
        // 定义降级熔断时间 单位 s
        rule.setTimeWindow(5);
        // 定义慢调用临 界RT(超出该值记为慢调用 单位s)
        rule.setCount(0.005);
        // 定义熔断出大最小请求数
        rule.setMinRequestAmount(1);
        // 定义统计时长 单位s
        rule.setStatIntervalMs(1000);
        // 定义慢调用比例阔值
        rule.setSlowRatioThreshold(0.5);

        //加入 规则
        rules.add(rule);
        DegradeRuleManager.loadRules(rules);
    }

image-20220510181600214

动态扩展

通过java代码设置,或者通过控制台手动设置,实际使用中并不方便。

Sentinel的DataSoure接口提供了对接任意数据源的能力。官网说明

将规则推送到规则中心,客户端实现 ReadableDataSource接口监听注册中心来实现获取规则变更

底部

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值