租户 A 每月 100 万次调用,租户 B 只有 5 万次,两个租户的限流 key 都是 api:global。A 跑批时把额度用满,B 的接口从上午 10 点开始全部 429,持续了 4 小时。日志里能对上时间点,这种反而好排。

限流 key 只按接口维度拼,没带租户 id,所有租户共用同一个计数。配额表里虽然有租户维度,限流组件没有读它。这一点先确认清楚,后面就不用反复试。

redis-cli GET 'rate:api:global'
redis-cli GET 'rate:api:tenant:1002'
-- 前者是所有租户共享的计数

「多租户共享配额」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:key 拼上 tenant_id 每租户独立计数;配额从租户表读取 不要写死全局阈值;给每个租户单独做用量看板 方便对账。

结果对不对很好判断,A 跑批时 B 的接口仍是 200,两个租户的计数各自独立增长。

作者 9823189