4. 技术基础设施合规要求:服务器托管与Co-location策略、网络延迟监控、交易系统冗余设计、灾难恢复计划(DRP)
做高频交易,技术基础设施就是你的命根子。合规部门看你的系统,第一眼不是看你策略多牛,而是看你服务器放哪、延迟怎么测、挂了怎么恢复。我见过太多团队,策略收益漂亮,结果因为托管机房不合规,牌照直接被卡住。
说白了,监管要的是两样东西:公平性和稳定性。你不能比别人快太多(除非大家都用同样的规则),你也不能动不动就宕机。这一章,我就把这几块硬骨头掰开揉碎了讲。
4.1 服务器托管与Co-location策略
Co-location,就是你把服务器放在交易所的机房里。为什么必须这么做?因为光速是物理极限,每多一米光纤,延迟就多5纳秒左右。你想想看,别人在交易所隔壁跑,你在100公里外跑,这仗怎么打?
合规上,监管对Co-location有明确要求:
- 物理隔离:你的机柜和别人的机柜必须物理分开,不能共享电源或网络设备。我遇到过一家小公司,为了省钱,和另一家共用了一个PDU,结果合规检查直接亮红灯。
- 访问控制:只有授权人员才能进机房。每次进出都要留日志,监管随时可能调阅。
- 机柜租赁合同:必须明确写明机柜位置、带宽、电力规格。合同要留底,至少保存5年。
我个人习惯,在选Co-location机房时,会重点看三个指标:
- 距离交易所撮合引擎的物理距离——越近越好,最好在同一个建筑内。
- 网络跳数——从你的服务器到交易所网关,中间经过的交换机越少越好。理想情况是直连。
- 电力冗余——双路供电+UPS+柴油发电机,缺一不可。
4.2 网络延迟监控
延迟监控,不是简单地ping一下就行。高频交易里,延迟要精确到微秒甚至纳秒级别。你想想看,一个微秒的抖动,可能就让你的订单从队列头掉到队尾。
合规要求你记录并保存所有交易相关的延迟数据。具体来说:
- 端到端延迟:从策略发出信号 → 网卡发出数据包 → 交易所收到 → 交易所返回确认。每个环节都要打时间戳。
- 硬件时间戳:必须用支持PTP(精确时间协议)的网卡和交换机。软件时间戳不靠谱,误差太大。
- 延迟基线:你需要建立一条基准线。比如,正常延迟是10微秒,一旦超过15微秒,就要告警。
我建议用这样的监控架构:
+----------------+ +----------------+ +----------------+
| 策略服务器 | ---> | 硬件时间戳网卡 | ---> | 交易所网关 |
| (发出订单) | | (打上t1时间戳) | | (返回t4时间戳) |
+----------------+ +----------------+ +----------------+
| | |
v v v
+----------------------------------------------------------+
| 延迟监控服务器 (记录t1,t2,t3,t4) |
| 计算延迟 = (t4 - t1) - (t3 - t2) |
+----------------------------------------------------------+
这里有个关键点:单向延迟比往返延迟更重要。因为你的订单是单向发出去的,交易所处理完才返回。如果只看往返延迟,你根本不知道是去程慢还是回程慢。
4.3 交易系统冗余设计
冗余设计,说白了就是「别把所有鸡蛋放在一个篮子里」。高频交易系统,任何一个单点故障都可能导致巨额损失。合规要求你证明你的系统是「高可用」的。
我一般会做三层冗余:
| 冗余层级 | 具体做法 | 切换时间要求 |
|---|---|---|
| 网络层 | 双网卡绑定(bonding),两条独立光纤到交易所 | < 1秒 |
| 服务器层 | 主备两台服务器,共享同一个策略状态 | < 100毫秒 |
| 数据层 | 实时同步行情数据到备用数据中心 | < 10毫秒 |
这里有个容易踩的坑:主备切换时的状态一致性。你想想看,主服务器刚发了一个订单,还没来得及同步给备机,主服务器就挂了。备机上线后,它不知道那个订单已经发出去了,结果又发了一遍。这就是「重复下单」。
我解决这个问题的办法是:
- 所有订单状态都写入一个共享的、高可用的内存数据库(比如Redis Cluster)。
- 备机启动时,先查询这个数据库,恢复所有未完成的订单状态。
- 交易所的订单ID是唯一的,备机发单时带上这个ID,交易所会去重。
4.4 灾难恢复计划(DRP)
DRP不是写一份文档就完事了。监管要看你「真的能恢复」。我见过最离谱的案例,一家公司DRP文档写了100页,结果真遇到机房断电,发现备用发电机没油了。
合规要求的DRP必须包含:
- RTO(恢复时间目标):你承诺在多长时间内恢复交易。高频交易通常要求RTO < 5分钟。
- RPO(恢复点目标):你能容忍丢失多少数据。高频交易通常要求RPO < 1秒。
- 演练记录:每季度至少一次全量演练,每次演练都要有报告,记录恢复时间、遇到的问题、改进措施。
我个人习惯,DRP要分三个场景:
- 单服务器故障:自动切换到备用服务器,不需要人工介入。
- 整个机房故障:切换到异地灾备中心。这里要注意,异地灾备中心到交易所的延迟可能比主机房高,所以策略要自动降频或暂停交易。
- 交易所故障:这个你控制不了,但你要有预案——比如暂停所有订单,等待交易所恢复,或者切换到其他交易所(如果支持)。
下面是我常用的DRP流程图:
嗯,这里要注意:DRP演练不是走过场。我曾经在一次演练中发现,异地灾备中心的网络配置和主中心不一致,导致切换后无法连接交易所。幸亏是演练,要是真出事就完了。所以,每次演练都要模拟真实故障,不能提前通知。
最后说一句,技术基础设施合规不是一锤子买卖。你上线了,监管还会不定期检查。保持所有文档、日志、演练记录随时可查,这才是长久之计。