2. 性能指标定义:延迟、吞吐量、抖动、资源利用率、性能指标间的权衡

聊性能分析,第一个绕不开的问题就是:你到底要优化什么?

我见过不少团队,一上来就盯着延迟猛干,结果吞吐量上不去,系统反而更卡了。说白了,性能优化不是单点突破,而是一套组合拳。你得先搞清楚每个指标的含义,才能知道往哪个方向使劲。

2.1 延迟(Latency)

延迟,就是一笔交易从发起到确认的时间。在套利系统里,这通常指订单从策略发出,到交易所返回成交确认的耗时。

我个人习惯把延迟拆成三段:

  • 网络延迟:数据在网线上跑的时间。跨洲交易,光速就是物理极限,谁也没办法。
  • 系统延迟:数据在CPU、内存、网卡之间流转的时间。这部分是我们可以优化的主战场。
  • 排队延迟:请求在队列里等着被处理的时间。高并发下,这是大头。

我在项目中遇到过最头疼的事:明明网络延迟只有1ms,但系统延迟却飙到了50ms。查了半天,发现是日志打印阻塞了IO线程。嗯,有时候问题就出在这些不起眼的地方。

核心观点:延迟不是越低越好,而是要在可接受的范围内,找到成本和收益的平衡点。

2.2 吞吐量(Throughput)

吞吐量,单位时间内能处理多少笔交易。常见单位是TPS(Transactions Per Second)。

你想想看,延迟是单笔交易的速度,吞吐量是系统的整体处理能力。两者有关系,但不是线性关系。

举个例子:

  • 延迟10ms,吞吐量可能只有100 TPS
  • 延迟20ms,吞吐量可能达到1000 TPS

为什么会这样?因为系统可以并行处理。延迟高了,但并发度上去了,整体吞吐量反而更大。

我曾经优化过一个套利策略,把延迟从5ms降到了2ms,结果吞吐量只提升了10%。后来发现瓶颈在数据库写入,跟网络延迟关系不大。所以,别盲目追求低延迟,先看看瓶颈在哪

2.3 抖动(Jitter)

抖动,就是延迟的波动程度。说白了,延迟不稳定。

我习惯用P99、P999来衡量抖动。比如P99延迟是100ms,意味着99%的请求在100ms内完成,剩下1%可能跑到500ms甚至更高。

在套利系统里,抖动比高延迟更可怕。为什么?

  • 高延迟是稳定的慢,你可以通过调整策略来适应
  • 抖动是忽快忽慢,你的策略根本没法预测

我记得有一次,系统P50延迟只有2ms,但P999延迟经常跳到200ms。结果就是,大部分交易都正常,但偶尔一笔交易卡住,导致整个策略节奏被打乱。后来发现是JVM的GC在作祟。

避坑指南:我曾经因为忽略了抖动,导致一个高频策略在实盘中频繁亏损。后来加了抖动监控,才发现问题。记住,稳定的低延迟,比偶尔的超低延迟更重要

2.4 资源利用率(Resource Utilization)

资源利用率,就是CPU、内存、网络、磁盘等硬件资源的使用情况。

很多人觉得资源利用率越高越好,其实不然。CPU跑到90%以上,说明系统快扛不住了,随时可能崩溃。我一般建议:

  • CPU利用率控制在70%以下
  • 内存使用率控制在80%以下
  • 网络带宽使用率控制在60%以下

为什么留这么多余量?因为系统需要应对突发流量。你想想看,如果平时CPU就跑到95%,突然来一波行情,系统直接挂掉,那损失可就大了。

2.5 性能指标间的权衡

这几个指标不是独立的,它们之间存在着复杂的权衡关系。我画了一张图,帮你理清思路:

性能指标 权衡关系 延迟 吞吐量 抖动 资源利用率 负相关 正相关 正相关 弱相关 强相关 弱相关

从这张图你能看出几个关键权衡:

权衡关系 说明 实际案例
延迟 vs 吞吐量 降低延迟通常意味着减少并发,吞吐量会下降 把单线程改成多线程,延迟可能增加,但吞吐量翻倍
延迟 vs 抖动 过度优化延迟,可能导致系统不稳定,抖动加剧 关闭GC来降低延迟,但内存泄漏会导致抖动飙升
吞吐量 vs 资源利用率 提高吞吐量,资源利用率必然上升 增加线程数,CPU利用率从50%升到90%
抖动 vs 资源利用率 资源利用率过高,抖动会显著增加 CPU跑到95%时,P99延迟可能翻10倍

我的经验:做性能优化,先定目标。你是要低延迟,还是要高吞吐?两者不可兼得时,根据业务场景做取舍。套利系统通常优先保证低延迟和低抖动,吞吐量够用就行。

2.6 如何选择性能指标

不同场景,关注的重点不一样。我列了个清单,供你参考:

  • 高频套利:延迟 > 抖动 > 吞吐量 > 资源利用率
  • 统计套利:吞吐量 > 延迟 > 资源利用率 > 抖动
  • 做市商系统:抖动 > 延迟 > 吞吐量 > 资源利用率

你看,同样是套利系统,策略不同,指标优先级完全不同。所以别照搬别人的优化方案,先搞清楚自己的业务特点。

嗯,这一章的内容就到这里。记住一句话:没有完美的系统,只有合适的权衡。下一章我们聊聊具体的性能测试方法,到时候我会分享一些压测工具的使用技巧。


公众号:蓝海资料掘金营,微信deep3321