2、实盘部署环境搭建:Linux服务器选型、网络延迟优化、时钟同步(NTP)配置
实盘部署,说白了就是把你的策略从回测环境搬到真实战场。这一步如果没做好,再好的策略也是白搭。我见过太多团队,回测曲线漂亮得像艺术品,一上实盘就崩——不是服务器扛不住,就是网络延迟吃掉利润,或者时钟不同步导致订单时间错乱。
今天我就把这块的经验拆开揉碎了讲。嗯,咱们从最基础的服务器选型开始。
2.1 Linux服务器选型:别在硬件上省钱
我个人习惯,实盘服务器首选CentOS 7.9或Ubuntu 20.04 LTS。为什么?稳定。这两个版本的生命周期长,社区支持好,坑少。
硬件配置上,我建议至少这样:
| 组件 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 4核 | 8核以上 | 高频优先,比如Intel Xeon或AMD EPYC |
| 内存 | 16GB | 32GB+ | 行情数据缓存很吃内存 |
| 硬盘 | 500GB SSD | 1TB NVMe | 读写延迟必须低 |
| 网卡 | 千兆 | 万兆 | 如果做高频,万兆是底线 |
我在项目中遇到过一件事:有个团队用云服务器跑高频策略,结果发现每次行情爆发时,CPU软中断飙到80%以上。后来查出来是网卡队列不够,换了个支持多队列的万兆网卡,问题直接解决。所以,网卡别省。
RDTSCP指令。这个指令能帮你拿到更精确的时间戳,对延迟敏感的策略很有用。
2.2 网络延迟优化:每一微秒都要争
量化交易里,延迟就是钱。你想想看,别人比你快1毫秒,可能就把你的订单抢在前面成交了。所以网络优化是必修课。
2.4.1 物理层优化
首先,服务器要尽量靠近交易所的机房。我建议直接托管在交易所的同一数据中心,或者至少在同一城市。跨城市的网络延迟,光速都救不了你。
其次,网卡要开启RSS(Receive Side Scaling)和RPS(Receive Packet Steering)。这样可以把网络中断分散到多个CPU核心上,避免单个核心成为瓶颈。
# 开启RSS(以Intel网卡为例)
ethtool -L eth0 combined 4
# 开启RPS
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
2.4.2 内核参数调优
Linux内核默认的网络参数是为通用场景设计的,对低延迟交易来说太保守了。我一般会做以下调整:
# 减少TCP缓冲区,降低延迟
net.core.rmem_default = 16384
net.core.wmem_default = 16384
net.core.rmem_max = 131072
net.core.wmem_max = 131072
# 开启快速ACK
net.ipv4.tcp_sack = 0
net.ipv4.tcp_dsack = 0
net.ipv4.tcp_fack = 0
# 关闭Nagle算法
net.ipv4.tcp_nodelay = 1
# 增大网卡队列长度
net.core.netdev_max_backlog = 10000
我曾经因为没调tcp_nodelay,导致订单确认消息延迟了200微秒。别小看这200微秒,在高频场景下,可能就是几万块钱的差距。
2.4.3 使用DPDK或Solarflare
如果你做的是极高频交易,那普通的TCP/IP协议栈就不够用了。这时候可以考虑DPDK(Data Plane Development Kit)或者Solarflare的硬件加速方案。
DPDK绕过了内核协议栈,直接在用户态处理网络包。我有个朋友用DPDK把订单处理延迟从10微秒降到了1微秒以下。当然,代价是开发复杂度高了不少。
2.3 时钟同步(NTP)配置:时间就是金钱
量化交易里,时间戳的精度直接决定了你的订单能否被正确排序。如果服务器时间比交易所慢了几毫秒,你的订单可能被判定为超时,直接拒掉。
2.3.1 选择NTP服务器
我建议使用chrony代替传统的ntpd。chrony同步速度更快,对网络抖动的容忍度也更高。
# 安装chrony
yum install chrony -y
# 配置/etc/chrony.conf
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
pool 2.centos.pool.ntp.org iburst
# 启动并设置开机自启
systemctl enable chronyd
systemctl start chronyd
2.3.2 验证同步精度
配置好之后,用chronyc sources -v查看同步状态。我一般要求偏移量在1毫秒以内。如果超过这个值,就要排查网络或硬件问题了。
# 查看同步状态
chronyc tracking
# 输出示例
Reference ID : 203.107.6.88 (ntp.aliyun.com)
Stratum : 3
Ref time (UTC) : Mon Mar 11 08:15:23 2024
System time : 0.000000123 seconds fast of NTP time
Last offset : +0.000000456 seconds
RMS offset : 0.000000789 seconds
你看,RMS offset只有0.78微秒,这个精度就够用了。
2.3.3 硬件时钟辅助
如果条件允许,可以加装GPS时钟接收器或PTP(Precision Time Protocol)硬件。PTP的精度能达到亚微秒级,比NTP高一个数量级。
不过说实话,对于大多数CTA或中低频策略,NTP的毫秒级精度已经足够了。只有做高频做市商的朋友,才需要上PTP。
2.4 整体架构图
下面这张图展示了实盘部署环境的整体架构。你可以看到从行情接入、策略计算到订单发送的完整链路,以及时钟同步如何贯穿其中。
从图上你可以看到,时钟同步不是只配一台服务器就完事了。它需要和网络层、策略引擎都保持同步。我建议所有服务器都用同一个NTP源,避免出现时间偏差。
好了,实盘部署环境搭建这块就讲到这里。记住一句话:硬件是基础,网络是命脉,时间是准绳。这三样做好了,你的策略才能稳定跑起来。
公众号:蓝海资料掘金营,微信deep3321