Files
hfb_sys/docs/项目架构分析报告.md
T
ymlandClaude Opus 4.8 082fd908e9 完成压力测试工具优化和文档整理
主要改进:
- 优化压测工具:支持真实认证、智能商品ID预加载、详细统计指标
- 修复Token生成问题:支持固定验证码和自动重试机制
- 修复商品404问题:启动时预加载可用商品ID列表
- 新增测试场景:realistic(真实业务)、admin(管理后台)、listing_only(商品查询)
- 新增梯度压测:逐步加压找到系统性能极限
- 优化数据生成脚本:批量INSERT提升50-100倍性能
- 整理文档:删除5个过时文档,保留2个最新文档
- 新增快速上手指南:docs/压力测试使用指南.md

性能基线(10并发):
- QPS: 2,600+
- P50/P95/P99延迟: 3ms/7ms/10ms

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 01:10:07 +08:00

673 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HFB_SYS 项目架构分析报告
**分析时间**2026-06-06
**工具**Claude Code + Fast-Context MCP
**分析范围**:代码架构、业务流程、性能评估、优化建议
---
## 一、项目概述
### 1.1 项目定位
**HFB_SYS** 是一个游戏账号租赁交易平台(Rent-a-Game-Account Platform),支持用户发布、租赁游戏账号,并提供完整的订单、支付、客服、申诉等功能。
### 1.2 技术栈
#### 后端
- **语言**Go 1.21+
- **框架**Gin (HTTP路由)
- **数据库**MySQL 8.4
- **缓存**Redis 7.4
- **对象存储**MinIO
- **文档**Swagger (swaggo)
- **日志**zap
- **部署**Docker + Docker Compose
#### 前端
- **框架**Vue 3 + TypeScript
- **构建工具**Vite
- **UI库**Element Plus
- **路由**Vue Router
- **状态管理**Pinia
---
## 二、代码架构分析
### 2.1 后端模块划分
项目采用**按业务领域模块化**的设计,每个模块独立封装:
```
backend/internal/modules/
├── auth/ # 认证模块(短信登录、JWT)
├── user/ # 用户模块
├── realname/ # 实名认证模块
├── listing/ # 商品管理模块(游戏账号出租)
├── order/ # 订单管理模块
├── payment/ # 支付模块(乐刷)
├── wallet/ # 钱包模块
├── chat/ # 聊天模块
├── chathub/ # WebSocket聊天中心
├── dispute/ # 申诉模块
├── notification/ # 通知模块
├── file/ # 文件上传模块(MinIO)
├── adminauth/ # 管理员认证
├── adminuser/ # 用户管理(后台)
├── adminmgr/ # 管理员管理
├── adminrole/ # 角色权限管理
├── adminaudit/ # 审计日志
├── admindashboard/ # 仪表盘
├── systemconfig/ # 系统配置
└── announcement/ # 公告管理
```
**架构特点**
- ✅ 每个模块独立的 `handler.go`, `service.go`, `repository.go`, `dto.go`
- ✅ 清晰的三层架构(Handler → Service → Repository
- ✅ 依赖注入在 `router/router.go` 中统一管理
- ✅ 模块间通过接口解耦(如 order 模块注入 chat 模块的 repo
### 2.2 三层架构设计
```
┌─────────────────────────────────────┐
│ Handler Layer │ HTTP请求处理、参数验证、响应格式化
│ (handler.go) │
└──────────────┬──────────────────────┘
┌─────────────────────────────────────┐
│ Service Layer │ 业务逻辑、事务控制、跨模块协调
│ (service.go) │
└──────────────┬──────────────────────┘
┌─────────────────────────────────────┐
│ Repository Layer │ 数据访问、SQL查询、缓存操作
│ (repository.go) │
└─────────────────────────────────────┘
```
**示例:订单创建流程**
```go
// Handler 层
func (h *Handler) Create(c *gin.Context) {
var req CreateOrderRequest
c.ShouldBindJSON(&req)
order, err := h.service.CreateOrder(ctx, userID, req)
c.JSON(200, Response{Data: order})
}
// Service 层
func (s *Service) CreateOrder(ctx, userID, req) (*Order, error) {
// 1. 查询商品
listing := s.repo.FindListing(req.ListingID)
// 2. 验证库存
if listing.InTransaction { return ErrUnavailable }
// 3. 创建订单(事务)
order := s.repo.CreateOrder(...)
// 4. 锁定库存
s.repo.LockListing(listing.ID)
// 5. 创建聊天会话
s.chatRepo.CreateConversation(order.ID)
return order, nil
}
// Repository 层
func (r *Repository) CreateOrder(order *Order) error {
return r.db.Create(order).Error
}
```
### 2.3 路由设计
**API分组**
```go
/api/
├── /auth/ # 用户认证公开
├── /listings # 商品列表公开+认证
├── /orders # 订单管理需认证
├── /wallet # 钱包管理需认证
├── /chats # 聊天需认证
├── /disputes # 申诉需认证
└── /admin/ # 管理后台需管理员认证+权限
├── /users
├── /orders
├── /listings
├── /wallet/ledger
├── /disputes
├── /audit-logs
├── /roles
├── /admin-users
└── /announcements
```
**中间件链**
- `RequestID()` → 生成请求ID
- `RequestLogger()` → 请求日志
- `Recovery()` → Panic恢复
- `Auth()` → JWT认证(用户)
- `AdminAuth()` → JWT认证(管理员)
- `RequirePermission(code)` → RBAC权限校验
- `RequireRealname()` → 实名认证校验
---
## 三、核心业务流程
### 3.1 租号交易流程
```
号主发布商品
平台审核通过
商品上架展示
租客浏览选择
创建订单(待支付)
租客支付(冻结押金+租金)
号主交接账号(上传截图)
租客确认收货
租期结束 → 租客归还账号
号主确认归还 → 验收账号
系统结算(释放押金,转账租金给号主)
双方互评(可选)
```
**异常处理**
- 交接超时 → 自动取消订单
- 归还异常 → 发起申诉 → 客服介入 → 平台仲裁
- 恶意行为 → 冻结账户 → 扣除信用分
### 3.2 支付流程
```
用户下单
调用 payment.Start() → 生成支付单
调用第三方支付API(乐刷)
返回支付URL/二维码
用户扫码支付
支付回调 → payment.Notify()
验签 → 更新支付单状态
更新订单状态 → 冻结钱包余额
通知用户(WebSocket + 站内信)
```
**支持的支付方式**
- 乐刷支付(生产)
- Mock支付(测试)
- 钱包余额支付
### 3.3 客服聊天流程
```
用户/号主发起客服咨询
创建客服会话
系统自动发送欢迎语
客服在线 → 实时接收消息(WebSocket)
客服回复
支持快捷回复、会话转接、备注
```
**聊天类型**
- `order_group`:订单群聊(号主+租客)
- `support`:客服单聊
- `system`:系统通知
---
## 四、数据库设计分析
### 4.1 核心表结构
**用户相关**
- `users` - 用户基础信息
- `user_realname` - 实名认证记录
- `wallet_accounts` - 钱包账户
- `wallet_ledger` - 钱包流水
**商品订单**
- `game_accounts` - 游戏账号
- `rental_listings` - 租号商品
- `rental_orders` - 租赁订单
**交互模块**
- `chat_conversations` - 聊天会话
- `chat_messages` - 聊天消息
- `disputes` - 申诉记录
- `notifications` - 通知记录
**管理后台**
- `admin_users` - 管理员
- `admin_roles` - 角色
- `admin_permissions` - 权限
- `admin_role_permissions` - 角色权限关联
- `admin_user_roles` - 管理员角色关联
- `admin_audit_logs` - 审计日志
- `system_configs` - 系统配置
- `announcements` - 公告
### 4.2 关键索引
**高频查询索引**(通过代码分析推断):
```sql
-- 商品查询
CREATE INDEX idx_listings_status_review ON rental_listings(status, review_status, published_at);
-- 订单查询
CREATE INDEX idx_orders_renter ON rental_orders(renter_id, created_at);
CREATE INDEX idx_orders_owner ON rental_orders(owner_id, created_at);
CREATE INDEX idx_orders_status ON rental_orders(status, created_at);
-- 钱包流水
CREATE INDEX idx_ledger_user ON wallet_ledger(user_id, created_at);
-- 聊天消息
CREATE INDEX idx_messages_conv ON chat_messages(conversation_id, created_at);
-- 审计日志
CREATE INDEX idx_audit_admin ON admin_audit_logs(admin_id, created_at);
CREATE INDEX idx_audit_time ON admin_audit_logs(created_at);
```
### 4.3 性能瓶颈分析
**潜在慢查询点**(基于代码review):
1.**分页优化已完成**:所有管理后台列表已统一分页样式
2. ⚠️ **订单列表查询**:多条件筛选(status, renter_id, owner_id)可能需要复合索引
3. ⚠️ **钱包流水**:大量流水记录可能导致深度分页慢查询
4. ⚠️ **商品搜索**:全文搜索功能缺失(目前只能按status/review过滤)
---
## 五、压力测试结果评估
### 5.1 测试环境
- **平台**MacOS (Darwin 25.5.0)
- **数据库**MySQL 8.4 (Docker)
- **数据规模**
- 用户:10,001
- 商品:50,500
- 订单:30,200
- 钱包流水:100,500
### 5.2 性能基线(30并发60秒)
```
场景:realistic(真实业务比例)
- 35% 商品列表查询
- 25% 商品详情查询
- 15% 我的订单
- 10% 钱包余额
- 7% 聊天列表
- 5% 订单详情
- 2% 创建订单
- 1% 支付订单
结果:
✅ 总请求数:246,371
✅ 成功率:100%
✅ QPS4,106.18
延迟分布:
✅ P505ms ⭐ 优秀
✅ P9516ms ⭐ 优秀
✅ P9929ms ⭐ 良好
✅ 最大:492ms
```
### 5.3 性能评级
| 指标 | 标准 | 实际 | 评级 |
|------|------|------|------|
| QPS | >2000 | 4106 | ⭐⭐⭐ |
| P50延迟 | <10ms | 5ms | ⭐⭐⭐ |
| P95延迟 | <50ms | 16ms | ⭐⭐⭐ |
| P99延迟 | <100ms | 29ms | ⭐⭐⭐ |
| 成功率 | >95% | 100% | ⭐⭐⭐ |
**结论**:系统性能优秀,能够支撑中等规模业务(日活1万+)。
---
## 六、代码质量评估
### 6.1 优点
**清晰的模块化设计**
- 每个业务模块独立,职责明确
- 依赖注入统一管理
- 三层架构规范
**完善的中间件体系**
- 请求日志、认证、权限、错误恢复
- 可复用、易扩展
**RBAC权限系统**
- 角色-权限分离
- 灵活的权限配置
- 细粒度权限控制
**实时通信支持**
- WebSocket客服系统
- 订单状态推送
- 在线状态管理
**审计日志**
- 记录所有管理后台操作
- 便于追溯和审计
### 6.2 可改进点
⚠️ **缺少单元测试**
- 建议:为核心业务逻辑(订单、支付、钱包)添加单元测试
- 目标覆盖率:>60%
⚠️ **缺少集成测试**
- 建议:为关键业务流程添加E2E测试
- 场景:创建订单→支付→交接→归还→结算
⚠️ **缺少API文档维护**
- 虽然有Swagger,但需要保持与代码同步
- 建议:在CI中添加swagger检查
⚠️ **错误处理可以更细化**
- 当前:统一错误码(如 "bad_request"
- 建议:细分业务错误码(如 "listing_unavailable", "insufficient_balance"
⚠️ **缺少限流保护**
- 建议:添加API限流中间件(如 rate limiter
- 保护高频API(登录、创建订单、支付)
---
## 七、安全性分析
### 7.1 已实现的安全措施
**认证与授权**
- JWT Token认证
- RBAC权限控制
- 实名认证要求(敏感操作)
**数据安全**
- 密码加密存储(假设)
- 敏感信息脱敏(手机号、身份证)
- 支付回调验签
**输入验证**
- 参数校验(Gin binding
- SQL注入防护(GORM参数化查询)
**操作审计**
- 管理员操作日志
- IP地址记录
### 7.2 潜在安全风险
⚠️ **缺少HTTPS强制**
- 建议:生产环境强制HTTPS
- 在反向代理(Nginx)层面处理
⚠️ **短信验证码限流不足**
- 当前:60秒冷却期
- 建议:添加IP级别限流、图形验证码
⚠️ **WebSocket认证**
- 需确认:WebSocket连接是否有认证机制
- 建议:在握手阶段验证JWT token
⚠️ **文件上传安全**
- 需确认:是否有文件类型/大小验证
- 建议:文件类型白名单、病毒扫描
---
## 八、性能优化建议
### 8.1 数据库优化
**索引优化**
```sql
-- 添加复合索引
CREATE INDEX idx_orders_renter_status ON rental_orders(renter_id, status, created_at);
CREATE INDEX idx_orders_owner_status ON rental_orders(owner_id, status, created_at);
-- 优化钱包流水查询
CREATE INDEX idx_ledger_user_type ON wallet_ledger(user_id, biz_type, created_at);
-- 优化商品搜索
CREATE INDEX idx_listings_game_status ON rental_listings(game_name, status, review_status);
```
**查询优化**
- 使用游标分页替代offset(深度分页场景)
- 添加查询结果缓存(商品列表、系统配置)
### 8.2 缓存策略
**推荐缓存内容**
```go
// 热点商品(5分钟)
"listing:hot:{id}" Listing JSON
// 商品列表(1分钟)
"listings:page:{page}:{params}" []Listing JSON
// 用户信息(5分钟)
"user:{id}" User JSON
// 系统配置(长期)
"config:{key}" Config JSON
// 在线管理员列表(30秒)
"admin:online" []AdminID
```
### 8.3 架构优化
**读写分离**
- 主从复制(MySQL Replication
- 读请求走从库
- 写请求走主库
**消息队列**
- 异步任务:通知发送、日志写入、统计计算
- 技术选型:RabbitMQ / Kafka / Redis Stream
**CDN加速**
- 静态资源(前端、图片)走CDN
- 减轻服务器带宽压力
---
## 九、可扩展性分析
### 9.1 水平扩展能力
**无状态设计**
- ✅ HTTP服务无状态(JWT存储在客户端)
- ✅ Session存储在Redis(支持多实例)
- ⚠️ WebSocket有状态(需要sticky session或Redis pub/sub
**负载均衡方案**
```
┌────────────┐
Internet ─────┤ Nginx LB │
└──────┬─────┘
┌────────────┼────────────┐
│ │ │
┌───▼──┐ ┌──▼───┐ ┌───▼──┐
│ API1 │ │ API2 │ │ API3 │
└───┬──┘ └──┬───┘ └───┬──┘
│ │ │
└───────────┼────────────┘
┌───────▼────────┐
│ MySQL/Redis │
└────────────────┘
```
### 9.2 数据库扩展
**垂直扩展**
- 升级MySQL配置(CPU、内存、SSD
- 优化MySQL参数(innodb_buffer_pool_size、max_connections
**水平扩展**
- 分库分表(按用户ID哈希)
- 读写分离(主从复制)
- 分片方案(ShardingSphere
---
## 十、部署与运维
### 10.1 容器化部署
**当前方案**
- Docker Compose(开发/测试环境)
- 包含:MySQL, Redis, MinIO, Backend
**生产建议**
- Kubernetes编排
- 自动伸缩(HPA
- 健康检查
- 滚动更新
### 10.2 监控告警
**推荐方案**
```
Prometheus + Grafana + AlertManager
监控指标:
- QPS、延迟(P50/P95/P99
- 错误率
- 数据库连接数
- Redis内存使用率
- API响应时间
- 业务指标(订单量、交易额)
告警规则:
- API错误率 > 5%
- P99延迟 > 1秒
- 数据库连接池耗尽
- Redis内存 > 80%
```
### 10.3 日志管理
**推荐方案**
```
ELK Stack (Elasticsearch + Logstash + Kibana)
日志类型:
- 访问日志(Nginx
- 应用日志(zap
- 错误日志
- 审计日志
日志级别:
开发:DEBUG
生产:INFO(可动态调整)
```
---
## 十一、总结与建议
### 11.1 项目亮点
**清晰的模块化架构**:易维护、易扩展
**完善的RBAC权限系统**:灵活、安全
**优秀的性能表现**QPS 4000+, P95延迟16ms
**实时客服系统**WebSocket支持
**审计日志完善**:可追溯、可审计
### 11.2 短期优化建议(1-2周)
1.**管理后台分页统一** - 已完成
2. **添加API限流**:防止恶意请求
3. **优化短信验证码限流**:增加图形验证码
4. **完善错误码体系**:细分业务错误
5. **添加关键接口的单元测试**
### 11.3 中期优化建议(1-2月)
1. **实现缓存层**Redis缓存热点数据
2. **数据库索引优化**:添加复合索引
3. **实现读写分离**MySQL主从复制
4. **添加监控告警**Prometheus + Grafana
5. **完善API文档**:保持Swagger同步
### 11.4 长期演进建议(3-6月)
1. **微服务拆分**:订单、支付、聊天独立服务
2. **引入消息队列**:异步任务处理
3. **数据库分库分表**:应对数据增长
4. **容器编排**Kubernetes部署
5. **全链路监控**:分布式追踪(Jaeger
---
## 附录
### A. 技术债务清单
| 优先级 | 问题 | 影响 | 建议 |
|-------|------|------|------|
| P0 | 缺少单元测试 | 回归风险高 | 添加核心业务测试 |
| P1 | 缺少API限流 | 容易被刷 | 添加限流中间件 |
| P1 | 短信限流不足 | 验证码被刷 | 增加图形验证码 |
| P2 | 缺少缓存层 | 数据库压力大 | 添加Redis缓存 |
| P2 | 深度分页慢 | 用户体验差 | 游标分页 |
| P3 | 缺少监控 | 故障发现慢 | Prometheus |
### B. 性能测试数据
**商品查询场景**30并发60秒):
- QPS4,106
- P50延迟:5ms
- P95延迟:16ms
- 成功率:100%
**管理后台场景**(待测试):
- 预期QPS2,000+
- 预期P95延迟:<50ms
---
**报告编写人**Claude Opus 4.8
**审核状态**:已完成
**下次更新**:根据性能测试结果动态调整