在大型软件产品发布过程中(例如微软的Windows 7的发布过程中),为慎重起见, 一般都会经历Pre-Alpha、Alpha、Beta、RC(Release Candidate)、RTM、GA (General availability or General Acceptance)等几个阶段。 产品的发布过程不是一蹴而就,而是逐步扩大使用用户的范围。
可以看出,对于大型软件的发布是分阶段的。 一般是从团队内部 → 部门内部 → 公司内部 → 外部小范围测试 → 外部大范围测试 → 正式发布, 涉及的用户数也是逐步放量的过程。
在大型互联网产品的发布过程中,也较多采用此种发布方式: 从公司内部用户 → 忠诚度较高的种子用户 → 更大范围的活跃用户 → 所有用户。 在此过程中,产品团队根据用户的反馈及时完善产品相关功能。
此种发布方式,按照中国特色的叫法被冠以“灰度发布”、“灰度放量”、“分流发布”。 在众多的叫法中,“分流发布”这个名字直白的说明了发布原理。而“灰色发布”这个名字最为优雅,所以“灰色发布”这个名字最受欢迎。
关于“灰度发布”叫法的来源无从考察。只不过按照中国传统哲学的说法来看,很符合中国人中庸的思维模式: 自然界所有的事物总是以对称、互补、和谐的形式存在,例如黑与白、阴与阳、正与负、福与祸。 在二元对立的元素间存在相互过渡的阶段,所谓“祸兮福之所倚,福兮祸之所伏”。 具体到黑与白,在非黑即白中间还有中间色——灰色。 于是出现了很多关于灰色的说法:灰盒测试、灰色管理(任正非:管理的灰度)、灰色收入、灰色地带等等。
灰度发布实际上就是从不发布,然后逐渐过渡到正式发布的一个过程。
灰度发布是一种试探性发布。因为他不确定新版本会对用户造成什么影响,所以选择让一部分用户使用新服务, 如果发现用户好评如潮,就逐渐扩大用户升级规模,最后让全部用户升级到新服务。
灰度发布对海量用户的App发布非常有效。
问题特征:
解决方案:
“知识的诅咒”这个说法来自《粘住》,具体可以自己搜索一下。 我们自己对于自己开发的产品极为熟悉,于是乎想当然认为用户也应当能够理解产品的设计思路、产品的功能使用。
问题特征:
解决方案:
问题特征:
解决方案:
问题特征:
解决方案:
灰度发布与A/B Test
看起来比较类似,国内很多人常常将灰度发布与A/B Test
等耳视之。老外也并没有所谓的灰度发布的概念。 实际上,灰度发布是中国人从A/B Test
引申而来的,所以灰度发布是A/B Test
的一种特殊用途,用来发布产品的。
A/B Test
最重要的是大数据分析,以提供决策,没有大数据分析,就不能称为A/B Test
。
分流是反向代理和负载均衡的原理基础。而灰度发布也是基于分流的。
对于一般的小系统并不需要单独的灰度发布引擎,在页面javascript或服务器端实现分流的规则即可。
对于大型的互联网应用而言,单独的用于管理用户分流的发布引擎就很有必要了。 “钱掌柜”分流发布模式提到了原来阿里软件所使用的灰度发布引擎,设计思路具有普遍性,可以供参考:
1、假设我们的App现在市场上的版本是1.0.0
,我们的版本规划是,下个发布版本是2.0.0
,现在的布署图如下:
2、现在我们2.0.0
版本已经开发完成,测试和iOS
审核过程中的布署图如下:
在这个时候,我们一定要确保,只有用户的操作系统是iOS
和客户端版本是2.0.0
的请求才能访问2.0.0
服务。
这时候,我们的1.0.0
版本的服务仍然在运行,市面上的用户仍然使用1.0.0
的服务, 但是iOS
审核人员用的是我们提交的2.0.0
版本,他用的服务就是新的2.0.0
的服务,并且只有他用的是这个新服务。
3、当iOS
审核通过后,一部分iOS
用户更新了App,我们的布署图如下:
这时候,我们通过修改Ngnix
的配置文件,让具有某种特征的用户使用2.0.0
新服务, 让另外一些用户依然使用1.0.0
版本的服务。
我们要做的就是:不断根据用户反馈进行统计分析,了解这部分使用了2.0.0
新服务的用户的对新服务的使用满意度,根据满意度决定, 是让更多的用户使用新服务还是关闭新服务。