本项目是一个支持深交所交易网关的高性能撮合系统,旨在提供低延迟、高吞吐量的交易撮合服务,满足证券交易的严格要求。系统采用分层架构设计,包括接入层、业务层、数据层和监控层,确保系统的可扩展性和可维护性。
-
开发语言: Go
- 利用Go语言的并发特性(goroutine和channel)处理高并发交易场景
- 使用标准库的net包实现高效的网络通信
- 采用Go的内存管理和垃圾回收机制优化性能
-
关系型数据库: PostgreSQL
- 用于存储历史交易数据、账户信息和系统配置
- 利用PostgreSQL的事务特性确保数据一致性
- 使用分区表优化大量历史数据的存储和查询性能
-
时序数据库: InfluxDB
- 推荐用于存储和分析行情数据、系统性能指标
- 高效处理时间序列数据,支持高写入吞吐量
- 提供强大的查询语言和聚合功能,便于数据分析和可视化
- 可替代方案:TimescaleDB(PostgreSQL扩展)、Prometheus(监控指标)
-
内存数据库/KV存储: Redis
- 推荐用于缓存热点数据、会话管理和订单簿存储
- 支持多种数据结构(哈希表、有序集合等),适合实现订单簿
- 提供持久化选项,平衡性能和可靠性
- 可替代方案:Aerospike(分布式KV存储)、RocksDB(嵌入式KV存储)
-
消息中间件: Kafka
- 用于系统内部组件间的异步通信
- 支持高吞吐量的消息处理
-
监控系统: Prometheus + Grafana
- 实时监控系统性能和业务指标
- 可视化展示和告警配置
系统由以下主要组件构成:
- 撮合引擎:核心交易逻辑,负责订单匹配和成交生成
- 交易网关:处理客户端连接和订单请求
- 风控服务:实施交易风险控制规则
- API服务:提供RESTful API接口
- Web UI:提供用户界面
- 存储层:使用PostgreSQL、Redis和InfluxDB存储不同类型的数据
+-------------+ +-------------+ +-------------+
| 客户端 | <-> | 交易网关 | <-> | 撮合引擎 |
+-------------+ +-------------+ +-------------+
^ ^
| |
v v
+-------------+ +-------------+
| 风控服务 | <-> | 存储层 |
+-------------+ +-------------+
^ ^
| |
v v
+-------------+ +-------------+
| API服务 | <-> | Web UI |
+-------------+ +-------------+
+------------------+ +------------------+ +------------------+
| Redis | | PostgreSQL | | InfluxDB |
| - 订单簿缓存 | | - 订单数据 | | - 行情数据 |
| - 实时行情 | | - 成交记录 | | - 性能指标 |
| - 会话信息 | | - 账户信息 | | - 系统监控 |
+------------------+ +------------------+ +------------------+
- 高性能撮合算法: 实现价格优先、时间优先的撮合算法
- 订单类型支持: 支持限价单和市价单
- 订单簿管理: 高效的订单簿数据结构,支持快速查询和更新
- 定时快照: 定期保存订单簿状态,支持故障恢复
- 性能指标: 集成Prometheus指标,监控撮合性能
- 客户端连接管理: 支持多客户端并发连接
- 会话管理: 客户端认证和会话维护
- 订单处理: 接收、验证和转发订单请求
- 消息分发: 向客户端推送成交回报和行情数据
- 多种风控规则: 支持单笔订单金额限制、单日交易金额限制、单日交易次数限制等
- 证券黑名单: 支持禁止交易特定证券
- 账户资金检查: 验证账户资金是否足够
- 规则动态管理: 支持动态启用/禁用风控规则
- RESTful API: 提供订单、成交、行情等数据查询接口
- 账户管理: 支持查询账户信息、持仓和余额
- CORS支持: 支持跨域资源共享
- 指标集成: 集成Prometheus指标,监控API性能
- 实时行情: 显示实时价格、成交量和订单簿
- 订单管理: 支持下单、撤单和查询订单状态
- 成交记录: 查看历史成交记录
- 账户信息: 显示账户余额和持仓
- 响应式设计: 适配不同屏幕尺寸
- 多存储引擎: 支持PostgreSQL、Redis和InfluxDB
- 数据分层: 不同类型数据使用适合的存储引擎
- 缓存机制: 使用Redis缓存热点数据
- 时序数据: 使用InfluxDB存储行情和性能指标
- 低延迟优化: 无锁数据结构,内存预分配,对象池
- 高吞吐量: 多级缓存设计,批处理机制,异步处理
- Go 1.18+
- PostgreSQL 14+
- Redis 6+
- InfluxDB 2.x
- Kafka 2.8+
- Docker 和 Docker Compose (可选,用于容器化部署)
项目提供了Makefile,可以方便地构建和运行各个组件:
# 构建所有组件
make build
# 初始化数据库
make init-db
# 运行各个服务
make run-matching # 运行撮合引擎
make run-gateway # 运行交易网关
make run-risk # 运行风控服务
make run-api # 运行API服务
make run-webui # 运行Web UI
# 运行工具
make run-market-data # 运行行情数据生成器
make run-client # 运行客户端模拟器
make run-engine-test # 运行撮合引擎测试查看所有可用命令:
make help项目支持使用Docker Compose进行容器化部署:
# 构建Docker镜像
make docker-build
# 或者直接使用
docker-compose build
# 启动所有服务
make docker-up
# 或者直接使用
docker-compose up -d
# 停止所有服务
make docker-down
# 或者直接使用
docker-compose down# 克隆仓库
git clone https://github.com/yourusername/szse-matching-engine.git
cd szse-matching-engine
# 安装依赖
go mod download
# 编译各个组件
go build -o bin/matching cmd/matching/main.go
go build -o bin/gateway cmd/gateway/main.go
go build -o bin/risk cmd/risk/main.go
go build -o bin/api cmd/api/main.go
go build -o bin/webui cmd/webui/main.go
# 运行
./bin/matching-engine -config config/config.yaml# 运行单元测试
go test ./...
# 运行基准测试
go test -bench=. ./...├── cmd/ # 应用入口
├── internal/ # 内部包
│ ├── gateway/ # 接入层
│ ├── matching/ # 撮合引擎
│ ├── risk/ # 风控系统
│ └── storage/ # 数据存储
├── pkg/ # 公共包
│ ├── protocol/ # 协议定义
│ ├── model/ # 数据模型
│ └── utils/ # 工具函数
├── config/ # 配置文件
├── scripts/ # 脚本工具
├── docs/ # 文档
└── test/ # 测试
系统提供了详细的文档,帮助开发者理解和使用各个组件: