1. 什么是灰度发布?
灰度发布,又被称之为金丝雀发布,是指某次新发布功能特性和旧功能特性之间能够以平滑过渡的方式呈现给用户,就像金丝雀的羽毛一样多种颜色平滑渐变。
举个例子,某个已上线处于运行中的系统需要一次新的功能迭代,但是由于功能变动较大,所以发布需要考虑用户的使用反馈以及代码可能存在一些未知的异常,这时候则需要将新的功能逐步地一批一批的推送给用户。
在这个逐步放量的过程中,可以根据用户接受度(用户投诉多不多)和观察本次功能是否存在上线前未发现的异常,来决定是否继续发布推送新功能,如果新功能反馈较差或者存在功能异常问题,则停止放量或者回滚到之前稳定的版本,及时修改问题。
这样便避免一次推送情况下,如果出现问题则造成线上问题突然上升造成阻塞用户使用的问题。
2. 灰度发布的优点
- 提前收集用户使用意见,及时完善产品功能
- 控制未知异常只出现在小范围内,不影响大多数用户
- 发现产品是否存在外在问题(如合规),可及时回滚至已旧版本
3.实现原理
其中最关键的一步就是判断灰度用户这一步。
4. 灰度发布的几种方式
4.1 服务端渲染应用
在返回客户端之前将将静态模板渲染好,前端灰度实在用户的请求返回之前就完成,客户端不做任何处理灰度相关的操作。原理如下图:
用户首先发起请求后,服务器并不会直接组装静态资源,而是先去灰度规则里获取名单,然后将灰度名单拿到进行判断处理来决定渲染那一套模板资源给到客户端,最终给处于灰度名单里的用户展示新版本页面,而非名单内的用户继续使用旧版本的页面内容,如需要放量时,直接在灰度规则里进行修改即可。
4.2 前后端半分离的应用
前后端半分离的应用是指在有一部分前端应用的html文件依旧在服务端上,但是实际上却在客户端渲染的。
4.3 客户端渲染的前端应用
目前来说最常见的一种部署类型,前端开发完成后,直接打包至CDN上,然后利用nginx来请求到静态资源,这时候CDN服务器并不会去做灰度判断相关的操作,即这时候不能让后端通过一段获取灰度逻辑来控制版本,而此时前端数据请求都是异步ajax的方式。