跳转到内容

容灾方案

codingas.com 提供应用级失败处理策略与端点级熔断器,保障上游故障时的业务连续性。

层级行为触发
L0 Key 级同渠道换上游 Key单 Key 调用失败
L1 渠道级同模型换渠道(按 priority 顺序)候选渠道失败,且错误类型可转移
兜底抛错给客户端L1 候选全耗尽

流式请求只在首字节前转移,首字节后失败不换渠道。

Application.failureStrategy 控制容灾行为,三选一:

策略L0 换 KeyL1 换渠道适用场景
FAIL_FAST(快速失败)BI 报表(快速失败,应用自身换模型重试)
FAIL_RETRY(失败重试,默认)研发自动化(同供应商多 Key,K1 限流换 K2)
FAIL_OVER(失败转移)流程自动化(跨渠道/跨供应商转移保透明)

新建应用默认 FAIL_RETRY

并非所有错误都触发转移。请求级错误换哪都无效,直接抛出:

错误类型是否转移说明
INVALID_REQUEST请求级错误,换渠道无效
MODEL_NOT_FOUND模型不存在,请求级错误;触发模型自动废弃检测
AUTHENTICATION_ERROR共因故障,换账号有效
RATE_LIMIT_ERROR账号/渠道级限流
QUOTA_EXCEEDED配额账号级共用
TIMEOUT_ERROR端点级超时
UPSTREAM_ERROR / SERVICE_UNAVAILABLE / NETWORK_ERROR上游/网络故障
UNKNOWN_ERROR未分类错误不转移

容灾配置收敛到应用(Application 聚合根),通过应用管理 API 配置:

  • timeout:应用级超时秒数(0 表示用渠道默认)
  • failureStrategy:失败处理策略(三选一)
  • 渠道 priority:通过 PUT /api/v1/applications/{id}/channels 配置各渠道转移顺序
Terminal window
curl -X PUT http://localhost:8080/api/v1/applications/1/channels \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channels": [
{"channelId": 1, "priority": 1},
{"channelId": 2, "priority": 2}
]
}'

端点连续失败时自动 OPEN,后续请求跳过该端点;超时后 HALF_OPEN 试探恢复,成功转 CLOSED。管理员可手动 force-open / force-close 应急。

当前熔断参数为内置默认值:滑动窗口 10 次、失败率阈值 50%、OPEN 持续 30s、HALF_OPEN 试探 3 次。

FAIL_OVER 策略下渠道转移会记录事件,供控制台总览页查询:

Terminal window
# 转移事件流(分页 + since/applicationId 过滤)
curl "http://localhost:8080/api/v1/resilience/events?limit=100" \
-H "Authorization: Bearer $TOKEN"
# 耗尽告警(候选全耗尽的近期事件)
curl http://localhost:8080/api/v1/resilience/events/exhausted \
-H "Authorization: Bearer $TOKEN"