容量规划与性能基线
本文档用于 V1.0 前的容量规划和性能基线收口。它不是生产容量承诺,而是帮助维护者在发版前得到可复现的基础数字。
涉及真实支付、Web3、AI、直播、广告、短信、邮件、对象存储等外部依赖时,容量数字必须和 外部 Provider 验收清单 的真实验收记录分开描述;本地 mock / contract Provider 的吞吐不能代表厂商生产能力。
基线原则
- 本地 smoke 只证明当前构建能在指定机器和指定依赖上稳定响应,不等同生产吞吐。
- 正式容量规划必须记录机器规格、JDK、数据库、Redis、网络、JVM 参数、数据量和外部 Provider 模式。
- 资金、支付、Web3、AI、短信和邮件等外部依赖不能用本地 mock 数字冒充真实容量。
- 任何“容量上限”都必须来自生产等价环境压测,而不是开发机。
本地性能 smoke
仓库提供轻量脚本:
bash
./scripts/perf-smoke --base-url http://127.0.0.1:8000 --requests 200 --concurrency 100脚本会对已启动应用执行:
GET /actuator/healthPOST /api/v1/auth/loginGET /api/v1/cms/pages?page=1&size=10
输出默认写入:
text
target/perf-smoke/perf-baseline.md并保留 ApacheBench 原始输出:
text
target/perf-smoke/health.ab.txt
target/perf-smoke/login.ab.txt
target/perf-smoke/cms-pages.ab.txt推荐发布前记录
发布前把本地或预发环境的结果补入发布说明:
| 项 | 建议记录 |
|---|---|
| 环境 | CPU / 内存 / OS / JDK / 数据库 / Redis |
| 版本 | Git commit、Maven version、前端构建版本 |
| 数据量 | 用户数、CMS 内容数、订单数、日志量 |
| 命令 | ./scripts/perf-smoke ... 完整命令 |
| 数字 | RPS、平均延迟、失败数、非 2xx 数 |
| 结论 | 只写“本环境 smoke 通过”,不写泛化容量承诺 |
当前本地基线
2026-06-24 在本机使用 lite profile、H2 文件库和隔离 APP_STORAGE_DIR 执行:
bash
APP_STORAGE_DIR=/Users/Home/Codes/Java/spring-open/target/perf-smoke-app \
SPRING_PROFILES_ACTIVE=lite \
SERVER_PORT=18082 \
java -jar spring-open-application/target/spring-open-application.jar
./scripts/perf-smoke \
--base-url http://127.0.0.1:18082 \
--requests 200 \
--concurrency 100 \
--output target/perf-smoke/perf-baseline.md本轮基线结果:
| 场景 | RPS | 平均请求耗时 | 失败请求 | 非 2xx 响应 |
|---|---|---|---|---|
| Health | 2848.56 / sec | 35.105 ms | 0 | 0 |
| Login | 1128.33 / sec | 88.626 ms | 0 | 0 |
| CMS pages | 809.49 / sec | 123.534 ms | 0 | 0 |
这组数字只表示本机 smoke 通过。真实发布说明需要重新记录当次机器规格、JVM 参数、数据库和数据量。
生产压测建议
当需要真实容量评估时,建议引入专门压测工程或外部工具:
- 使用 JMeter、Gatling、k6 或云压测平台。
- 独立部署数据库、Redis、对象存储和外部 Provider mock / sandbox。
- 准备接近真实的数据量。
- 覆盖登录、后台写操作、CMS / Mall 列表、下单、支付回调、队列消费和调度任务。
- 同步观察应用指标、数据库连接池、Redis、慢 SQL、GC 和主机资源。
风险边界
- 不要在生产库上执行破坏性压测。
- 不要用管理员真实账号跑高并发写操作。
- 不要把压测流量打到真实支付、短信、邮件、AI 或链上 Provider。
- 不要用一次本地 smoke 数字推导生产 SLA。