知识分享

  • 首页
  • 市场分析
  • 需求分析
  • UI设计
  • 产品运营
  • 产品设计
  • 项目管理
  • 新玩意儿
不积跬步无以至千里
不要停留,欣赏沿途的风景
  1. 首页
  2. 产品设计
  3. 正文

大厂常用的几种灰度发布方案

2021年2月22日 226点热度 0人点赞 0条评论

编辑导语:灰度,就是存在于黑与白之间的一个平滑过渡的区域。对于互联网产品来说,上线和未上线就是黑与白之分,而实现未上线功能平稳过渡的一种方式就叫做灰度发布。不少大厂在产品上线前都会进行灰度测试,本文作者为大家总结了大厂常用的几种灰度发布方案。

什么是灰度发布?百度百科的解释是这样的:

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。

AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

从上述可以看出,灰度发布的作用有以下几点:

  1. 降低发布带来的影响,虽然功能都在测试环境测过,但毕竟没有发布到生产环境,如果先让少部分用户先使用新版本,提前发现bug,或者性能问题,提前做好修复,就可以降低新版本带来的影响;
  2. 通过对新老版本的对比,观察新版本带来的效果。

结合工作中使用到的灰度发布实践和对其他大厂的灰度发布调研,总结了以下灰度发布方案。

一、灰度发布的划分

灰度发布如果按照端来分的话,可以分为web前端、客户端、服务端灰度。

无论是哪种灰度,一般需要满足以下2点要求:

  1. 需要一个放量配置,给产品/运营等工作人员配置放量策略;
  2. 需要做到同一个用户始终访问的是同一个版本的代码,如果同个用户上个请求访问的是A版本,下个请求访问的是B版本,就可能会出问题。

1. web前端灰度

假设我们的前端资源存放在CDN上面:我们每次发布一个新版本,就把资源增量式地上传到CDN,然后给它分配一个唯一的版本号,再把所有的版本号存储起来。当处理请求时,根据动态配置的分流策略来决定用户使用哪个版本。

比如分流策略是放量10%,即新版本随机放量给10%的用户使用,当用户首次命中资源版本号时,需要把用户id和版本号的映射关系存储起来(可存到cookie),这样就能保证同个用户上次请求和下次请求访问到的都是同个版本的代码。

那如果线上有紧急bug需要修复,又要重新发布新版本,该如何处理当前灰度的状态?是赶紧结束上一个灰度然后全量发布还是一起发上去同时灰度?一般来说,再有新版本发布或者放量策略发生变化时,应该重新分流灰度。

2. 服务端灰度

服务端灰度分为兼容变更灰度和不兼容变更灰度。

1)兼容变更

兼容变更又可分为物理灰度和逻辑灰度。

  • 物理灰度:物理灰度比较简单,根据机器维度进行灰度,直接部署新老版本在不同机器,流量均匀地打在新老版本上面。这种方式虽然简单,但不适用于不兼容变更;
  • 逻辑灰度:逻辑灰度就是根据更精确的流量策略来控制流量,这种灰度一般要写一定的灰度代码。这种方式能比较精确地控制流量,但是增加了一定的灰度代码,灰度完成后要删除相关灰度代码,有点麻烦。

2)不兼容变更

不兼容变更指的是更改了当前功能,即接口逻辑跟之前版本发生很大变化,必须要前后端同时发布,否则会有一段时间服务不可用。

一般的做法是引入接口版本号,新老版本接口并存,比如 /v1/api 和 /v2/api。前端使用/v2/api版本,当过去一段稳定期后(可以是登录态时间失效后),就可下掉/v1/api版本。

3. 客户端灰度

web前端和服务端灰度发布可以在客户无感知的情况下平滑进行,遇到问题也可以快速回滚,但是移动客户端涉及到用户的主动安装行为,所以上述的方式已经不适用。

如果一个带有bug的安装包全量发布出去,一旦有问题,我们只能快速定位问题来提醒用户安装新版本,是否安装取决于用户,所以客户端灰度发布是非常有必要的。

客户端在启动时,会向灰度系统发起请求,灰度系统根据客户端传过来的参数和当前的放量策略来决定是否要给客户端升级提醒。一般会根据以下几种策略来决定给予用户升级提醒:

  1. 根据用户设备的系统和应用版本;
  2. 根据渠道:发布到不同应用市场的app都会被打上渠道标签,所以可以根据渠道来区分用户;
  3. 根据设备ID和用户ID。

通过设备ID主要是为了控制提醒频率,用户ID主要是为了区分出特性用户,比如对活跃用户发送提醒。

二、灰度放量策略

流量策略一般分为以下几种:

1. 按流量百分比

