Skip to content

ifree2017/szse-matching-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

深交所交易网关撮合系统

项目概述

本项目是一个支持深交所交易网关的高性能撮合系统,旨在提供低延迟、高吞吐量的交易撮合服务,满足证券交易的严格要求。系统采用分层架构设计,包括接入层、业务层、数据层和监控层,确保系统的可扩展性和可维护性。

技术栈

核心技术

  • 开发语言: Go

    • 利用Go语言的并发特性(goroutine和channel)处理高并发交易场景
    • 使用标准库的net包实现高效的网络通信
    • 采用Go的内存管理和垃圾回收机制优化性能
  • 关系型数据库: PostgreSQL

    • 用于存储历史交易数据、账户信息和系统配置
    • 利用PostgreSQL的事务特性确保数据一致性
    • 使用分区表优化大量历史数据的存储和查询性能
  • 时序数据库: InfluxDB

    • 推荐用于存储和分析行情数据、系统性能指标
    • 高效处理时间序列数据,支持高写入吞吐量
    • 提供强大的查询语言和聚合功能,便于数据分析和可视化
    • 可替代方案:TimescaleDB(PostgreSQL扩展)、Prometheus(监控指标)
  • 内存数据库/KV存储: Redis

    • 推荐用于缓存热点数据、会话管理和订单簿存储
    • 支持多种数据结构(哈希表、有序集合等),适合实现订单簿
    • 提供持久化选项,平衡性能和可靠性
    • 可替代方案:Aerospike(分布式KV存储)、RocksDB(嵌入式KV存储)

其他组件

  • 消息中间件: Kafka

    • 用于系统内部组件间的异步通信
    • 支持高吞吐量的消息处理
  • 监控系统: Prometheus + Grafana

    • 实时监控系统性能和业务指标
    • 可视化展示和告警配置

系统架构

系统由以下主要组件构成:

  1. 撮合引擎:核心交易逻辑,负责订单匹配和成交生成
  2. 交易网关:处理客户端连接和订单请求
  3. 风控服务:实施交易风险控制规则
  4. API服务:提供RESTful API接口
  5. Web UI:提供用户界面
  6. 存储层:使用PostgreSQL、Redis和InfluxDB存储不同类型的数据

组件关系图

+-------------+     +-------------+     +-------------+
|   客户端    | <-> |  交易网关   | <-> |  撮合引擎   |
+-------------+     +-------------+     +-------------+
                          ^                   ^
                          |                   |
                          v                   v
                    +-------------+     +-------------+
                    |  风控服务  | <-> |  存储层    |
                    +-------------+     +-------------+
                          ^                   ^
                          |                   |
                          v                   v
                    +-------------+     +-------------+
                    |  API服务   | <-> |   Web UI   |
                    +-------------+     +-------------+

存储架构

+------------------+    +------------------+    +------------------+
|    Redis         |    |   PostgreSQL     |    |    InfluxDB      |
| - 订单簿缓存      |    | - 订单数据        |    | - 行情数据        |
| - 实时行情        |    | - 成交记录        |    | - 性能指标        |
| - 会话信息        |    | - 账户信息        |    | - 系统监控        |
+------------------+    +------------------+    +------------------+

核心功能

撮合引擎

  • 高性能撮合算法: 实现价格优先、时间优先的撮合算法
  • 订单类型支持: 支持限价单和市价单
  • 订单簿管理: 高效的订单簿数据结构,支持快速查询和更新
  • 定时快照: 定期保存订单簿状态,支持故障恢复
  • 性能指标: 集成Prometheus指标,监控撮合性能

交易网关

  • 客户端连接管理: 支持多客户端并发连接
  • 会话管理: 客户端认证和会话维护
  • 订单处理: 接收、验证和转发订单请求
  • 消息分发: 向客户端推送成交回报和行情数据

风控系统

  • 多种风控规则: 支持单笔订单金额限制、单日交易金额限制、单日交易次数限制等
  • 证券黑名单: 支持禁止交易特定证券
  • 账户资金检查: 验证账户资金是否足够
  • 规则动态管理: 支持动态启用/禁用风控规则

API服务

  • RESTful API: 提供订单、成交、行情等数据查询接口
  • 账户管理: 支持查询账户信息、持仓和余额
  • CORS支持: 支持跨域资源共享
  • 指标集成: 集成Prometheus指标,监控API性能

Web UI

  • 实时行情: 显示实时价格、成交量和订单簿
  • 订单管理: 支持下单、撤单和查询订单状态
  • 成交记录: 查看历史成交记录
  • 账户信息: 显示账户余额和持仓
  • 响应式设计: 适配不同屏幕尺寸

存储层

  • 多存储引擎: 支持PostgreSQL、Redis和InfluxDB
  • 数据分层: 不同类型数据使用适合的存储引擎
  • 缓存机制: 使用Redis缓存热点数据
  • 时序数据: 使用InfluxDB存储行情和性能指标

性能优化

  • 低延迟优化: 无锁数据结构,内存预分配,对象池
  • 高吞吐量: 多级缓存设计,批处理机制,异步处理

开发与部署

环境要求

  • Go 1.18+
  • PostgreSQL 14+
  • Redis 6+
  • InfluxDB 2.x
  • Kafka 2.8+
  • Docker 和 Docker Compose (可选,用于容器化部署)

快速开始

使用Makefile

项目提供了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 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/               # 测试

文档

系统提供了详细的文档,帮助开发者理解和使用各个组件:

许可证

MIT License

About

支持深交所交易网关的模拟撮合系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors