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 处理流程

  1. 接收接入层推送的原始行情消息。
  2. 解码器解析消息,提取关键字段。
  3. 数据清洗模块校验序列号和时间戳,丢弃异常数据。
  4. 快照合成模块根据增量更新维护最新订单簿快照。
  5. 事件引擎根据预设规则生成行情事件,推送至分发层。
注意: 处理层是延迟敏感度最高的环节。所有组件必须使用无锁编程、内存池和 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 SSD7 天 ~ 3 个月2:1 ~ 3:1< 10ms
冷数据HDD / 对象存储3 个月以上5:1 ~ 10:1< 100ms
回放验证关键: 存储层必须支持“按序回放”和“时间旅行”功能,确保回放数据与原始行情在时间轴上完全一致。回放引擎需提供与实时分发层相同的接口,使策略无需修改即可在回放模式下运行。

2.6 层间数据流与延迟预算

下图展示了行情数据从交易所到最终消费者的完整流经路径,以及各层分配的延迟预算(以微秒计)。

层间数据流与延迟预算 层间数据流与延迟预算(单位:μs) 交易所 5μs 接入层 10μs 处理层 15μs 分发层 5μs 存储层 回放 消费者 实时 总端到端延迟预算:5μs(网络)+ 10μs(接入)+ 15μs(处理)+ 5μs(分发)= 35μs 存储层为异步写入,不阻塞实时链路;回放路径延迟取决于存储介质,通常 < 1ms

2.7 架构设计要点总结

层次核心关注点关键技术典型组件
接入层低延迟连接、协议适配DPDK、内核旁路、零拷贝交易所网关、协议适配器
处理层数据清洗、快照合成无锁队列、内存池、CPU 亲和性解码器、事件引擎
分发层高吞吐组播、订阅管理UDP 组播、共享内存、流控多播分发、主题路由
存储层高写入吞吐、快速回放时序数据库、列式存储、归档回放引擎、一致性校验
灰度发布注意事项: 在灰度发布回放验证过程中,必须确保存储层的数据与实时链路数据完全一致。建议在接入层或处理层增加“数据镜像”功能,将实时行情同时写入灰度回放集群和正式集群,以便对比验证。