# gitbitex-new **Repository Path**: 34384878/gitbitex-new ## Basic Information - **Project Name**: gitbitex-new - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-08 - **Last Updated**: 2026-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GitBitEx 开源加密货币交易所 ## 项目概述 GitBitEx 是一个高性能的开源加密货币交易所系统,采用全内存撮合引擎设计,支持高并发交易和分布式部署。 ### 核心特性 - **全内存撮合引擎**:所有订单簿数据存储在内存中,提供极致性能 - **分布式部署支持**:支持备用模式,确保系统高可用性 - **高吞吐量**:支持每秒 100,000 笔订单处理(Intel i7-10700K 测试环境) - **命令重放机制**:支持撮合引擎命令重放,确保每次结果完全一致 - **快照持久化**:定期保存引擎状态快照,支持故障恢复 - **实时数据推送**:通过 WebSocket 实时推送市场数据 ## 技术栈 ### 后端框架 - **Java 17** - 编程语言 - **Spring Boot 2.6.4** - 应用框架 - **Spring WebSocket** - WebSocket 支持 - **Spring Actuator** - 应用监控 ### 数据存储 - **MongoDB 5** - 主数据库(副本集模式) - **Redis 7.0** - 缓存和会话管理 - **Kafka 3.4.0** - 消息队列(命令分发) ### 工具库 - **Lombok** - 代码简化 - **FastJSON** - JSON 处理 - **Redisson** - Redis 客户端 - **Guava** - Google 工具库 - **OkHttp** - HTTP 客户端 - **MongoDB Driver** - MongoDB 驱动 ### 监控和文档 - **Micrometer** - 监控指标收集 - **Prometheus** - 监控数据存储 - **SpringDoc OpenAPI** - API 文档生成 ## 项目架构 ### 核心模块 ``` gitbitex-new/ ├── matchingengine/ # 撮合引擎模块 │ ├── MatchingEngine.java # 撮合引擎核心 │ ├── OrderBook.java # 订单簿 │ ├── Order.java # 订单对象 │ ├── Account.java # 账户对象 │ ├── Product.java # 交易产品 │ ├── command/ # 命令定义 │ ├── message/ # 消息定义 │ └── snapshot/ # 快照管理 │ ├── marketdata/ # 市场数据模块 │ ├── entity/ # 数据库实体 │ ├── repository/ # 数据访问层 │ ├── manager/ # 业务管理层 │ ├── orderbook/ # 订单簿管理 │ └── *PersistenceThread.java # 数据持久化线程 │ ├── openapi/ # 开放 API 模块 │ └── controller/ # REST API 控制器 │ ├── feed/ # 数据推送模块 │ └── message/ # 推送消息定义 │ ├── middleware/ # 中间件配置 │ ├── kafka/ # Kafka 配置 │ ├── mongodb/ # MongoDB 配置 │ └── redis/ # Redis 配置 │ └── wallet/ # 钱包接口模块 ``` ### 撮合引擎工作原理 1. **命令接收**:通过 Kafka 接收交易命令(下单、撤单、充提等) 2. **命令执行**:在内存中执行命令,更新订单簿和账户状态 3. **消息发送**:将执行结果通过 Kafka 发送给市场数据模块 4. **快照保存**:定期保存引擎状态快照到 MongoDB 5. **故障恢复**:重启时从快照恢复,然后重放未处理的命令 ### 数据流转 ``` 用户请求 → REST API → Kafka → 撮合引擎 → Kafka → 市场数据模块 → MongoDB ↓ WebSocket 推送 ``` ## 快速开始 ### 环境要求 - Docker - JDK 17+ - Maven 3.x ### 配置主机 编辑 `/etc/hosts` 文件,添加 MongoDB 副本集配置: ``` 127.0.0.1 mongo1 127.0.0.1 mongo2 127.0.0.1 mongo3 ``` ### 启动步骤 1. **克隆项目** ```bash git clone https://github.com/gitbitex/gitbitex-new.git cd gitbitex-new ``` 2. **启动基础设施** ```bash docker compose up -d ``` 3. **编译项目** ```bash mvn clean package -Dmaven.test.skip=true ``` 4. **运行应用** ```bash cd target java -jar gitbitex-0.0.1-SNAPSHOT.jar ``` 5. **访问应用** - 主页: http://127.0.0.1/ - API 文档: http://127.0.0.1/swagger-ui/index.html - Prometheus 指标: http://127.0.0.1:7002/actuator/prometheus ## 核心 API ### 添加交易产品 ```bash curl -X PUT -H "Content-Type:application/json" \ http://127.0.0.1/api/admin/products \ -d '{"baseCurrency":"BTC","quoteCurrency":"USDT"}' ``` ### 下单 ```bash curl -X POST -H "Content-Type:application/json" \ http://127.0.0.1/api/orders \ -d '{ "productId":"BTCUSDT", "type":"LIMIT", "side":"BUY", "price":"50000", "amount":"0.1" }' ``` ## 性能监控 项目内置了 Prometheus 性能指标,可用于监控撮合引擎性能: ### 关键指标 - **gbe_matching_engine_command_processed_total** - 撮合引擎处理的命令总数 - **gbe_matching_engine_modified_object_created_total** - 已创建的待保存对象数 - **gbe_matching_engine_modified_object_saved_total** - 已保存的对象数 - **gbe_matching_engine_snapshot_taker_modified_objects_queue_size** - 待写入快照的对象队列大小 ### 监控建议 使用 Prometheus + Grafana 搭建监控系统: 1. 配置 Prometheus 抓取 `http://127.0.0.1:7002/actuator/prometheus` 2. 创建 Grafana 仪表板 3. 监控命令处理速率和对象保存速率的差值 ## 常见问题 ### 项目是否包含区块链钱包? 不包含。你需要自己实现钱包模块,然后接入 GitBitEx。例如: - 用户充值后,发送 `DepositCommand` 到撮合引擎 - 用户提现时,发送 `WithdrawalCommand` 到撮合引擎 ### 如何提高系统吞吐量? 1. 使用更高性能的 CPU(撮合引擎是单线程的) 2. 增加 Kafka 分区数(支持分布式部署) 3. 优化 MongoDB 索引 4. 调整快照保存频率 ### 如何备份和恢复数据? 1. **备份**:定期备份 MongoDB 数据 2. **恢复**:从 MongoDB 快照恢复,然后重放 Kafka 命令 ## 相关项目 - **前端项目**: https://github.com/gitbitex/gitbitex-web ## 联系方式 - Telegram: https://t.me/greensheng ## 许可证 参见 [LICENSE](LICENSE) 文件 ## 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request