# 4.3 故障转移 ## 功能说明 故障转移功能在主供应商请求失败时,自动切换到备用供应商,确保服务不中断。 **适用场景**: - 供应商服务不稳定 - 需要高可用性 - 长时间运行的任务 ## 前提条件 使用故障转移功能需要: 1. ✅ 启动代理服务 2. ✅ 开启应用接管 3. ✅ 配置故障转移队列 4. ✅ 开启自动故障转移 ## 配置故障转移队列 ### 打开配置页面 设置 → 高级 → 故障转移 ### 选择应用 页面顶部有三个 Tab: - Claude - Codex - Gemini 选择要配置的应用。 ### 添加备用供应商 1. 在「故障转移队列」区域 2. 点击「添加供应商」 3. 从下拉列表选择供应商 4. 供应商会添加到队列末尾 ### 调整优先级 拖拽供应商调整顺序: - 序号越小,优先级越高 - 主供应商失败后,按顺序尝试备用供应商 ### 移除供应商 点击供应商右侧的「移除」按钮。 ## 主界面快捷操作 当代理和故障转移都开启时,供应商卡片会显示故障转移开关。 ### 添加到队列 1. 找到供应商卡片 2. 开启故障转移开关 3. 供应商自动添加到队列 ### 从队列移除 1. 关闭供应商卡片的故障转移开关 2. 供应商从队列中移除 ## 开启自动故障转移 ### 操作步骤 1. 在故障转移配置页面 2. 开启「自动故障转移」开关 ### 开关说明 | 状态 | 行为 | |------|------| | 关闭 | 仅记录失败,不自动切换 | | 开启 | 失败时自动切换到下一个供应商 | ## 故障转移流程 ```mermaid graph TD Start[请求到达代理] --> Send[发送到当前供应商] Send --> CheckSuccess{成功?} CheckSuccess -- 是 --> Return[返回响应] CheckSuccess -- 否 --> LogFail[记录失败] LogFail --> CheckCircuit{检查熔断状态} CheckCircuit -- 熔断 --> Skip[跳过此供应商] CheckCircuit -- 未熔断 --> IncFail[增加失败计数] Skip --> Next{队列中下一个?} IncFail --> Next Next -- 有 --> Switch[切换供应商] Switch --> Retry[重试请求] Retry --> Send Next -- 无 --> Error[返回错误] ``` ## 熔断器配置 熔断器防止频繁重试失败的供应商。 ### 配置项 不同应用有独立的默认配置。以下为通用默认值,Claude 有独立的宽松配置。 | 配置 | 说明 | 通用默认值 | Claude 默认值 | 范围 | |------|------|--------|--------|------| | 失败阈值 | 连续失败多少次触发熔断 | 4 | 8 | 1-20 | | 恢复成功阈值 | 半开状态下成功多少次后关闭熔断器 | 2 | 3 | 1-10 | | 恢复等待时间 | 熔断后多久尝试恢复(秒) | 60 | 90 | 0-300 | | 错误率阈值 | 错误率超过此值时打开熔断器 | 60% | 70% | 0-100% | | 最小请求数 | 计算错误率前的最小请求数 | 10 | 15 | 5-100 | > 💡 Claude 由于请求耗时较长,默认配置更为宽松,容忍更多失败次数。 ### 超时配置 | 配置 | 说明 | 通用默认值 | Claude 默认值 | 范围 | |------|------|--------|--------|------| | 流式首字节超时 | 等待首个数据块的最大时间(秒) | 60 | 90 | 1-120 | | 流式静默超时 | 数据块之间的最大间隔(秒) | 120 | 180 | 60-600(填 0 禁用) | | 非流式超时 | 非流式请求的总超时时间(秒) | 600 | 600 | 60-1200 | ### 重试配置 | 配置 | 说明 | 通用默认值 | Claude 默认值 | 范围 | |------|------|--------|--------|------| | 最大重试次数 | 请求失败时的重试次数 | 3 | 6 | 0-10 | > 💡 Gemini 的默认最大重试次数为 5。 ### 熔断状态 | 状态 | 说明 | |------|------| | 关闭 | 正常状态,允许请求 | | 开启 | 熔断状态,跳过此供应商 | | 半开 | 尝试恢复,发送试探请求 | ### 状态转换 ```mermaid stateDiagram-v2 [*] --> Closed: 初始化 Closed --> Open: 失败次数 >= 阈值 Open --> HalfOpen: 熔断时长到期 HalfOpen --> Closed: 试探成功 (>= 恢复阈值) HalfOpen --> Open: 试探失败 ``` ## 健康状态指示 ### 供应商卡片 卡片上显示健康状态徽章: | 徽章 | 状态 | 说明 | |------|------|------| | 🟢 | 健康 | 连续失败次数为 0 | | 🟡 | 警告 | 有失败但未触发熔断 | | 🔴 | 熔断 | 已触发熔断,暂时跳过 | ### 队列列表 故障转移队列中也显示每个供应商的健康状态。 ## 故障转移日志 每次故障转移会记录: | 信息 | 说明 | |------|------| | 时间 | 发生时间 | | 原供应商 | 失败的供应商 | | 新供应商 | 切换到的供应商 | | 失败原因 | 错误信息 | 在用量统计的请求日志中可以查看。 ## 最佳实践 ### 队列配置建议 1. **主供应商**:最稳定、最快的供应商 2. **第一备用**:次优选择 3. **第二备用**:保底选择 ### 熔断器配置建议 | 场景 | 失败阈值 | 熔断时长 | |------|----------|----------| | 高可用要求 | 2 | 30 秒 | | 一般场景 | 3 | 60 秒 | | 容忍偶发失败 | 5 | 120 秒 | ### 监控建议 定期检查: - 各供应商的健康状态 - 故障转移发生频率 - 熔断触发情况 ## 常见问题 ### 故障转移没有触发 检查: 1. 代理服务是否运行 2. 应用接管是否开启 3. 自动故障转移是否开启 4. 队列中是否有备用供应商 ### 频繁触发故障转移 可能原因: - 主供应商不稳定 - 网络问题 - 配置错误 解决方法: - 检查主供应商状态 - 调整熔断器参数 - 考虑更换主供应商 ### 所有供应商都熔断 等待熔断时长到期后自动恢复,或: 1. 手动重启代理服务 2. 重置熔断状态