架构地图
点一个框看它做什么、为什么这样设计;选一条路径,一步一步看一条行情怎么变成一笔成交。蓝字可以直接点开对应的文章。
English
速查页
静态图
一条行情到下单
逐笔触发
一笔成交回来
旁路与指令
开盘蜂拥
看原尺寸
交易系统架构地图:一条行情怎么变成一笔成交
蓝字 = 在哪里讲过(#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 部分。
图随文章更新:后续文章讲到新的组件时再往上补。