Files
hfb_sys/docs/stress-test-summary.md
T
2026-06-05 22:01:14 +08:00

5.4 KiB
Raw Blame History

压力测试方案总结

快速开始

1. 生成测试数据

./scripts/stress_test.sh data

2. 执行压力测试

# 混合场景测试(推荐)
./scripts/stress_test.sh test -c 100 -d 60 -s mixed

# 商品列表查询测试
./scripts/stress_test.sh test -c 200 -d 120 -s list_listings

# 订单创建测试
./scripts/stress_test.sh test -c 50 -d 60 -s create_order

3. 查看报告

./scripts/stress_test.sh report

4. 清理数据

./scripts/stress_test.sh clean

已创建的压测工具

1. 数据生成脚本

文件: scripts/load_test_data.sql

功能:

  • 批量生成10,000个用户
  • 批量生成50,000个租号商品
  • 批量生成30,000个订单
  • 批量生成100,000条钱包流水
  • 批量生成50,000条聊天消息

特点:

  • 使用存储过程提高生成效率
  • 每1000条自动提交一次
  • 模拟真实的业务数据分布
  • 支持自定义数量

2. Go压测工具

文件: scripts/stress_test.go

测试场景:

  • list_listings: 商品列表查询(高频读)
  • create_order: 订单创建(写操作)
  • wallet: 钱包流水查询
  • chat: 聊天消息查询
  • mixed: 混合场景(模拟真实流量比例)

使用示例:

cd scripts
go build -o stress_test stress_test.go
./stress_test -url http://localhost:8080 -c 100 -d 60 -s mixed

3. 一键压测脚本

文件: scripts/stress_test.sh

功能:

  • data: 生成测试数据
  • test: 执行压力测试
  • monitor: 监控系统性能
  • clean: 清理测试数据
  • report: 生成压测报告
  • all: 执行完整流程

4. 压测指南文档

文件: docs/stress-test-guide.md

包含内容:

  • 测试环境准备
  • 数据库优化配置
  • 索引优化建议
  • 性能监控方法
  • 常见瓶颈与优化方案
  • 持续监控建议

核心压力点分析

高频读场景

  1. 商品列表查询:

    • 带复杂筛选条件(状态、审核状态、价格区间)
    • 需要优化索引: idx_rental_listings_filter
    • 建议添加Redis缓存
  2. 订单列表查询:

    • 多角色视角(租客、号主)
    • 关联查询多张表
    • 优化: 使用游标分页代替OFFSET
  3. 钱包流水查询:

    • 数据量大(10万+
    • 需要按时间倒序
    • 优化: 复合索引 idx_user_created_desc

高频写场景

  1. 订单创建和支付:

    • 涉及多表事务
    • 钱包扣款+订单创建+通知
    • 需要确保事务隔离级别
  2. 聊天消息发送:

    • 高并发写入
    • 需要更新会话最后消息时间
    • 考虑消息队列异步处理

数据库优化要点

关键索引:

-- 商品查询
ALTER TABLE rental_listings 
ADD INDEX idx_status_review_published (status, review_status, published_at DESC);

-- 订单查询
ALTER TABLE rental_orders 
ADD INDEX idx_renter_status_created (renter_id, status, created_at DESC);
ADD INDEX idx_owner_status_created (owner_id, status, created_at DESC);

-- 钱包流水
ALTER TABLE wallet_ledger 
ADD INDEX idx_user_created_desc (user_id, created_at DESC);
ADD INDEX idx_user_biz_created (user_id, biz_type, created_at DESC);

连接池配置:

DB_MAX_OPEN_CONNS=100
DB_MAX_IDLE_CONNS=20
DB_CONN_MAX_LIFETIME=3600

性能目标

响应时间

  • 商品列表: P95 < 100ms
  • 订单查询: P95 < 80ms
  • 钱包流水: P95 < 100ms
  • 创建订单: P95 < 300ms

吞吐量

  • 读操作: QPS > 1000
  • 写操作: QPS > 200
  • 混合场景: QPS > 500

监控命令

实时监控

# 容器资源使用
docker stats hfb-backend hfb-mysql hfb-redis

# MySQL连接数
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW STATUS LIKE 'Threads_connected';"

# 慢查询
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW STATUS LIKE 'Slow_queries';"

# 正在执行的查询
docker exec hfb-mysql mysql -uhfb -psecret -e "SHOW FULL PROCESSLIST;"

慢查询分析

# 查看慢查询日志
docker exec hfb-mysql tail -100 /var/log/mysql/slow.log

常见问题排查

问题1: 商品列表查询慢

现象: 查询耗时 > 100ms

排查:

EXPLAIN SELECT * FROM rental_listings 
WHERE status = 'active' AND review_status = 'approved'
ORDER BY published_at DESC LIMIT 20;

优化: 添加覆盖索引,避免回表

问题2: 大偏移量分页慢

现象: page > 100 时性能急剧下降

优化: 使用游标分页

SELECT * FROM rental_orders 
WHERE renter_id = ? AND id < ? 
ORDER BY id DESC LIMIT 20;

问题3: 连接池耗尽

现象: 大量 "too many connections" 错误

优化:

  • 增加 max_connections
  • 优化查询,减少慢查询
  • 检查是否有连接泄漏

下一步优化建议

  1. 缓存层: Redis缓存热点数据(商品详情、用户信息)
  2. 读写分离: 主库写入,从库读取
  3. 分库分表: 当单表超过千万级时考虑
  4. 异步处理: 使用消息队列处理非关键路径操作
  5. CDN加速: 静态资源和图片使用CDN

完整流程示例

# 1. 启动开发环境
./scripts/dev.sh

# 2. 生成测试数据
./scripts/stress_test.sh data

# 3. 执行压测
./scripts/stress_test.sh test -c 100 -d 300 -s mixed

# 4. 监控(另开终端)
./scripts/stress_test.sh monitor

# 5. 查看报告
./scripts/stress_test.sh report

# 6. 清理数据
./scripts/stress_test.sh clean

详细文档请查看: docs/stress-test-guide.md