对标 k6 / vegeta / ghz / fortio 的云原生压测平台。基于 Go 实现高性能并发引擎,通过 K8s Job 弹性调度压测 Worker,压完即销毁。
已完成的功能链(每一条都有真实测试,非 mock):
| 功能链 | 实现 | 真实测试 |
|---|---|---|
| 无锁令牌桶限速器 | internal/engine/limiter |
假时钟 + 假 ticker 确定性测试,RPS 精度 < 1% |
| VU 池 | internal/engine/vupool |
并发 / 背压 / drain / 在途计数 4 组测试 |
| HTTP driver | internal/engine/drivers/http |
httptest 真实服务验证连接复用 / 短连接 / ctx 取消 |
| 并发引擎编排 | internal/engine |
端到端真实发压,RPS 精度 99.98% |
| 压测 CLI | cmd/surge-worker |
对真实 echo-server 发压 |
| 压测靶场 | cmd/echo-server |
返回 1KiB 响应体(对齐 R2 口径) |
# 1. 启动靶场(独立终端)
go run ./cmd/echo-server -addr :8080
# 2. 发压(另一终端)
go run ./cmd/surge-worker -url http://127.0.0.1:8080/ -rps 5000 -vus 200 -duration 5s
# 3. 短连接模式
go run ./cmd/surge-worker -url http://127.0.0.1:8080/ -rps 2000 -no-keepalive| 场景 | 目标 RPS | 实测 RPS | 错误 | 平均延迟 |
|---|---|---|---|---|
| 长连接 500 RPS | 500 | 500.0 | 0 | 17µs |
| 长连接 5000 RPS | 5000 | 5013.5 | 0 | 89.7µs |
| 长连接 10000 RPS | 10000 | 10047.7 | 0 | 501µs |
| 短连接 2000 RPS | 2000 | 2011.9 | 0 | 652.9µs |
| 极限吞吐(benchmark) | — | ~59000 RPS | 0 | — |
⚠️ R2 基线(keep-alive 2 万 RPS)要求在 Linux + amd64 + 2C4G 独占核 上测量。当前开发机是 Windows + 386 工具链,1 万 RPS 零失败已验证引擎逻辑正确性;2 万 RPS 需在目标环境跑 benchmark。
完整设计见 docs/:
00-overview-and-architecture-baseline.md— 架构基线(唯一事实源)01-requirements-prd.md— 需求 PRD(44 条 Must)02-backend-design.md— 后端设计(并发模型 / 限速器 / 调度)03-frontend-design.md— 前端设计04-testing-strategy.md— 测试策略05-quality-engineering.md— 质量工程
分发 goroutine → 令牌桶(L1 限速) → VU 池(L3 并发护栏) → HTTP driver(连接复用)
- 令牌桶:fillLoop 单写者 + 多读者原子扣减,无 CAS、无锁、无伪共享
- VU 池:固定 goroutine + channel 背压,per-VU 状态无锁
- HTTP driver:keep-alive 连接复用(R2 长连接口径)
go test ./... # 全部单元/集成测试
go test ./... -bench=. -benchmem # 性能 benchmarkcmd/
echo-server/ # 压测靶场(1KiB 响应体)
surge-worker/ # 压测执行单元(M1 单机版)
internal/engine/
limiter/ # 无锁令牌桶限速器
vupool/ # VU 池
drivers/http/ # HTTP driver
engine.go # 编排层(Engine)
docs/ # 全套设计文档(v0.2.0)
- M1 单机并发引擎(令牌桶 + VU 池 + HTTP driver + 真实压测验证)
- M2 K8s Job 调度(分片 Worker + telemetry 上报)
- M3 gRPC / WebSocket 协议 + 场景 DSL
- M4 console-server + web-console 前端