API 超时重试熔断设计(免费版)
输入
| 字段 | 必填 | 说明 |
|---|---|---|
| attempts / timeout_per | 是 | 最大尝试次数、单次超时秒 |
| base_backoff / cap | 是 | 退避基数、退避封顶秒 |
| fail_count / total | 是 | 滚动窗口失败数、总请求数 |
| fail_threshold / min_calls | 是 | 熔断失败率阈值、最小样本数 |
| opened_at / now / cooldown | 熔断场景 | 熔断开启时刻、当前时刻、冷却秒 |
输出
退避秒数序列 + 最坏总耗时预算 + 熔断器状态(放行/熔断/半开)
工作流
- 第 n 次失败后退避 base·2^(n-1),封顶 cap(1,2,4…)。
- 最坏耗时 = attempts×单次超时 + 各次间隔退避之和。
- 样本数达 min_calls 且失败率≥阈值 → OPEN 熔断,快速失败不调下游。
- 冷却 cooldown 后 → HALF_OPEN 放行1个试探,成功恢复 CLOSED、失败回 OPEN。
硬性规则
- 重试必须配退避与上限,禁止无限重试。
- 零样本、样本不足 min_calls 不熔断,避免除零与误判。
- 非幂等接口(POST下单)默认不自动重试,只对幂等读/幂等写重试。
- 熔断 OPEN 期间直接快速失败,不再占用连接。
示例
3次尝试、单次超时2s、基数1s → 退避[1,2],最坏 3×2+3=9s
5请求败3、阈值50%、min_calls=5 → 失败率60%达阈 → OPEN
熔断30s后试探 → HALF_OPEN