服务熔断,降级Sentinel

一. 流控

  • 流控规则
    在这里插入图片描述

    • 资源名: 唯一名称,默认请求路径
    • 针对来源: Sentinel可以针对调用者进行限流,填写微服务名称,默认default(不区分来源)
    • 阈值类型/单机阈值:
      • QPS(每秒请求数量) : 当调用该api的QPS到达阈值的时候,进行限流
      • 线程数: 当调用该api的线程数达到阈值时,进行限流
    • 是否集群: 不需要集群
    • 流控模式:
      • 直接: api达到限流条件时,直接限流
      • 关联: 当关联的资源达到阈值时,就限流自己
      • 链路: 只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流),api级别的针对来源
    • 流控效果:
      • 快速失败: 直接失败,抛异常
      • Warm Up: 根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值
        • 冷加载因子: 系统初始化时的阈值为 设置的阈值/冷加载因子(3) 然后过了设定的预热时长后,阈值才慢慢恢复到设定的值
      • 排队等待,超过阈值部分进行排队等待,底层使用漏桶算法,适用于流量时多时少的情况

二. 熔断降级

在这里插入图片描述

  • RT: 平均响应时间.当1s内持续进入N(大于5)个请求,对应时刻的平均响应时间均超过阈值,那么在接下来的时间窗口内,对这个方法进行调用都会自动熔断,注意:RT的上限为4900ms,超出都会算作4900ms
  • 异常比例: 当资源的每秒请求数量>=5,并且每秒异常总数占通过量的比值超过阈值之后,资源进入熔断状态,异常比率的阈值范围是[0.0,1.0] 代表0%到100%之间
  • 异常数: 当资源近一分钟的异常次数超过阈值后,进行熔断,时间窗口是分钟级的,所以时间窗口不能小于60s,若小于60s,则熔断结束后任可能再次进入熔断状态

三. 热点限流

在这里插入图片描述

  • 参数索引: 对第几个参数进行限流,如果访问网站不带这个参数,将不限流
  • 例外参数值: 如图,当索引为0的参数值为s时,阈值将不再是1,而是10

四. 系统规则

在这里插入图片描述

  • 全局的限流规则
    • LOAD: 自适应,进队Linux/Unix-like机器有效
    • CPU使用率: CUP占用率超过阈值,触发系统保护

五. 注解支持

@SentinelResource 注解

注意:注解方式埋点不支持 private 方法。

@SentinelResource 用于定义资源,并提供可选的异常处理和 fallback 配置项。 @SentinelResource 注解包含以下属性:

  • value:资源名称,必需项(不能为空)
  • entryType:entry 类型,可选项(默认为 EntryType.OUT
  • blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • fallback/fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。fallback 函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。fallback 函数签名和位置要求:
    • 返回值类型必须与原函数返回值类型一致;
    • 方法参数列表需要和原函数一致,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    • fallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • defaultFallback(since 1.6.0):默认的 fallback 函数名称,可选项,通常用于通用的 fallback 逻辑(即可以用于很多服务或方法)。默认 fallback 函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,则只有 fallback 会生效。defaultFallback 函数签名要求:
    • 返回值类型必须与原函数返回值类型一致;
    • 方法参数列表需要为空,或者可以额外多一个 Throwable 类型的参数用于接收对应的异常。
    • defaultFallback 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 fallbackClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析。
  • exceptionsToIgnore(since 1.6.0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

注:1.6.0 之前的版本 fallback 函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理

特别地,若 blockHandler 和 fallback 都进行了配置,则被限流降级而抛出 BlockException 时只会进入 blockHandler 处理逻辑。若未配置 blockHandlerfallbackdefaultFallback,则被限流降级时会将 BlockException 直接抛出(若方法本身未定义 throws BlockException 则会被 JVM 包装一层 UndeclaredThrowableException)。

六. 规则持久化

  • 在nacos中配置sentinel规则

  • [
        {
            "resouce":"/testD", //资源名
            "limitApp":"default", //来源应用
            "grade":1, //阈值类型,0代表线程数,1代表QPS
            "count":1, //单机阈值
            "strategy":0, //流控模式,0直接,1关联,2链路
            "controlBehavior":0, //流控效果,0快速失效,1 Warm up,2排队等待
            "clusterMode":false //是否集群
        }
    ]
    
  • sentinel持久化还是得自己写配置文件,在sentinel控制台修改的规则不会影响到nacos的配置文件,当服务重启后,还是会使用nacos配置文件的配置规则

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

climb.xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值