用编译期类型思维设计稳定的 API 限流与计费系统
答案是:把约束尽可能前移。金额、配额、时间窗口写成不可混用的品牌类型,边界在构造器校验,请求状态迁移用枚举穷举,再配合原子扣减脚本与带唯一约束的幂等账本,让非法状态在写出来之前就被拒绝。
创建记录 2026-10-29 · 沐小悠 · 约 18 分钟
192 次阅读 阅读 →
「令牌桶」标签下共 17 篇技术文章。按发布时间倒序排列,内容持续更新。
答案是:把约束尽可能前移。金额、配额、时间窗口写成不可混用的品牌类型,边界在构造器校验,请求状态迁移用枚举穷举,再配合原子扣减脚本与带唯一约束的幂等账本,让非法状态在写出来之前就被拒绝。
文章提出用策略外置把阈值写进版本库、先定计量口径再写计费实现、用不可变计费事件与三条对账线暴露差异,并把降级策略和演练制度化,让限流计费系统在人员变动后仍可交接、可定位、可追溯。
多租户 API 限流与计费的关键是分层限流、事件化计量、预扣幂等扣费与日终对账,再用故障降级和客户端退避保证配额不超卖、账本可重放、漂移可告警。
限流与计费必须一起设计:应把准入、计量、账本拆成三个只通过事件交互的正交行为,以追加写事件流为唯一事实来源,并用预扣—结算—释放与定时对账把误差收敛到可观测范围。
稳定 API 限流与计费必须共享同一套数据:先统一权重与用量事件口径,再用 Redis 令牌桶分级限流,并以预扣—结算—对账账本和依赖降级兜底,才能做到不超卖、不丢事件,又能用每日对账证明账目一致。
核心是三层限流加三阶段计费:边缘层用 Nginx 挡量,应用层用 Redis 令牌桶原子扣减并按接口成本差异化消耗,租户层管住日/月配额与并发;计费走预扣、结算、对账,靠唯一请求 ID 保证幂等不重不漏。
用令牌桶加 Redis Lua 实现原子限流来保护上游,用预扣—结算—对账三段式计费产出可核对的账本,两者以 request_id 串联但各自独立演进。
设计稳定API限流与计费系统,需统一限流与计费口径,采用分层限流、Redis原子脚本、预扣结算、幂等账本和离线对账,并做好降级恢复与可观测性。
共 17 篇文章,第 2 / 2 页