系统总体架构(第一版)
目标:构建一个高性能、弹性、可在线热加载策略与在线更新配置的加密货币套利系统。系统由 Rust(执行层) 和 Python(策略层) 协作组成。设计原则:模块化、可观测、可扩展、可安全热重载。
总体组件视图
+----------------+ +----------------+ +----------------+
| ExchangeFeeds | <----> | Rust Core | <----> | Message Bus |
| (WS/REST) | | (Execution) | | (NATS/Redis/Kafka)
+----------------+ +----------------+ +----------------+
^ ^ ^
| | |
+--------+ | +---------+
| | |
+-------------+ | +---------------+
| Shared Cache|<-+ | Python Policy |
| (Redis/mmap)| | (hot-loadable) |
+-------------+ +---------------+
^ |
| |
+--------------+ +----------+
| Config Store | <-----> | Admin UI |
| (etcd/Consul)| +----------+
+--------------+
核心组件说明(简洁版)
ExchangeFeeds(多交易所采集)
- 负责稳定订阅交易所的 WebSocket 行情(depth/tick/trade)和轮询 REST(余额、写单结果)。
- 要点:连接池、自动重连、限速、心跳。
Rust Core(Execution Engine)
- 负责快速撮合、下单、确认、风控。严格做两件事:低延迟执行 + 状态机一致性。
- 提供 gRPC / local IPC 接口供策略层下达命令。
- 持久化执行日志到高吞吐存储(Kafka/ClickHouse/Timescale)用于回放与审计。
Message Bus(NATS / Redis Streams / Kafka)
- 负责不同模块间的异步数据流:行情、聚合、策略信号、执行回报。
- 选择:若延迟最关键选 NATS;需持久化/回溯选 Kafka;简单部署可用 Redis Streams。
Shared Cache(Redis + mmap/共享内存)
- 高频共享结构(最近 orderbook 快照、top-of-book)用共享内存或 mmap 存放,Rust 持写,Python 读快速访问。
- Redis 用作全局短时状态、限额计数器、锁。
Python Policy(策略层)
- 策略以插件形式存在(每个策略为一个独立包或脚本)。
- 支持在线热加载:通过加载器加载新的策略包或替换已有策略实例,不重启主进程。
- 决策结果以标准指令发送到 Message Bus 或直接 gRPC 调用 Rust Core。
Config Store(etcd/Consul) + Admin UI
- 所有运行时配置(交易对白名单、风控阈值、策略参数)存储在 etcd/Consul。
- Admin UI 可以在线修改配置,变更通过 watch 推送到各个实例。
监控与告警
- Prometheus + Grafana:采集延迟、失败率、订单确认时间、资金风险指标。
- 日志聚合(ELK 或 Loki)。
存储与回放
- 行情原始流与执行事件写入 Kafka(或 S3)做回放与回测。
热加载(hot-load)策略设计
策略插件化
- 每个策略是一个独立包(Python 模块),遵循统一接口:
init(config),on_tick(data),on_signal(...),shutdown()。 - 策略以进程内沙箱运行(可选使用子进程隔离)。
- 每个策略是一个独立包(Python 模块),遵循统一接口:
热加载流程
管理端(Admin UI)上传策略包到策略仓库(或 S3)。
策略管理器(在 Python 层)检测到新版本后:
- 将旧实例标记为
drain(停止接收新信号,完成未完成任务), - 动态导入新策略模块并
init,进行小流量验证(canary), - 验证通过后切换路由到新实例;失败则回滚到旧实例。
- 将旧实例标记为
安全与隔离
- 策略运行在有限权限的环境(容器或子进程),禁止直接访问关键凭证。
- 使用资源限制(CPU/内存/网络)和超时监控。
配置热更新
- 配置存在 etcd/Consul。各节点开启 watch,变更后即时加载到内存并通知策略与 Rust。
- 同时写入变更日志,支持 diff/回滚。
缩放(Scaling)策略
- 水平扩展 Rust Core 实例:每个实例处理一组交易所或交易对。使用负载分片(shard by symbol)和 leader 选举控制写入权限。
- 策略层水平扩展:策略可按策略ID水平扩容,消息总线负责分发(consumer groups)。
- 弹性扩容:在Kubernetes中通过 HPA(基于自定义指标:延迟/处理速率)自动扩容。
接口与协议(简洁清单)
- 行情流:WebSocket -> Rust -> Message Bus(topic:
market.<exchange>.<symbol>) - 策略信号:Python -> Message Bus(topic:
signal.<strategy>) 或 gRPC/REST -> Rust - 执行回报:Rust -> Message Bus(topic:
exec.<order_id>) -> Python - Config:Admin UI <-> etcd (watch)
容错与回滚
- 所有关键变更(策略版本、配置)必须支持回滚。
- 策略热替换采用 Canary 发布策略,失败自动回滚并告警。
- 关键路径(下单)双写日志并在本地做幂等检查。
部署建议(快速列出)
- 使用 Kubernetes + Helm。容器化 Rust、Python、NATS/Redis、etcd、Prometheus。
- CI/CD:策略包与镜像分开部署。策略包可通过 Admin UI 或 CI 上传。
- Secrets:使用 Kubernetes Secrets 或 Vault 管理 API key。
下一步(建议的工程任务清单)
- 确认消息总线选型(NATS / Redis Streams / Kafka)。
- 实现 Rust Core 最小可用原型(行情订阅 + 本地下单模拟)。
- 实现 Python 插件热加载框架(含 canary + rollback)。
- 集成 etcd 配置 watch 与 Admin UI。
- 完成监控与回放管道(Prometheus + Kafka)。
文档结束。
我已为你创建并保存了系统架构文档(可在线查看 / 编辑)。
接下来我可以直接:
- 把某个模块展开成详细设计(例如:Rust Execution Engine 或 Python 热加载框架)。
- 给出具体的技术选型对比(NATS vs Kafka vs Redis Streams、etcd vs Consul 等)。
- 输出可运行的最小原型代码样例(Rust + Python 的通信示例)。
你想先做哪一项?

