2. 高频行情系统架构:四层核心组件与数据流
高频行情系统是量化交易的基础设施,其架构设计直接决定了数据处理的延迟、吞吐量和可靠性。本章将系统拆解为行情接入层、行情处理层、行情分发层和行情存储层四个核心层次,详细阐述每层的职责、关键组件以及层间数据流。
架构设计原则: 高频行情系统追求极致的低延迟(微秒级)和高可用(99.999%)。每一层都采用无状态设计、水平扩展和冗余部署,确保单点故障不影响整体链路。
2.1 四层架构总览
下图展示了高频行情系统的四层逻辑架构与核心数据流方向。数据从交易所原始行情开始,经过接入、处理、分发,最终到达存储和下游消费端。
2.2 行情接入层
接入层是系统的边界,负责与交易所建立并维持低延迟的网络连接,接收原始行情数据。该层对延迟最为敏感,通常部署在交易所机房或极近端。
2.2.1 核心组件
- 交易所网关(Exchange Gateway): 针对每个交易所(如沪深交易所、CME、ICE)实现独立的网络连接管理,支持 TCP/UDP/Multicast 协议。
- 协议适配器(Protocol Adapter): 将交易所专有二进制协议(如 STEP、FIX/FAST、Binary Multicast)转换为内部统一格式。
- 会话管理器(Session Manager): 维护连接状态、序列号、重连逻辑和心跳保活。
- 心跳检测(Heartbeat Monitor): 周期性检测连接健康度,超时触发自动重连或切换备用链路。
2.2.2 数据流特征
| 指标 | 说明 |
|---|---|
| 数据源 | 交易所原始行情(逐笔成交、快照、指数等) |
| 协议格式 | 二进制、FIX/FAST、自定义组播协议 |
| 延迟要求 | 端到端 < 10μs(从网卡到接入层输出) |
| 输出格式 | 内部统一消息(含时间戳、序列号、源标识) |
关键设计: 接入层采用“主备双链路”模式,主链路故障时可在微秒级切换至备用链路,保证行情不中断。同时,所有接入节点无状态,支持水平扩展以应对多交易所接入。
2.3 行情处理层
处理层是系统的“大脑”,负责对原始行情进行解码、清洗、合成和事件化处理,生成可供交易策略直接使用的标准化行情事件。
2.3.1 核心组件
- 数据清洗(Data Cleaner): 过滤重复数据、乱序包、异常时间戳,确保数据质量。
- 解码器(Decoder): 将内部统一消息解析为结构化字段(如价格、数量、买卖方向)。
- 快照合成(Snapshot Builder): 基于逐笔成交和订单簿增量,实时合成最新快照(Level 1/Level 2)。
- 事件引擎(Event Engine): 将行情变化转化为事件(如价格变动、大单成交、盘口变化),供策略订阅。
- 延迟监控(Latency Monitor): 在每个处理节点埋点,实时统计处理延迟并上报。
2.3.2 处理流程
- 接收接入层推送的原始行情消息。
- 解码器解析消息,提取关键字段。
- 数据清洗模块校验序列号和时间戳,丢弃异常数据。
- 快照合成模块根据增量更新维护最新订单簿快照。
- 事件引擎根据预设规则生成行情事件,推送至分发层。
注意: 处理层是延迟敏感度最高的环节。所有组件必须使用无锁编程、内存池和 CPU 亲和性绑定,避免 GC 停顿和上下文切换。建议使用 C++ 或 Rust 实现核心路径。
2.4 行情分发层
分发层负责将处理后的行情事件高效、可靠地推送给多个下游消费者(如交易策略、风控系统、监控面板)。该层需要支持高并发订阅和低延迟组播。
2.4.1 核心组件
- 多播分发(Multicast Dispatcher): 使用 UDP 组播技术,实现一对多高效分发,避免点对点重复传输。
- 主题路由(Topic Router): 根据行情类型(如股票、期货、期权)和订阅粒度(逐笔、快照、指数)进行路由。
- 订阅管理器(Subscription Manager): 管理消费者订阅关系,支持动态增删和权限控制。
- 负载均衡(Load Balancer): 将高流量行情均匀分发到多个分发节点,防止单点过载。
- 流量控制(Flow Control): 当消费者处理能力不足时,主动降级或丢弃非关键数据,保护系统稳定性。
2.4.2 分发模式对比
| 模式 | 延迟 | 吞吐量 | 可靠性 | 适用场景 |
|---|---|---|---|---|
| UDP 组播 | 极低(< 5μs) | 极高(10Gbps+) | 无确认,可能丢包 | 内部局域网,策略订阅 |
| TCP 点对点 | 中等(< 50μs) | 高 | 可靠,有重传 | 跨机房、风控系统 |
| 共享内存 | 极低(< 1μs) | 极高 | 依赖进程存活 | 同机进程间通信 |
最佳实践: 高频场景下,推荐使用“组播 + 共享内存”组合:组播用于跨节点分发,共享内存用于同机进程间零拷贝传输。同时,分发层应支持“热备切换”,主节点故障时备用节点秒级接管。
2.5 行情存储层
存储层负责将行情数据持久化,用于历史回放、策略回测、事后分析和合规审计。该层需要兼顾写入性能(高吞吐)和查询性能(快速回放)。
2.5.1 核心组件
- 时序数据库(Time-Series DB): 专门优化时间序列数据的写入和范围查询,如 InfluxDB、TimescaleDB 或自研引擎。
- 列式存储(Columnar Storage): 使用 Parquet/ORC 格式存储,压缩率高,适合分析型查询。
- 数据归档(Data Archiver): 将冷数据定期迁移至低成本存储(如 HDFS、S3),保留热数据在 SSD 上。
- 回放引擎(Replay Engine): 支持按时间范围、合约、事件类型精确回放,模拟实时行情流。
- 一致性校验(Consistency Checker): 定期校验存储数据与原始数据的哈希值,确保数据完整性。
2.5.2 存储策略
| 数据层级 | 存储介质 | 保留周期 | 压缩率 | 查询延迟 |
|---|---|---|---|---|
| 热数据 | NVMe SSD | 最近 7 天 | 1:1(无压缩) | < 1ms |
| 温数据 | SATA SSD | 7 天 ~ 3 个月 | 2:1 ~ 3:1 | < 10ms |
| 冷数据 | HDD / 对象存储 | 3 个月以上 | 5:1 ~ 10:1 | < 100ms |
回放验证关键: 存储层必须支持“按序回放”和“时间旅行”功能,确保回放数据与原始行情在时间轴上完全一致。回放引擎需提供与实时分发层相同的接口,使策略无需修改即可在回放模式下运行。
2.6 层间数据流与延迟预算
下图展示了行情数据从交易所到最终消费者的完整流经路径,以及各层分配的延迟预算(以微秒计)。
2.7 架构设计要点总结
| 层次 | 核心关注点 | 关键技术 | 典型组件 |
|---|---|---|---|
| 接入层 | 低延迟连接、协议适配 | DPDK、内核旁路、零拷贝 | 交易所网关、协议适配器 |
| 处理层 | 数据清洗、快照合成 | 无锁队列、内存池、CPU 亲和性 | 解码器、事件引擎 |
| 分发层 | 高吞吐组播、订阅管理 | UDP 组播、共享内存、流控 | 多播分发、主题路由 |
| 存储层 | 高写入吞吐、快速回放 | 时序数据库、列式存储、归档 | 回放引擎、一致性校验 |
灰度发布注意事项: 在灰度发布回放验证过程中,必须确保存储层的数据与实时链路数据完全一致。建议在接入层或处理层增加“数据镜像”功能,将实时行情同时写入灰度回放集群和正式集群,以便对比验证。