E融汇移动端灰度发布功能演进

509 阅读4分钟

背景

灰度发布是近两年互联网产品必备的一个基础能力,在新功能发布时,只对一小部分用户开放,通过采集、分析用户的数据与反馈,逐步扩大范围,直至向所有用户开放。

灰度发布能使我们及早获得用户的意见反馈,完善产品功能,提升产品质量,让用户参与到产品的体验测试中,加强用户互动,降低产品升级所影响的用户范围。

E融汇是中国银行一款外汇贵金属期权原油投资APP,其功能繁多,对价格和交易敏感,每次新功能发布都小心翼翼、心惊胆战,稍有问题,即会影响全部用户,轻则体验较差,重则带来资金损失。因此,E融汇于去年开始了灰度发布之路。

灰度发布1.0

最初为达到灰度测试的效果,在后台功能投产后,前端APP先不上架,由项目组人员安装新版本APP到手机上,进行功能验证。由于安装繁琐,灰度测试包流通范围不易控制,iOS的ipa安装包无法直接安装等条件限制,灰度测试人员仅限于项目组同事,线上很多场景无法覆盖(如期权交易要求账户上必须有外币存款等)。

后来,DevOps条线同事开发出移动产品持续交付平台,提高了APP产品的持续交付能力。借助该平台,项目组提交代码即可生成灰度测试包,大家只需扫描二维码即可直接安装到手机上。安装难度降低后,便可把总分行业务部门的相关同事都加入到灰度测试的范围当中,大大加强了场景的覆盖度,可达到全功能的覆盖。配合着灰度白名单的控制,能严格控制灰度测试包的流通范围和下载次数,方便管理。

灰度发布2.0

虽然有了持续交付平台,但是对于已经发布的版本,功能还是对所有用户开放,如果某个监管规定要求紧急调整某项规则(对银行软件来说很常见),无法即时关闭或下架原有功能,只能紧急发布新版本,并强制用户更新,对用户来说是不可接收的体验。iOS版本从提交审核到发布至少需要2天时间,期间只能祈祷审核不要被拒绝。

为了满足以上需求,我们在E融汇APP中,给每个功能编号,并在后台给每个功能配上开关标识。用户在打开APP时,只能看到开放的功能,关闭的功能无法看到,即使通过某个链接或者某个广告位跳转至关闭的功能,也会提示用户“该功能升级中,敬请期待”等字样。

有了功能开关之后,灰度发布就简单了。每次新功能发布时,只针对特定白名单内的用户打开该功能。同是线上同一版本,不同的用户看到的是不同的功能,初步实现了灰度发布功能。

计划

基于开关功能,未来可以实现很多灰度发布策略。如

  • 基于用户标识的灰度发布策略:hash(userid) % 1000 <= n,则开放功能。设置不同的n值,可以控制新功能的流量,初期可以开放千分之一的流量,逐步扩大,直至全部

  • 基于地域的灰度发布策略:设置某个功能针对某些地域的用户开放,如上海分行的特色功能,只开放给上海的用户

  • 可以制定更加复杂的规则引擎,实现更复杂的策略

A/B测试是灰度发布的一个重要方式,我们也会积极尝试,敬请期待~

如果各位有好的想法,欢迎关注我的公众号(程序员顺仔)留言讨论~