在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本。但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用。 

为了解决这些问题,研究出了多种发布策略,今天给大家介绍一下灰度发布策略,这也是目前互联网大厂用得最多的方案。

什么是灰度发布?

什么是灰度发布呢?要想了解这个问题就要先明白什么是灰度。灰度从字面意思理解就是存在于黑与白之间的一个平滑过渡的区域,所以说对于互联网产品来说,上线和未上线就是黑与白之分,而实现未上线功能平稳过渡的一种方式就叫做灰度发布。

在了解了什么是灰度发布的定义以后,就可以来了解一下灰度发布的具体操作方法了。例如,你的APP有新的业务功能需要上线,而且开发了A版本和B版本,为了验证哪个版本更贴近用户使用习惯,这个时候我们就可以选取自己比较活跃的用户,同时也分成两批,其中一批投放A版本,另外一批投放B版本去体验,在投放之前就要对各种可能存在的数据做到收集记录工作,这样才能在投放以后查看两个版本的用户数据反馈,通过大量的数据分析以及调查来确定最后使用哪一个版本来进行投放。

如何低成本快速实现灰度发布?_新版本

如何低成本快速实现灰度发布?_新版本_02

通过小流量验证的方式,调整并优化产品中的问题,平滑迭代,同时还可以有效的防止重大BUG产生影响系统回档或者造成其他更多不必要的经济损失,同时,还能验证不同版本功能的使用情况,从而选择最优版本。

灰度发布具体流程

灰度发布具体流程如下所示:

如何低成本快速实现灰度发布?_新版本_03

灰度发布流程细节如下:

1.在灰度发布开始后,先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀。

2.如果测试没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。

3.当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。如果在灰度发布过程中发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内。具体流程如下图所示:

如何低成本快速使用灰度发布

定义目标、策略选定、筛选用户之后,灰度发布的很大一部分工作量在于系统部署,今天给大家分享一个比较快速低成本的方法。​

FinClip 是 一个可以让任何 App 都能具备小程序运行能力的前端容器技术,只需简单集成 FinClip SDK ,即可在 iPhone、Android、Windows、Linux、macOS、统信等平台下的应用中运行你的小程序,同时,它还提供一个完善的后台管理系统,可统一管理小程序的上架和下架,以及小程序的灰度发布、并且具备数据分析能力,不管对于开发人员还是运营人员,可谓是极其便捷了。

那为什么小程序利于灰度发布?因为小程序具备“松散耦合”的特性:

  • (1)自身的迭代升级,也不会影响到宿主 App 运行的稳定性,也无需对 App 进行全回归测试。
  • (2)小程序业务功能开发可以高度并行
  • (3)容易灰度发布 – 粒度细到碎片级(例如一个小程序是可以仅在测试白名单的范围内试点)。

通过FinClip 管理后台,任何小程序都可根据用户画像、客群分层,动态控制可见范围,而且无需编写任何复杂的应用逻辑代码。

同时,FinClip SDK 可自动上报相关数据,实现测试发布完整闭环,无需对每一个小程序都进行业务埋点开发,并且针对需要复杂业务数据回传的小程序而言,由于 FinClip SDK 有规范的数据上报协议,因此只需完成少量开发,即可实现最准确的数据上报回传。

在这个讲究快速敏捷迭代的时代,企业机构们应该需要考虑对自己的 App/应用 进行瘦身,把新旧功能剥离,以独立生命周期、独立开发测试团队的方式进行开发 – 有用的场景继续深入、无效的尝试即时废弃。总体技术架构必须让基础 App 保持稳定、让频繁增删变更业务功能成为可能,同时最大程度降低开发门槛、减少试错成本、实现敏捷迭代。

有趣的知识:灰度发布也叫金丝雀发布,起源是,矿井工人发现,金丝雀对瓦斯气体很敏感,矿工会在下井之前,先放一只金丝雀到井中,如果金丝雀不叫了,就代表瓦斯浓度高。