文档目录
持续化
本章定位:前七章把一次性能问题解决好了。这一章解决不再退化——用门禁、告警、发布策略和容量规划,把性能从「一次性工作」变成「持续能力」。
前置知识:第 5 章(噪声底线)、第 7 章(优化验证) 预计总时长:约 4 小时(阅读 2.5 小时 + Lab 8 约 1.5 小时) 配套代码:docs/code/08-continuous-performance/
一、本章要回答的七个问题
- 为什么「上线前压一次」不足以防止性能问题?(第 1 节)
- CI 里的性能门禁阈值该设多少?为什么不能设成噪声底线?(第 2 节)
- 全链路压测该在什么时机跑?(第 3 节)
- 「错误预算」是什么?为什么它比「P99 超标就告警」更好?(第 4 节)
- 为什么「有烟就报警」的告警会被所有人忽略?该怎么设计?(第 5 节)
- 流量回放时,写操作怎么处理?(第 6 节)
- 怎么从压测曲线算出「需要几个副本」?(第 7 节)
二、为什么「一次性优化」必然退化
第 7 章你优化了 55%,P99 从 400 ms 降到 95 ms。然后呢?
第 1 个月:P99 = 95 ms ✅
第 2 个月:P99 = 102 ms (新增了一个接口,多了一次序列化)
第 3 个月:P99 = 118 ms (数据量涨了 30%,某个查询开始变慢)
第 4 个月:P99 = 140 ms (有人加了 DEBUG 日志)
第 6 个月:P99 = 210 ms (又一个 N+1)
第 12 个月:P99 = 400 ms ← 回到起点
每一步都只退化了 3%–15%——都在噪声范围内,没人察觉。这就是渐进退化,也是性能问题最常见的形态。
关键对比
| 一次性优化(前七章) | 持续化(本章) | |
|---|---|---|
| 目标 | 把指标从 400 → 95 ms | 让它不再回到 400 |
| 手段 | 分析、优化、验证 | 门禁、告警、发布策略、容量规划 |
| 时间尺度 | 一次 | 持续 |
| 谁来保证 | 你 | 流程和机制 |
没有本章,前七章的工作会在一年内归零。
三、小节地图
| 节 | 标题 | 一句话内容 | 时长 | 要动手 |
|---|---|---|---|---|
| 1 | 为什么需要门禁 | 90% 的性能问题来自渐进退化 | 20 min | — |
| 2 | CI 微基准门禁 | 相对基线 + 宽松阈值 + 噪声验证 | 35 min | ✅ 配置 |
| 3 | 全链路性能门禁 | 专用环境 + 关键分支,不是每个 PR | 25 min | ✅ 配置 |
| 4 | 生产观测:SLI 与错误预算 | 错误预算是「性能的流量套餐」 | 30 min | ✅ 配置 |
| 5 | 告警设计:燃烧率与领先指标 | 「有烟就响」的告警会被忽略 | 30 min | ✅ 配置 |
| 6 | 流量回放与金丝雀发布 | 用真实流量验证,小范围先试 | 30 min | ✅ 设计 |
| 7 | 容量规划 | 从拐点到副本数,留 headroom | 30 min | ✅ 计算 |
| 8 | 性能评审与组织落地 | 起飞前检查单 + 谁来负责 | 25 min | ✅ 清单 |
| 9 | Lab 8:做一个不会误报的性能门禁 | 门禁经噪声验证,零误报 | 90 min | ✅ 实验 |
四、本章的产出物
- 一个 CI 微基准门禁:经噪声验证、不改代码时零误报。
- 一组生产告警规则:SLO 燃烧率 + 至少三条领先指标告警。
- 一份金丝雀判定与回滚条件:可自动判定,含具体阈值。
- 一张容量表:每个数字都能追溯到某次实验。
- 一份性能评审清单:新功能上线前必须过的检查项。
五、学完本章的验收标准
- 能解释为什么「一次性优化」必然退化,以及门禁如何阻止它。
- 能说出 CI 门禁的三个设计要点(相对比较、宽松阈值、噪声验证)。
- 能解释错误预算与燃烧率告警的设计逻辑。
- 能列出至少三条领先指标告警(饱和度类),并说明为什么它们比延迟告警更早。
- 能让流量回放不污染生产数据(写操作的四种处理方式)。
- 能写出可自动判定的金丝雀回滚条件。
- 能从压测曲线算出副本数,并说明非线性因素。
- 你的门禁在代码不变时零误报。
六、一个提醒:本章的产出物是「机制」而不是「文档」
前七章的产出物是数据和分析;本章的产出物是自动运行的机制:
❌ 「我们有一份性能检查清单」(文档,没人看)
✅ 「CI 里的门禁脚本会在性能退化 15% 时以非零码退出」(机制)
❌ 「我们定义了 SLO」(文档)
✅ 「错误预算燃烧过快时会自动告警,并附排查步骤」(机制)
判断标准:不需要人记得,它自己会运行。 这才叫「持续化」。
本节目录
- 为什么需要门禁 8.1 为什么需要门禁 上一节:无 | 下一节:8.2 CI 微基准门禁 配套代码 …
- CI 微基准门禁 8.2 CI 微基准门禁 上一节:8.1 为什么需要门禁 | 下一节:8.3 全链路性能门禁 配套代码 …
- 全链路性能门禁 8.3 全链路性能门禁 上一节:8.2 CI 微基准门禁 | 下一节:8.4 生产观测:SLI 与错误预算 配套代码 …
- 生产观测 8.4 生产观测:SLI 与错误预算 上一节:8.3 全链路性能门禁 | 下一节:8.5 告警设计:燃烧率与领先指标 配套代码 …
- 告警设计 8.5 告警设计:燃烧率与领先指标 上一节:8.4 生产观测:SLI 与错误预算 | 下一节:8.6 流量回放与金丝雀发布 配套代码 …
- 流量回放与金丝雀发布 8.6 流量回放与金丝雀发布 上一节:8.5 告警设计:燃烧率与领先指标 | 下一节:8.7 容量规划 配套代码 …
- 容量规划 8.7 容量规划 上一节:8.6 流量回放与金丝雀发布 | 下一节:8.8 性能评审与组织落地 配套代码 …
- 性能评审与组织落地 8.8 性能评审与组织落地 上一节:8.7 容量规划 | 下一节:8.9 Lab 8 配套代码 …
- Lab 8 8.9 Lab 8:做一个不会误报的性能门禁 上一节:8.8 性能评审与组织落地 | 下一节:第 9 章 综合实战 配套代码 …