4.3 故障转移

功能说明

故障转移功能在主供应商请求失败时,自动切换到备用供应商,确保服务不中断。

适用场景

前提条件

使用故障转移功能需要:

  1. ✅ 启动代理服务
  2. ✅ 开启应用接管
  3. ✅ 配置故障转移队列
  4. ✅ 开启自动故障转移

配置故障转移队列

打开配置页面

设置 → 高级 → 故障转移

选择应用

页面顶部有三个 Tab:

选择要配置的应用。

添加备用供应商

  1. 在「故障转移队列」区域
  2. 点击「添加供应商」
  3. 从下拉列表选择供应商
  4. 供应商会添加到队列末尾

调整优先级

拖拽供应商调整顺序:

移除供应商

点击供应商右侧的「移除」按钮。

主界面快捷操作

当代理和故障转移都开启时,供应商卡片会显示故障转移开关。

添加到队列

  1. 找到供应商卡片
  2. 开启故障转移开关
  3. 供应商自动添加到队列

从队列移除

  1. 关闭供应商卡片的故障转移开关
  2. 供应商从队列中移除

开启自动故障转移

操作步骤

  1. 在故障转移配置页面
  2. 开启「自动故障转移」开关

开关说明

状态行为
关闭仅记录失败,不自动切换
开启失败时自动切换到下一个供应商

故障转移流程

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 默认值范围
失败阈值连续失败多少次触发熔断481-20
恢复成功阈值半开状态下成功多少次后关闭熔断器231-10
恢复等待时间熔断后多久尝试恢复(秒)60900-300
错误率阈值错误率超过此值时打开熔断器60%70%0-100%
最小请求数计算错误率前的最小请求数10155-100

💡 Claude 由于请求耗时较长,默认配置更为宽松,容忍更多失败次数。

超时配置

配置说明通用默认值Claude 默认值范围
流式首字节超时等待首个数据块的最大时间(秒)60901-120
流式静默超时数据块之间的最大间隔(秒)12018060-600(填 0 禁用)
非流式超时非流式请求的总超时时间(秒)60060060-1200

重试配置

配置说明通用默认值Claude 默认值范围
最大重试次数请求失败时的重试次数360-10

💡 Gemini 的默认最大重试次数为 5。

熔断状态

状态说明
关闭正常状态,允许请求
开启熔断状态,跳过此供应商
半开尝试恢复,发送试探请求

状态转换

stateDiagram-v2
    [*] --> Closed: 初始化
    Closed --> Open: 失败次数 >= 阈值
    Open --> HalfOpen: 熔断时长到期
    HalfOpen --> Closed: 试探成功 (>= 恢复阈值)
    HalfOpen --> Open: 试探失败

健康状态指示

供应商卡片

卡片上显示健康状态徽章:

徽章状态说明
🟢健康连续失败次数为 0
🟡警告有失败但未触发熔断
🔴熔断已触发熔断,暂时跳过

队列列表

故障转移队列中也显示每个供应商的健康状态。

故障转移日志

每次故障转移会记录:

信息说明
时间发生时间
原供应商失败的供应商
新供应商切换到的供应商
失败原因错误信息

在用量统计的请求日志中可以查看。

最佳实践

队列配置建议

  1. 主供应商:最稳定、最快的供应商
  2. 第一备用:次优选择
  3. 第二备用:保底选择

熔断器配置建议

场景失败阈值熔断时长
高可用要求230 秒
一般场景360 秒
容忍偶发失败5120 秒

监控建议

定期检查:

常见问题

故障转移没有触发

检查:

  1. 代理服务是否运行
  2. 应用接管是否开启
  3. 自动故障转移是否开启
  4. 队列中是否有备用供应商

频繁触发故障转移

可能原因:

解决方法:

所有供应商都熔断

等待熔断时长到期后自动恢复,或:

  1. 手动重启代理服务
  2. 重置熔断状态