主要改进: - 优化压测工具:支持真实认证、智能商品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>
18 KiB
18 KiB
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) │
└─────────────────────────────────────┘
示例:订单创建流程
// 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分组:
/api/
├── /auth/ # 用户认证(公开)
├── /listings # 商品列表(公开+认证)
├── /orders # 订单管理(需认证)
├── /wallet # 钱包管理(需认证)
├── /chats # 聊天(需认证)
├── /disputes # 申诉(需认证)
└── /admin/ # 管理后台(需管理员认证+权限)
├── /users
├── /orders
├── /listings
├── /wallet/ledger
├── /disputes
├── /audit-logs
├── /roles
├── /admin-users
└── /announcements
中间件链:
RequestID()→ 生成请求IDRequestLogger()→ 请求日志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 关键索引
高频查询索引(通过代码分析推断):
-- 商品查询
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):
- ✅ 分页优化已完成:所有管理后台列表已统一分页样式
- ⚠️ 订单列表查询:多条件筛选(status, renter_id, owner_id)可能需要复合索引
- ⚠️ 钱包流水:大量流水记录可能导致深度分页慢查询
- ⚠️ 商品搜索:全文搜索功能缺失(目前只能按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%
✅ QPS:4,106.18
延迟分布:
✅ P50:5ms ⭐ 优秀
✅ P95:16ms ⭐ 优秀
✅ P99:29ms ⭐ 良好
✅ 最大: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 数据库优化
索引优化:
-- 添加复合索引
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 缓存策略
推荐缓存内容:
// 热点商品(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周)
- ✅ 管理后台分页统一 - 已完成
- 添加API限流:防止恶意请求
- 优化短信验证码限流:增加图形验证码
- 完善错误码体系:细分业务错误
- 添加关键接口的单元测试
11.3 中期优化建议(1-2月)
- 实现缓存层:Redis缓存热点数据
- 数据库索引优化:添加复合索引
- 实现读写分离:MySQL主从复制
- 添加监控告警:Prometheus + Grafana
- 完善API文档:保持Swagger同步
11.4 长期演进建议(3-6月)
- 微服务拆分:订单、支付、聊天独立服务
- 引入消息队列:异步任务处理
- 数据库分库分表:应对数据增长
- 容器编排:Kubernetes部署
- 全链路监控:分布式追踪(Jaeger)
附录
A. 技术债务清单
| 优先级 | 问题 | 影响 | 建议 |
|---|---|---|---|
| P0 | 缺少单元测试 | 回归风险高 | 添加核心业务测试 |
| P1 | 缺少API限流 | 容易被刷 | 添加限流中间件 |
| P1 | 短信限流不足 | 验证码被刷 | 增加图形验证码 |
| P2 | 缺少缓存层 | 数据库压力大 | 添加Redis缓存 |
| P2 | 深度分页慢 | 用户体验差 | 游标分页 |
| P3 | 缺少监控 | 故障发现慢 | Prometheus |
B. 性能测试数据
商品查询场景(30并发60秒):
- QPS:4,106
- P50延迟:5ms
- P95延迟:16ms
- 成功率:100%
管理后台场景(待测试):
- 预期QPS:2,000+
- 预期P95延迟:<50ms
报告编写人:Claude Opus 4.8
审核状态:已完成
下次更新:根据性能测试结果动态调整