开发文档
| 版本号 | 修改 | 修改时间 | 备注 |
|---|---|---|---|
| v1.0.0 | 王小琱 | 2024.12.20 | 初次修订 |
1. 项目简介
- 服务名称:
exchange-market-agg-backend - 服务描述:本项目为交易所、金融等业务提供市场行情聚合、K线数据处理与推送,支持多交易对、多周期K线、实时行情聚合、数据校验等功能。
- 所属模块:行情聚合与推送服务。
- 负责人:王小琱(wang746277441@gmail.com)
2. 功能描述
- 聚合多交易对的市场K线数据(如BTC/USDT、ETH/USDT等)。
- 支持多种K线周期(秒、分钟、小时、天、周、月)。
- 实时推送最新行情、K线、盘口等数据。
- 支持K线数据的校验与标记。
- 支持行情数据的持久化存储与查询。
- 支持与RabbitMQ、Redis等中间件集成。
- 提供Prometheus监控接口。
3. 系统架构
3.1 主要技术栈
- 编程语言:[Go / Protocol Buffers v3]
- 服务框架:[Go Micro / GORM]
- 数据库:[MySQL]
- API接口:[gRPC]
- 监控:[Prometheus]
- 容器编排:[Docker]
- 消息队列:RabbitMQ
- 缓存:Redis
备注:具体依赖版本详见go.mod文件。
3.2 架构图
3.2.1 启动初始化
3.2.2 实时更新 + 定时推送
3.2.3 查询
3.3 架构概括
业务层(Business Layer)
包含
market-agg服务的多个功能模块,负责完成行情数据的采集、处理、推送与查询。包括:- 启动初始化模块(Spot Initializer):启动时从 Spot Clearing 和 Currency Service 拉取初始行情与币种配置,并初始化本地内存数据。
- 实时更新模块(MQ Consumer):消费 RabbitMQ 中的成交与挂单信息,实时更新本地订单簿和行情数据。
- 数据推送模块(MQ Publisher):定时将内存中的 K线、Depth、Trade 数据推送到 RabbitMQ。
- API 查询模块(Market API):对外提供标准的行情查询接口,从本地内存中返回结果。
基础服务层(Infrastructure Layer)
提供支撑服务和基础设施,包括:
- RabbitMQ:作为消息通信中枢,支持成交/挂单事件消费及行情数据分发。
- MySQL:作为可选持久化存储,支持对行情数据的归档与分析。
- Spot Clearing Service:外部初始行情数据源,在服务启动时被调用。
- Currency Service:提供币种配置、精度等元信息,供初始化与运行时使用。
3.4 业务流程
3.4.1 数据查询
3.4.2 数据更新
3.4.3 数据推送
4. 依赖组件
| 组件 | 版本 | 说明 |
|---|---|---|
| MySQL | 8.x | 关系型数据库 |
| RabbitMQ | 3.x | 消息队列 |
| Redis | 6.x | 缓存 |
5. 接口设计
见接口文档
使用
make doc可以重新生成接口文档。
6. 数据库设计
见数据库设计文档.
数据采用分表设计,分表策略为:根据交易对和周期分表,例如:market_btc_hkd_1_minute、market_btc_hkd_1_day等。
7. 项目部署
见部署文档
8. 错误码定义
| 错误码 | 错误信息 | 说明 |
|---|---|---|
| ErrSystem | 内部错误 | 内部服务调用失败 |
9. FAQ
1. 如何扩展推送通道?
- 可通过增加MQ Exchange或实现新的推送模块扩展。
2. 服务启动报环境变量缺失?
- 检查.env配置文件,确保所有必填环境变量已配置。
3. 如何接入新的行情源?
- 实现对应的数据采集模块,并通过RabbitMQ推送到聚合服务。
