技术系列 · 2024年 3月 25日

如何统计网络请求延迟

延迟是量化交易中最重要的因素之一,除了通常的下单撤单等内部延迟外,还需要一些方法来统计网络请求延迟。

先上一张 HTTP 请求连接相关过程图。

curl是优秀的http工具,自带多个统计延迟分析,精准统计了上图的各个过程延迟。

如下例子就是一个分析 HTTP 请求的时序延迟统计结果。

其中time_namelookup为DNS 解析时间。time_connect为从开始计算到 TCP建立完成的耗时。time_pretransfer为从开始计算到准备开始传输数据的耗时。time_starttransfer为 从开始计算到开始传输数据的耗时(libcurl接收到第一个字节)(服务器处理)。time_total为总的耗时。

curl -o /dev/null -s -w time_namelookup"(s)":%{time_namelookup}"\n"time_connect"(s)":%{time_connect}"\n"time_pretransfer"(s)":%{time_pretransfer}"\n"time_starttransfer"(s)":%{time_starttransfer}"\n"time_total"(s)":%{time_total}"\n"speed_download"(B/s)":%{speed_download}"\n"time_redirect"(B/s)":%{time_redirect}"\n" https://api.xxxx.com/api/v1/exchangeInfo
time_namelookup(s):0.001244
time_connect(s):0.002234
time_pretransfer(s):0.035727
time_starttransfer(s):0.044122
time_total(s):0.094960
speed_download(B/s):46474357
time_redirect(B/s):0.000000

time_starttransfer – time_pretransfer 即为服务器处理时间(an amount of time server took to process the request)。

如何优化?

  1. 针对解析耗时,优化方向为:直接hostname绑定域名对应 IP,CDN 域名请谨慎,CDN IP 可能会有单点故障。
  2. 针对time_pretransfer的耗时,优化方向为:服务器位置应与目标交易所一致,colo专线等。
  3. 针对server处理时间,非我们所能控制,需要专研可能的低延迟接口。