环境准备:实盘服务器选型与网络架构设计

做市系统从模拟盘迁移到实盘,第一步不是写代码,而是选机器、搭网络。这一步要是走偏了,后面再牛的算法也救不回来。我见过不少团队,模拟盘跑得飞起,一上实盘就各种延迟抖动、网络闪断,说白了就是环境没准备好。

今天咱们就聊聊,实盘服务器到底该怎么选,网络架构怎么搭,才能做到低延迟、高可用。

服务器选型:别只看CPU核数

很多人选服务器第一反应是「核越多越好」。嗯,这个思路在普通业务系统上没问题,但在做市系统里,不完全对。

做市系统的核心瓶颈往往不在CPU算力,而在内存访问延迟网络I/O。你想想看,行情数据每秒几十万笔,订单簿更新、策略计算、风控检查,这一连串操作必须在微秒级完成。CPU再快,如果内存带宽不够、缓存命中率低,照样白搭。

我个人习惯,选型时重点关注这几个指标:

  • CPU主频:尽量选4.0GHz以上的高频型号,核数8-16核足够。做市策略通常是单线程或少量线程,高频比多核更重要。
  • 内存:DDR5,频率至少4800MHz以上。容量64GB起步,但别贪多,内存大了反而可能增加延迟。
  • 网卡:必须支持SolarflareMellanox的RDMA功能。普通千兆网卡在实盘场景下就是灾难。
  • 硬盘:NVMe SSD,做日志和回放用。但注意,交易路径上不要读写磁盘,所有数据放内存。

核心原则:实盘服务器是「快」字当头,不是「大」字当头。宁可花同样的钱买一台高频小内存的机器,也别买一台低频大内存的。

我的经验:有一次帮客户选型,对方坚持要64核的AMD EPYC,说「核多心里踏实」。结果上线后延迟比预期高了30%,排查发现是跨CCD通信导致的。后来换成Intel Xeon W系列,16核5.3GHz,问题全解决了。

网络架构设计:分层隔离,冗余互备

网络架构这块,我踩过的坑最多。做市系统对网络的要求就两条:延迟低不能断。但这两条往往互相矛盾——冗余做多了,延迟就上去了;追求极致低延迟,冗余又不够。

怎么平衡?我的方案是分层设计

第一层:交易接入层

这一层直接连接交易所的行情和交易网关。要求是物理距离最近,最好和交易所的服务器放在同一个机房,或者相邻机柜。延迟目标:微秒级

  • 使用25G/100G光纤直连,不经过交换机
  • 网卡开启DPDKRDMA,绕过内核协议栈
  • 禁用CPU节能、超线程、NUMA平衡

第二层:策略计算层

这一层跑你的做市策略、风控逻辑。它和交易接入层之间通过内存映射共享内存通信,不走网络。为什么?因为网络再快也有几十微秒的延迟,而共享内存可以做到纳秒级。

注意:策略层和接入层必须部署在同一台物理机上,或者通过PCIe直连的两台机器。别用交换机连,哪怕是最低延迟的交换机也不行。

第三层:监控与风控层

这一层负责日志、监控、盘后分析。它和策略层之间可以用万兆以太网连接,延迟要求不高,但带宽要够。这一层可以适当做冗余,比如双网卡绑定、双交换机堆叠。

高可用设计:主备切换要快

做市系统最怕什么?不是亏钱,是断连。一旦和交易所的连接断了,哪怕只有几秒钟,你的订单簿就会和真实市场脱节,回来之后可能直接爆仓。

我建议采用1主1备的架构,主备之间通过心跳检测监控状态。切换时间控制在100毫秒以内

组件 主节点 备节点 切换方式
行情接入 直连交易所A 直连交易所B 自动切换
策略计算 主服务器 备服务器 手动/自动
风控引擎 主服务器 备服务器 自动切换
日志存储 主存储 备存储 手动切换

避坑指南:我曾经遇到一个案例,主备切换倒是成功了,但切换后策略层和行情层的时钟不同步,导致订单簿重建出错。后来我们在所有机器上部署了PTP精确时间协议,时钟偏差控制在1微秒以内。这个细节很多人会忽略,但真的很重要。

网络拓扑图:一图看懂整体架构

下面这张图是我自己项目里用的网络拓扑,你可以参考一下。注意看,交易接入和策略计算之间是直连的,没有经过任何交换机。

做市系统网络架构拓扑图 交易所网关 行情数据 交易指令 交易接入层(DPDK/RDMA) 共享内存/PCIe直连 策略计算层(做市策略+风控) 万兆以太网 监控与风控层(日志/监控) 备用接入节点 备用策略节点 图例 行情数据流 交易指令流 直连通信 万兆以太网 备用链路

操作系统与内核调优

硬件选好了,网络搭好了,操作系统也得调一调。默认的Linux内核是为通用场景优化的,做市系统需要一些特殊配置。

# 禁用CPU节能
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 禁用超线程
echo off | sudo tee /sys/devices/system/cpu/smt/control

# 设置网络中断亲和性
echo 1 > /proc/irq/<网卡中断号>/smp_affinity

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 设置内存锁定限制
ulimit -l unlimited

重要提醒:这些调优参数在模拟盘上可能看不出效果,但上了实盘,每一个微秒都可能是利润和亏损的分界线。我建议你在模拟盘阶段就把这些参数配好,别等到实盘上线前一天才手忙脚乱地改。

最后说两句

环境准备这件事,说白了就是「把地基打牢」。服务器选型、网络架构、高可用设计,每一步都决定了你的做市系统能跑多快、多稳。我个人觉得,与其在策略上花大量时间优化,不如先把环境做到极致——因为环境好了,策略的潜力才能真正发挥出来。

嗯,今天就聊到这儿。下一章咱们会深入讲讲行情系统的搭建,包括如何从交易所拿到低延迟的行情数据,以及如何构建自己的订单簿。到时候见。


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