文档目录

实验设计与方法论

本章定位:前四章教你「怎么测」,这一章教你「怎么让别人相信你的结论」。 学完你能回答一个关键问题:我测出的这个差异,是真的变化还是噪声?

前置知识:第 1 章(SLO、元数据)、第 2 章(预热与稳态) 预计总时长:约 4 小时(阅读 2.5 小时 + Lab 5 约 1.5 小时) 配套代码:docs/code/05-experiment-design/


一、本章要回答的七个问题

  1. 为什么「同时改了三处,性能提升了 20%」这个结论毫无价值?(第 1 节)
  2. 压测跑多久才算够?(第 2 节)
  3. 有一轮结果特别差,该不该把它剔掉?(第 3 节)
  4. 哪些后台任务会悄悄毁掉你的实验?(第 4 节)
  5. 用均匀分布压测会得出什么错误结论?(第 5 节)
  6. 「均值 ± 标准差」为什么不适用于延迟?该用什么?(第 6 节)
  7. 你的环境里,多大的差异才算「真实差异」?(第 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 ✅ 实验

四、本章的产出物

  1. 一张噪声底线表:你自己环境里,QPS / P50 / P95 / P99 各自的波动范围(CV)。
  2. 一个「最小可检测差异」:在你的环境里,低于多少的差异不值得声称。
  3. 两次显著性验证:用第 6 节的工具,判定一个 5% 的改动「不显著」、一个 30% 的改动「显著」。
  4. 一份改进后的实验记录:含「预期 vs 实际」表和至少三条假设台账条目。

五、学完本章的验收标准

  • 能说出「没有对照组的实验」为什么不能得出结论。
  • 能用「业务周期 / 缓存 TTL / GC 周期」推导出合理的压测时长,而不是拍一个数字。
  • 能对异常值给出成因解释,而不是简单剔除。
  • 能列出至少五项会污染实验的环境因素,并知道怎么关闭。
  • 能解释为什么延迟分布不适合用「均值 ± 标准差」。
  • 能量化自己环境的噪声底线,并说出低于多少的差异不可信。
  • 能用非参数检验判定两组结果是否有显著差异。

六、一个提醒:本章会让你的结论「变少」

学完本章,你会发现很多以前敢下的结论现在不敢下了。这是好事:

以前你会说 现在你会说
「优化后提升 5%」 「差异在噪声范围内,无法确认」
「跑了一次,P99 是 95ms」 「5 轮中位数 96ms,CV 4%,可信」
「这轮数据不好,删掉」 「这轮异常,原因是备份任务,已记录并重跑」
「A 比 B 快」 「A 比 B 快 23%,Mann-Whitney U 检验 p=0.008,显著」

结论变少,但每条都能站住。 这是在性能工程里建立可信度的唯一路径。