Sentinel源码10-熔断降级DegradeSlot

本文详细介绍了Sentinel的熔断降级机制,包括熔断器、熔断处理流程、状态转换以及ExceptionCircuitBreaker和ResponseTimeCircuitBreaker的源码解析,帮助读者理解如何在服务中实现有效的熔断策略。
摘要由CSDN通过智能技术生成

1. 概述

DegradeSlot是用于服务降级熔断:

  • 在执行entry的过程中,对于处于熔断open状态的情况则判断是否已经过了熔断期且设置半开成功,那么就通过.否则不通过报DegradeException

  • 对于处于降级状态即half-open的时候,则直接抛出DegradeException.

2. 熔断器

Sentinel的熔断器一共有两种ExceptionCircuitBreaker 和  ResponseTimeCircuitBreakerextends  AbstractCircuitBreaker  implements CircuitBreaker

在上一个之前slot执行过程中,如果发生了非BlockException即一些未知的throw,那么在exit内会判断error是否达到配置的erro数量或者错误比例。

如果整个调用过程超过了配置的超时时间 则也会触发熔断。

熔断的目的是将熔断器的状态设置到半开或者全开,这样在tryPass校验的时候就可以返回通过或者异常了。

配置面板如下:

根据配置项,可以具体看一下熔断器的接口 CircuitBreaker:

public interface CircuitBreaker {

    /**
     *  降级熔断规则
     */
    DegradeRule getRule();

    /**
     * true  判断需要降级
     */
    boolean tryPass(Context context);

    /**
     * 当前熔断器的状态
     */
    State currentState();

    /**
     * 回调方法   当请求pass通过后触发
     */
    void onRequestComplete(Context context);

    /**
     * Circuit breaker state.
     */
    enum State {
      
        OPEN,
        
        HALF_OPEN,
       
        CLOSED
    }
}
复制代码

了解了熔断规则以后,下面将具体阐述熔断流程。

3. 熔断机制的处理流程

达到熔断触发条件(假设触发条件为当接口每秒钟超过20%的处理产生异常,具体熔断规则由用户配置),便会开启熔断,在熔断状态下,X秒内所有该接口访问都会被Blocked快速失败(服务降级)

X秒后,下一次请求接口,此时为半开状态:

  • 如果请求接口成功,恢复到正常状态
  • 如果请求接口失败,回到熔断状态继续Blocked X秒

4. 熔断器状态

先看一下这整个熔断器的状态转化图,其中open到half-open的状态只发生在熔断器检验过程:

5. 源码解析

Sentinel的熔断是由责任链中的最后一个DegradeSlot来实现的

@SpiOrder(-1000)
public class DegradeSlot extends AbstractLinkedProcessorSlot<DefaultNode> {

    @Override
    public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
                      boolean prioritized, Object... args) throws Throwable {
        //在触发后续slot前执行熔断的检查
        performChecking(context, resourceWrapper);

        fireEntry(context, resourceWrapper, node, count, prioritized, args);
    }

    void performChecking(Context context, ResourceWrapper r) throws BlockException {
      	//通过资源名称获取所有的熔断CircuitBreaker
        List<CircuitBreaker> circuitBreakers = DegradeRuleMan
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值