高频交易系统性能应当如何优化?

Connor 欧易app 2022-08-30 325 0

1、延时定义

高频交易系统中的延时是指在一定的背景压力情况下,从接入网关发出指令,后台处理,然后在接入网关收到应答的延时。

延时是一个有实际意义的值,假设一定的背景压力,考虑的是延时的发生实在实际的生产环境中发生的,同时具体到背景压力,可能还会包含实际的业务行为分布,例如订单输入、订单删除、订单修改、订单查询等等。这些业务行为的分布,需要考虑实际生产环境中发生的比例,只有这样整个延时的测试才会比较真实和合理。延时测试的基点是接入网关,目的是排除广域网物理链路对延时的影响,也是目前国际上发布延时的基准。低延时意味着交易系统能够在更短的时间上响应客户的请求,那么在交易的关键路径上,必须要能够足够快的传输数据,同时关键路径上的模块必须要能够足够快的处理数据。

2、延迟测量

要控制和降低延迟,首先要能准确测量延迟,因此需要比较精确的时钟,每个机房需要配几台带GPS或原子钟的NTP服务器。即便使用NTP,同一机房两台机器的时间也会有毫秒级的差异,计算延迟的时候,两台机器的时间戳不能直接相减,因为不在同一时钟域,解决办法是设法补偿时差。另外,不仅要测量平均延迟,更重要的是要测量并控制长尾延迟,即99百分位数或99.9百分位数的延迟。

3、内部延迟

普通C++服务程序,内部延迟(从进程收到消息到进程发出消息)做到亚毫秒级并不需要特殊的优化。如果瓶颈在CPU,最有效的优化方式是强度消减,即不在于怎么做得快,而在于怎么做得少。

4、网络延迟

网络延迟分传输延迟和惯性延迟,通常局域网内以惯性延迟为主,广域网以传输延迟为主。传输延迟是传送1字节消息的基本延迟,大致跟距离成正比。传输延迟受物理定律限制,优化办法是买更好的网络设备和租更短的线路。惯性延迟跟消息大小成正比,跟网络带宽成反比,千兆网TCP有效带宽按115MB/s估算,那么发送1150字节的消息从第1个字节离开本机网卡到第1150个字节离开本机网卡至少需要10us,是无法降低的,因此可以减小消息长度。

网络延迟 如何优化

5、吞吐量

延迟和吞吐量是矛盾的,延迟跟吞吐量的关系通常是个U型曲线,吞吐量接近0的时候延迟反而比较高,因为系统比较冷;吞吐量增加一些,平均延迟会降到正常水平;吞吐量再增大,延迟缓慢上升;吞吐量过了某个临界点,延迟开始飙升。因此需要把吞吐量控制在合理范围,保证延迟处于正常值。

6、资源使用率

延迟和资源使用率是矛盾的,做高吞吐的服务程序,恨不得把CPU和IO都跑满,资源都用完。而低延迟的服务程序的资源占用率通常低得可怜,实际上平时资源使用率低是为了准备应付突发请求,请求或消息一来就可以立刻得到处理,尽量少排队,排队意味着等待,等待意味着长延迟。消除等待是最直接有效的降低延迟的办法,依赖的是系统的冗余。

7、可靠传输

延迟和可靠传输也是矛盾的,TCP做到可靠传输的办法是超时重传,一旦发生重传,会增加几百毫秒的延迟,因此保持网络随时畅通,避免拥塞也是控制延迟的必要手段。

因此,必须避免交易时段在服务器上拷贝日志文件等操作,或是部署两张网卡,一张网卡专门用于交易,一张用于运维操作。另一个办法是写个慢速拷贝程序,故意降低拷贝速度,每50毫秒拷贝50kB,用时间换带宽。另外,可以编写慢速压缩程序,每100毫秒压缩100kB,花一分半钟压缩完100MB数据,分散CPU资源使用,减少对延迟的影响。

评论