运营指南

API中转站限流怎么配才不误伤业务:令牌桶、并发闸门与Key级配额的组合实操

限流是API中转站最容易被配错的一环,松了被打穿,紧了正常业务被频繁拒绝。本文按实际配置顺序拆解分层维度、算法选型、并发与QPS的区别、多模型路由下的差异化配额、429返回规范、客户端退避重试与监控调参,并结合按量计费场景说明限流与额度预检如何协同。

很多团队接入大模型API的第一周都会撞上同一类问题:白天调用一切正常,晚高峰开始频繁超时;或者刚上线就被某个脚本刷走大半天额度。限流配置的目的并不是把请求挡在门外,而是在上游能力、自身资源与用户体验之间划出一条可预期的线。配得松,网关形同虚设;配得紧,正常用户被429劝退。这里按实际配置顺序,把每一层该管什么拆开讲一遍。

第一件事是分层。限流至少该分成四层:接入层按IP或设备做粗粒度拦截,挡住单点异常流量;租户层按API Key做配额,这是最核心的一层;模型层按具体模型区分,因为不同上游的并发承接能力差异很大;请求层按单次请求的token量或消息条数做体量限制,避免一条超长请求长期占住连接。四层里少任何一层,都会留下被打穿的缺口。

算法上没有必要追求复杂。令牌桶适合控制平均速率并允许一定突发,是Key级速率限制的默认选择;漏桶更适合把流量整形得平滑,用于对上游特别敏感的场景;滑动窗口计数实现简单、统计准确度高,常用于分钟级额度统计。真正容易被忽略的是并发信号量,它管的不是每秒允许多少次,而是同一时刻允许多少个请求挂着。

为什么并发往往比每秒请求数更关键?大模型请求的耗时波动极大,一次带长上下文的生成可能几十秒才返回。如果只按每秒十次去卡,理论上有十个请求同时在飞,但实际可能瞬间堆积上百个连接,上游连接池先撑不住。对生成类接口,更稳妥的做法是以并发数为主要闸门,速率作为辅助上限,两者同时生效、各自封顶。

多模型路由会让限流配置复杂一个量级。同一条Key既可能打到便宜的小模型,也可能打到贵的大模型,两者的上游配额、超时时间、重试代价都不一样。合理的做法是按模型分组设定权重和独立配额,贵的模型给更小的并发上限与更严格的体量限制;路由层在必要时做降级,把非核心请求切到备选模型,而不是直接把错误原样抛给调用方。

限流还要和计费、额度打通。按量计费的场景下,被拒绝的请求不应该扣费,但被受理的请求必须在计费上有明确归属。实践中建议在准入阶段先做额度预检,余额或配额不足时直接返回清晰错误码,而不是等上游返回结果后再扣减,否则很容易出现额度透支与对账争议。快米兔的模型API中转采用注册送5元测试金、按量计费的方式,这种小额试跑很适合用来验证限流阈值到底合不合身。

返回规范决定了客户端能不能配合。既然兼容OpenAI协议,429就应当按协议返回,并带上Retry-After或等价的建议重试时间;错误体里要说明是被哪一层拦下的:是Key级配额、模型级并发,还是请求体量超限。调用方看到不同原因,处理方式完全不同:配额不足要扩容或换Key,并发超限要排队,体量超限则要拆请求。

客户端不配合,服务端再精细也白搭。最基本的做法是指数退避加随机抖动,避免被限流的客户端在同一秒集体重试,形成对网关的二次冲击。流式请求要单独处理:连接中断后是否重试、重试会不会重复计费,都要在接入说明里约定清楚。对带副作用的调用,最好携带幂等标识,减少重试带来的重复执行。

监控指标建议只盯几个关键的:拒绝率、各层限流的触发次数、上游错误率、P95延迟和并发水位。拒绝率长期接近零,说明阈值过松;突发时段的拒绝率明显高于均值,说明阈值偏紧或者突发容量不足。调参不要凭感觉,先用一周的流量分布做基准,按高峰水位留出三成左右余量,再逐步收紧,一次只动一个维度。

上线的节奏同样重要。新的限流规则建议先以观察模式运行,只记录不拦截,对比实际触发量;确认无误后再对少量Key灰度生效,最后全量铺开。压测时不要只打单一接口,把长短请求、流式与非流式混在一起打,才能暴露连接池与队列的真实瓶颈。有条件的话,用影子流量把生产请求复制一份到备用通道做对照。

回到选型层面,自建网关能拿到全部控制权,但限流、计费、Key管理、多模型路由这几块都要自己维护,踩坑周期和维护成本都不低。对多数团队来说,直接接入一个已经把这几层做好的中转服务更省事。快米兔的模型API中转兼容OpenAI协议,接入侧改动小,配额与并发策略可按需调整,配合注册送5元测试金的试用机制,可以先小流量跑通再逐步放量,在限流与计费协同这件事上更贴实际业务节奏。具体的策略项与默认阈值以官方说明为准。