性能、故障与失败复盘
指标取证 · 项目卡片
一份案例记录
| 字段 | 记录内容 |
|---|
| S:背景 | 业务影响、时间线、流量/数据规模、最近变更、约束 |
| T:职责 | 本人的目标、权限、负责模块;区分团队与平台 |
| A:行动 | 证据、候选根因、止损、替代方案、实施、灰度及回滚 |
| R:结果 | 前后指标、匹配的统计窗口、验证方法、数据补偿和防复发 |
| 失败复盘 | 当时判断为何合理、漏掉的信号、本人责任、修正与工作方式改变 |
三类技术案例线索
| 层次 | 证据 | 候选原因 | 处置与验证 |
|---|
| JVM/线程池 | GC 日志、线程栈、分配剖析、堆引用路径、队列与连接池等待 | 无界缓存/大结果集;无超时的慢调用占满工作线程 | 缓存有界、分页;deadline、隔离、有界队列与拒绝。比较 GC 后基线、排队和业务 P99 |
| 数据库 | 慢 SQL、EXPLAIN、performance_schema.data_lock_waits、SHOW ENGINE INNODB STATUS | 缺索引、深分页、批量长事务持锁 | 联合索引/游标分页/小批提交;DDL 评估锁与写放大。回放同量级数据并比较扫描行数、锁等待和耗时 |
| MQ/下游 | 生产/消费速率、lag、最老消息年龄、渠道 RT | 下游变慢、重试放大、消费者资源不足 | 分类限流/熔断/渠道切换;下游恢复后按预算回放,过期消息不发。验证端到端送达与重复副作用 |
追问速查
- 因果:同负载窗口、单变量、灰度/对照组、发布与扩容记录;若仅有前后对比,说明流量和其他改动的干扰。
- 止损顺序:优先快速、可逆、影响小的动作,如关开关、回滚、摘流量或降级。保留代表性现场,不为取证拖延恢复;heap dump 可能暂停并消耗磁盘。
- 扩容边界:计算资源瓶颈且下游有余量才有效;实例数 × 每实例连接池可能超 DB 上限,扩容不能消除锁竞争或泄漏。
- 数据修复:以流水/原始请求/上游单据确定事实;备份影响范围,小批可重入执行、审批复核、冲正/补录,修后重新对账。
- 无法回滚:数据已变更或消息已发出时,使用兼容发布、功能开关、降级、前向修复和补偿;镜像回滚不会撤销业务副作用。
- 数字口径:指标名、来源、起止时间、样本量和分母完整;恢复时长定义告警/发现到哪项服务指标恢复。
- 机制改进:将遗漏转成评审条目、灰度门禁、任务年龄/P99/差错告警或故障演练,提供生效证据。
练习
准备性能优化、线上故障、错误决策各一例,覆盖至少两层技术;闭卷回答“为何先做这步、替代方案为何不选、如何证明结果”。没有对应经历时使用明确标注的教学推演,禁止套写虚构线上指标。