第一章:压力测试基础

各位同学好,我是老张。在交易系统这个行当摸爬滚打了十几年,今天咱们来聊聊压力测试。

说实话,我刚入行那会儿,对压力测试的理解特别肤浅。觉得不就是多开几个线程发请求嘛,能有多难?直到有一次线上事故,让我彻底改变了看法。嗯,那件事我后面会讲到。

什么是压力测试

压力测试,说白了就是模拟真实用户场景,给系统施加超出预期的负载,看看它到底能扛多久、什么时候会崩。

我个人的理解是:压力测试不是要证明系统有多强,而是要找到它的极限在哪里

举个例子。你开发了一个交易网关,平时每秒处理1000笔订单。压力测试就是要看看:

  • 当流量涨到2000 TPS时,系统还稳不稳?
  • 涨到5000 TPS时,会不会开始丢单?
  • 涨到10000 TPS时,是不是直接挂了?

你想想看,如果这些问题的答案你都不知道,你敢把这个系统上线吗?反正我是不敢。

为什么需要压力测试

这个问题我问过很多刚入行的同事。最常见的回答是:「为了通过验收」或者「领导要求的」。其实远不止这些。

核心原因有三个:

  1. 发现性能瓶颈 —— 我在项目中遇到过,一个看起来很简单的数据库查询,在低并发下毫秒级返回,到了高并发场景直接变成秒级。压力测试能帮你把这些隐藏的坑挖出来。
  2. 验证系统稳定性 —— 系统能跑起来和能稳定跑,完全是两码事。我记得有一次压测,系统前10分钟表现完美,第11分钟突然内存溢出。这种问题,不上压力测试根本发现不了。
  3. 评估容量规划 —— 你的系统到底需要多少台机器?每台机器能扛多少流量?这些数据不是拍脑袋拍出来的,是压出来的。
⚠️ 避坑指南: 我曾经见过一个团队,上线前只做了功能测试,没做压力测试。结果上线当天遇到促销活动,系统直接崩溃了3个小时。那天的损失,够买好几台服务器了。所以,压力测试不是可选项,是必选项。

压力测试的核心指标

聊完了概念,咱们来看看具体怎么衡量。压力测试有四个核心指标,我习惯叫它们「四大金刚」。

1. TPS(每秒事务数)

TPS 全称是 Transactions Per Second。在交易系统里,一个事务通常包含:接收请求、业务处理、返回结果这三个步骤。

举个例子:

用户下单 -> 系统扣库存 -> 生成订单 -> 返回成功
         ↑ 这就是一个完整的事务 ↓

TPS 衡量的是系统处理完整业务的能力。我个人习惯用 TPS 作为交易系统的核心指标,因为它最能反映真实业务场景。

2. QPS(每秒查询数)

QPS 是 Queries Per Second。它和 TPS 的区别在于:QPS 只关注查询操作,不关注事务完整性。

比如:

  • 查询行情数据 -> 这是 QPS
  • 提交一笔订单 -> 这是 TPS

在实际项目中,我一般这样区分:如果系统主要是读操作,看 QPS;如果主要是写操作,看 TPS

3. 响应时间

响应时间就是用户发出请求到收到响应的时间差。这个指标特别有意思,因为它不是单一数值,而是一个分布。

我常用的几个分位值:

指标 含义 交易系统建议值
平均响应时间 所有请求的平均耗时 < 100ms
P99 响应时间 99%的请求都在这个时间内完成 < 500ms
P999 响应时间 99.9%的请求都在这个时间内完成 < 1000ms

为什么要关注 P99 而不是平均值?我举个例子你就明白了。假设有100个请求,99个都是1ms,但有1个是1000ms。平均值是10.99ms,看起来还不错。但那个等了1秒的用户,可能已经骂娘了。

💡 我的经验: 在交易系统中,我通常同时关注 P99 和 P999。P99 代表用户体验,P999 代表系统稳定性。如果 P999 突然飙升,说明系统可能出现了异常。

4. 错误率

错误率就是失败请求占总请求的比例。这个指标看似简单,但坑特别多。

常见的错误类型:

  • 超时错误 —— 请求发出去,但没在规定时间内收到响应
  • 业务错误 —— 比如订单重复、库存不足
  • 系统错误 —— 比如 500、503 等 HTTP 错误码

我个人的标准是:交易系统的错误率必须为 0%。为什么这么严格?因为交易系统涉及真金白银,一个错误可能就意味着一次交易失败,用户可能因此损失几万甚至几十万。

📌 小技巧: 压测时不要只看总错误率。我习惯按错误类型分开统计,这样能快速定位问题。比如超时错误多了,可能是网络问题;业务错误多了,可能是逻辑问题。

知识体系总览

说了这么多,咱们用一张图来总结一下压力测试的核心知识体系:

压力测试基础 什么是压力测试 为什么需要压力测试 核心指标 模拟真实用户场景 施加超出预期的负载 找到系统极限 发现性能瓶颈 验证系统稳定性 评估容量规划 TPS - 每秒事务数 QPS - 每秒查询数 响应时间(P99/P999) 错误率(必须为0%) 核心目标:找到极限,保障稳定

这张图把压力测试的核心知识串起来了。从定义到原因,再到具体指标,每一步都环环相扣。你想想看,如果这四个指标你都能掌控好,系统的稳定性基本就有保障了。

好了,第一章的内容就到这里。压力测试的基础概念咱们聊完了,后面几章会深入讲解具体的压测工具、场景设计、结果分析等内容。记住我今天说的:压力测试不是走过场,是真刀真枪的实战


专注资料整理