背景
依赖已经持续失败时继续无限调用,只会浪费线程、连接与超时预算。熔断器让故障期间的试探受控。
核心判断
- 定义 Closed、Open、HalfOpen 的状态和转换依据。
- 只统计依赖失败,避免把业务拒绝或调用方取消全部记为故障。
- HalfOpen 限制探测数量,成功与失败都必须完成状态记录。
最小示例
下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。
if breaker.Allow() != nil { return ErrDependencyUnavailable }; err := call(ctx); breaker.Record(err); return err
边界与误区
示例是自定义 breaker 的流程示意,需要明确库的统计语义。熔断不代替超时、并发上限或重试预算,多个保护层叠加要避免重复放大调用。
验证方式
注入连续失败、短暂恢复和慢响应,核对状态转换与实际调用次数。依赖恢复时逐步放量,避免全部实例同时探测形成尖峰。
小结
按失败类型和时间窗口统计,半开时限制探测并发,并记录状态变化。