2. 系统架构总览:整体架构设计、数据流与处理流程、核心模块划分
因子研究低延迟评分系统的核心目标是在极短时间内完成海量市场数据的接收、清洗、因子计算、评分聚合与结果输出。本章从宏观视角拆解系统的整体架构,明确数据流转路径与各模块职责,为后续章节的详细实现奠定基础。
2.1 整体架构设计
系统采用分层解耦 + 事件驱动的架构风格,自底向上分为四层:数据接入层、计算引擎层、评分服务层与输出分发层。各层之间通过无锁环形缓冲区(Lock-Free Ring Buffer)或零拷贝内存通道通信,最大限度降低线程切换与数据拷贝带来的延迟。
架构设计原则:
- 低延迟优先:所有模块设计以纳秒级延迟为目标,避免阻塞式 I/O 与锁竞争。
- 可扩展性:因子计算节点支持水平扩展,通过一致性哈希分配计算任务。
- 容错性:关键模块采用主备热切换,数据流具备重放与校验机制。
2.2 数据流与处理流程
数据在系统中的流转遵循“单次写入、多次读取”原则,避免数据拷贝。完整的处理流程分为以下六个阶段:
| 阶段 | 输入 | 处理动作 | 输出 | 延迟目标 |
|---|---|---|---|---|
| 1. 数据接收 | 网络数据包 | 内核旁路 (DPDK) 收包,协议解析 | 标准化行情消息 | < 1 μs |
| 2. 数据清洗 | 行情消息 | 去重、时间戳校准、异常值过滤 | 干净数据快照 | < 500 ns |
| 3. 因子计算 | 数据快照 | 向量化算子执行,JIT 编译表达式 | 因子值数组 | < 5 μs |
| 4. 评分聚合 | 因子值 | 权重加权、归一化、异常截断 | 综合评分 | < 2 μs |
| 5. 结果分发 | 综合评分 | 内存广播 + 日志写入 | 评分结果消息 | < 1 μs |
| 6. 监控反馈 | 各阶段指标 | 延迟采样、吞吐统计、异常告警 | 监控面板数据 | 异步 |
关键优化点:阶段 2 与阶段 3 之间采用批量流水线模式,将多个数据快照打包成向量批次,利用 CPU SIMD 指令集并行计算,显著提升吞吐量。
2.3 核心模块划分
根据功能内聚性与延迟敏感度,系统划分为以下六个核心模块。每个模块独立部署、独立调优,通过预定义的接口契约进行交互。
| 模块名称 | 职责 | 关键技术 | 延迟敏感度 |
|---|---|---|---|
| 行情网关 | 多源行情接入、协议解析、数据标准化 | DPDK、FIX/ITCH 解析器、内存池 | 极高 |
| 数据清洗引擎 | 去重、时间戳对齐、异常过滤 | 布隆过滤器、滑动窗口、SIMD 比较 | 高 |
| 因子计算引擎 | 因子表达式解析、向量化计算、结果缓存 | JIT 编译、AVX-512、表达式树 | 极高 |
| 评分聚合器 | 多因子权重聚合、归一化、评分输出 | 预计算权重表、定点数运算 | 高 |
| 结果分发器 | 内存广播、日志持久化、外部推送 | 共享内存、UDP 组播、异步 I/O | 中 |
| 监控与治理 | 延迟采样、吞吐统计、配置热更新 | perf 事件、环形缓冲区指标、etcd | 低 |
模块间通信注意事项:因子计算引擎与评分聚合器之间禁止使用网络通信,必须通过共享内存映射或无锁队列传递数据,否则会引入微秒级延迟抖动,破坏低延迟链路。
2.4 模块间接口定义示例
以下为因子计算引擎与评分聚合器之间的内存接口结构体定义(C++ 伪代码):
// 因子值快照结构体(共享内存布局)
struct alignas(64) FactorSnapshot {
uint64_t timestamp_ns; // 时间戳(纳秒)
uint32_t symbol_id; // 证券 ID
uint32_t factor_id; // 因子 ID
double value; // 因子值
uint8_t quality_flag; // 质量标记(0=正常, 1=异常)
uint8_t padding[7]; // 填充至 64 字节对齐
};
// 无锁多生产者单消费者队列(MPSC)
template<typename T, size_t Capacity>
class MPSCQueue {
// ... 基于 CAS 的入队/出队操作
};
通过上述结构体与无锁队列,因子计算引擎将计算结果直接写入共享内存,评分聚合器以轮询方式零拷贝读取,端到端延迟稳定在 1~2 μs 以内。