Skip to content

Failover 429 未自动降级 + 路由侧最大连接数限制建议 #6

Description

@blakejia

总体反馈

首先感谢这个项目——轻量化的订阅管理理念非常契合个人开发者 / 小团队的实际需求。不做格式转换、全文请求记录、单一管理员 + API Key 额度控制的设计,相比 NewAPI / One-API 这类重型方案干净很多。在实际部署使用过程中,有两个点希望能改进。


一、故障转移(Failover)未正确触发 — Bug

场景:
同一模型名(模型别名)配置了多个渠道,按 priority 排序:

  • priority 1 → minimax 渠道
  • priority 2 → glm 渠道

问题:
当 minimax 渠道返回 429(Too Many Requests / 限流) 时,网关没有自动 fallback 到 priority 2 的 glm 渠道,而是直接把 429 错误返回给客户端。

期望行为:
当上游返回 429(以及 5xx 等可重试错误)时,网关应自动按 priority 降级,将请求重试到下一个可用渠道,直到拿到成功响应或所有渠道都失败后再把错误透传给客户端。

复现步骤:

  1. 配置两个渠道映射到同一模型别名,priority 分别为 1 和 2
  2. 将 priority 1 渠道(如 minimax)的额度耗尽 / 触发上游限流,使其返回 429
  3. 通过网关发送请求
  4. 客户端直接收到 429,而非从 priority 2 渠道获得的正常响应

建议:

  • 明确哪些上游状态码(429、500、502、503、504 等)会触发 failover
  • 在渠道级别允许配置"是否参与 failover"和"冷却时间",避免被限流的渠道短时间内被反复命中
  • failover 日志在控制台请求记录中可见,方便排查

二、路由侧增加「最大连接数」限制 — Feature Request

需求:
希望在渠道/路由级别支持配置 最大并发连接数(max connections / concurrency limit)。当某个渠道的并发连接数达到上限时,自动将后续请求路由到 priority 更低的下一个渠道,而不是排队等待或直接拒绝。

典型场景:

  • minimax 渠道有 QPS / 并发数限制,达到上限后继续打到它只会 429
  • 与上面的 failover 配合:连接数满了 → 自动降级路由;429 了 → 故障转移。两者互补,形成完整的「压力分担 + 故障兜底」链路

期望配置形态(供参考):

channels:
  - name: minimax
    priority: 1
    max_connections: 10
  - name: glm
    priority: 2
    max_connections: 5

当 minimax 达到 10 个并发时,新请求自动流向 glm;两者都满时再按 failover 策略处理(排队 / 拒绝 / 返回明确错误)。


环境信息

  • 部署方式:Docker(ghcr.io/gojam11/llmrelayservice:main
  • 上游:minimax + glm

感谢作者考虑以上建议,期待项目越来越好。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions