前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >灰度发布

灰度发布

作者头像
心平气和
发布2020-09-11 11:27:17
2.5K0
发布2020-09-11 11:27:17
举报
文章被收录于专栏:程序员升级之路

1、什么是灰度发布

以下是百度词条的解释:

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

说的简单点就是在同一时间,不同用户使用同一功能时看到不同的结果,不同之处可能是界面上的,如按钮上的文字;或业务流程,如跳转支付流程,在原来的流程上多了一个新页面或多了一些选项。

2、为什么要灰度发布

灰度发布的主要目的是保证系统的可用性。因为每一次线上变更都无法保证系统100%的无bug,所以变更后要在线上小范围验证,等没问题再全面放开。

3、常用的灰度发布方式有哪些

1、按机器灰度

线上有多台机器,先将新功能代码部署到其中的1台或多台机器,然后绑定到这些机器进行测试,测试完没问题再部署到所有机器。

2、业务代码中写灰度逻辑

在业务代码中写好判断当前用户是否需要走灰度,如果是走新流程,不是还是走老流程。

打个比方,我们要做一个加密数据库字段的功能,先判断当前用户是否灰度,如果是则将其数据加密,否则不加密。

4、案例分析

我们以一个实际的例子来分析如何做灰度。

假设我们要上线一个迭代,主要有两个大的功能:

1、数据库字段加密

即对数据库部分敏感字段加密存储

2、接口加密

即对接口返回的敏感数据进行加密

另外假设我们的数据库只有一个用户表,其中的mobile字段需要加密存储:

字段

类型

说明

id

int

主键

name

varchar(50)

用户名称

mobile

varchar(50)

手机

系统部署如下:

用户请求首先访问负载均衡器,然后由负载均衡器路由到一台WEB,WEB调用到其中一台Service获取数据。

先分析下这次上线会上线哪些新功能:

1、数据库保存加密

2、数据库查询解密

3、接口返回加密

首先思考下,我们需要对3个功能都灰度吗?

因为数据库保存加密做了灰度的话,数据库查询解密相当于也做了灰度。所以功能2:数据库查询解密就不用单独做灰度了。

怎么做灰度呢,按前面分析的方式逐个分析:

1、先只将功能发布到1台机器,然后绑定HOST到这台机进行测试

即先将加密功能的代码部署到1台机器,然后绑定到这台机进行测试。

这样只有我们自己测试的数据才是加密的,线上功能不受影响;

一般业务逻辑会下沉到Service层,服务调用上需要支持将某1台WEB机上的某个Service指定到特定机器,这需要服务调用框架等中间件的支持。

另外在微服务架构下,可能有Service之间相互调用,所以Service之间的调用也要能做到根据规则做路由。

还要考虑的是在新代码机器测试的用户数据是加密的,而线上其他机器没有发布,则这些用户访问其它机器功能是不正常的,所以这个也只能限定进行灰度的用户是内部用户。

2、应用中判断当前用户是否灰度

即在配置文件中配置哪些用户是灰度用户,然后代码中判断是否灰度用户,如果是则对其数据进行加密,如果不是还是走原来的流程,等测试没问题了,把灰度用户放开到所有用户。

这种方案操作会比较复杂些,配置灰度用户可能需要分几批,如果配置中心等基础服务都上来了,操作还好,不然就得一台一台机器人肉了~

另外这种方案对业务侵入性比较大,如果每个项目都需要这么实现,工作量就比较大。所以这种方案适合一些业务流程改动非常大的、涉及的系统非常多、需要让非内部用户进行实际验证的场景。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员升级之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档