线上故障应急响应流程
场景
线上突然大量用户反馈页面白屏/功能异常/接口报错,作为前端你怎么处理?
应急响应流程
标准流程:止血 → 定位 → 修复 → 复盘
第一阶段:止血(5 分钟内)
目标:尽快恢复服务,不要在这个阶段排查根因。
快速回滚到上一个稳定版本
# Git 回滚
git revert HEAD
git push origin main
# 或 CI/CD 平台一键回滚到上一个 Build
# Vercel/Netlify 等平台都支持 Instant Rollback
Feature Flag 紧急关闭
// 如果有 Feature Flag 机制,直接关闭有问题的功能
// 比通过完整发布流程更快
// 配置中心一键关闭
await featureFlag.update('new-checkout-flow', false);
止血手段优先级:
| 手段 | 速度 | 适用场景 |
|---|---|---|
| Feature Flag 关闭 | 秒级 | 新功能导致的问题 |
| CDN 切换到旧版本 | 分钟级 | 新部署导致的问题 |
| CI/CD 回滚上一版本 | 分钟级 | 代码变更导致的问题 |
| Nginx 切流/降级 | 分钟级 | 服务端问题影响前端 |
| 静态兜底页 | 分钟级 | 严重故障,切到静态页 |
第二阶段:定位根因
排查清单
// 1. 查看监控平台错误日志
// - Sentry / 监控 SDK 的错误列表
// - 错误堆栈、影响用户数、设备/浏览器分布
// 2. 查看最近的变更
// - 最近是否有代码发布?
// - 是否有配置变更?
// - 是否有依赖升级?
// 3. 查看接口状态
// - 后端接口是否正常?
// - CDN 是否故障?
// - 第三方服务是否有问题?
// 4. 复现问题
// - 是所有用户还是部分用户?
// - 是否和特定浏览器/版本有关?
// - 切换网络/清缓存能否复现?
第三阶段:修复上线
修复后要做到:
- 修复代码经过 Code Review
- 先在预发布环境验证
- 灰度发布:先放一小部分流量
- 监控指标恢复正常后再全量
第四阶段:事后复盘
复盘模板
## 故障复盘
### 基本信息
- 故障时间:YYYY-MM-DD HH:mm ~ HH:mm
- 影响范围:XX% 用户,XX 页面
- 故障等级:P0/P1/P2
### 时间线
- HH:mm 收到告警
- HH:mm 开始排查
- HH:mm 执行回滚
- HH:mm 服务恢复
### 根因分析
描述根本原因...
### 改进措施
1. [ ] 补充监控告警
2. [ ] 完善回滚机制
3. [ ] 增加自动化测试覆盖
常见面试问题
Q1: 线上出了故障你会怎么处理?
答案:
先止血再排查。第一时间评估影响范围,如果影响面大,立即回滚到上一个稳定版本或关闭 Feature Flag,保证用户可用。然后再定位根因、修复、复盘。不要在止血阶段花时间排查问题。
Q2: 如何减少线上故障的发生?
答案:
- 灰度发布:新功能先放 5%→20%→50%→100% 流量
- 自动化测试:核心流程 E2E 覆盖
- Code Review:关键改动双人 Review
- Feature Flag:大功能用开关控制
- 监控告警:错误率、性能指标异常自动告警
- 回滚机制:保证分钟级回滚能力