吞吐压测基础:吞吐量、QPS/TPS与核心指标

做性能优化这些年,我见过太多团队一上来就堆机器、调参数,结果压测一跑,系统直接崩了。说白了,很多人连最基本的吞吐量概念都没搞清楚。今天咱们就把这块地基打牢。

一、吞吐量到底是什么?

吞吐量,英文叫 Throughput。你可以把它想象成一条高速公路——单位时间内能通过多少辆车。在系统里,就是单位时间内能处理多少请求。

我习惯用这个公式来理解:

吞吐量 = 成功处理的请求数 / 时间单位

举个例子。你的接口每秒能处理 1000 个请求,那吞吐量就是 1000 req/s。但注意,这里有个坑——必须是成功处理的请求。返回 500 错误的,不算。

核心要点:吞吐量衡量的是系统的处理能力,不是并发数,也不是响应时间。它是三者综合的结果。

二、QPS 和 TPS,别再傻傻分不清

这两个概念,面试常考,实际也常搞混。我简单说清楚。

指标 全称 含义 典型场景
QPS Queries Per Second 每秒查询数 读接口、搜索服务
TPS Transactions Per Second 每秒事务数 下单、支付、转账

QPS 偏重查询,一个请求可能只查一次数据库。TPS 偏重事务,一个请求可能涉及多次读写、多个服务调用。比如你点个「提交订单」,后端可能要扣库存、减余额、写订单表——这就算一个 TPS,但内部可能产生了 5 个 QPS。

我的经验:压测时我一般先看 QPS,因为它更直观。但如果系统涉及写操作,TPS 才是真正的瓶颈指标。曾经有个项目,QPS 看着很高,一查 TPS 低得可怜——原来大部分请求都在读缓存,真正的写操作全堵在数据库了。

三、压测的核心三剑客:延迟、并发、成功率

这三个指标,缺一不可。你想想看,光看吞吐量够吗?不够。我给你拆开讲。

1. 延迟(Latency)

延迟就是响应时间。从发出请求到收到响应,花了多久。我一般关注这几个分位值:

  • P50(中位数):一半请求比这个快,一半比这个慢。日常体验的基准线。
  • P99(99分位):99% 的请求都在这个时间内完成。这是用户体验的底线。
  • P999(99.9分位):千分之一的最慢请求。排查毛刺用。

为什么看分位值而不是平均值?因为平均值太容易被「平均」了。举个例子:99 个请求 10ms,1 个请求 10s,平均值才 109ms,看着还行。但 P99 是 10s——用户早跑了。

避坑指南:我曾经压测一个支付系统,只看平均延迟 50ms,觉得稳了。上线后用户投诉卡顿,一查 P99 延迟 2.3 秒。原来有个慢 SQL 偶尔触发,平均延迟被「稀释」了。从那以后,我压测报告里必须带 P99。

2. 并发(Concurrency)

并发是系统同时处理的请求数。注意,它不是 QPS。并发和 QPS 的关系是:

并发数 = QPS × 平均响应时间(秒)

这个公式叫 Little's Law,做性能优化的人应该刻在脑子里。举个例子:QPS 是 1000,平均响应时间 200ms,那并发数就是 1000 × 0.2 = 200。也就是说,系统同时有 200 个请求在处理。

压测时,我会逐步增加并发数,观察系统的变化。一开始延迟很低,QPS 线性增长。到某个点,延迟突然飙升,QPS 不再增长甚至下降——这就是系统的拐点。

关键认知:并发不是越高越好。过高的并发会导致资源争抢、上下文切换开销暴增,反而降低吞吐量。找到那个「甜蜜点」才是本事。

3. 成功率(Success Rate)

这个最简单,也最容易被忽略。成功率 = 成功请求数 / 总请求数。一般要求 99.9% 以上。

压测时,我习惯把成功率放在监控大屏最显眼的位置。为什么?因为很多系统在压力下会悄悄失败——超时、限流、报错。如果只看 QPS 和延迟,可能觉得还行,但成功率已经掉到 95% 了。每 20 个请求就失败 1 个,这能上线吗?

我的习惯:压测脚本里必须加断言。比如 HTTP 状态码必须是 200,响应体必须包含 "success"。别只看网络层面通不通,业务层面也得对。

四、一张图看懂吞吐压测核心逻辑

下面这张 SVG 图,是我自己总结的吞吐压测知识体系。你看一遍,基本就全串起来了。

吞吐压测核心知识体系 吞吐量 (Throughput) 延迟 (Latency) 并发 (Concurrency) 成功率 (Success Rate) P50 P99 P999 Little's Law ≥ 99.9% 三者关系:吞吐量 = 并发数 / 平均响应时间 压测目标:在保证成功率的前提下,找到延迟与并发的平衡点

五、压测时我必看的几个数字

说了这么多理论,最后给点实在的。我每次压测,报告里必须包含这 5 个数字:

  1. 最大 QPS/TPS:系统能扛住的峰值
  2. P99 延迟:用户体验的底线
  3. 最佳并发数:拐点出现前的并发值
  4. 成功率:必须 ≥ 99.9%
  5. 资源利用率:CPU、内存、IO 是否打满

一句话总结:吞吐压测不是跑个数字就完事了。你得理解延迟、并发、成功率这三个指标怎么互相制约。找到那个平衡点,才是真本事。

嗯,这一章就到这里。概念打牢了,后面咱们才能聊怎么压、怎么优化。


想要更多资料,联系可可