七.SpringCloudAlibaba极简入门-Sentinel熔断

简介: 在上一章节我们探讨了Sentinel的流控(限流)功能,Sentinel除了流控还提供了服务熔断和降级机制,服务之间的调用关系错综复杂,微服务的调用链上的某些服务资源不稳定(宕机,异常,超时)可能会导致可能请求的失败和请求的堆积,调用链产生连锁反应可能会导致整个微服务架构瘫痪。服务熔断降级机制是保障高可用的重要措施之一。

老鸟飞过 , 只做学习使用,欢迎交流

1.概述

1.1.什么是熔断

在上一章节我们探讨了Sentinel的流控(限流)功能,Sentinel除了流控还提供了服务熔断和降级机制,服务之间的调用关系错综复杂,微服务的调用链上的某些服务资源不稳定(宕机,异常,超时)可能会导致可能请求的失败和请求的堆积,调用链产生连锁反应可能会导致整个微服务架构瘫痪。服务熔断降级机制是保障高可用的重要措施之一。

1.2.Sentinel熔断

Sentinel的服务熔断机制会对调用链上的某个不稳定(宕机,异常,超时)的资源,做出请求限制,快速失败,避免影响到其它的服务而导致级联错误。资源熔断后,在后续的一定时间(时间窗口)之内,对该服务的请求都自动熔断,抛出 DegradeException异常。

Sentinel拥有比Hystrix更强大和丰富的功能,能满足我们的各种应用场景,并且经历过淘宝双十一的考验,是微服务架构中熔断机制的不二选择。

2.Sentnel熔断实战

2.1.资源熔断降级

修改springcloudalibaba-user-1010工程,修改UserController ,通过@SentinelResource注解的fallback 属性指定降级方法。

      // 限流降级
    public User exceptionHandler(@PathVariable Long id, BlockException ex) {
   
   
        ex.printStackTrace();
        System.out.println("限流了...");
        return new User(-1L,"限流了","限流了");
    }
    // 熔断降级,参数和返回值与源方法一致
   public User getByIdfallback(@PathVariable Long id){
   
   
        System.out.println(notify);
        return new User(id,"zs:"+id, "熔断托底了");
    }

    @GetMapping("/user/{id}")
    //限流降级
    @SentinelResource(value="user",blockHandler="exceptionHandler",fallback = "getByIdfallback")
    public User getById(@PathVariable Long id){
   
   
        int i = 1 / 0;    //方法异常,触发熔断
        return new User(id,"zs:"+id, "我是zs");
    }

提示:方法中通过 int i = 1 / 0; 模拟异常,然后会熔断触发降级调用降级方法 。 通过 fallback 属性指定熔断的降级方法 ,熔断方法参数也要和被熔断方法参数一致。

注意:这里可以通过 @SentinelResource注解的 exceptionsToTrace 属性忽略异常,即针对某个异常不熔断。

2.2.配置降级策略

在Sentinel控制台,在族点链路菜单中找到“user”资源,然后点击“降级”按钮添加降级策略,如下:
在这里插入图片描述
这里的降级策略为“RT”,大概意思是:如果并发数大于5 (QPS > 5) ,然后平均响应时间大于200毫秒,那么接下来的2秒钟之内对该资源的请求会被熔断降级。

2.3.测试熔断

启动springcloudalibaba-user-1010工程,访问 http://localhost:1010/user/2 ,浏览器返回:
在这里插入图片描述
这里已经返回了托底数据,其实是因为“user”资源方法中抛出了异常,触发了熔断降级。

3.降级策略

资源在什么情况下会触发熔断降级?调用异常,达到流控,调用超时 都会触发熔断降级,在上面的案例中我们看到资源的降级策略有 RT,异常比例,异常数三种方式,我们可以通过这三种方式来定义资源是否稳定,决定是否要进行熔断降级。

3.1.平均响应RT

平均响应时间 (DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的 count,以 ms 为单位)之后,资源进入准降级状态。如果接下来 1s 内持续进入 5 个请求(即 QPS >= 5),它们的 RT 都持续超过这个阈值,那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

是不是很生涩难懂?我们根据下面这个配置来理解:
在这里插入图片描述
我们挑关键信息来理解上面那句话
这里配置的RT是200意思是对资源的多次请求平均响应时间都超过200毫秒,意思是 1s 内持续进入 5 个请求(即 QPS >= 5),这五个请求的平均响应时间都超过了200,后续的2秒之内(时间窗口)请求这个方法都被熔断,触发降级

总结一下:RT其实就是平均相应时间太长资源熔断。

3.2.异常比例

异常比例(DEGRADE_GRADE_EXCEPTION_RATIO):每秒请求量 > 5 ,当资源的每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

根据下面这个配置来理解
在这里插入图片描述
上面配置的意思就是“user”这个资源的异常比例超过了0.2,即10个请求有两个都异常了,资源被熔断,在接下来的2秒钟之后请求这个方法都被熔断,触发降级。

总结一下:异常比例就是按照资源的请求失败率来熔断。

3.3.异常数

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

根据下面这个配置来理解
在这里插入图片描述
这里的意思是一分钟(61s)超过5个异常请求,服务进行熔断。后续请求都拒绝。

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

总结一下:异常数就是按照 一分钟的异常的数量 来熔断。

小结一下

上面介绍了三种降级策略,通过相应时间,通过异常比例,通过异常数量三种方式。童鞋们可以根据上面的配置图例自行测试。

相关文章
|
3月前
|
缓存 数据安全/隐私保护 Sentinel
断路精灵:探秘Sentinel熔断策略的神奇效果
断路精灵:探秘Sentinel熔断策略的神奇效果
42 0
|
3月前
|
监控 Java API
Sentinel熔断限流真的太丝滑了
Sentinel熔断限流真的太丝滑了
106 0
|
4月前
|
监控 Java Sentinel
springcloud4-服务熔断hystrix及sentinel
springcloud4-服务熔断hystrix及sentinel
26 0
|
5月前
|
Sentinel
一文速通Sentinel熔断及降级规则
一文速通Sentinel熔断及降级规则
|
5月前
|
Java 关系型数据库 数据库
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(下)
101 0
|
5月前
|
数据可视化 Java 数据安全/隐私保护
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识(上)
【Spring Cloud Alibaba Sentinel 实现熔断与限流】 —— 每天一点小知识
114 0
|
6月前
|
监控 Java 数据安全/隐私保护
sentinel流控降级与熔断
sentinel流控降级与熔断
52 0
|
6月前
|
监控 API Nacos
微服务轮子项目(19) -Alibaba Sentinel限流熔断(网关流控)
微服务轮子项目(19) -Alibaba Sentinel限流熔断(网关流控)
74 0
|
6月前
|
存储 监控 API
微服务轮子项目(18) -Alibaba Sentinel限流熔断(生产应用)
微服务轮子项目(18) -Alibaba Sentinel限流熔断(生产应用)
65 0
|
6月前
|
存储 API Nacos
微服务轮子项目(17) -Alibaba Sentinel限流熔断(动态规则扩展)
微服务轮子项目(17) -Alibaba Sentinel限流熔断(动态规则扩展)
84 0