Circuit Breaker

熔断器(circuit breaker)包含在电路设备中,用于防止过载或短路的组件。常见于洗衣机、电热水壶、烤机等。今天所讲的比这个稍微复杂一些。

circuit-breaker

一个熔断器包含下面的功能:

  • 当所有情况正常,它的状态为closed,让电流(electricity)或数据(data)流通。
  • 当探测到过载(overload)或短路(short circuit),熔断器跳闸(trips)进入open状态,不让任何东西流通。
  • 一段时间后,熔断器会自动进入half-open状态,探测(probing)是否恢复正常。如果电流(或数据流)正常,熔断器进入open状态。

因为远程调用和内存(in-memory)调用不同,远程调用会出现超时和挂掉的情况。软件服务间需要提供一种响应式的设计。Michael Nygard 发表了一篇文章阐述了Circuit Breaker pattern来防护这种灾难性的级联发生。

和电路上的熔断器又些许不同,熔断器模式包含下面状态改变的规则:

  • closed状态,熔断器统计失败的次数或 事先定义好的callTimeout的次数。如果失败的次数到达设定的阈值(maxFailures or thresholds),跳闸。任何调用都应该在计数(counter)重置为0时才能成功访问。
  • open状态,熔断器闲置(idles until)执行到配置的resetTimeout时间,随后进入half-open状态。
  • half-open状态,如果第一次尝试调用仍然失败,它重新跳闸到open状态;如果第一次调用成功了,熔断器重置为closed状态, restTimeout被重置。

图例

Reactive Design

最早的响应式宣言宣布于2013年6月。它是响应式应用的软件架构描述。它包含下面4个特点:

  • Responsive —— React to users (快速检测并高效处理问题)
  • Scalable(Elastic) —— React to load (弹性控制,大部分实现依赖于硬件和软件平台)
  • Resilient —— React to failure (有回复,受控制,隔离,委派)
  • Event-driven —— React to events (异步消息,确保松耦合,隔离,位置透明。非阻塞的交互服务)

一些实现方式:

  1. 请求回复链路:

RRC

  1. 我们的设计:

supervisor