发布与回滚策略
场景
新版本发布后崩溃率飙升,需要快速灰度和回滚,降低用户影响面。
方案
1. 灰度发布
| 阶段 | 比例 | 目标 |
|---|---|---|
| 内测 | 0.1% | 公司员工 + 测试组 |
| 小流量 | 1% | 验证核心功能和崩溃率 |
| 灰度 | 10% → 50% | 逐步放量,观察指标 |
| 全量 | 100% | 各项指标达标后放量 |
Google Play 支持分阶段发布(Staged Rollout),国内渠道可通过自建灰度系统:
// 客户端灰度判断
fun isInGrayRelease(userId: String, percentage: Int): Boolean {
val bucket = abs(userId.hashCode()) % 100
return bucket < percentage
}
2. 回滚手段
| 手段 | 时效 | 适用场景 |
|---|---|---|
| Google Play 暂停发布 | 分钟级 | 发现严重问题,停止新用户获得更新 |
| 热修复 Patch | 小时级 | 修复代码 Bug(国内场景) |
| Feature Flag 关闭 | 秒级 | 问题出在新功能,远程关闭开关 |
| 强制更新到新版 | 天级 | 发修复版本,强制升级 |
3. 发布检查清单
发版前:
- [ ] 崩溃率 < 0.1%(内部灰度阶段)
- [ ] 核心链路自动化测试通过
- [ ] 启动耗时无劣化
- [ ] 关键 Feature Flag 默认关闭
发版后:
- [ ] 实时监控崩溃率、ANR 率
- [ ] 关注用户反馈渠道
- [ ] 灰度期间每日 Review 数据
- [ ] 异常时 30 分钟内触发回滚
止血优先
线上出问题的第一原则是先止血再查因。先通过 Feature Flag 关闭问题功能或暂停灰度,确保不影响更多用户,再定位根因和修复。
面试答题要点
- 灰度发布按比例逐步放量
- Feature Flag 是最快的回滚手段(秒级)
- 建立发布检查清单,防止低级问题上线
- 止血→定位→修复→复盘的应急流程