性能指标:QPS、TPS、响应时间、吞吐量

聊到高并发,大家第一反应就是「扛得住」。但怎么量化?

很多人喜欢说「我接口单机扛了 5 万」,结果一细问,响应时间 3 秒,这 5 万有什么意义?

所以我习惯先统一度量衡。下面这四个指标,基本覆盖了所有性能场景。

QPS 与 TPS:一个容易混淆,一个经常被误解

QPS (Queries Per Second),每秒查询数。
TPS (Transactions Per Second),每秒事务数。

区别在哪?

说白了——QPS 只管一次请求,TPS 管一次完整的业务操作。比如支付,用户点支付按钮,前端调一次下单接口,后台可能要查余额、写订单、扣库存、记流水。这一趟完整操作,就是 1 个 TPS,内部可能包含 4-5 次 QPS。

我的一点经验

我个人习惯,谈缓存、CDN 这类查询场景时用 QPS;谈交易、下单、转账这种有状态变更的场景时,一定要盯着 TPS。

指标定义典型场景优化目标
QPS每秒查询次数商品列表、用户信息提升缓存命中、减少 DB 查询
TPS每秒事务数下单、支付、转账缩短事务耗时、降低锁冲突

踩过的坑

我曾经以为 TPS 和 QPS 拉平就行。结果线上支付接口 QPS 到了 8000,TPS 才 1500 —— 因为每个下单事务要查询 5-6 次。压测只看 QPS 的优化,用户端反而更慢了。

响应时间:不只是平均数

响应时间 RT(Response Time),从发出请求到完整收到响应的时间。

很多同学喜欢报平均 RT。但你想想看,1000 个请求,999 个 10ms 搞定,1 个卡了 9 秒,平均 RT 也才 19ms,看着还不错吧?

实际上,那 1 个用户已经炸了。

所以我更关注下面这两个值:

  • TP99:99% 的请求都在这个时间以内完成。代表绝大部分用户的体验。
  • TP999:99.9% 的请求时间。高并发下,千分之一的慢请求也可能拖垮连接池。

实战经验

我在一次活动大促中遇到过,某个核心接口的平均 RT 只有 30ms,但 TP99 居然到了 1.2 秒。查下去才发现,是某个数据库连接池偶发性的 full GC 导致的。平均 RT 完全看不出来。

响应时间和 QPS 有什么关系?

一个简单的公式:单线程 QPS ≈ 1000 / RT (ms)。RT 每增加 10ms,单机瓶颈就下降一截。所以优化 RT,就是直接提升 QPS 天花板。

吞吐量:真实能处理的量

吞吐量也叫 Throughput,单位时间内系统能处理的总请求量。

很多人把 QPS 和吞吐量混淆。其实吞吐量更像是一个系统的总产出能力,它 = 并发数 × 单请求处理能力。

我举个例子:

  • 系统 A:并发 100,QPS 500
  • 系统 B:并发 20,QPS 500

两者 QPS 一样,但系统 B 的吞吐量上限不高——一旦并发超过 20,QPS 就开始掉。系统 A 还能扛一扛。

优化思路

提升吞吐量,不只是堆机器。要优化线程模型、减少锁竞争、合理设置 IO 超时。我曾经接手过一个接口,RT 一直在 800ms 左右飘忽,吞吐量上不去。查了半天,是 HTTP 客户端连接超时设置得太长,导致线程池被慢请求占满了。

四者关系图解

这四个指标其实互为约束。我画了一张关系图,方便大家理解:

性能指标关系图 性能指标体系 QPS 峰值 QPS 平均 QPS 99线 QPS TPS DB TPS RPC TPS MQ TPS 响应时间 RT 平均 RT TP99 TP999 吞吐量 Throughput 系统总产出

你看,QPS 和 TPS 是「瞬时速率」,响应时间是「单个请求体验」,吞吐量是「整体能力」。优化的时候,不要只看一个值。

一个避坑清单

  • 不要只看平均值。 平均 RT 漂亮不顶用,TP99 才是真实用户体验。
  • 不要只看 QPS。 当 TPS 和 QPS 差距太大时,说明每次请求背后逻辑太重,该考虑异步或拆分。
  • 不要忽略吞吐量上限。 有时候 QPS 很高,但一加压力就崩,就是因为吞吐量天花板太低。

记住一句话

一个接口的高并发能力 = QPS × 稳定性(低 TP999) × 资源利用率。

这三个缺一不可。拿不到这三项指标的压测,只能叫「跑分」,不能叫「上线保障」。

这四个指标,说得直白点,就是你系统性能的「体检报告」。每次压测,先让人把 QPS、TPS、平均 RT、TP99、吞吐量打出来。数据不对,后面所有优化都是盲人摸象。