🚦 吞吐量 Throughput

系统在单位时间内能处理的请求数量 —— 衡量系统承载能力的核心指标

📌 直觉模型:把请求想象成「货车」 动态演示

模拟吞吐量:统计在「测量窗口」内通过的请求数

📏 测量窗口 1s
0
总请求数(通过窗口)
0
当前吞吐量 TPS(次/秒)
1
已统计秒数(测量时长)
0
平均吞吐量 TPS
核心公式:吞吐量 = 通过测量窗口的请求总数 ÷ 测量时长
即:当前每秒通过 0 个请求,这就是实时吞吐量。
🧮 公式拆解
0
处理的请求总数
÷
1
测量时长(秒)
=
0
吞吐量 TPS(次/秒)
📈 实时吞吐量曲线
🧪 吞吐量评估计算器 拖动体验
10
200 ms
0%
理论吞吐量(Little's Law)
50.0 TPS(次/秒)
有效吞吐量(去除失败)
50.0 TPS

📐 Little's Law:吞吐量 = 并发数 ÷ 平均响应时间  |  有效吞吐量 = 吞吐量 × (1 - 失败率)

🔍 典型场景吞吐量对比
⚙️ 影响吞吐量的核心因素
🧵
并发度 / 线程池大小

并发越高,单位时间内能处理的请求越多。但过高会带来上下文切换开销,反而降低吞吐量。

⏱️
平均响应时间 RT

RT 越短,同样并发下吞吐量越高。优化 DB 查询、缓存命中率可直接提升吞吐量。

💽
I/O 能力

磁盘 I/O、网络带宽是常见瓶颈。异步 I/O、NIO 可以显著提升吞吐量。

🗄️
数据库连接池

DB 连接数不足时会产生等待,是压测中最常见的吞吐量瓶颈之一。

🔒
锁竞争 / GC

高并发下锁争用和频繁 GC 会产生 Stop-the-World,导致吞吐量陡降。

📦
请求体大小

大请求体占用带宽,序列化/反序列化消耗 CPU,同等时间内处理请求数减少。

🧑‍🔬 如何正确评估吞吐量
Step 1:确定测试目标场景

选定要评估的接口/功能,明确是读多写少还是混合场景,决定测试数据集规模。

Step 2:用压测工具施加负载

常用工具:JMeter、wrk、ab(Apache Bench)、k6、Gatling。设置并发用户数、Ramp-up 时间,模拟真实流量形态。

Step 3:统计通过测量窗口的请求数

在系统稳定运行阶段(排除预热期)统计:完成的请求总数 ÷ 统计时长 = TPS/QPS

Step 4:绘制吞吐量 vs 并发数曲线

逐步增加并发,观察吞吐量变化。曲线会经历:上升 → 平台期 → 拐点(系统过载)→ 下降三个阶段。

Step 5:找到最优工作点(拐点)

吞吐量开始下降前的最高点即为系统最大吞吐量。此时 RT 还在可接受范围内,是最佳运行点。

Step 6:关注有效吞吐量

总 TPS 中需剔除失败请求。高错误率下的高 TPS 毫无意义。有效吞吐量 = 成功请求 ÷ 统计时长。

📊 吞吐量与并发数的关系曲线

💡 随并发增大:吞吐量先上升,到达 最优工作点 后趋于平稳,最终因资源争用而 下降 ——这是设计容量规划的关键依据