限流的不同API,用户的阈值的设计
【结论】
限流阈值 = 系统可承载能力 × 安全系数 × 维度分摊系数
其中:
系统可承载能力:压测得出
安全系数:0.6~0.8(生产常用)
维度分摊系数:API / 租户 / 用户的分配比例
生产流量分析
↓
API 分组 & 权重建模
↓
混合负载模型设计
↓
比例压测(逐级升压)
↓
找瓶颈 & 反推限流阈值
这是一个没有“统一数值答案”,但有一套“可落地方法论”的问题。在生产环境里,限流阈值不是拍脑袋定的,而是一个能力约束 + 业务目标 + 风险容忍度共同作用的结果。
下面我给你一套在真实生产环境可执行的定标方法,并分别说明 API / 用户 / 租户 三类限流该如何定。
一、先给结论式框架(你可以直接拿去用)
限流阈值 = 系统可承载能力 × 安全系数 × 维度分摊系数
其中:
- 系统可承载能力:压测得出
- 安全系数:0.6~0.8(生产常用)
- 维度分摊系数:API / 租户 / 用户的分配比例
二、第一步:确定“系统真实可承载能力”(最关键)
1. 你必须先有压测结果
不要先谈限流规则,先回答一个问题:
这个 API 在稳定 SLA 下,最大能扛多少 QPS?
压测目标不是“压挂”,而是找到:
- P99 延迟开始明显劣化的点
- 错误率开始抬头的点
例如:
-
某 API:
- 1500 QPS:P99 = 120ms(稳定)
- 1800 QPS:P99 = 400ms(抖动)
→ 可承载能力 ≈ 1500 QPS
2. 生产一定要留安全余量
经验值:
| 场景 | 安全系数 |
|---|---|
| 内部系统 | 0.7~0.8 |
| 对外 API | 0.6~0.7 |
| 核心链路 | ≤ 0.6 |
例如:
- 1500 × 0.7 ≈ 1050 QPS
→ 这是你限流系统里的“总预算”
三、API 级限流:先做“总闸门”
API 限流是最重要、也是最优先的
建议区间
-
API 总 QPS:
系统预算的 80%~100% -
剩下的留给:
- 重试
- 抖动
- 突发流量
示例
-
系统预算:1050 QPS
-
单核心 API:
- 限流:900 QPS
-
非核心 API:
- 限流:200~300 QPS
四、租户(Tenant)限流:防“一个大户拖死所有人”
原则
- 租户限流是 公平性保护
- 一定要 低于 API 总限流
常见三种定法
1. 平均分摊(最简单)
tenant_qps = api_qps / 活跃租户数
例如:
- API = 900 QPS
- 活跃租户 = 30
→ 每租户 ≈ 30 QPS
适合:
- 租户规模接近
- 内部系统
2. 分层(生产最常见)
| 租户级别 | QPS |
|---|---|
| S 级 | 200 |
| A 级 | 80 |
| B 级 | 20 |
适合:
- 商业化 SaaS
- SLA 不同
3. 动态配额(成熟系统)
- 基础保障 + 弹性上限
tenant_limit = base + burst
例如:
- base = 20 QPS
- burst = 50 QPS(短时)
五、用户(User)限流:主要是“防滥用”
用户限流不是为了保护系统,而是为了:
- 防爬虫
- 防脚本
- 防刷接口
常见定法(比租户低一个数量级)
| 场景 | 建议 |
|---|---|
| 登录 / 下单 | 5~10 QPS |
| 查询类 | 10~30 QPS |
| 写接口 | 1~5 QPS |
用户限流一定 < 租户限流 < API 限流
六、一个完整的生产示例
假设:
- 压测能力:1500 QPS
- 安全系数:0.7 → 1050 QPS
规则组合:
-
API 总限流:900 QPS
-
租户:
- S:200 QPS
- A:80 QPS
- B:20 QPS
-
用户:
- 单用户:10 QPS
最终效果:
- 高峰不会打爆系统
- 大客户不会挤死小客户
- 单用户无法恶意刷接口
七、非常重要的一条经验(很多系统踩坑)
限流阈值一定要“线上可调、分钟级生效”
否则:
- 一次营销活动
- 一次外部依赖抖动
就会把你拖入发布地狱。
八、一句话总结
生产限流不是“限多少”,而是“谁先被挡、挡到什么程度”。
API 保系统,租户保公平,用户防滥用。
如果你愿意,下一步我可以帮你:
- 把这些规则 映射成 Sentinel FlowRule(含集群模式)
- 或给你一套 压测 → 定阈值 → 上线 → 动态调参 的标准流程文档
如何估算不同API压测的比例
这是一个非常成熟、也非常容易被低估的生产问题。
核心结论先给出来:
生产压测不是“把所有 API 拉满”,而是“按真实流量比例回放负载”。
下面我按可执行的方法论来讲,而不是停留在工具层。
一、先澄清一个常见误区
错误做法(非常常见):
- 对每个 API 单独压到极限
- 然后简单相加,认为系统能扛住
为什么错:
-
生产是 混合流量
-
不同 API:
- CPU / IO / DB / Cache 消耗模型完全不同
-
混合负载下,瓶颈会提前出现
二、生产“API 比例压测”的总体流程(标准做法)
全流程概览
生产流量分析
↓
API 分组 & 权重建模
↓
混合负载模型设计
↓
比例压测(逐级升压)
↓
找瓶颈 & 反推限流阈值
三、第一步:从生产数据“反推真实 API 比例”
必须基于真实生产数据(不是拍脑袋)
数据来源(优先级):
- API Gateway / Nginx 访问日志
- APM(SkyWalking / Zipkin / Pinpoint)
- Sentinel / Prometheus 指标
至少要拿到三类数据:
- 每个 API 的 QPS 占比
- 每个 API 的平均 RT / P99
- 每个 API 的资源特征(DB / Cache / RPC)
示例(真实常见)
| API | 占比 | P99 |
|---|---|---|
| 查询列表 | 55% | 120ms |
| 查询详情 | 25% | 180ms |
| 下单 | 10% | 350ms |
| 支付 | 5% | 500ms |
| 其他 | 5% | — |
四、第二步:对 API 做“负载分组”,而不是只看比例
这是很多团队没做,导致压测结果失真的地方。
按资源模型分组
而不是按业务名字:
| 分组 | 特征 |
|---|---|
| Read-Light | 只走缓存 |
| Read-Heavy | DB Join / 大表 |
| Write | 事务 / 锁 |
| External | 调外部系统 |
你会发现:
- 10% 的 API 可能吃掉 50% 的 DB
五、第三步:构建“混合负载模型”
关键不是工具,是“权重”
一个典型混合模型长这样:
总 QPS = 1000
查询列表 55% → 550 QPS
查询详情 25% → 250 QPS
下单 10% → 100 QPS
支付 5% → 50 QPS
其他 5% → 50 QPS
⚠️ 注意:
- 比例保持不变
- 总 QPS 逐步升高(300 → 500 → 800 → 1000 → 1200)
六、第四步:压测时一定要“逐级升压 + 稳态观察”
正确节奏
-
升到 300 QPS,稳定 5–10 分钟
-
升到 500 QPS,稳定
-
升到 800 QPS,稳定
-
直到出现:
- P99 明显抬升
- Error rate > SLA
- 某资源(DB / CPU)饱和
这个点才是“系统真实能力”
七、第五步:不要忘了“异常流量注入”
生产一定不是完美比例。
你必须额外测三种情况:
1. 读多写少 → 写突增
- 写接口比例从 10% → 30%
- 看锁、事务、队列
2. 慢 API 被放大
- 人为延长一个慢 API
- 看线程池、连接池耗尽
3. 重试风暴
- 模拟下游超时 + 重试
- 这是很多系统真正崩的原因
八、一个非常实用的经验法则
混合压测下得到的极限 QPS,通常比“单 API 极限相加”低 30%~50%。
这就是为什么:
- 限流一定要基于混合压测结果
- 而不是单接口压测结果
九、压测结果如何反推限流
你最终得到的是:
- 总系统安全 QPS
- 各 API 在混合场景下的安全占比
然后反推:
API_limit = 总_limit × API_比例 × 安全系数
十、一句话总结
生产压测的本质是:用“真实比例 + 真实资源模型”去逼近真实世界,而不是把工具跑满。
如果你愿意,下一步我可以:
- 给你一个 JMeter / k6 混合比例压测模型示例
- 或帮你设计一套 压测 → Sentinel 限流阈值反推表
你更想看哪一个?

浙公网安备 33010602011771号