一、简介

image.png


二、核心流程

以OpenState -> HalfState 为例:
image.png
1、状态统计:Subtract-on-Evict,当记录新的调用结果时,聚合统计值被更新;当删除最老的度量值时,度量值将从聚合统计值中减去,同时将桶重置。
2、状态转移:1)调用结果触发状态转移;2)超时触发状态转移。


三、设计要点

1、状态统计

Step:
1、聚合统计
image.png
2、滑动窗口
3、统计新窗口:算法同聚合统计

1.1、滑动请求窗口

image.png
要点1、滑动窗口
image.png

1.2、滑动时间窗口

image.png
要点1、滑动窗口
image.png

2、状态迁移

2.1、Close -> Open

要点1、请求驱动状态转换:当有请求经过且失败率或慢调用率超过阈值时,则触发状态转换。
image.png

2.2、Open -> HalfOpen

要点1、请求驱动状态转换:当断路器 Open 状态持续到设定时间,且有请求经过时,则触发状态转换。
image.png
要点2、自愈驱动状态转换:监视线程在设定时间后,对断路器状态进行检测,如果发现处于 Open 状态,则触发状态转换。
image.png

2.3、HalfOpen -> Close

要点1、请求驱动状态转换:当有请求经过,且失败率或慢调用率低于阈值时,则触发状态转换。
image.png

2.4、HalfOpen -> Open

要点1、请求驱动状态转换:当有请求经过,且失败率或慢调用率超过阈值时,则触发状态转换。
image.png
要点2、自愈驱动状态转换:监视线程在设定时间后,对断路器状态进行检测,如果发现处于 HalfOpen 状态,则触发状态转换。
image.png