1. 吞吐压测概述

大家好,我是你们的老朋友。今天咱们开始聊吞吐压测。

说实话,做了这么多年性能调优,我见过太多团队一上来就猛怼并发数,结果系统崩了还不知道问题出在哪。其实,压测的核心就三个字——吞吐量。你想想看,一个系统再花哨,如果每秒只能处理几个请求,那跟单机跑个脚本有啥区别?

什么是吞吐量?

吞吐量,说白了就是系统在单位时间内能处理多少活儿。我习惯把它理解成「系统的消化能力」。就像一个人吃饭,你给他端十碗面,他能不能在十分钟内吃完?能吃完几碗?这就是吞吐量。

在技术层面,吞吐量通常用两个指标来衡量:

  • TPS(Transactions Per Second):每秒完成的事务数。一个事务可能包含多个操作,比如下单、支付、扣库存。
  • QPS(Queries Per Second):每秒查询数。通常用于读多写少的场景,比如搜索引擎、商品列表页。

嗯,这里要注意:很多人把 TPS 和 QPS 混着用,其实不太严谨。我在项目中遇到过好几次,开发说 QPS 能到 5000,结果一压测,TPS 只有 800。为什么?因为一个事务里可能包含了 6 个查询。你想想看,如果只看 QPS,很容易被表象迷惑。

核心公式:

吞吐量 = 并发数 × 单请求响应时间

但注意,这个公式是理想状态。实际中,并发数一上去,响应时间就会变长,吞吐量会先升后降。

TPS 和 QPS 到底怎么选?

我个人习惯这样区分:

场景 推荐指标 原因
电商下单、支付 TPS 一个事务包含多个步骤,TPS 更能反映真实处理能力
新闻列表、搜索 QPS 主要是查询,事务边界不明显
混合场景(读写都有) 两者都看 我曾经踩过坑,只看 QPS 导致写链路被打爆

举个例子。我之前帮一家金融公司做压测,他们的核心业务是「用户开户」。这个操作涉及:身份校验、征信查询、账户创建、短信通知。如果只看 QPS,征信查询接口的 QPS 很高,但整个开户流程的 TPS 却很低。为什么?因为征信查询是异步的,真正的瓶颈在账户创建的数据库写入上。

我的建议:压测时优先关注 TPS,尤其是涉及写操作的场景。QPS 可以作为辅助指标,但别拿它当唯一标准。

压测的核心目标是什么?

很多人以为压测就是为了测出系统能扛多少并发。其实不对。压测的核心目标有三个:

  1. 找到瓶颈:系统到底卡在哪?是 CPU 满了?数据库连接池不够?还是网络带宽打满了?
  2. 验证容量:系统在目标吞吐量下,能不能稳定运行?响应时间是否在可接受范围内?
  3. 指导调优:压测结果告诉你该优化哪里。是加机器?还是改代码?还是调参数?

我记得有一次,一个团队说他们的系统能扛 10000 QPS。我一压,发现 2000 QPS 时响应时间就飙到了 5 秒。他们很惊讶,说「我们代码没问题啊」。结果一查,是数据库连接池配了 10 个。你想想看,10 个连接怎么扛 10000 QPS?这就是典型的「没压测就上线」的后果。

压测的价值到底在哪?

说白了,压测的价值就一句话:让你在线上出问题之前,先知道问题在哪。

我见过太多线上事故了:

  • 双十一零点,系统直接挂了,因为没压过峰值流量
  • 上线一个新功能,结果把老接口拖慢了,因为没做隔离压测
  • 数据库连接池爆了,因为没压过极限并发

这些事故,其实都可以通过压测提前发现。压测不是「测一下能不能跑」,而是「测一下能跑多快、能扛多狠、瓶颈在哪」。

避坑指南:我曾经犯过一个错误——压测时只测了正常场景,没测异常场景。结果线上一个慢查询把整个数据库拖死了。从那以后,我压测一定会加「异常注入」,比如模拟网络延迟、数据库超时、第三方服务挂掉。你想想看,如果压测时没测过这些,线上出了事你连锅都甩不出去。

本章知识体系

下面这张图,是我自己总结的吞吐压测知识框架。你可以把它当成一张地图,后面每章都会围绕这些点展开。

吞吐压测 核心概念 吞吐量 / TPS / QPS 核心目标 找瓶颈 / 验容量 / 指导调优 核心价值 提前发现 / 避免事故 TPS(写场景) QPS(读场景) 混合场景 CPU/内存/IO 连接池/线程池 网络/带宽 容量规划 性能基线 异常场景 一句话总结:吞吐压测 = 用数据说话,让系统更稳 别靠感觉,别靠猜,压一压就知道

这张图把吞吐压测拆成了三个维度:概念、目标、价值。后面每一章,我都会围绕这些点深入展开。比如下一章咱们会聊「压测工具怎么选」,再后面会讲「参数怎么调」。但不管讲什么,核心都是这张图里的东西。

好了,第一章就到这里。记住一句话:吞吐量是系统的命,压测是保命的工具。后面咱们慢慢聊。