标准答案

  1. 灰度对象可以按用户、租户、地区、设备、比例、环境或内部白名单划分。
  2. 灰度控制可以发生在路由入口、网关、CDN、服务端模板、配置中心或前端 feature flag。
  3. 发布前要确保新旧前端和后端接口在一段时间内兼容,避免只灰度前端却打到不兼容接口。
  4. 观察指标包括 JS 错误率、接口错误率、白屏率、核心转化、Web Vitals 和用户反馈。
  5. 回滚要能恢复旧入口和旧资源,并保留旧 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 用户加载失败。
  • 没有定义观察指标和停止条件,灰度只是人为拖慢全量发布。

作者信息