高可用
故障处理
三个机制协同工作:选择目标、失败后继续、以及在不健康时将其移出轮转。
选择目标
目标按最近一段时间窗口内的延迟与错误率评分。权重按固定间隔重算,请求路径直接读取缓存结果,因此评分不会为每个请求带来可测量的开销。
- 在密钥与端点之间按权重选择
- 可为有状态流程开启会话保持
- 按目标设置并发与超时上限
失败后继续
每次尝试都会先做分类,再决定动作。瞬时故障在同一目标上退避重试;与密钥绑定的故障则换用其他密钥,而不是继续等待。
- 有序回退链,各自独立预算
- 指数退避重试并加入抖动
- 逐次记录失败分类
移出轮转
描述目标本身而非请求的故障,会把该目标暂停轮转。等待结束后由一次探测确认,并按渐进方式恢复流量,而不是立刻回到满权重。
- 暂停范围可细化到某个密钥或某个模型
- 等待时长按失败分类逐步增长并设上限
- 可在面板或 API 中手动恢复
失败如何分类
分类结果决定是重试、换钥还是暂停。由请求本身引起的错误不会暂停目标。
| 分类 | 重试 | 暂停轮转 |
|---|---|---|
| 瞬时故障(网络、5xx) | 同一目标,退避重试 | 否 |
| 触发限流 | 换用其他密钥 | 是,时间较短 |
| 凭据被拒绝 | 换用其他密钥,不退避 | 是 |
| 配额用尽 | 换用其他密钥,不退避 | 是 |
| 无该模型权限 | 换用其他密钥,不退避 | 是,仅该模型 |
| 请求被上游拒绝 | 否 | 否 |