熔断器(Circuit breaker)是一种用于检测故障的设计模式,它封装了避免故障在维护、临时外部系统故障或意外系统故障期间不断重复的逻辑。
熔断器背后的基本思想非常简单。我们将受保护的函数调用包装在熔断器对象中,该对象监视故障。一旦故障达到某个阈值,熔断器跳闸,所有对断熔断器的进一步调用返回错误,而不再进行受保护调用。通常,熔断器跳闸的时候我们还需要某种监视器警报。
为什么我们需要熔断?
软件系统通常会远程调用在不同进程中运行的软件,这些软件可能在网络上的不同机器上。内存调用和远程调用之间的最大区别之一是远程调用可能会失败,或者在达到某个超时限制之前挂起而没有响应。更糟糕的是,如果我们在一个没有响应的提供方上有许多调用,那么我们可能会耗尽关键资源,导致多个系统出现级联故障。
状态
让我们看一下熔断器的状态:
关闭
当一切正常时,熔断器保持关闭,所有请求都会正常地传递到服务。如果故障数量增加超过阈值,熔断器跳闸并进入打开状态
打开
在此状态下,熔断器立即返回错误,甚至不调用服务。经过一定的超时时间后,断路器进入半打开状态。通常,它将有一个监控系统,其中指定超时。
半打开
在这种状态下,熔断器允许来自服务的有限数量的请求通过并调用操作。如果请求成功,则熔断器将进入关闭状态。但是,如果请求继续失败,则返回到打开状态。