. 灰度发布是什么?
灰度发布,又被称之为金丝雀发布,是指某次新发布功能特性和旧功能特性之间能够以平滑过渡的方式呈现给用户,就像金丝雀的羽毛一样多种颜色平滑渐变。
举个例子,某个已上线处于运行中的系统需要一次新的功能迭代,但是由于功能变动较大,所以发布需要考虑用户的使用反馈以及代码可能存在一些未知的异常,这时候则需要将新的功能逐步地一批一批的推送给用户。在这个逐步放量的过程中,可以根据用户接受度(用户投诉多不多)和观察本次功能是否存在上线前未发现的异常,来决定是否继续发布推送新功能,如果新功能反馈较差或者存在功能异常问题,则停止放量或者回滚到之前稳定的版本,及时修改问题。这样便避免一次推送情况下,如果出现问题则造成线上问题突然上升造成阻塞用户使用的问题。
二.灰度发布的优点
1.提前收集用户使用意见,及时完善产品功能
2.控制未知异常只出现在小范围内,不影响大多数用户
3.发现产品是否存在外在问题(如合规),可及时回滚至已旧版本三.
前端灰度发布的要素
1.放量规则如果逐步推送新功能,则必须有一种规则让用户按照某些特征分成不同的群体,这个规则可以是年龄,城市,或者用户注册时的id。例如,用户注册时有一个从0自增的序号位,当灰度放量时可以以该序号为维度,从小到大的放量,直至百分百完成。一个完善的系统在设计之初一定会考虑到灰度方案,如果你仔细观察用户的uid在注册的时候一定有一个序号位,像身份证号里第十五位是从0-9的序号位,一般的用户UID会留两位作为自增序号位,灰度时这两位一般被作为灰度特征。
2.资源新旧版本能明确的标识出要给用户展示两种页面形态,可以是以前端静态版本号的形式,如每次发布资源后,静态资源的版本号链接改变一下,这时候灰度则其实是两个不同资源请求链接逐步从旧到新的过程。
四. 灰度实现原理
下面是灰度的实现基本原理,最关键的还是判断灰度用户这一步操作,可以在请求发出去前进行判断,然后直接请求对应的资源,也可以请求到了服务端后,服务端先区别出用户是否属于灰度名单内,再返回对应资源内容,具体还要看前端应用是怎样的形式部署的,服务端渲染或者是客户端渲染均有关系。
五. 前端灰度发布的几种方式
1.服务端渲染应用服务端渲染应用会在返回客户端之前将静态模板渲染好,知道这个是非常重要的,这意味着前端灰度这个过程要在用户的请求返回之前就完成,在客户端不处理任何灰度相关的内容。如下图:
简单描述一下,这里用户首先发起请求后,服务器并不会直接组装静态资源,而是先去灰度规则里获取名单,然后将灰度名单拿到进行判断处理来决定渲染那一套模板资源给到客户端,最终给处于灰度名单里的用户展示新版本页面,而非名单内的用户继续使用旧版本的页面内容,如需要放量时,直接在灰度规则里进行修改即可。看看下面代码示例
// 服务端代码 // 静态模板
const model1 = () => {
return `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body>
<div id="mydiv">我是A界面</div>
</body>
</html>
`;
};
const model2 = () => {
return `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
&