做性能评估这些年,我最大的体会是:很多人把压测当成了“跑个脚本,看个数字”的活。拿JMeter压一下接口,看一眼QPS,然后写进PPT就算完事。可真正上线后,系统该挂还是挂。问题出在哪?出在我们对“评估”两个字理解得太浅了。评估不是测出极限值,而是搞清楚系统在什么条件下能以什么质量处理多少请求,以及在它撑不住的时候,瓶颈到底在哪。今天这篇,我想把高并发系统性能评估的完整思路、核心指标、实操流程和踩坑经验一次性讲透,希望能帮那些正在做性能评估、或者准备给系统做压测的朋友少走弯路。
这篇文章适合后端开发、测试工程师、运维和架构师阅读。无论你是刚接触高并发的新手,还是已经被线上事故折腾过几轮的老兵,里面关于指标选择、压测场景设计、瓶颈定位和流量治理的细节,都会对你有实际帮助。
1. 高并发性能评估的整体思路与设计
1.1 先定位评估目标:你的系统到底为什么要做压测
做性能评估之前,必须先回答一个问题:你评估的目标是什么?目标不同,评估的方案、指标和结论完全不同。
我通常把评估目标分成三类。第一类是容量规划,典型场景是“我们系统马上要搞大促,预估峰值流量会翻三倍,需要评估现有集群能不能扛住,扛不住需要加几台机器”。这类评估要求我们找到系统的容量天花板,同时搞清楚资源消耗和流量之间的关系。第二类是稳定性验证,典型场景是“新系统上线前,需要证明它在持续负载下不会崩,不会出现内存泄漏,不会越跑越慢”。这类评估关注的是长时间运行的可靠性,而不是极限值。第三类是优化基线,典型场景是“最近接口变慢了,老大让我优化,但我需要先拿到一个基准数据,验证优化前后到底提升了多少”。这类评估追求的是可重复、可对比。
目标不清晰,后面全白搭。最典型的反面例子是:一个团队想验证系统稳定性,结果拿一个限定了超短超时时间的压测脚本跑了两分钟,得出“系统很稳定”的结论。这根本说明不了问题。
1.2 理解高并发:并发数、响应时间、吞吐量三者的关系
高并发这个词被用滥了,但很多人其实没想清楚它到底指什么。高并发不是指“10000个用户同时在线”,而是指系统在同一时刻需要处理的大量请求压力。真正的核心关系可以用一个公式概括:
QPS = 并发线程数 / 平均响应时间
这个公式是Little定律的简化版,它的意思是:系统的吞吐量(QPS)由两个因素决定,一个是系统同时能处理多少个请求(并发数),另一个是每个请求平均花多长时间处理完(响应时间)。
举个例子。假设你的系统平均响应时间是100ms,同一时刻只有50个请求在服务端处理,那QPS就是 50 / 0.1 = 500。如果你把响应时间优化到50ms,同样的并发数,QPS能翻倍到1000。反过来,如果响应时间不变,你希望QPS从500提到1000,那就必须把并发处理能力从50提升到100。
这个公式看上去简单,但它在性能评估中的价值极大。很多人在压测时只盯着QPS数值,却忽略了背后的两个变量。排查问题时,如果发现QPS上不去,要么是并发能力不够(线程池满了、数据库连接池被占满),要么是响应时间太长(慢SQL、网络延迟、锁竞争),方向一下子就清晰了。
1.3 评估流程总览:从目标到报告的一整条链路
一个完整的性能评估流程,我一般拆成七个阶段:需求分析、指标定义、环境准备、场景设计、压测执行、监控采集、报告输出。
需求分析阶段,和业务方确认评估目标和范围,比如评估哪些接口、哪些链路、什么量级。指标定义阶段,把业务诉求翻译成技术指标,比如“支持3000 QPS”还是“P99延迟小于200ms”。环境准备阶段,搭建与被评估系统配置一致的压测环境,这里最关键的一点是:压测环境必须尽量接近生产,否则结论没有参考价值。场景设计阶段,根据业务流量模型设计压测脚本和数据,后面我会重点展开。压测执行阶段,不是无脑跑脚本,而是分组、分级、逐步加压,一边跑一边记录数据。监控采集阶段,同时盯着系统资源、应用指标、中间件状态三个层面的数据。报告输出阶段,把所有数据整理成结论,而且必须包含瓶颈分析和改进建议。
如果你之前只是拉个脚本直接压,建议从流程上先补齐这些环节。缺了哪一环,评估报告都会有偏差。
2. 核心性能指标与评估模型
2.1 指标怎么选:QPS、TPS、RT、错误率、资源利用率
性能评估最怕“指标单一病”。只报一个QPS,就像只给病人量体温就说身体好一样,极不靠谱。一套完整的指标至少要覆盖五个维度。
QPS和TPS是第一维度。QPS指每秒查询数,TPS指每秒事务数。两者最直观的区别是:一次事务往往包含多个请求,比如下单这个事务,可能包含创建订单、扣库存、生成支付单三个请求,TPS算的是一次完整事务的完成量,QPS算的是单个请求的完成量。选哪个取决于业务语义,如果是评估接口,用QPS;如果是评估业务流程,用TPS。
响应时间RT是第二维度,通常看平均值、最大值和百分位值。这里特别提醒:平均值在性能评估里参考价值有限。一个接口平均响应时间100ms,可能是99%的请求都是50ms,只有1%的请求是5秒。用户体验被那1%拖垮了,但平均值看上去还行。所以必须看百分位值。
错误率是第三维度,指压测期间失败请求占总请求数的比例。一般建议低于万分之五,核心链路必须零错误。资源利用率是第四维度,包括CPU使用率、内存使用率、磁盘IO、网络带宽。最后一个是饱和度指标,比如线程池活跃度、连接池使用率、队列积压量。
这五个维度的数据组合在一起,才能回答“系统到底能不能行”这个核心问题。
2.2 长尾延迟:为什么P99比平均值更重要
百分位延迟是性能评估中必须引入的概念。P50表示有50%的请求响应时间在这个值以内,P95表示有95%的请求响应时间在这个值以内,P99类似。在高并发场景下,P99几乎成了核心链路延迟的默认标准。
为什么要死磕P99?因为高并发系统的用户感受,是由最慢的那批请求决定的。你见过一个页面,绝大多数请求都是100ms,但每100个请求里有1个要花2秒,用户就会觉得这个系统“卡”。P99的意义在于,它把那个影响体验的长尾尾巴露出来了。
我在评估一个支付系统时发现,接口P50只有80ms,但P99超过1秒。排查之后发现,某些商家的订单数据量特别大,查询走了全表扫描,数据量小的商家根本感受不到。如果只看平均值,这个性能问题会被完全掩盖。
另外,压测分析时还要对比P50和P99之间的差距。正常情况下P99一般是P50的2到4倍,如果P99超过P50的10倍,往往意味着系统里存在严重的抖动源,比如GC停顿、锁竞争、慢查询。
2.3 性能模型与容量估算:用数据说话
做容量规划时,性能模型比拍脑袋管用得多。核心还是基于Little定律。
假设你的系统目前单机可以支撑100并发,平均响应时间200ms,那单机QPS就是 100 / 0.2 = 500。现在业务预期峰值流量是5000 QPS,预留30%的冗余(避免超过系统真实能力的70%触发恶性循环),那实际需要的总QPS是 5000 / 0.7,约7143 QPS。用7143除以单机能力500,得到约15台机器。
要注意的是,这个估算基于一个关键假设:系统可以线性扩展。现实中,加机器带来的性能提升通常不是线性的,因为会引入分布式锁、数据一致性、网络开销等额外成本。所以估算结果只能作为起步参考,最终还是要通过集群压测验证。我建议在实际容量评估时,先小规模(比如3台)测出单机能力,再扩展到5台、10台,画出扩展曲线,用曲线来预测更大规模的容量,比直接除准确得多。
3. 压测工具选型与压测方案设计
3.1 工具横向对比:JMeter、wrk、Locust、GoReplay
工欲善其事,必先利其器。压测工具的选择直接影响评估效率和结论可信度。我把常用的四类工具做一个横向对比。
| 工具 | 原理 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|---|
| JMeter | 基于Java线程模型,可分布式 | 功能全面,支持复杂场景和断言,界面GUI和脚本都可用 | 单机线程成本高,极限压测时压力机容易先扛不住 | 业务场景复杂、需要多协议、需要参数关联的压测 |
| wrk | 基于C和多线程事件驱动模型 | 单机就能压出很大流量,工具本身开销低 | 只能压HTTP,场景编写能力弱 | 单接口高吞吐快速评估 |
| Locust | 基于Python协程 | 场景编写灵活,代码可控性强 | 单机性能不如wrk,结果展示依赖第三方 | 需要复杂业务编排的压测 |
| GoReplay | 流量录制与回放 | 可以录制真实生产流量并回放,最大程度还原真实场景 | 配置复杂,回放流量有放大风险,需要谨慎 | 全链路容量评估、真实流量模拟 |
不建议“一招吃遍天”。我的习惯是:接口快速摸底用wrk,复杂业务链路用JMeter或Locust,全链路容量评估有条件就上GoReplay配合生产流量灰度回放。核心原则是让压测场景尽量逼近真实流量形态,而不是图方便。前几年有个项目,团队图省事拿wrk只压一个最耗时的查询接口,得出结论系统能抗8000 QPS,结果上线被优惠券活动流量直接打爆。因为真实流量里还有大量写操作和缓存更新操作,场景根本不对。
3.2 压测场景脚本设计:别让压测变成“测了个寂寞”
场景设计是决定压测价值的关键环节,也是问题的高发区。最常见的坑有三个。
第一是参数写死。压测时所有请求都带同一个用户ID、同一个商品ID,缓存命中率近乎100%,数据库查询也只有那几行。这样的结果只能说明“热数据缓存”的性能,不能反映系统的真实水平。正确做法是对压测参数做随机化或从数据集采样,尽量模拟真实流量分布。第二是不做数据铺垫。系统刚启动,缓存是空的,直接压测数据都在数据库里,性能自然极差;反之,预热之后再压效果又会好很多。所以压测前必须明确当前的缓存状态,并且设计好是否预热、预热到什么程度。第三是只压一个接口。现在微服务架构里,一次用户操作会经过网关、多个微服务、缓存、MQ、数据库。只压单个接口,掩盖了依赖服务的能力瓶颈。
压力策略方面,我建议采用“阶梯加压法”。不要一上来就全部并发直接打满,而要从低并发开始,比如20并发跑2分钟,然后每2分钟增加20,观察系统在哪个并发点进入拐点。这个拐点就是系统开始“吃紧”的信号,记录下来非常有用。
3.3 监控体系:压测期间的“仪表盘”
压测执行时,如果只盯着压测工具界面上的数字,等于蒙着眼开车。必须建立三层监控。
系统层监控看资源:CPU、内存、磁盘IO、网络带宽,用top、vmstat、iostat、sar这些命令就能看到基础数据。应用层监控看业务:响应时间、QPS、错误率、线程池状态、连接池状态,推荐接入APM工具(比如SkyWalking、Pinpoint或商业APM)做链路追踪,能直观看到每个请求在链路中的耗时分布。中间件监控看依赖:数据库慢查询、缓存命中率、MQ积压量,这些都是高并发场景下最容易出问题的地方。
监控数据的价值在于关联分析。我一般会以时间线为轴,把压测的并发数、QPS、响应时间、CPU使用率放到同一张图上。什么时候CPU先到瓶颈、什么时候连接池开始排队、什么时候响应时间开始飙升,时间点一对照,瓶颈环节立刻浮现。单独看任何一项指标都很难定位问题。
4. 实操全流程:一次完整的性能评估
4.1 环境准备与基线采集
环境准备环节我强调一句话:压测环境不接近生产,压测报告就是废纸。不过现实中测试环境资源往往比生产差一截,这种情况下应该怎么做?我的做法是,先量出测试环境和生产环境的典型配置差异(比如CPU核数、内存大小、连接池配置),压测结果出来后按资源比例做一个理论折算,同时标注清楚环境差异,让结论可追溯。
另外,压测前必须先做一次小流量探活,确认接口通、数据正确、监控链路都已经打通。这一步很多新手会跳过,真到压测时才发现监控数据根本没采集上,那就白跑一趟了。基线采集的意思是:在没有任何压力的状态下,记录系统的基础资源占用和响应时间。比如一个接口,空闲时CPU使用率5%,响应时间30ms,那么压测时如果CPU到了90%,至少知道其中几十个百分点是压测流量带来的。
4.2 单接口基准压测:一个订单查询接口的压测实录
拿一个电商后台的订单查询接口为例,走一遍单接口基准压测的完整过程。这个接口的能力模型代表了很多业务系统的典型场景:读缓存,缓存不命中时查数据库。
压测前先做好参数化:准备一批存在的订单ID,同时混入少量不存在的订单ID,模拟真实用户行为。使用wrk发起请求,压测命令大概是wrk -t8 -c100 -d120s --latency http://xxx/api/order/query?id=xxx,这里的-t是线程数,-c是连接数。我习惯从并发100开始,跑2分钟后观察数据,然后依次加到大200、400、800。
第一次跑到并发400时,响应时间的P99突然从120ms跳到800ms,同时数据库监控显示CPU使用率到了85%。再细看,慢SQL日志里出现了一条订单表的全表扫描,执行时间超过500ms。翻看代码发现,订单查询接口的where条件里有一个字段没有走索引。加入联合索引后,重新压测,并发400下P99降到150ms,整个压测数据发生了质的变化。
这个案例想说明的是:基准压测的目的不是测出一个QPS数字,而是通过压测发现常规测试根本发现不了的性能隐患。原地复测优化前后的数据,就是你评估报告里最有说服力的内容。
4.3 全链路容量压测:模拟峰值场景
单接口压测通过后,还需要做全链路容量压测。一次完整的用户下单操作,可能涉及用户服务、订单服务、库存服务、优惠券服务、支付服务,中间还夹着MQ削峰和分布式事务。全链路压测的核心价值是找到链路中那个最弱的环节,因为它决定整条链路的实际容量。
全链路压测的数据准备很讲究。我的习惯是,基于生产脱敏数据构造一个与真实用户分布接近的数据集,在压测环境里灌入。数据量不够会导致所有请求都命中缓存或都落在热数据上,失真;数据量过大会导致压测结果偏低。同时,不要在公共测试环境跑全链路压测,因为其他团队的压力会污染你的数据。有条件的话,在独立压测环境或通过流量染色隔离的方式来做。
执行时,我习惯从单接口基准测试得出的系统能力的50%开始加压,观察全链路各环节的耗时和队列情况。我记得有一次全链路压测,下单接口自身性能很好,但压到一定量级时,库存服务的数据库连接池被打满,导致MQ消费变慢,最终订单服务超时率飙升。单接口压测完全暴露不了这种问题,只有全链路才能还原真实调用关系。
4.4 瓶颈定位与优化复测
压测过程中发现瓶颈后,优化的路线通常是按性价比排序:缓存优化(增加缓存、提高命中率)、数据库优化(慢SQL、索引、读写分离)、代码级优化(减少锁、批处理、异步化)、资源扩容。
瓶颈定位最忌讳“上来就改代码”。必须先用监控数据锁定瓶颈层,再深入定位具体原因。比如CPU飙高,需要进一步看是用户态高还是内核态高。用户态高,需要再用jstack取线程栈,看到底是哪个业务线程在消耗CPU;内核态高,要考虑系统调用、网络包处理或文件IO相关的问题。优化之后,用完全相同的压测脚本重新跑一遍,和基线数据对比。只要压测脚本不一致,对比就毫无意义。
5. 常见性能问题排查与避坑实录
5.1 高频问题速查表
为了便于排查,我把高并发压测中最高频的问题整理成一张速查表:
| 现象 | 可能原因 | 排查手段 |
|---|---|---|
| CPU使用率高,QPS上不去 | 代码死循环、频繁GC、序列化开销大 | top看进程,jstack看线程栈,jstat看GC |
| 响应时间突然尖刺,P99飙升 | 慢SQL、GC停顿、锁竞争 | 慢日志、GC日志、线程dump |
| 错误率上升 | 连接池耗尽、线程池拒绝、超时时间过短 | 查看线程池活跃度、被拒绝的请求日志 |
| 数据库CPU高,接口变慢 | 缺少索引、SQL扫描行数过大、锁等待 | 慢SQL日志、explain执行计划 |
| 压测单机正常,集群性能骤降 | 流量分配不均、分布式缓存热点、注册中心压力 | 各节点指标对比、缓存命中率、流量路由分析 |
| 长时间压测后性能逐渐下降 | 内存泄漏、连接池泄漏、临时文件堆积 | 监控内存曲线、连接数变化,压测结束查看dump |
这张表可以作为你压测时的“小抄”,遇到现象先去对号入座,再找对应工具深挖。
5.2 三个典型问题排查案例
案例一:RT正常但QPS上不去。我遇到过某个系统,接口平均响应时间30ms,看着非常优秀,但QPS压死也就2000,很难再往上走。最后发现是压测时请求被限制在了Tomcat的默认线程池大小(200线程)内,线程用尽后新请求排队。算一下:200线程 / 30ms = 约6666 QPS上限,但实际2000就上不去了,因为还有业务逻辑和网络损耗。增大线程池后QPS确实提升,但很快又发现CPU成为新的瓶颈。这个案例说明:QPS上不去时,要顺着“并发能力和响应时间”两个变量逐个排查。
案例二:压测开始后错误率突然飙升。压测执行到第10分钟,错误率从0直接跳到5%。看报错日志,大量“Connection pool exhausted”异常。查数据库连接池配置,mysql连接池上限是50。压测并发数一涨,连接池被打满,请求排队等连接,等不到就抛出异常。把连接池调大到200,同时检查数据库侧的最大连接数配置,问题解决。
案例三:集群压测性能还不如单机。系统三台机器,单机压测QPS能达到600,三台加起来反而不到1200,离1800差了很远。排查发现网关把流量按用户ID哈希分发,但测试数据集中在少数几个用户上,导致流量偏斜到一台节点,其他节点闲着。调整压测数据,让用户ID分布更均匀,集群总QPS立刻回到预期水平。这个案例特别能说明:压测数据分布和真实流量的拟合程度,直接影响压测结论。
5.3 避坑指南:那些压测报告“不会告诉你”的坑
很多坑不在系统本身,而在于压测本身的副作用和执行细节。
压力机瓶颈是第一个坑。wrk和JMeter虽然轻量,但跑到高并发时,压力机自身的内核参数(比如最大文件句柄数)可能成为瓶颈。你以为是系统扛不住了,其实是压力机拉不起足够的连接了。排查方法很简单:压测的同时监控压力机的CPU和连接数。我对压力机有个习惯,跑到高并发时,先单独压一下对端静态页面/健康检查接口,确认压力机能力是否达到上限。
缓存命中率是第二个坑。压测数据如果只命中同一批热数据,结果非常漂亮,但一旦真实流量打过来,冷数据一多,缓存命中率下降,性能立刻断崖。所以压测时一定要记录命中率,并在报告中标注清楚。
TCP TIME_WAIT是第三个坑。压测时短连接请求频率很高,会导致大量TIME_WAIT状态的连接堆积,占用系统资源。这时候需要在压测环境中调整内核参数或用长连接压测。很多团队压测报告里的“性能非常差”其实是被这个坑坑了。
全链路压测对生产的影响是第四个坑。如果你的压测会经过生产环境的部分链路(比如共享数据库),一定要提前做好数据隔离和流控预案,避免压测流量把生产拖垮。记住:压测是为了发现风险,不是创造风险。
6. 评估之后的流量治理:结合Sentinel落地微服务防护
6.1 性能评估如何转化为治理阈值
压测得出来的性能数据,如果不转化为线上一套可执行的限流降级策略,那评估报告最多只能算存档文件,价值大打折扣。
怎么转化?举个例子。我们通过压测得知,订单服务的单机实例在P99延迟200ms的情况下能稳定扛住800 QPS,那么线上单机实例的流控阈值就可以设置在700左右,留出余量。这就是把压测数据变成线上治理规则的思路。
这里要强调一个原则:阈值要有依据,不能拍脑袋。有人说“我觉得8000差不多”,这不叫治理,叫赌。更好的做法是结合压测数据、历史峰值流量、业务容忍度三个维度来定。业务容忍度是指你的业务能接受的延迟上限和错误率上限,越高越需要保守。
6.2 Sentinel系统规则与流量规则的配置实践
在微服务架构下,阿里巴巴开源的Sentinel是我用得比较多的流控治理组件。它和性能评估的关系非常直接:压测得出的阈值,通过Sentinel规则落到线上,形成高并发场景下的第一道防线。
Sentinel的流量控制规则可以从QPS和并发线程数两个维度设置。我觉得最实用的是并发线程数限流,它直接对应当前系统的并发能力。压测告诉我们单机并发线程数超过80后响应时间急剧恶化,那就把Sentinel的并发线程数阈值设为80。这样当流量超过这个值时,新请求会快速失败或进入排队,而不是全部挤进去把系统拖垮。
Sentinel还支持关联流控和链路流控。关联流控适合保护依赖资源,比如写接口压力大时,限制读接口绕开影响;链路流控适合从调用入口维度做精细控制,比如针对某个第三方回调入口单独限流,避免它占用整个服务的资源。这些都可以通过压测数据来辅助确定阈值。
系统规则是另一类重要能力。Sentinel的System Rule可以根据系统总体的Load、CPU使用率、平均RT等指标,在入口做整体保护。当CPU使用率超过阈值时,Sentinel会限制进入系统的流量,相当于给系统加了一层“过载保护”。这个阈值从哪里来?就是从压测和线上监控数据里来。
6.3 热点参数限流与降级熔断的工程实践
高并发场景里,流量经常不是均匀分布的,而是高度集中。比如秒杀场景,大量请求打向同一个商品ID;或者某个大主播的直播间,所有流量集中到某个直播间ID。这种流量模型下,普通的QPS限流不够精细,需要热点参数限流。
Sentinel热点参数限流可以精确到对某个参数值(比如商品ID)单独设置QPS阈值。这个阈值怎么估算?以秒杀为例,通过单接口压测我们可以得出扣减库存接口单机可承受的最大QPS。假设是2000 QPS,那么热点参数限流时,对热门商品ID可以限制这台机器最多接收500 QPS的请求,剩下的请求直接返回“拥挤”,避免同一个热点的流量打穿系统。
熔断降级则是在依赖下游出现故障时的保护手段。Sentinel的熔断规则支持慢调用比例、异常比例、异常数三种模式。在性能评估阶段,我们需要了解下游服务的性能基线,例如调用第三方支付接口的P99是500ms。那可以设置降级规则为:当某个接口调用第三方支付的慢调用(超过500ms)比例达到30%时,触发熔断,快速返回兜底结果,防止故障传导。
我的经验是:性能评估和流量治理是闭环的两端。压测发现瓶颈和阈值,Sentinel把这些阈值落实为保护规则;线上运行一段时间后,再根据新的流量模型补充新的压测场景。这样循环迭代,系统的稳定性才会越来越好。
7. 补充思考:机器学习指标在高并发性能评估中的应用
7.1 聚类评估指标用于异常流量识别
随着高并发系统越来越复杂,纯靠人力资源去识别流量特征开始吃力,机器学习方法开始进入性能评估领域。我特别想提一下聚类评估指标,因为在流量分析、异常检测这些场景,聚类模型用得越来越多。
比如,我们希望对系统的访问流量做分类,识别出哪些是正常业务流量、哪些是刷接口的异常流量,再决定限流策略。聚类模型会把相似特征的请求聚在一起,但是我们怎么评价这个聚类结果好不好?这就要用到轮廓系数、邓恩指数这些聚类评估指标。
聚类评估指标的核心思想是:好的聚类结果应该“类内紧、类间松”。内聚度越高,说明同类样本越相似;分离度越高,说明不同类别的区分越明显。对流量分类来说,这恰恰是我们希望看到的效果:正常流量和异常流量能被干净地分开。
在实战中,我会用聚类模型对请求频率、请求间隔、设备特征这些维度做无监督聚类,再用轮廓系数评估聚类模型的效果。如果轮廓系数太低,说明样本特征筛选得不好,需要调整特征工程。这样做出来的异常流量识别模型,才能为后续的分级限流治理提供更精细的输入。
7.2 回归评估指标用于容量预测
容量规划本质上是个预测问题:根据历史流量预测未来峰值,再评估系统容量是否足够。这类预测常用回归模型来做,而回归模型的评估指标,比如平均绝对误差(MAE)和均方根误差(RMSE),在容量评估中非常实用。
在容量预测场景中,RMSE对预测偏差大样本很敏感,一个严重的低估会导致大促前没有及时扩容,系统被流量打挂。因此我看容量预测模型时,会重点看RMSE而不能只看MAE,同时还会关注最坏情况下的最大误差。
另外,聚类评估中的K值选择思路也可以借鉴到容量评估中。面对复杂的流量曲线,我们经常需要把流量拆分成不同模式(比如日常模式、活动模式、定时任务模式),这个“拆分”本质就是聚类。选多少个模式、划分是否合理,依然要靠聚类评估指标来反馈。把这两类机器学习评估指标引入到性能评估体系里,评估就不再只是“压出来的数据”,而是有了预测和识别的能力。
我在实际使用中的体会是,性能评估要做到位,不在于工具用得多花哨,而在于每一步数据是否扎实、原因是否真正定位。压测只是一个手段,把它和流量治理、模型预测结合起来,才能让评估结果真正成为系统稳定运行的护城河。