系统架构总览:分层架构设计

做量化做市系统,第一件事不是写代码,而是想清楚架构。我见过太多团队,一上来就撸策略代码,结果数据流乱成一锅粥,订单发不出去,成交回报对不上。嗯,这就是典型的「地基没打好」。

今天咱们聊聊系统架构的总览。说白了,就是怎么把一个大系统拆成几块,每块干什么活,块与块之间怎么通信。

一、分层架构设计:数据层、策略层、执行层

我个人习惯把做市系统分成三层:数据层、策略层、执行层。为什么是三层?你想想看,做市的核心流程就是:拿数据 → 算价格 → 发订单。这三件事的节奏完全不同,硬塞在一起会出问题。

核心原则:每一层只关心自己的事,不越界。数据层只管数据清洗和缓存,策略层只管定价和信号,执行层只管订单管理和风控。

1. 数据层(Data Layer)

数据层是系统的「眼睛」。它负责从交易所接收行情、从数据库拉取历史数据、从外部API获取参考数据。

我在项目中遇到过一个问题:行情数据来了,策略层直接去解析,结果行情一波动,策略层CPU被打满,订单都发不出去。后来我们把数据层独立出来,用环形缓冲区做数据缓存,策略层只管读,不管收。

  • 行情接入:WebSocket/FIX协议,多路复用
  • 数据清洗:去重、补全、时间对齐
  • 数据缓存:内存数据库(Redis)或环形缓冲区
  • 历史数据:ClickHouse/InfluxDB,用于回测和分析

2. 策略层(Strategy Layer)

策略层是系统的「大脑」。它根据数据层提供的行情,计算做市报价、管理库存风险、生成交易信号。

这里有个坑:策略层不要直接操作订单。我曾经见过一个策略,算完价格直接调用交易所API发单,结果网络延迟导致重复下单,亏了不少。策略层只输出「信号」,执行层负责「干活」。

  • 定价引擎:计算买卖报价(Spread、Mid Price)
  • 库存管理:控制持仓风险,避免单边暴露
  • 信号生成:基于市场微观结构、订单簿不平衡等
  • 回测框架:离线验证策略有效性

3. 执行层(Execution Layer)

执行层是系统的「手脚」。它接收策略层的信号,负责发单、撤单、管理订单生命周期。

执行层最怕什么?怕订单卡住。我记得有一次,交易所网关挂了,执行层还在不断重发订单,结果交易所恢复后,一堆重复订单飞出去。后来我们加了「订单状态机」,每个订单都有明确的状态流转,超时自动熔断。

  • 订单管理:创建、修改、撤销、查询
  • 路由管理:支持多交易所、多账户
  • 风控检查:资金检查、频率限制、价格偏离
  • 成交回报:实时推送成交信息到策略层

我的建议:三层之间用消息队列(如Kafka、NATS)通信,不要直接RPC调用。这样即使某一层挂了,其他层还能继续工作。数据层挂了,策略层还能用缓存数据撑一会儿。

二、微服务 vs 单体架构的选择

这个问题我经常被问到。很多新手一上来就说「我们要用微服务」,结果搞了一堆服务,运维成本比开发成本还高。

我的观点很简单:看规模,看团队

维度 单体架构 微服务架构
开发速度 快,适合小团队 慢,需要基础设施
部署复杂度 低,一个包搞定 高,需要容器编排
扩展性 整体扩展,资源浪费 按需扩展,灵活
故障隔离 一个bug拖垮全部 单个服务故障不影响全局
运维成本 高,需要监控、日志、链路追踪

我个人习惯:初期用单体,后期拆微服务。做市系统对延迟敏感,微服务之间的网络通信会引入额外延迟。如果你只有一两个交易所,一个策略,单体架构完全够用。

什么时候拆?当你发现:

  • 数据层和策略层的负载差异太大(数据层需要高吞吐,策略层需要低延迟)
  • 需要支持多个策略同时运行,且互不干扰
  • 团队扩大到5人以上,需要独立部署和迭代

避坑指南:我曾经见过一个团队,一开始就搞了10个微服务,结果每次上线都要协调半天,一个服务升级导致其他服务不兼容。记住:微服务不是银弹,它解决的是「组织复杂度」,不是「技术复杂度」。

三、核心模块划分

不管用单体还是微服务,核心模块是固定的。我习惯把系统分成以下几个模块:

  1. 行情模块(Market Data):负责行情接入、解析、分发。支持多交易所、多品种。
  2. 策略引擎(Strategy Engine):加载策略、管理策略生命周期、执行策略逻辑。
  3. 订单管理(Order Manager):订单状态机、订单路由、成交回报处理。
  4. 风控模块(Risk Control):资金风控、频率风控、价格风控、持仓风控。
  5. 账户模块(Account Manager):管理交易所账户、API Key、资金余额。
  6. 监控模块(Monitoring):系统指标、告警、日志、链路追踪。
  7. 数据存储(Data Storage):行情数据、交易数据、策略参数、系统配置。

下面这张图展示了各模块之间的关系:

量化做市系统核心模块架构图 数据层 行情模块 数据存储 账户模块 策略层 策略引擎 风控模块 执行层 订单管理 监控模块 行情数据 交易信号 交易所(外部系统) 订单/成交

这张图里,数据层负责从交易所拿数据,经过清洗后推给策略层。策略层算出信号,交给执行层发单。执行层把订单发到交易所,成交回报再通过数据层反馈回来。整个流程是闭环的。

我的经验:模块之间一定要定义清晰的接口。比如行情模块输出的数据结构,策略层怎么消费,这些都要提前约定好。否则后期改接口,牵一发而动全身。

最后说一句:架构设计没有标准答案。你团队有3个人,用单体;有30个人,拆微服务。关键是别过度设计。我见过太多系统,还没跑起来,先被架构搞死了。

嗯,今天就聊这么多。记住:数据层要稳,策略层要准,执行层要快。这三层配合好了,做市系统就成功了一半。


专注资料整理