Repository navigation
v0.1.9
发布概览
本版本重构了网关的限流模型:移除不可配置的硬编码用户 RPM 限流,改为按 用户 × API Key 两层级联的并发槽位控制。管理员与用户都可以在面板按用户总额度 + 每把 key 独立额度做精细化配置,满足"用户 A 总并发 50,其中给 Claude Code 用的 key 单独限 10"这类场景。
主要更新
- 移除硬编码的用户级 60 RPM 限流:原本按
user_id × platform强制每分钟 60 个请求的逻辑粒度过粗、无法配置、误伤严重,已彻底下线。同时删除internal/ratelimit整个包以及挂在 auth 路由上实际为空转的限流中间件。账号级max_rpm与并发槽位继续保留用于保护上游账号。 - 新增 API Key 级并发限制:
api_key表新增max_concurrency字段(默认 0 = 不限制),管理员/用户都可在密钥面板为每把 key 单独设置,达到上限返回429 + apikey_concurrency_limit。Redis 槽位前缀concurrency:apikey:<keyID>与账号级隔离。 - 新增用户级总并发限制:
user.max_concurrency字段首次被 forwarder 真正执行——同一 user 下所有 API Key 共享这个配额,与 api_key 级是 AND 关系。Redis 槽位前缀concurrency:user:<userID>。user.max_concurrency默认值同步从 5 改为 0。 - 并发限流链路重构:
plugin/forwarder中新增acquireClientSlots,按"先 user 后 key"顺序拿槽,失败时反向释放避免泄漏,Forward()通过单次 defer 统一 release。跨 failover 尝试稳定,不会误清槽位。 - 前端 UI 同步:管理面板与用户自管 key 页面都新增了"最大并发数"输入框,用户编辑页面已有的
max_concurrency字段默认值从 5 改为 0;同时简化了sell_rate/max_concurrency的 hint 文案。
⚠️ 升级注意事项
v0.1.8 及以前 users.max_concurrency 的默认值是 5,但该字段从未被 forwarder 真正强制执行。 本版本首次把它接入实际限流链路,意味着数据库里仍停留在 5 的老用户升级后会被真正限制到每用户最多 5 个并发请求。
如果想继续不限制,请选一种方式:
- 管理面板:进入"用户管理"页面,编辑目标用户,把
max_concurrency改成0 - 直接改数据库(一次性批量):
UPDATE users SET max_concurrency = 0 WHERE max_concurrency = 5;
新建用户不受影响,默认值已改为 0。
升级后如遇到客户端报 429 + rate_limit_exceeded / "请求过于频繁,请稍后重试" 的错误将会消失(这是被移除的硬编码限流的文案);取而代之的是可配置的 user_concurrency_limit 与 apikey_concurrency_limit,触发时说明对应用户或 key 的并发额度已达上限,按需在面板调大即可。
交付物
容器镜像
docker pull ghcr.io/doudou-start/airgate-core:v0.1.9
docker pull ghcr.io/doudou-start/airgate-core:latest支持架构:linux/amd64 linux/arm64
二进制文件
支持平台:linux/amd64 linux/arm64 darwin/amd64 darwin/arm64
所有二进制文件均附带 .sha256 校验文件,可用于完整性校验。
完整变更
Full Changelog: v0.1.8...v0.1.9