Alibaba Sentinel | 熔断规则详解

简介: Alibaba Sentinel | 熔断规则详解

简介

  熔断是一种保护机制,用于防止系统在高负载或异常情况下继续承受过大的流量压力,从而导致系统崩溃或性能下降。熔断规则可以根据系统的负载情况自动触发熔断,将流量限制在一个可控范围内。

熔断策略-慢调用比例

结论:

  在统计时长内的所有请求,如果请求时间超过xx秒(慢请求)的请求超过一定的比例,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。

  经过熔断时间后,进入探测恢复状态,当下一个请求仍然是慢请求(请求时间超过xx秒),则再次进入熔断状态,不是则恢复正常状态。

流程图:

熔断结果

详细解释

最大RT:

请求最大响应时间,超过这个时间的请求为慢调用。RT是响应时间(reponse time)的意思,单位为毫秒。


比例阈值:

慢调用的比例,超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100%。(1.8.0 引入)


熔断时长:

熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。


最小请求数:

请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)


统计时长:

一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)

熔断策略-异常比例

结论:

  在统计时长内的所有请求,如果异常的比例大于阈值,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。

  经过熔断时间后,进入探测恢复状态,当下一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

详细解释

比例阈值:

异常的比例超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100% 。(1.8.0 引入)


熔断时长:

熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。


最小请求数:

请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)


统计时长:

一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)

熔断策略-异常数

结论:

  和异常比例策略是相差不大,比较的是异常数是否超过设置。

详细解释

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


统计异常数、比例的方法

编码

  为了统计异常比例或异常数,需要通过 Tracer.trace(ex) 记录业务异常。示例:

Entry entry = null;
try {
  entry = SphU.entry(resource);
  // Write your biz code here.
  // <<BIZ CODE>>
} catch (Throwable t) {
  if (!BlockException.isBlockException(t)) {
    Tracer.trace(t);
  }
} finally {
  if (entry != null) {
    entry.exit();
  }
}

加注解

  开源整合模块,如 Sentinel Dubbo Adapter, Sentinel Web Servlet Filter 或 @SentinelResource 注解会自动统计业务异常,无需手动调用。


value:资源名称,必需项(不能为空)

entryType:entry 类型,可选项(默认为 EntryType.OUT)

blockHandler / blockHandlerClass: blockHandler对应处理 BlockException(熔断时抛出的异常)的函数名称,可选项(必须public)

fallback:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
// 类级别的注解,标识整个类作为一个资源
@SentinelResource(value = "exampleResource")
public class ExampleClass {
    // 方法级别的注解,标识该方法作为一个资源
    @SentinelResource(value = "exampleMethod")
    public void exampleMethod() {
        // 方法逻辑
    }
    // 配置降级处理方法
    @SentinelResource(value = "exampleResource", blockHandler = "handleBlock")
    public void exampleMethodWithBlockHandler() {
        // 方法逻辑
    }
    // 降级处理方法,用于处理资源保护触发时的逻辑
    public void handleBlock(BlockException ex) {
        // 降级处理逻辑
    }
}

RuntimeException

  无论是否使用@SentinelResource注解,抛出的RuntimeException都会被计算为异常数。

总结

服务调用保护:

 在分布式系统中,一个服务通常会依赖其他的服务进行调用。当依赖的服务出现故障或异常时,为了避免故障扩散,可以对该服务的调用进行熔断。如果调用次数超过预设的阈值,熔断规则将会触发,并且暂时停止对该服务的调用,以防止对系统产生过大的压力。


外部资源保护:

 在与外部资源交互的场景中,例如调用第三方API、访问数据库等,如果外部资源的响应时间过长或出现故障,可以设置熔断规则对这些资源进行保护。当资源的响应时间超过预设的阈值或出现错误时,熔断规则会触发,暂时停止对该资源的访问,以避免长时间等待或继续请求不可用的资源。


防止雪崩效应:

 当系统整体的负载达到临界值时,可能会发生雪崩效应,即由于某个组件或服务的故障导致整个系统无法正常运行。为了避免雪崩效应,可以在系统各个关键组件之间设置熔断规则。当某个组件出现故障时,熔断规则会触发并限制对该组件的访问,以保护整个系统的稳定性。


限流保护:

 熔断机制可以与限流机制结合使用,对系统的访问流量进行控制。当流量超过系统的处理能力时,可以设置熔断规则进行流量控制和限制。当流量超过预设的阈值时,熔断规则会触发并拒绝部分或全部的请求,以保护系统免受过载的影响。


 通过合理设置熔断规则,可以提高系统的稳定性和可靠性,保护系统免受高负载和异常情况的影响。


相关文章
|
5月前
|
监控 Java Sentinel
使用Sentinel进行服务调用的熔断和限流管理(SpringCloud2023实战)
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
151 3
|
2月前
|
监控 Java API
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
先简单介绍熔断、降级等核心概念,然后阐述SpringBoot整合Sentinel的实现方式,最后介绍Sentinel在本项目中的应用。
谷粒商城笔记+踩坑(25)——整合Sentinel实现流控和熔断降级
|
4月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
5月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
131 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
5月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
120 0
|
6月前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
252 0
|
6月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
6月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
802 0
|
6月前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
SpringCloud Alibaba Sentinel实现熔断与限流--学习笔记
108 0
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
84 1