Go-GroupMQ Benchmark
标准化性能测试工具,用于与 TypeScript 版本进行公平对比。
快速开始
# CPU密集型测试(PBKDF2加密)
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4
# IO密集型测试(文件读写)
go run benchmark/main.go -type=io -jobs=5000 -workers=4
# 空任务测试(最小开销)
go run benchmark/main.go -type=empty -jobs=10000 -workers=8
# 输出到JSON
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4 -output=results/go-cpu.json
测试场景
1. CPU 密集型 (cpu)
- 模拟计算密集任务
- PBKDF2 加密,200,000 次迭代
- 对应 TS 版本:
--job-type cpu
2. IO 密集型 (io)
- 模拟高 IOPS 场景
- 64KB 文件读写
- 对应 TS 版本:
--job-type io
3. 空任务 (empty)
- 测试框架最小开销
- 仅 Sleep(0)
- 对应 TS 版本:
--job-type empty
指标说明
性能指标
- Throughput: 吞吐量(jobs/sec)
- PickupMs: 从入队到 worker 获取的延迟
- ProcessingMs: job 执行时间
- TotalMs: 端到端延迟
系统指标
- CPU: CPU 使用率(峰值/平均值)
- Memory: 内存使用(峰值/平均值,MB)
Redis 指标
- Commands: Redis 命令总数
- AvgLatency: 平均命令延迟(μs)
- TopCommands: 最常用命令统计
对比测试
与 TypeScript 版本对比:
# 1. 运行TS版本
cd ../3rd-projects/groupmq
pnpm benchmark --mq groupmq --jobs 5000 --workers 4 --job-type cpu --multi-process
# 2. 运行Go版本
cd ../../go-groupmq
go run benchmark/main.go -type=cpu -jobs=5000 -workers=4
# 3. 对比结果
go run benchmark/compare.go results/groupmq.json results/go-cpu.json
输出格式
JSON 格式,兼容 TS 版本结构:
{
"timestamp": 1234567890,
"queueType": "go-groupmq",
"jobType": "cpu",
"totalJobs": 5000,
"workersCount": 4,
"completedJobs": 5000,
"durationMs": 10000,
"throughputJobsPerSec": 500,
"avgPickupMs": 10.5,
"avgProcessingMs": 65.2,
"avgTotalMs": 75.7,
"p95PickupMs": 25.3,
"p95ProcessingMs": 70.8,
"p95TotalMs": 95.1,
"peakCpuPercent": 85.5,
"peakMemoryMB": 45.2,
"avgCpuPercent": 65.3,
"avgMemoryMB": 38.5
}
性能优化建议
基于 benchmark 结果:
- 高吞吐量: 增加 workers 数量
- 低延迟: 优化 Redis 连接池
- 低内存: 减少并发度
- 高 CPU 利用率: 使用多进程模式