先到先得的方式比如限制10%的用户体验的是新版本,90%的用户体验的是老版本。先访问网站的用户就优先命中新版本,直到流量用完为止。

2. 按人群划分

  1. 按用户id、用户ip、设备类型比如可通过平时的埋点上报数据得知用户的pv、uv、页面平均访问时长等数据,根据用户活跃度来让用户优先体验新版本,进而快速观察使用效果。
  2. 按地域、性别、年龄等用户画像比如可通过用户的性别、年龄等做下新老版本的对比效果来看看目标用户在新版本的使用年龄段,性别范围是多少。

3. 按渠道划分

比如根据用户的注册来源来放量。

三、灰度发布的代价

通过上面的讲解,可以看到一个完整的灰度发布,包括前端、后台都需要额外的代码量去实现,如果只有几万的用户,要去实现这样一套灰度发布,代价是比较高的。

但如果是百万~亿级用户,灰度发布是很值得的,它不仅能降低新版本bug的风险,还能通过版本对比,推出最好效果的版本应用。

 

前百度前端工程师,现腾讯前端工程师,公众号:产品的技术小课。

本文由 @lemon 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自 Unsplash,基于 CC0 协议

给作者打赏,鼓励TA抓紧创作!

标签: 暂无
最后更新:2021年2月22日

小虾米

同理心,洞察力!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
最新 热点 随机
最新 热点 随机
组件详解|级联选择、树形选框、穿梭框,用法有什么区别? 年轻人为什么都在小红书上“看病”?网红医生靠谱吗? 用C端经验做B端产品,需要考虑客户的整个体验旅程 外呼不通?如何排查 迈向数字化产品经理的10个工具:如何抽象具体的一个业务? B端系统设计5要素,一学就会! 跨境电商亚马逊SP广告知识(1) 整个VR行业,都在指望着明天的苹果发布会 电商巨头,掀起“清库存”大战 大厂SaaS平台的7个真相 抖音盯上小红书?防御即是增长 懂行业对产品经理发展的重要性 店铺优惠券管理及用户使用流程说明需求文档 直觉的力量|超越可用性的设计 618前瞻:电商平台的GMV之争,将变成低客单火拼 干货分享:跨境电商海外仓OTWB的基础资料管理与分发 扎克伯格“截胡”苹果,但好像没什么用 自动驾驶风口退潮的深层逻辑 都在骂网暴,为什么网暴一直没有停过 产品思考:视觉冲击!以图片展示金额,“省钱卡”这样玩就对了
被集市收割、被买家嫌弃,“摆摊后浪”有点惨蓝领用工招聘平台的数字化建设思路干货分享:WMS系统—PDA的应用iOS 17,能否守住「iOS神话」?系统功能设计:网络加速器系统产品需求设计电商扫盲第一讲:GMV的底层逻辑打造一个基于本地社区的闲置交易平台,你看好吗?东南亚出海洞察:去东南亚为直播电商开荒,没有超头主播,货品供给不足……定金+尾款模式背后的套路天涯老用户的自救,让我明白情怀是最不值钱的东西抖音上线酒店日历房,其他平台会慌吗?从需求到设计开发,产品质量问题如何分析靠咱们看腻的电视剧,爱奇艺和腾讯在东南亚成了顶流如何让你的“对内B端产品”看起来有价值?设计走查知多少产品思考:视觉冲击!以图片展示金额,“省钱卡”这样玩就对了多多买菜为什么比美团买菜要便宜?都在骂网暴,为什么网暴一直没有停过韩国漂流记:明星在面前,咖啡在手里,中国互联网公司在广告墙自动驾驶风口退潮的深层逻辑
离“五一”还有半个月,打工人已经挤爆旅游业? 如何在普通公司,搭建可落地的用户标签体系? 产业互联网,一个新开始 如何做好软件需求分析? “367万的梅西卡”,是门什么生意? 抖音患上“入口”焦虑症 视频号直播,打开了想象力 完整产品经理面试50题及回答实例(下) 中台建设:不只是IT工具,更是组织布局 外卖撑不起抖音万亿GMV梦 Axure9 教程:拖动滑块确定评分区间效果 为什么人会熬夜玩游戏?——在产品设计中刺激“多巴胺” 身为产品经理,这几件事不建议你做! 元宇宙社交,在等一款“iPhone” 先别着急给视频号下定义 字节跳动挥剑亚马逊电商? 淘宝下单拼多多发货,无货源网店为何“杀不死”? 社区电商里“淘金”,“淘菜菜”们箭在弦上 外有抖音、快手抢市场,内部付费用户下降,秀场直播何去何从? 你搞到的优惠券,都是他们“投诉”来的

COPYRIGHT © 2023 知识分享. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang