Alibaba Sentinel | 熔断规则详解

文章目录

  • 简介
    • 熔断策略-慢调用比例
      • 结论:
      • 流程图:
      • 熔断结果
      • 详细解释
    • 熔断策略-异常比例
      • 结论:
      • 详细解释
    • 熔断策略-异常数
      • 结论:
      • 详细解释
    • 统计异常数、比例的方法
      • 编码
      • 加注解
      • RuntimeException
  • 总结

简介

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




熔断策略-慢调用比例

结论:

  在统计时长内的所有请求,如果请求时间超过xx秒(慢请求)的请求超过一定的比例,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。
  经过熔断时间后,进入探测恢复状态,当下一个请求仍然是慢请求(请求时间超过xx秒),则再次进入熔断状态,不是则恢复正常状态。

流程图:

Alibaba Sentinel | 熔断规则详解_第1张图片

熔断结果

Alibaba Sentinel | 熔断规则详解_第2张图片

详细解释

Alibaba Sentinel | 熔断规则详解_第3张图片

  • 最大RT:
    • 请求最大响应时间,超过这个时间的请求为慢调用。RT是响应时间(reponse time)的意思,单位为毫秒。
  • 比例阈值:
    • 慢调用的比例,超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100%。(1.8.0 引入)
  • 熔断时长:
    • 熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。
  • 最小请求数:
    • 请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)
  • 统计时长:
    • 一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)



熔断策略-异常比例

结论:

  在统计时长内的所有请求,如果异常的比例大于阈值,且请求数大于最小请求数,将触发熔断,效果是熔断时间内的请求会快速失败。
  经过熔断时间后,进入探测恢复状态,当下一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

详细解释

Alibaba Sentinel | 熔断规则详解_第4张图片

  • 比例阈值:
    • 异常的比例超过阈值触发熔断。取值范围0.0-1.0,代表 0% - 100% 。(1.8.0 引入)
  • 熔断时长:
    • 熔断开始后,在这个时间内发出的请求会快速失败。单位为秒。
  • 最小请求数:
    • 请求数小于该值时,即使异常比率超出阈值也不会熔断。(1.7.0 引入)
  • 统计时长:
    • 一个时间范围,可以是每1分钟、每3小时。根据这个时间内的请求,来统计总请求和数、计算慢调用比例。(1.8.0 引入)



熔断策略-异常数

结论:

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

详细解释

Alibaba Sentinel | 熔断规则详解_第5张图片

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




统计异常数、比例的方法

编码

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

Entry entry = null;
try {
  entry = SphU.entry(resource);

  // Write your biz code here.
  // <>
} 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、访问数据库等,如果外部资源的响应时间过长或出现故障,可以设置熔断规则对这些资源进行保护。当资源的响应时间超过预设的阈值或出现错误时,熔断规则会触发,暂时停止对该资源的访问,以避免长时间等待或继续请求不可用的资源。

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

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

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

你可能感兴趣的:(中间件,sentinel,服务器,网络)