文档目录
实验设计与方法论
本章定位:前四章教你「怎么测」,这一章教你「怎么让别人相信你的结论」。 学完你能回答一个关键问题:我测出的这个差异,是真的变化还是噪声?
前置知识:第 1 章(SLO、元数据)、第 2 章(预热与稳态) 预计总时长:约 4 小时(阅读 2.5 小时 + Lab 5 约 1.5 小时) 配套代码:docs/code/05-experiment-design/
一、本章要回答的七个问题
- 为什么「同时改了三处,性能提升了 20%」这个结论毫无价值?(第 1 节)
- 压测跑多久才算够?(第 2 节)
- 有一轮结果特别差,该不该把它剔掉?(第 3 节)
- 哪些后台任务会悄悄毁掉你的实验?(第 4 节)
- 用均匀分布压测会得出什么错误结论?(第 5 节)
- 「均值 ± 标准差」为什么不适用于延迟?该用什么?(第 6 节)
- 你的环境里,多大的差异才算「真实差异」?(第 7 节,本章核心)
二、为什么这一章决定前面四章的成果能不能用
前四章你已经能采到数据了。但数据本身不构成结论:
❌ 「优化后 P99 从 210ms 降到 198ms,提升 5.7%」
这句话的问题不是数字错了,而是你无法判断这 5.7% 是真的还是噪声。
如果你的环境噪声是 ±8%,那么这 5.7% 完全在噪声范围内——你的"优化"可能是随机波动的结果,也可能是真的,但你不知道。
本章解决的正是这件事:
| 前四章 | 本章 |
|---|---|
| 怎么采数据 | 怎么判断数据里的差异是真的 |
| 怎么保证数据可复现 | 怎么量化"可复现"的程度 |
| 怎么记录环境 | 怎么评估环境对结论的影响 |
一个残酷的事实:多数团队的「性能提升 20%」都是不可信的——因为它们没测过自己的噪声底线。
三、小节地图
| 节 | 标题 | 一句话内容 | 时长 | 要动手 |
|---|---|---|---|---|
| 1 | 单变量与对照组 | 一次只改一个;没有对照就没有结论 | 20 min | ✅ 实验 |
| 2 | 预热、稳态与运行时长 | 时长不是拍脑袋,是由周期决定的 | 25 min | ✅ 计算 |
| 3 | 重复、抖动与异常值 | 异常值要解释,不能"觉得不好看就删" | 25 min | ✅ 分析 |
| 4 | 环境隔离清单 | 哪些东西在悄悄污染你的实验 | 20 min | ✅ 检查 |
| 5 | 数据集设计 | 数据规模与分布决定结论能否迁移 | 25 min | ✅ 生成 |
| 6 | 统计基础(够用版) | CV、置信区间、非参数检验 | 30 min | ✅ 计算 |
| 7 | 噪声底线与回归检测 | 你的环境里多大差异才算真实 | 30 min | ✅ 实验 |
| 8 | 实验记录与常见反模式 | 记录模板 + 九种自欺方式 | 20 min | — |
| 9 | Lab 5:量化你自己的噪声底线 | 交付噪声底线表 + 显著性验证 | 90 min | ✅ 实验 |
四、本章的产出物
- 一张噪声底线表:你自己环境里,QPS / P50 / P95 / P99 各自的波动范围(CV)。
- 一个「最小可检测差异」:在你的环境里,低于多少的差异不值得声称。
- 两次显著性验证:用第 6 节的工具,判定一个 5% 的改动「不显著」、一个 30% 的改动「显著」。
- 一份改进后的实验记录:含「预期 vs 实际」表和至少三条假设台账条目。
五、学完本章的验收标准
- 能说出「没有对照组的实验」为什么不能得出结论。
- 能用「业务周期 / 缓存 TTL / GC 周期」推导出合理的压测时长,而不是拍一个数字。
- 能对异常值给出成因解释,而不是简单剔除。
- 能列出至少五项会污染实验的环境因素,并知道怎么关闭。
- 能解释为什么延迟分布不适合用「均值 ± 标准差」。
- 能量化自己环境的噪声底线,并说出低于多少的差异不可信。
- 能用非参数检验判定两组结果是否有显著差异。
六、一个提醒:本章会让你的结论「变少」
学完本章,你会发现很多以前敢下的结论现在不敢下了。这是好事:
| 以前你会说 | 现在你会说 |
|---|---|
| 「优化后提升 5%」 | 「差异在噪声范围内,无法确认」 |
| 「跑了一次,P99 是 95ms」 | 「5 轮中位数 96ms,CV 4%,可信」 |
| 「这轮数据不好,删掉」 | 「这轮异常,原因是备份任务,已记录并重跑」 |
| 「A 比 B 快」 | 「A 比 B 快 23%,Mann-Whitney U 检验 p=0.008,显著」 |
结论变少,但每条都能站住。 这是在性能工程里建立可信度的唯一路径。
本节目录
- 单变量与对照组 5.1 单变量与对照组 上一节:无 | 下一节:5.2 预热、稳态与运行时长 配套代码 …
- 预热、稳态与运行时长 5.2 预热、稳态与运行时长 上一节:5.1 单变量与对照组 | 下一节:5.3 重复、抖动与异常值 配套代码 …
- 重复、抖动与异常值 5.3 重复、抖动与异常值 上一节:5.2 预热、稳态与运行时长 | 下一节:5.4 环境隔离清单 配套代码 …
- 环境隔离清单 5.4 环境隔离清单 上一节:5.3 重复、抖动与异常值 | 下一节:5.5 数据集设计 配套代码 …
- 数据集设计 5.5 数据集设计 上一节:5.4 环境隔离清单 | 下一节:5.6 统计基础 配套代码 …
- 统计基础(够用版) 5.6 统计基础(够用版) 上一节:5.5 数据集设计 | 下一节:5.7 噪声底线与回归检测 配套代码 …
- 噪声底线与回归检测 5.7 噪声底线与回归检测 上一节:5.6 统计基础 | 下一节:5.8 实验记录与常见反模式 配套代码 …
- 实验记录与常见反模式 5.8 实验记录与常见反模式 上一节:5.7 噪声底线与回归检测 | 下一节:5.9 Lab 5 配套代码 …
- Lab 5 5.9 Lab 5:量化你自己的噪声底线 上一节:5.8 实验记录与常见反模式 | 下一节:第 6 章 分析与定位 配套代码 …