一、压测基础:系统稳定性概念、压测目标与原则、压测在研发流程中的位置

1.1 系统稳定性,到底是个啥?

先问大家一个问题:什么样的系统算「稳定」?

很多人第一反应是「不出错」。嗯,这话没错,但太笼统了。我个人的理解是——系统稳定性,是系统在持续运行中,面对各种突发流量、硬件抖动、网络波动时,依然能提供正确服务的能力。

说白了,就是「扛得住、不崩盘、恢复快」。

我在项目中遇到过这么一件事:一个电商平台,平时跑得稳稳当当,双十一零点一到,流量瞬间暴涨 10 倍。结果呢?数据库连接池被打满,接口响应从 20ms 飙升到 5s,最后整个系统雪崩。你说它平时稳定吗?稳定。但面对高并发,它就不稳定了。

所以,稳定性不是「现在没问题」,而是「极端情况下也没问题」。

核心三要素:

  • 可用性:服务能正常访问,不宕机
  • 可靠性:数据不丢、逻辑不错、结果正确
  • 弹性:遇到压力能自动伸缩,扛得住波动

1.2 压测的目标:你到底想测什么?

很多团队做压测,上来就怼 QPS(每秒查询数)。测出来 5000,就觉得自己很牛。但我想说——压测不是刷分,是找短板。

我习惯把压测目标分成三层:

层次 目标 典型问题
第一层 摸清系统容量上限 最大 QPS 是多少?并发用户数上限?
第二层 发现性能瓶颈 CPU 打满?数据库慢查询?内存泄漏?
第三层 验证稳定性与容错 长时间运行会不会 OOM?节点挂了能恢复吗?

你想想看,如果只测第一层,你只知道「能扛多少」,但不知道「哪里会先扛不住」。我曾经帮一个团队做压测,他们 QPS 能到 8000,但一跑 30 分钟,内存就涨到 90%。这就是典型的「容量够,稳定性差」。

我的建议:每次压测前,先问自己三个问题——

  • 这次压测要验证什么假设?
  • 预期结果是什么?
  • 如果结果不符合预期,下一步怎么排查?

想清楚再动手,别上来就开压。

1.3 压测原则:别踩这些坑

做压测这么多年,我总结了几条铁律。嗯,都是血泪换来的。

原则一:压测环境要「像」生产

很多人图省事,在开发环境压。结果呢?开发库数据量只有 100 条,生产库 1 亿条。压出来的结果,完全没参考价值。

我建议:数据量、硬件配置、网络拓扑,尽量和生产保持一致。实在不行,至少数据量要按比例缩放。

原则二:压测要「有节奏」

别一上来就 1000 并发。我习惯的做法是:先 10 并发跑一轮,看看基线;然后 50、100、200 逐步加压。每轮跑 5-10 分钟,观察各项指标。

为什么会这样?因为系统崩溃往往不是瞬间的,而是渐进式的。你慢慢加压,才能看到「拐点」在哪。

原则三:压测不是「一次性」的事

有些团队,上线前压一次,然后就再也不管了。这不对。系统在变,流量在变,代码在变。我建议:每次大版本发布前,至少做一次回归压测。

避坑指南:我曾经见过一个团队,压测时发现接口没问题,但上线后还是崩了。为什么?因为他们压测时只测了单个接口,没测混合场景。真实用户是「又下单、又搜索、又登录」的。所以,压测场景要尽量模拟真实用户行为。

1.4 压测在研发流程中的位置

这个问题,很多公司都没想清楚。压测到底该放在哪个阶段?

我个人的经验是:压测应该贯穿整个研发流程,而不是只在最后「验收」一下。

来看一个典型的流程:

阶段 压测做什么 谁负责
需求评审 评估新功能对系统性能的影响 架构师 + 测试
开发阶段 单接口压测,验证代码性能 开发自测
集成测试 混合场景压测,找瓶颈 测试工程师
预发环境 全链路压测,模拟真实流量 测试 + 运维
上线后 灰度压测,验证线上稳定性 运维 + SRE

你看,压测不是「最后一关」,而是「每一关」。

我记得有一次,一个团队在开发阶段就做了单接口压测,发现一个查询接口响应时间超过 2 秒。开发一查,原来是 SQL 没加索引。如果等到集成测试才发现,改起来就麻烦了。这就是「左移」的价值——越早发现问题,修复成本越低。

总结一句话:

压测不是「上线前的仪式」,而是「研发流程中的体检」。每次迭代都做一次体检,系统才能一直健康。

1.5 本章小结

好,这一章我们聊了三个核心问题:

  • 系统稳定性:可用性 + 可靠性 + 弹性,缺一不可
  • 压测目标:摸清容量、发现瓶颈、验证稳定性
  • 压测原则:环境像生产、节奏要渐进、持续做回归
  • 流程位置:从需求到上线,压测贯穿始终

下一章,我会带大家搭建第一个压测环境,手把手写一个压测脚本。到时候咱们直接上手干,别光看不练。

嗯,今天就到这儿。有问题欢迎交流。