多租户配额与预算:限额、配额周期与突发桶的结算模型(Final)✨
📚 目录
- 多租户配额与预算:限额、配额周期与突发桶的结算模型(Final)✨
-
- TL;DR 🧭
- 1) 限流 vs. 配额:职责与协同 🧩
- 2) 术语与模型 📘
- 3) 架构与分层(ABP 模块化)🏗️
- 4) 数据与键 🗃️
- 5) 执行路径(请求→计量→结算)🔁
- 6) ASP.NET Core:成本化限流(**顺序/分区键/动态 Retry-After**)⚙️
- 7) 原子扣费 Lua(**同槽、统一时钟、毫单位、首调初始化、防负数、防回拨、整数化、返回缺口**)🧮
- 8) Quota API(**动态 `Retry-After`、长整型安全解析、rate<=0 兜底、结构化日志**)🧰
- 9) HTTP 语义与客户端退避(**明确规则**)📨
- 10) 管理后台与可观测(SLO / 录制规则)📊
- 11) 可复现环境 🐳
- 12) 压测(k6)🧪
- 13) 高可用与风控 🛡️
TL;DR 🧭
限流(秒/分级)≠ 配额/预算(日/月/账期)。生产落地通常二者协同:入口用 ASP.NET Core Rate Limiter(固定窗/滑动窗/令牌桶/并发)抑制尖峰;后台以 Redis(原子扣费+滑动窗) + Postgres(账本+结算) 约束账期总量;突发桶用于短时超前消费、按秒线性补给。本文提供 集群友好 Lua(统一 Redis 时钟、哈希标签同槽、毫单位、首调初始化、防负数、防时间回拨、整数化补给)、动态 Retry-After、SLO/录制规则与 k6 压测脚本,开箱即用。
1) 限流 vs. 配额:职责与协同 🧩
- 限流:保护瞬时容量——固定窗、滑动窗、令牌桶、并发限制。
- 配额/预算:管账期总量——结算、滚存、超用处理(软降级/硬封顶)。
- 协同:入口“速率守门”+ 后台“总额记账”;突发桶(burst)≈ 令牌桶的容量 + 补给速率语义。
- 跨时区账期:不少服务“每日配额按 PT 午夜重置”;自研系统需明确账期时区并在 UI 标注。🕰️
2) 术语与模型 📘
- QuotaPlan:
base_quota、refill_rate、burst_capacity、period(day|month|rolling:n) - Budget:
base + carry_in - used - BurstBucket:容量
capacity,按refillRate(单位/秒)线性补给 - Cost:请求成本(读取=1,导出=5 …),兼容“成本化限流”

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



