SuperAPI AI 工具集

circuit-breaker-pattern

编程与开发

查看项目

更新于 10-15 23:33

技能介绍

用途:保护系统免受外部依赖故障导致的级联失败。当对某依赖的失败次数超过阈值,熔断器“跳闸”,后续调用立即失败而不再尝试,给依赖恢复时间,之后探测恢复再恢复正常流量。适用于调用外部 API、数据库、第三方服务、微服务,以及任何可能变慢或不可用的依赖;不适用于本地进程内函数调用、必须无限重试的操作、4xx 这类客户端校验错误。

主要能力:三态状态机 CLOSED(正常,记录失败)、OPEN(快速失败,不发起调用)、HALF_OPEN(允许少量探测请求测试恢复);可配置 failureThreshold、windowMs、recoveryTimeoutMs、halfOpenProbes、successThreshold;按依赖单独配置熔断器,而非全局共用一个;必须提供回退策略(缓存值、默认安全值、排队重试、快速失败并给出明确错误);必须可观测,状态转换时发出事件并暴露指标。探测逻辑:HALF_OPEN 下放行少量请求,成功数达标回到 CLOSED,任一失败回到 OPEN。需区分失败类型:5xx、网络超时、连接拒绝、DNS 失败计入失败;4xx 不计入。

使用方式:对每次外部调用用 breaker.execute(fn) 包裹,捕获 CircuitOpenError 后走回退逻辑。建议 timeout + retry(2) + 熔断器组合使用;生产环境优先用现成库(Node.js 的 opossum 或 cockatiel)而非自研。多实例部署时各实例状态独立,只有需要跨实例一致性时才用 Redis 等共享存储;可与 bulkhead 组合。

限制与注意:熔断器不能没有回退,否则只是把一种错误换成另一种;不能用单个全局熔断器,否则一个慢服务会拖垮所有服务;回退内部不应再重试。阈值调优参考:从 5 次失败/60 秒窗口起步,recoveryTimeoutMs 至少为依赖典型恢复时间的 2 倍,halfOpenProbes 用 2-3 个。测试时可用可配置超时或 forceHalfOpen() 避免等待。OPEN 持续超过 30 秒应告警。