一、定义:
灰度发布是指在白和黑之间平滑过度的一种发布方式,先让一部分用户使用需要更新的产品,如果这部分用户没有反对意见便逐步扩大,知道全部用户使用的都是更新后的产品。
二、优点
降低发布带来的影响,提前发现bug或性能问题。
三、分类
1、web前端灰度
当处理请求时,根据动态配置的分流策略来决定用户使用哪个版本,随即放量给10%的用户使用,用户首次命中资源版本号时,就将用户id和版本号的映射关系存储起来,保证了用户请求的版本号一致。
2、服务端灰度
2.1、兼容变更
2.1.1、物理灰度
根据机器维度进行灰度,直接部署新老版本在不同机器,流量均匀打在新老版本上。
2.1.2、逻辑灰度
根据更精确的流量策略来控制流量,需要额外的代码,灰度之后需要删除额外代码。
2.2、不兼容变更
指的是更改了当前功能之后,新老版本的接口会发生很大变化,必须要前后端同时发布,否则会有一段时间服务不可用,一般做法是引入接口版本号,新老版本接口并存,等过了一段稳定期后再下到老版本。
3、客户端灰度
web前端和服务端灰度发布可以在客户无感知的情况下平滑进行,遇到问题也可以快速回滚,但是移动客户端涉及到用户的主动安装行为,所以上述的方式已经不适用。
如果一个带有bug的安装包全量发布出去,一旦有问题,我们只能快速定位问题来提醒用户安装新版本,是否安装取决于用户,所以客户端灰度发布是非常有必要的。
客户端在启动时,会向灰度系统发起请求,灰度系统根据客户端传过来的参数和当前的放量策略来决定是否要给客户端升级提醒。一般会根据以下几种策略来决定给予用户升级提醒:
1)根据用户设备的系统和应用版本
2)根据渠道。发布到不同应用市场的app都会被打上渠道标签,所以可以根据渠道来区分用户。
3)根据设备ID和用户ID
通过设备ID主要是为了控制提醒频率,用户ID主要是为了区分出特性用户,比如对活跃用户发送提醒。
四、灰度放量策略
1、按流量百分比
2、按人群划分
(1)按用户id
(2)按用户ip
(3)按设备类型
(4)按地域、性别、年龄等
(5)按渠道