架构地图

点一个框看它做什么、为什么这样设计;选一条路径,一步一步看一条行情怎么变成一笔成交。蓝字可以直接点开对应的文章。

交易系统架构地图:一条行情怎么变成一笔成交 蓝字 = 在哪里讲过(#N = 交易系统笔记 #N,速查 = 速查页的小节)。时间都是量级。 黑线 = 热路径(行情 → 报单);红线 = 回报回来(成交 → 持仓 → 策略);灰色虚线 = 旁路(落盘、日志、监控、推送)。 绿框 = 热线程,各绑一个隔离核;蓝框 = 线程之间交接数据的结构;黄框 = 汇合点;虚线框 = 旁路上的线程或进程。 场外 交易服务器:热线程各绑一个隔离核 #1 绑核 / 隔离 决策线程:一路调下去,不过队列 旁路与控制面:慢了不能拖住热路径 交易所 撮合引擎 行情:按通道组播 收报单,发回报 券商柜台 券商的风控和报盘 极速柜台:几十 µs 普通柜台:到毫秒 网卡(NIC) 收行情包 绕过内核:约 1 µs 走内核协议栈:5–10 µs #1 中断别打到热核 行情接入线程 解码,转成内部格式 按通道查序号,断档就补 先写广播环,再按股票分发 #5 广播环 1.7 分片队列(SPSC) 股票 → 分片,查表 同一只股票只进一片 交接一次:几十 ns #4 无锁队列 速查 2.6 跨核交接 分片线程 ×N 盘口重建 → 因子增量更新 只碰自己那些股票的状态 每条几百 ns 到几 µs 缓存案例:一次行情重算 64 个期权 #14 在干活的核上预热 汇合:bar 收齐 等所有分片算完这根 bar 截面排名、标准化 节奏:毫秒到秒 广播环(共享内存) 接入线程写一份 落盘、监控各自来读 生产者不等任何读者 #5 SPMC 广播环 两种节奏 按 bar 截面(多因子): 分片 → 汇合 → 策略, 毫秒到秒。 逐笔触发(做市、套利): 分片线程里一路做到报单, 不过汇合,微秒级。 账户状态 持仓、资金、在途单 只有决策线程改,别人读快照 #14 双缓冲读快照 策略 合成打分、排名 对照持仓、资金、在途单 给出买、卖、撤 事前风控 单笔、持仓上限,价格范围 报撤频率,总开关 订单管理(OMS) 订单状态机: 已报 → 部成 → 已成或已撤 大单拆成小单按时间发 (TWAP 等) #3 热路径不现分配内存 下单网关 编码成柜台、交易所的协议 会话、序号、流控 报单从网卡发出 离线回放与研究 录下的行情喂回 同一份因子代码 离线和盘中逐值对得上 才说明回放可信 行情落盘(录制) 全量写文件,攒批写 落后满一圈会被套圈 要能发现、要报警 #5 2.3 部署时的坑 监控与告警 断档、积压、延迟分位数 拒单、撤单率、仓位 只读计数器,不进热路径 异步日志 热线程往队列写一条 就走,后台线程 攒一批再写盘 #4 无锁队列与攒批 交易员指令 启停、撤单、改参数 经服务进程走队列, 送进决策线程 次数少,但要尽快生效 客户端推送 订单、持仓、算法进度 推到交易员的屏幕 人看的:几十毫秒够用 读快照,不碰热状态 行情 写一份 ← 报单 报单 回报 回报:确认、成交、撤单 → 各热线程写一条就走 指令走队列进来 订单、持仓变化 时间都是量级,用来判断该抠哪一段,不对应哪套系统;每一段的数见速查页第 2 部分。 图随文章更新:后续文章讲到新的组件时再往上补。