断路器模式

断路器模式

  • Closed: 正常情况,应用请求被路由到此服务处理,断路器处于关闭状态。 断路器作为代理去维护一个失败计数器,如果处理失败,则断路器会相应的增加失败次数。如果最近的出错次数达到了既定的时间窗口内的阈值,则断路器代理变为Open状态。与此同时,会启动一个计时器,如果计时器结束,则将断路器代理变为Half-Open状态。

计时器的作用是给系统一定的时间在应用再次发起处理请求之前修复问题

  • Open: 断路器处于此状态时,应用请求过来直接Fast-Fail,并返回一个异常给应用。
  • Half-Open: 允许有限的请求进来。断路器此时维护一个成功计数器,如果这些处理全部成功或成功数达到既定时间窗口内的阈值,则假定导致之前出错的问题已被修复,断路器变为Close状态并重置出错次数,如果有任何请求处理失败或成功数未达到阈值,则断路器假定问题尚未修复,重新将断路器变为Open状态,并重启一个更长时间的计时器,继续等待服务恢复。

Half-Open状态可防止偶发的大流量请求影响服务的恢复,服务正在恢复时应该能处理有限的请求,但是如果此时有大流量进来,可能会导致服务的再次瘫痪。

image.png

上图中,失败计数器是基于时间的,会自动按周期性重置,这样可以防止应用因为偶发性的失败而进入Open状态。
成功计数器并不是基于时间,特定数量的连续请求都被成功处理时才会将断路器置为Close状态,如果有任何请求处理失败,则断路器立刻变为Open状态,成功计数器会在断路器下次进入Half-Open状态时被重置。

系统有可能会自行恢复服务,也有可能需要通过还原、重启失败的组件或者修复网络等外部方式来恢复服务。

你可能感兴趣的:(断路器模式)