断路器
断路器又称熔断器,作用是暂时切断服务的调用。主要场景是当上游服务发现下游服务不可用时,主动切断对下游服务的调用,当服务恢复后再重新调用。
工作原理
- 断路
- 当请求失败数超过一定比例时,断路器切换到开路状态,后续所有请求均失败
- 一段时间后自动切换到半开路状态,此时将放行一个请求并判断是否成功
- 如放行的请求成功,断路器切换到闭路状态,否则切换到开路状态
- 降级(Fallback)
- 当请求失败时,可指定默认返回值,使请求不至于异常
- 资源隔离
- 调用不同的下游服务使用不同的线程池,会额外增加系统开销,但是可以保障不同服务不会因为断路而互相影响
实现
Hystrix
、Resilience4j
、Sentinel
等库中有对断路器的实现:
Hystrix
内部使用了10个 Bucket,每秒产生1个新的 Bucket 来聚合这一秒的请求状态Resilience4j
内部是使用了 RingBuffer 来记录每次请求的状态Sentinel
与Hystrix
类似使用了滑动窗口聚合的方式记录请求的状态