Spring Cloud整合Sentinel

1、引入依赖

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2、配置规则

限流降级区别:

1.目标不同:

限流是为了避免系统过载,保护系统资源;

降级是为了在服务出现异常时避免整个系统受到影响。

2.触发条件不同:

限流通常是基于流量大小或频率来触发;

降级则是基于服务的健康状态或异常情况来触发。

3.行为不同:

限流可能会拒绝部分请求;

降级则是对异常服务的替代处理,返回预定义的结果或错误信息。

    // 限流配置规则
    @PostConstruct
    public static void initFlowRules() {
        List<FlowRule> rules = new ArrayList<>();
        FlowRule rule = new FlowRule();
        rule.setResource("ordering"); //设置资源名称
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);//QPS 每秒的访问量
        // Set limit QPS to 20.
        rule.setCount(2);
        rules.add(rule);
        FlowRuleManager.loadRules(rules);
    }
    // 降级规则
    //@PostConstruct
    public  void initFlowRules2() {
        List<DegradeRule> rules = new ArrayList<>();
         DegradeRule rule = new DegradeRule();
        rule.setResource("ordering2"); //设置资源名称
        rule.setGrade(RuleConstant.DEGRADE_GRADE_Sentinel使用EXCEPTION_RATIO); // 异常比率模式
  
      rule.setCount(0.5); 异常比率阈值(50%)
        rule.setMinRequestAmount(10);// 单位时长的最小请求数
        rule.setTimeWindow(10); // 熔断时长10s
        rule.setStatIntervalMs(10*1000); 10s 统计时长,统计的窗口(单位为 ms) 表示每10秒统计一次异常率。
        rules.add(rule);
        DegradeRuleManager.loadRules(rules);
    }

3、为接口设置熔断与降级方法

3.1 blockHandler与fallback命名规则

  1. blockHandler方法应该接收与原始方法相同类型的参数,并且额外添加一个 BlockException 类型的参数,用于传递被 Sentinel 阻塞的具体原因。

命名规则是:

1:原方法名 + "_blockHandler",比如在示例中,对应的 blockHandler 方法应该是 ordering_blockHandler(Integer id, BlockException ex)

2:必须为static方法

  1. fallback方法应该接收与原始方法相同类型的参数

命名规则是:

1:原方法名 + "_fallback",此方法应该接收与原始方法相同的参数列表,并返回与原始方法相同的返回类型。

2:必须为static方法

在示例中,对应的 fallback 方法应该是 ordering_fallback(Integer id)也可以ordering_fallback(Integer id, Throwable ex)

上述的 _blockHandler_fallback 后面是可以带上任意的参数类型,但至少需要包含原始方法的所有参数类型,以及在 blockHandler 方法中加入 BlockException 参数。

3.2 触发条件

  1. blockHandler

  2. 触发条件:当资源访问由于触发了 Sentinel 的流控(QPS 超过阈值等情况)规则而被阻止时,会触发 blockHandler 指定的方法。该方法主要用于处理因流量控制而导致的阻塞情况。

  3. 示例中 blockHandler="ordering_blockHandler" 表示如果 ordering 方法因为 Sentinel 流控规则而被阻止时,将调用 OrderController 类中的 ordering_blockHandler 方法进行处理。

  4. fallback:(回退方法)

  5. 触发条件:通常在服务不稳定或者异常抛出时触发。对于 Sentinel 来说,若开启了熔断(如因多次调用超时或异常),则会触发熔断进入半开状态,后续请求会直接进入 fallback 处理逻辑,或者在某些资源执行过程中发生了异常也会触发 fallback。

  6. 示例中 fallback="ordering_fallback" 表示如果 ordering 方法出现异常或者满足 Sentinel 熔断策略时,将调用 OrderController 类中的 ordering_fallback 方法进行回退处理。

  7. 在熔断期间,不再调用原始方法,而是直接调用降级方法

3.3验证限流

3.4 验证降级

4、验证接口

略.......

5、高级配置

5.1流量控制规则 (FlowRule)

5.2 熔断降级规则 (DegradeRule)

5.3 系统保护规则 (SystemRule)

Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

private void initSystemProtectionRule() {
  List<SystemRule> rules = new ArrayList<>();
  SystemRule rule = new SystemRule();
  rule.setHighestSystemLoad(10);
  rules.add(rule);
  SystemRuleManager.loadRules(rules);
}

5.4 访问控制规则 (AuthorityRule)

很多时候,我们需要根据调用方来限制资源是否通过,这时候可以使用 Sentinel 的访问控制(黑白名单)的功能。黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。授权规则,即黑白名单规则(AuthorityRule)非常简单,主要有以下配置项:

  • resource:资源名,即限流规则的作用对象

  • limitApp:对应的黑名单/白名单,不同 origin 用 ,分隔,如 appA,appB

  • strategy:限制模式,AUTHORITY_WHITE 为白名单模式,AUTHORITY_BLACK 为黑名单模式,默认为白名单模式

5.5热点规则 (ParamFlowRule)

parameter-flow-control | Sentinel (sentinelguard.io)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这孩子叫逆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值