环境准备:实盘服务器选型与网络架构设计
做市系统从模拟盘迁移到实盘,第一步不是写代码,而是选机器、搭网络。这一步要是走偏了,后面再牛的算法也救不回来。我见过不少团队,模拟盘跑得飞起,一上实盘就各种延迟抖动、网络闪断,说白了就是环境没准备好。
今天咱们就聊聊,实盘服务器到底该怎么选,网络架构怎么搭,才能做到低延迟、高可用。
服务器选型:别只看CPU核数
很多人选服务器第一反应是「核越多越好」。嗯,这个思路在普通业务系统上没问题,但在做市系统里,不完全对。
做市系统的核心瓶颈往往不在CPU算力,而在内存访问延迟和网络I/O。你想想看,行情数据每秒几十万笔,订单簿更新、策略计算、风控检查,这一连串操作必须在微秒级完成。CPU再快,如果内存带宽不够、缓存命中率低,照样白搭。
我个人习惯,选型时重点关注这几个指标:
- CPU主频:尽量选4.0GHz以上的高频型号,核数8-16核足够。做市策略通常是单线程或少量线程,高频比多核更重要。
- 内存:DDR5,频率至少4800MHz以上。容量64GB起步,但别贪多,内存大了反而可能增加延迟。
- 网卡:必须支持Solarflare或Mellanox的RDMA功能。普通千兆网卡在实盘场景下就是灾难。
- 硬盘:NVMe SSD,做日志和回放用。但注意,交易路径上不要读写磁盘,所有数据放内存。
核心原则:实盘服务器是「快」字当头,不是「大」字当头。宁可花同样的钱买一台高频小内存的机器,也别买一台低频大内存的。
我的经验:有一次帮客户选型,对方坚持要64核的AMD EPYC,说「核多心里踏实」。结果上线后延迟比预期高了30%,排查发现是跨CCD通信导致的。后来换成Intel Xeon W系列,16核5.3GHz,问题全解决了。
网络架构设计:分层隔离,冗余互备
网络架构这块,我踩过的坑最多。做市系统对网络的要求就两条:延迟低、不能断。但这两条往往互相矛盾——冗余做多了,延迟就上去了;追求极致低延迟,冗余又不够。
怎么平衡?我的方案是分层设计。
第一层:交易接入层
这一层直接连接交易所的行情和交易网关。要求是物理距离最近,最好和交易所的服务器放在同一个机房,或者相邻机柜。延迟目标:微秒级。
- 使用25G/100G光纤直连,不经过交换机
- 网卡开启DPDK或RDMA,绕过内核协议栈
- 禁用CPU节能、超线程、NUMA平衡
第二层:策略计算层
这一层跑你的做市策略、风控逻辑。它和交易接入层之间通过内存映射或共享内存通信,不走网络。为什么?因为网络再快也有几十微秒的延迟,而共享内存可以做到纳秒级。
注意:策略层和接入层必须部署在同一台物理机上,或者通过PCIe直连的两台机器。别用交换机连,哪怕是最低延迟的交换机也不行。
第三层:监控与风控层
这一层负责日志、监控、盘后分析。它和策略层之间可以用万兆以太网连接,延迟要求不高,但带宽要够。这一层可以适当做冗余,比如双网卡绑定、双交换机堆叠。
高可用设计:主备切换要快
做市系统最怕什么?不是亏钱,是断连。一旦和交易所的连接断了,哪怕只有几秒钟,你的订单簿就会和真实市场脱节,回来之后可能直接爆仓。
我建议采用1主1备的架构,主备之间通过心跳检测监控状态。切换时间控制在100毫秒以内。
| 组件 | 主节点 | 备节点 | 切换方式 |
|---|---|---|---|
| 行情接入 | 直连交易所A | 直连交易所B | 自动切换 |
| 策略计算 | 主服务器 | 备服务器 | 手动/自动 |
| 风控引擎 | 主服务器 | 备服务器 | 自动切换 |
| 日志存储 | 主存储 | 备存储 | 手动切换 |
避坑指南:我曾经遇到一个案例,主备切换倒是成功了,但切换后策略层和行情层的时钟不同步,导致订单簿重建出错。后来我们在所有机器上部署了PTP精确时间协议,时钟偏差控制在1微秒以内。这个细节很多人会忽略,但真的很重要。
网络拓扑图:一图看懂整体架构
下面这张图是我自己项目里用的网络拓扑,你可以参考一下。注意看,交易接入和策略计算之间是直连的,没有经过任何交换机。
操作系统与内核调优
硬件选好了,网络搭好了,操作系统也得调一调。默认的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