API 中转站多租户隔离方案设计:从租户模型、额度池到限流配额的四层切分
多租户隔离是 API 中转站从自用走向对外服务的关键一步。本文从租户模型、Key 鉴权、额度原子扣减、双层限流、模型授权与渠道映射、缓存与日志前缀、故障熔断、trace 贯穿等环节,梳理一套可落地的隔离方案,并给出由外向内、先管钱再管流量的实施顺序。
一个 API 中转站从自用走向对外服务,最先撞上的往往不是模型够不够多,而是租户之间的边界。同一个上游渠道被几十上百个团队共享,额度、并发、日志、缓存都以一锅粥的方式混在一起,任何一个租户的异常流量都可能波及其他人。多租户隔离的本质,是把共享的基础设施切出独立的体验,工作量集中在四个层面:身份、额度、流量与数据。
在动手写代码之前,先把租户模型定清楚,后面所有隔离手段都挂在这个模型上。常见的做法是三层结构:租户作为计费与合同主体,子账户承载项目或环境,Key 是最终被程序持有的凭证。快米兔 API 在这一点上采用主账户管钱与模型授权、子 Key 承载实际调用的分工,调用侧只需替换 base_url 与 Key,协议保持 OpenAI 兼容,这也是国内中转服务被广泛接受的一种形态。
鉴权层是隔离的第一道闸门。Key 不应明文落库,通常是加盐哈希后存储,同时保留可检索的前缀索引,避免每次请求都全表扫描。请求进入网关后的第一步就是解析 Key,得到租户上下文,包括 tenant_id、所属子账户、授权模型清单与额度池,并在后续所有环节透传。这一步做得干净,限流、计费、日志才有一致的归属基准;做得含糊,后面的统计口径会长期对不上。
额度隔离的关键是避免并发超支。按量计费的场景下,比较稳妥的组合是预扣加结算:请求发起前按最大可能消耗预扣一个额度,流式响应结束后再按实际 token 回补差额。扣减动作要放在原子操作里,用 Redis Lua 脚本或数据库行级锁都可以,但必须保证同一租户的并发请求不会同时读到同一个余额。快米兔 API 采用按量计费和注册送 5 元测试金的方式,新团队可以先跑通链路再谈预算,测试期的额度隔离同样按这套规则执行。
限流最好做成双层结构:租户级桶负责公平,平台级桶负责自保。租户级令牌桶独立计数,某一家打满自己的 RPM 或 TPM 只会被限在自己这一侧;平台级则统计所有租户对某一上游渠道的总压力,超过上游承载时做整体削峰或排队。维度上建议至少拆成 RPM、TPM 与并发连接数三项,只做 RPM 会出现请求数不多但单次上下文极长、把渠道压垮的情况。
模型授权与路由是容易被忽略的一层隔离。不同租户订购的模型清单不同,网关在转发前要校验该租户是否有权调用目标模型,再按租户绑定的渠道组做路由。把租户与上游渠道建立柔性映射有个额外好处:某个上游出现抖动时,受影响的基本是绑定该渠道的那部分租户,运维可以按租户维度迁移,而不是全站回滚。多模型路由的权重、超时与故障转移策略,同样应该支持按租户覆写。
数据面的隔离最容易出事故,因为它的错误是沉默的。缓存 key 必须带租户前缀,尤其是语义缓存和 prompt 缓存这类按内容命中的结构,一旦前缀缺失,A 租户的提问可能命中 B 租户的答案。日志与计量记录同理,写入时带上 tenant_id,按租户做分区或至少建立联合索引,否则月底对账只能靠人工捞数据。日志的冷热分层还要与计费口径对齐,避免计费明细里有、审计日志里却查不到。
故障隔离决定了一个租户能不能把整站拖下水。租户级熔断器要独立统计错误率与超时率,某租户连续超阈值时只掐它的请求,不触发全局降级;上游侧的错误则按渠道统计,结合重试与降级模型处理。这里有个实操细节:重试次数要在租户维度可配,否则某个租户设置的重试风暴会放大对上游的冲击,反而伤害其他租户的稳定性。
隔离做得对不对,最终靠可观测性验证。统一约定是 trace_id 与 tenant_id 贯穿整条链路,从网关接入、路由决策、上游调用到计费落库都能串起来。有了这两个字段,排查某个团队反馈的今天特别慢,可以直接筛出该租户的 P95 与错误码分布,判断是自身流量、上游渠道还是平台限流导致,而不必靠猜。成本归集与对账口径也依赖同一套字段,否则部门分摊时很难服众。
落地顺序建议由外向内:先做鉴权与额度,因为这两层直接涉及钱,出问题最敏感;再补限流,把公平性建立起来;最后才是路由策略与缓存隔离的精细化。每层上线后都留一段观察期,用真实流量验证隔离效果,比一次性把方案全量推上去要稳。对于预算有限的小团队,把租户模型、Key 哈希存储和原子扣减这三件事做扎实,已经能覆盖八成的日常风险。
如果不想自己维护一套多租户网关,选第三方中转服务时不妨把隔离能力列进评估清单:是否支持子 Key、额度是否按 Key 独立、限流维度能否配置、日志能不能按租户导出。快米兔 API 在这几项上提供了较为完整的组合,接口保持 OpenAI 兼容,切换成本主要集中在 Key 与 base_url 的替换,按量计费也让小规模验证阶段的成本更可控,具体规格与资费以官方说明为准。对多数中小团队来说,这类形态比自己搭一套多租户隔离更省事,也更贴近快速上线的节奏。
