完成压力测试工具优化和文档整理

主要改进:
- 优化压测工具:支持真实认证、智能商品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>
This commit is contained in:
yml
2026-06-06 01:10:07 +08:00
co-authored by Claude Opus 4.8
parent ec9baada67
commit 082fd908e9
11 changed files with 2759 additions and 752 deletions
+672
View File
@@ -0,0 +1,672 @@
# 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
**审核状态**:已完成
**下次更新**:根据性能测试结果动态调整