文档目录

综合实战

本章定位:把前八章串成一个完整闭环——从「定义目标」到「设立门禁」,产出一份可对外汇报的性能报告。

前置知识:第 0–8 章全部 预计总时长:约 3–5 天(这不是一次性读完的章节,是一个实施指南) 配套代码:docs/code/09-capstone/


一、这一章与前八章的关系

前八章是方法,这一章是把这些方法用在一个真实项目上:

步骤 用到哪一章 产出
1. 定义目标 第 1 章 SLO 表 + 延迟预算表
2. 搭服务与数据 第 3 章 可运行的服务 + 固定数据集
3. 建立基线 第 4、5 章 基线数据 + 噪声底线
4. 找拐点 第 1、3 章 容量曲线 + 拐点
5. 剖析定位 第 6 章 瓶颈清单(含贡献占比)
6. 优化验证 第 7 章 优化收益报告(含代价与被否决方案)
7. 长稳回归 第 3 章 浸泡结果 + 回归确认
8. 固化与交付 第 8 章 门禁 + 容量表 + 性能报告

注意:每一步都依赖前一步——跳过第 3 步(基线)就无法做第 6 步(优化验证),因为你没有 before。


二、项目设定:短链服务

为什么选短链服务:

特征 对应本书的哪个知识点
读写比例悬殊(读多写少) 缓存(第 7.4 节)
存在天然热点(热门短链) 幂律分布(第 5.5 节)
读路径有缓存命中/未命中两条路径 缓存对 P99 的影响(第 7.4 节)
写路径有唯一索引冲突 数据库错误处理(第 6.6 节)
可以自然演化出慢查询 索引与执行计划(第 6.6 节)
简单到能在一周内做完 让你专注于性能而不是业务

技术栈:Ktor + Kotlin 协程 + PostgreSQL + Redis(与全书一致)


三、小节地图

节 步骤 一句话 用时
1 项目设定与埋雷清单 故意保留 6 个问题,作为定位练习的素材 2 h
2 步骤一:定义目标 SLO 四要素 + 延迟预算 2 h
3 步骤二:搭服务与数据 真实依赖、100 万行、幂律分布 1 天
4 步骤三:建立基线与噪声底线 没有基线就没有优化 半天
5 步骤四:容量曲线与拐点 拐点才是容量 半天
6 步骤五:剖析定位 在拐点处剖析,产出瓶颈清单 半天
7 步骤六:优化与验证 三问纪律 + 主动否决 1 天
8 步骤七:长稳与回归 浸泡测试 + 基线复跑 半天
9 步骤八:固化门禁与交付报告 门禁 + 容量表 + 报告 + 评分 1 天
10 Lab 9:总编排 一键驱动八个步骤 —

四、本章的最终交付物

八份文件,它们本身就是一份完整的性能工程成果:

# 文件 内容 来自
1 docs/slo.md SLO 表 + 延迟预算表 步骤一
2 docker-compose.yml + seed.sql 一键起环境 + 灌数据 步骤二
3 experiments/E09-baseline/ 基线数据 + 噪声底线 步骤三
4 experiments/E10-capacity/ 容量曲线 + 拐点 步骤四
5 bottlenecks.md 瓶颈清单(含证据链、贡献占比、被排除的假设) 步骤五
6 OPTIMIZATION.md 优化收益报告(含代价、否决记录) 步骤六
7 soak.csv + 回归结果 长稳数据 + 回归确认 步骤七
8 perf-gate.yml + capacity.md + PERF-REPORT.md 门禁 + 容量表 + 最终报告 步骤八

关键:第 8 份(最终报告)的价值不在于数字漂亮,而在于「别人能按你的方法复现出同样的数字」。


五、评分标准

维度 不合格 合格 优秀
目标定义 只有「要快」 有 SLO 但缺负载前提 SLO + 延迟预算 + 崩溃线
数据可信度 单次运行、无环境记录 多次运行、有元数据 有噪声底线与置信区间
瓶颈定位 靠猜或只看火焰图 有指标 + 火焰图证据 有证据链、贡献占比、被排除的假设
优化验证 只给 after 有 before/after 有代价分析、长稳回归、否决记录
报告表达 只有数字 结构完整 能被非性能工程师用于决策
持续化 无 有门禁脚本 门禁经噪声验证、有告警与容量表

评分的核心是「可复现」与「可决策」,不是「数字有多好」。


六、怎么用这一章

三种用法:

用法 适合谁 做法
完整实施 想系统练一遍的人 按步骤 1–8 全部做完(3–5 天)
只读流程 想了解全貌的人 读 10 个小节,理解「每一步为什么必要」
当模板用 手上有真实项目的人 把每节的清单套到自己的服务上

推荐第一种——因为性能工程的很多细节,只有亲手做过才知道(比如「噪声底线到底有多大」「幂律分布怎么造」「火焰图上什么样叫宽而平」)。


七、一个提醒:不要追求「完美」

真实的性能工程不是「把所有指标都做到极致」,而是:

✅ 在有限时间里,把最关键的问题解决到「可验证、可维持」的程度

❌ 花两周把 P99 从 95ms 优化到 92ms(在噪声范围内,无法证实)

本章的验收标准是:

  • 你的证据链完整(能复现)
  • 你的结论有边界(写了未覆盖的场景)
  • 你的机制能持续(门禁零误报)

而不是:P99 有多低。

本节目录