压测入口先分级

一次压测把网关打报警了,但业务服务还没真正进入目标压力。原因很尴尬:压测脚本把登录、查询、下单、导出混在同一个入口里,一起拉升并发。登录接口先把验证码和 token 服务打满,后面的业务接口还没测出容量,平台已经开始限流。报告里写着“系统承载 3000 并发”,其实测到的是网关和认证链路的混合瓶颈。
性能测试最怕把不同入口揉成一团。用户真实路径当然是混合的,但压测设计不能一上来就混。你要先知道每个入口自己的边界,再看组合流量下的相互影响。入口先分级,就是把压测从“用力打”变成“有顺序地验证”。
入口分级不是接口分类表
入口分级要看业务风险和资源消耗。登录、读列表、查详情、提交订单、批量导出、文件上传,它们背后的依赖完全不同。读接口可能主要消耗缓存和数据库读;写接口涉及事务、消息、锁;导出可能占用 CPU、临时文件和对象存储。把它们放在同一条并发曲线上,结果很难解释。
更好的方式是先做单入口阶梯压测。每个入口从低流量开始,逐步上升,观察响应时间、错误率、资源和下游依赖。找到单入口的拐点后,再做组合模型。这样当组合压测出现问题时,能判断是某个入口本身不行,还是入口之间抢资源。
入口还要按用户路径分层。核心链路入口优先验证,比如登录、浏览、下单、支付;低频但重资源入口单独验证,比如导出、批量操作、报表生成。不要让低频重操作在压测里掩盖核心链路。
流量模型要来自真实证据
压测脚本里的比例不能拍脑袋。真实用户可能 80% 在查询,10% 在提交,1% 在导出。活动高峰时比例又会变。流量模型最好来自线上日志、埋点、网关统计和业务预估。没有真实证据,至少要把假设写清楚。
压测还要考虑节奏。真实流量不是所有用户同时点同一个按钮。登录有峰值,查询有持续压力,支付有短时尖峰,导出有长尾任务。不同节奏对应不同脚本。如果只用固定并发数,很容易漏掉队列堆积和突刺问题。
依赖隔离决定压测能不能继续
压测常常卡在依赖上:短信、支付、第三方风控、对象存储、搜索服务。它们有些不能被压,有些有费用,有些会影响真实用户。压测前要决定哪些依赖用真实环境,哪些用 mock,哪些限流,哪些只验证少量真实链路。
这里没有唯一正确答案。真实依赖能测出真实瓶颈,但风险高;mock 安全,但容易掩盖问题。我的经验是核心内部依赖尽量真实,外部收费或不可控依赖做隔离;同时保留少量真实探针,验证协议和异常处理没有问题。
缓存也要特别处理。冷缓存压测和热缓存压测不是同一个问题。冷缓存看回源能力,热缓存看服务处理能力,大量 key 同时过期看雪崩保护。报告里如果不说明缓存状态,压测结果就很难复用。
停止条件比目标并发更重要
很多压测只写目标:压到 5000 QPS。更成熟的压测会写停止条件:错误率超过多少停,P95 超过多少停,数据库 CPU 超过多少停,消息堆积超过多少停,下游告警出现停。停止条件不是保守,而是保护环境和结论。
压测不是为了把系统压崩,而是找到边界。如果已经出现明显不可恢复迹象,还继续加压,得到的只是事故现场。停止后要保留数据,分析瓶颈,再决定是否继续下一轮。
报告要能解释“为什么到这里”
性能报告不要只写最大 QPS。要写流量模型、入口比例、缓存状态、依赖策略、机器配置、限流策略、错误类型和瓶颈证据。否则别人看到一个数字,无法判断能不能用于上线决策。
还要区分容量和体验。系统能扛住 5000 QPS,不代表用户体验好。如果 P95 已经很高,错误率虽低但等待长,业务可能仍然不能接受。压测结论要回到业务目标,而不是只追求更大的数字。
最后的判断标准:如果一次压测无法说明每个入口的边界、组合流量的假设、依赖如何处理、何时停止和瓶颈证据在哪里,它就还只是一次流量冲击,不是一次可靠验证。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。
容量结论还要写清环境差异。测试环境机器规格、数据库数据量、缓存命中率、网络链路如果和生产不同,报告必须说明折算假设。否则压测数字很容易被拿去做错误承诺。