4. 性能评估指标:延迟、吞吐量、资源消耗、稳定性

做审计日志写入评估,光看QPS是远远不够的。你得把几个指标放在一起看,才能摸清系统的真实底细。

我以前就吃过亏。项目上线前,我就盯着QPS,测出来30万每秒,心里美滋滋。结果一压长稳,延迟飙上天,CPU直接打满,机器的硬盘还时不时卡一下……嗯,这次教训告诉我,四个指标一个都不能少。

4.1 延迟:别被平均值骗了

延迟是指一条日志从客户端发出到被服务端确认写入所花的时间。我习惯用毫秒衡量。很多人只看平均延迟,比如“平均5ms,不错啊”。但我告诉你,平均值最会骗人。

你想想看,99%的请求都是3ms,但剩下1%可能是300ms。平均下来也就6ms,看起来很美。可那个1%的长尾请求,哪个用户遇到了都会炸毛。

所以我建议重点关注这几个指标:

  • P50(中位数):大多数请求的表现
  • P99:最差1%的请求,容忍度上限
  • P999:极限情况,一般用于SLA严苛的场景
我的习惯:压测时把P99延迟控制在QPS目标值对应延迟的1/10以内。比如目标延迟100ms,P99最好不超过10ms。留出余量应对抖动。

我曾经在一个金融项目中统计过,平均延迟只有8ms,但P99到了500ms。后来发现是因为批量写入时机没对齐,批次攒得太大。把每批大小从5000降到500,P99瞬间降到50ms。嗯,这个问题花了我一整天排查。

4.2 吞吐量:QPS到底能打多少

吞吐量就是单位时间能处理多少请求。对于审计日志,通常用写入QPS或每秒写入条数来衡量。

吞吐量跟延迟是一对冤家。利特尔定律讲得很清楚:并发数 = 吞吐量 × 延迟。如果你压上去的并发数不变,延迟涨了,吞吐量必然掉。

我建议用阶梯加压的方式来测吞吐量。具体做法:

  1. 从低并发开始,比如100个并发线程
  2. 每30秒记录一次QPS和延迟
  3. 稳定后增加并发(每次+50或+100)
  4. 直到延迟超过预定阈值(比如P99 > 200ms)或出现错误
  5. 那个临界点的QPS就是系统的最大可用吞吐量
注意:别迷信峰值QPS。很多人在压测时只打几秒就说“最高能到50万QPS”。实际线上流量是持续的,你的系统扛得住几小时的峰值吗?必须测长稳吞吐量——至少压30分钟,看曲线是否掉下来。

4.3 资源消耗:机器扛得住吗

资源消耗直接决定你的部署成本和扩容策略。我主要看这四个方面:

资源类型 关键指标 我踩过的坑
CPU 使用率、sys/user占比 审计日志写入常涉及加解密,CPU一下子吃满
内存 堆内存、GC频率、Swap 缓冲区没设上限,OOM直接挂掉
磁盘IO IOPS、写入延迟、队列长度 写放大问题,SSD都扛不住频繁fsync
网络 带宽使用率、TCP重传率 跨机房写入,带宽被打满丢包

我曾经在评估一个日志系统时,发现CPU使用率只有40%,但磁盘IO队列长度飙到20。后来发现是因为每次写入都调了fsync,把机械硬盘直接干废。改成批量刷盘后,队列长度降到2以下。你想想看,一个fsync调用就是一次磁盘同步,频率一高,系统全卡在IO上。

4.4 稳定性:别掉链子

稳定性是很多评估报告里一笔带过的东西。但没了稳定性,高QPS只是空中楼阁。我关心三个维度:

  • 抖动:延迟是否忽高忽低。这种毛刺最恶心,可能几天一次,压测时很难发现。
  • 长尾:P99和P50的差距。差距越大,系统越不稳定。
  • 衰减:长时间运行后QPS和延迟是否逐渐恶化(比如内存泄漏、GC恶化)。
避坑指南:我曾经压过一个服务,前10分钟表现完美,QPS稳定,延迟很低。我正准备关机下班,结果第11分钟开始QPS狂掉,延迟翻倍。一查,是JVM的CMS GC到了“并发模式失败”,触发了Full GC,造成STW(Stop-The-World)长达3秒。从那以后,我每次压测至少跑1小时,并盯着GC日志。

如果你用Golang或Rust,GC问题会少很多,但也别掉以轻心。协程池耗尽、连接池泄漏、磁盘调度策略变化,都会造成稳定性的滑坡。

4.5 指标综合分析:别当单指标动物

四个指标互相牵扯。举个典型场景:你提高并发来冲QPS,延迟可能会涨,资源消耗也会涨,一旦资源打满,稳定性瞬间崩塌。所以评估时不能只看一张图。

我习惯用下面的框架把四个指标串起来看:

审计日志写入QPS评估四维模型 QPS评估目标 延迟 P50 / P99 / P999 吞吐量 QPS / 写入条数 资源消耗 CPU / 内存 / IO 稳定性 抖动 / 长尾 / 衰减 四个指标相互制约:高吞吐量可能推高延迟和资源消耗,资源打满后稳定性崩塌。 评估时必须联合分析,不能只看单一维度。

说白了吧,这四个指标就是一张网。你拉吞吐量这根线,延迟和资源消耗就会绷紧;资源一紧,稳定性就松。所以我在写评估报告时,从来不会单独给一个QPS数字,而是给出类似这样的结论:

  • 在P99延迟≤50ms、CPU≤70%、磁盘IO≤1000 IOPS的前提下,系统可持续支撑**25,000 QPS**。
  • 超出该值后,延迟迅速恶化,资源消耗进入危险区。
我的一点心得:做评估不是为了刷高分为面子,而是为了找到系统的安全边界。把这个边界告诉运维和业务方,大家心里都有底。毕竟,一个稳定的25K QPS比一个抖动的40K QPS强一百倍。

好了,这四个指标的核心内容基本就这些。记住,压测的时候不要盯着一个数据傻乐,四个维度放在一起看,你的评估才真正有说服力。