熔断器的作用
在分布式系统中,请求下游系统时,如果下游系统响应慢,或者直接hang住请求,可能会拖垮上游系统,产生雪崩效应。因此希望在下游系统不稳定或者不可用时,不调用下游系统,直接报错返回
熔断器的设计
熔断器的三种状态
- closed,正常情况,熔断器关闭,请求放行
- open,异常情况,熔断器打开,拒绝所有请求
- halfopen,由closed到open状态后,不能一直拒绝所有的调用,得有一个halfopen状态,需要尝试恢复至closed状态,即放行部分调用试试,看下游系统是不是正常的
熔断器状态转移
- open状态,此时认为下游系统不可用,从进入open状态的那一刻起,经过一个指定的冷却时间,会进入halfopen状态
- halfopen状态,下游系统异常了这么久,可能已经恢复了,此时隔段时间尝试请求一下。如果请求成功累计超过一定次数,则恢复至closed状态,认为下游系统已经恢复正常;一旦请求失败一次,直接再进入open状态
- closed状态,此时认为下游系统正常,当请求下游失败时,也不能直接就认为下游系统异常,可能是网络抖动。因此需要有一个策略