标准答案
- 灰度对象可以按用户、租户、地区、设备、比例、环境或内部白名单划分。
- 灰度控制可以发生在路由入口、网关、CDN、服务端模板、配置中心或前端 feature flag。
- 发布前要确保新旧前端和后端接口在一段时间内兼容,避免只灰度前端却打到不兼容接口。
- 观察指标包括 JS 错误率、接口错误率、白屏率、核心转化、Web Vitals 和用户反馈。
- 回滚要能恢复旧入口和旧资源,并保留旧 hash 文件、旧配置和 source map。
题目解析
前端灰度发布的难点在入口和资源。一旦 HTML 指向了新 hash 资源,用户浏览器、CDN 和 Service Worker 都可能缓存不同版本,所以灰度和回滚必须把 HTML、静态资源、配置和缓存一起考虑。
好的灰度不是“先让一部分用户试试”这么粗。它需要明确放量条件:错误率是否上升,关键路径是否可用,性能指标是否变差,是否出现地区或设备集中异常。
回滚也不能只重新发布旧代码。旧静态资源如果已经被清理,旧配置如果已被覆盖,或者服务端接口已经不兼容,回滚入口也可能继续坏。
代码示例
灰度开关要能稳定命中同一批用户,避免用户在新旧版本之间反复跳动。
Text
release strategy:
internal users -> 5% stable users -> 20% -> 50% -> 100%
rollback needs:
previous HTML
previous hashed assets
previous runtime config
matching source maps常见误区
- 只灰度前端,不确认后端接口兼容和配置兼容。
- 发布新版本后立即清理旧 hash 资源,导致回滚或旧 HTML 用户加载失败。
- 没有定义观察指标和停止条件,灰度只是人为拖慢全量发布。