前端灰度方案

3/4/2022 工程化

# 背景

开发:每次发布得在低峰,流程较长,需要研发熬夜通宵支持上线
产品:产品需要支持 abTest 能力,纯代码控制的 abTest 会产生大量的 hardCode
质控:如果出现生产 bug,会造成用户大面积影响

# 目标

灰度应用可配置,灰度区分于生产:先在灰度上线应用,经一定时间稳定后再大面积推送升级

# 方案

  1. web 端
  • 登录分离(登录识别是否是灰度用户,分别加载不同版本代码)
    • 页面直接跳转
    • 代码分离
  1. 移动端
  • 本地缓存区分
  1. 客户端
  • 本地缓存区分

# 具体实现

  1. web 端
    • nginx 层转发(lua 脚本)
  2. 移动端 native 端实现
String url = 'produrl'
// 从缓存中读取
Boolean isGray = true;
if (isGray) {
  url = 'grayurl'
}
webview.load(url)
1
2
3
4
5
6
7
  1. 客户端 native 化实现
const isGray = localStorage.getItem('isGray')
let basePath = '/prod/file'
if (isGray) {
  basePath = '/gray/file'
}
file.load(basePath)
1
2
3
4
5
6
Last Updated: 11/2/2022, 9:49:00 AM