灰度发布与ABTest
要想了解这个问题就要先明白什么是灰度。灰度从字面意思理解就是存在于黑与白之间的一个平滑过渡的区域,所以说对于互联网产品来说,上线和未上线就是黑与白之分,而实现未上线功能平稳过渡的一种方式就叫做灰度发布 灰度发布又叫金丝雀(Canary)发布,起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高
# 灰度发布和 AB Test 的区别
和大部分人一样,我个人之前对灰度发布和 AB Test 存在一定的混淆,认为就是换了一种说法,但实际调研发现两者之间存在着本质上的区别
- AB Test
要点是,AB 的两种功能都是可用的, 投放的用户群体无差别,让用户选择更受欢迎的功能,后期可能是 A 上线,也可能是 B 上线
- 灰度发布
关键要点是,灰度版本未必是可用的,或者说没有严重 bug 的,投放的客户群体可能只是北上广深等一线城市的用户,由监控确定是否有问题,后续可能会继续放量上线
# 灰度发布的优势
- 提前获得使用反馈,缩减风险影响范围
因为灰度发布可以通过地域、性别、用户等级、使用客户端等一系列的策略条件对目标用户群进行筛选,所以可以保证验证版本影响的用户在最小可接受的范围内。此外,基于验证版本提前收集用户使用意见,及时完善产品功能,并且根据用户和监控的反馈结果,做到查漏补缺,对于过程中发现的重大问题,甚至可以及时的回滚至"旧版本"
- 自定义规则引擎,精准控制内容投放
此外灰度发布可以作为一个自定义的规则引擎,可按地域、人群、时段等自定义标签对 App 模块或者 Web 页面进行内容的精准投放,满足企业产品的精准化投放发布需要。就像是我们业务组负责人提出的需求,把新上线的活动仅投放给北上广深四个一线城市的高等级用户
# 灰度发布方案分析
- TestFlight
对于 iOS 开发者来讲有一个较为方便的灰度测试方案,也是大家使用最多的 —— TestFlight。TestFlight 测试工具允许开发者通过邮件等方式邀请用户测试。TestFlight 在被苹果收购之后,和 AppStoreConnect 进行了深入整合,现在,它可以生成一个公开的链接,用户可以直接安装测试
当用户打开现有版本的 App 后,服务器可以根据当前用户的标签判断是否为灰度用户。如果是的话,需下发 TestFlight 的安装链接,App 端引导用户进入 TestFlight 安装
但 TestFlight 也有一定的不足:
- 用户必须安装 TestFlight ;
- 有效测试时间为 60 天,在有效期结束之前需引导用户更新正式版本;
- 测试用户可以达到最多 10000
- 功能小程序化
第二种对于很多开发者来讲可能比较陌生,起因是因为公司的 App 较为臃肿,迭代发版非常麻烦,希望功能模块互相解耦实现模块化开发,各业务模块间互不影响,所以计划集成 FinClip SDK ,让整个 App 具备小程序的运行能力,继而把 App 之前的业务功能都小程序化,通过管理后台去实现动态更新与发布
刚好在进行技术体验时发现,FinClip 的小程序是借助部署的 FinClip 管理后台实现上下架,上下架的同时可以进行上架规则的制定。这样一来,相当于有了一个自定义的灰度发布引擎去自由配置地域、性别、用户等级等自定义条件,不需要编写任何复杂的应用逻辑代码,完成上下架的同时就完成了精准的上线发布
相对于 TestFlight ,这种方式的优势在于:
- 不仅可以用在 iOS 系统中,Android 和桌面端应用也能集成 FinClip SDK ,相当于灰度测试覆盖的范围更加广;
- 自身的迭代升级,不会影响到宿主 App 运行的稳定性,也无需对 App 进行全回归测试;
- 小程序业务功能开发可以高度并行;
- 灰度发布粒度更细致(例如一个小程序是可以仅在测试白名单的范围内试点)