Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >灰度发布

灰度发布

作者头像
心平气和
发布于 2020-09-11 03:27:17
发布于 2020-09-11 03:27:17
2.8K0
举报

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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
部署是将服务的某个版本投入生产环境的过程。部署的总体目标是:对系统用户产生最小影响的情况下,把服务的升级版本投放到生产环境中。
憧憬博客
2020/07/21
2.5K0
企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
流量大了就加机器?太 Low 了!负载均衡的这些高级玩法,让你部署、测试、安全一步到位!
咱们做开发的,特别是刚开始接触后端服务的同学,可能经常遇到这样的场景:用户量一上来,应用响应变慢甚至卡死,老板在后面催,用户在群里骂,咋办?最直接的想法是不是“加机器”?没错,加机器是能解决一部分问题,但这就像头痛医头脚痛医脚,不够优雅,成本也高。
老码小张
2025/04/29
1310
流量大了就加机器?太 Low 了!负载均衡的这些高级玩法,让你部署、测试、安全一步到位!
基于 Traefik 的加权灰度发布
众所周知,Traefik 是云原生生态中的一个爆款的反向代理和负载均衡器。我们无论如何定义、赞美它都不为过。毫无疑问,基于传统的反向代理组件而言,真正使 Traefik 与 Nginx,Haproxy 最为关键的不同之处在于其“开箱即用”的功能,即它的自适应和动态可配置性。不仅如此,相比较而言,Traefik 最为核心的部分可能是它做自动服务发现、灰度发布等能力。
Luga Lee
2021/11/19
1.8K1
基于 Traefik 的加权灰度发布
灰度发布实现及蓝绿发布
随着公司业务的不断发展壮大,需要一套稳妥的发布方案,如果发布的新版本服务有问题能及时撤回,不至于造成太大范围的影响;
iginkgo18
2021/08/08
1.6K0
蓝绿部署、A/B测试以及灰度发布
过去的10年里,很多大公司都在使用蓝绿部署,安全、可靠是这种部署方式的特点。蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用。在有关于“微服务”、“DevOps”、“Cloud-native”的讨论中,蓝绿部署、A/B测试、灰度发布,这三种部署方式往往同时出镜。 那么问题来了,蓝绿部署、A/B测试、灰度发布,这三者之间究竟有何不同? 蓝绿部署 Martin Flower曾在文章中阐述了蓝绿部署的整体要点,建议大家看看。 基本上,蓝绿部署是一种以可预测的方式发布应用的技术,目的是减少发布过程中服
Rainbond开源
2018/05/31
2.4K0
微服务部署之蓝绿发布、滚动发布、灰度发布区别与特点
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。
周辰晨
2021/08/24
1.8K0
微服务部署之蓝绿发布、滚动发布、灰度发布区别与特点
大规模微服务场景下灰度发布与流量染色实践
本文内容选自中国DevOps社区年会 · 2019年会,刘超老师分享的《大规模微服务场景下灰度发布与流量染色实践》实录。
kirito-moe
2019/12/17
8.2K0
大规模微服务场景下灰度发布与流量染色实践
关于灰度发布
几个月前部门内容组织了一次系统设计的议题,分到我们头上的题目是设计一套灰度发布系统。嗯,然后我们就精心设计(参考公司现有系统)了一番,不过鉴于滴滴现在大部分的人都是百度来的(误,所以这种系统大概也都是差不多的思路实现而来的。所以感觉应该算是一种通用系统吧~
iTesting
2019/11/01
2.3K0
小红书在容器环境的 CD 实践
腾讯云开发者社区
2017/10/23
4.3K0
小红书在容器环境的 CD 实践
首富带你畅谈:蓝绿部署、滚动发布、灰度发布/金丝雀发布
根据2018年的DevOps发展报告来看,目前的DevOps发展速度非常之快,已经逐渐成为企业运维的标准方案.DevOps的核心就是敏捷和高效,敏捷和Scrum开发技术曾被认为是最好的技术. 既然公司用到了CI/CD肯定就肯定避免不了持续部署,所以我们就需要考虑一套适合我们的发布方式,这个时候我们就需要了解一下这几个发布方式到底是什么意思,有很么好处,他们之间的差别在哪个地方.
张琳兮
2019/01/24
2.5K0
互金平台灰度发布的三段式探索与实践【转载】
小亚,互联网金融公司应用运维主管,参与运维工作九年,涉及领域包含航空、金融、广告等。近两年主要负责金融业务运维的线上业务发布、维护等工作。
保持热爱奔赴山海
2019/09/17
9120
互金平台灰度发布的三段式探索与实践【转载】
怎样才是真正的灰度发布?
究竟什么才是灰度发布其实并没有一个严格的标准,因为这个东西不是黑的也不是白的是个中间过渡地带,这类的东西定义都会比较麻烦。由于工作的原因看到好多友商所谓的灰度发布产品,有意思的是他们实现的是完全不一样的功能,对外都说自己是灰度发布。我看到的有三种:
Oilbeater
2020/04/22
9350
API管理的正确姿势--API Gateway
数字化生态,以创新客户体验为核心,所有我们身边能感知到的变化都来自于渐近的创新。这些创新需要试错,需要不断的升级,并且创新往往与我们熟知的功能分离开来分别呈现。微服务对于传统单体架构的优势之一就在于,服务的拆分带来了更新、部署、管理的隔离性,让一些单独的服务可以进行创新和实验。从而支撑了用户体验的不断升级,为实现企业数字化转型的过程,提供了技术架构层面的支撑。
yuanyi928
2018/07/26
4K0
API管理的正确姿势--API Gateway
「全栈之路」Web前端开发的后端指南
在若干次前的一场面试,面试官看我做过 python爬虫/后端 的工作,顺带问了我些后端相关的问题:你觉得什么是后端?
前端劝退师
2019/09/17
1.4K0
「全栈之路」Web前端开发的后端指南
阿里P9架构师简述从单机至亿级流量大型网站系统架构的演进过程
阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis;最后再选择一个数据库管理系统来存储数据,如mysql、sqlserver、oracle,然后通过JDBC进行数据库的连接和操作。 把以上的所有软件都装载同一台机器上,应用跑起来了,也算是一
Java架构
2018/05/04
1.4K0
阿里P9架构师简述从单机至亿级流量大型网站系统架构的演进过程
面试官:说说微服务灰度发布的底层实现?
微服务中的灰度发布(又称为金丝雀发布)是一种持续部署策略,它允许在正式环境的小部分用户群体上先部署新版本的应用程序或服务,而不是一次性对所有用户同时发布全新的版本。
磊哥
2024/03/06
6000
小红书在 Kubernetes 容器环境的CD实践
前言 容器推出以来,给软件开发带来了极具传染性的振奋和创新,并获得了来自各个行业、各个领域的巨大的支持——从大企业到初创公司,从研发到各类IT人员等等。跨境知名电商小红书随着业务的铺开,线上部署单元的
DevOps时代
2018/02/02
1.6K0
小红书在 Kubernetes 容器环境的CD实践
有赞灰度发布与蓝绿发布实践
近几年,随着有赞用户的迅速增长和业务的快速发展,对业务开发人员要求越来越高,一方面要求为用户提供稳定的服务,一方面要求进行快速业务迭代。然而,随着公司业务复杂度和服务化整体规模的增长,单个业务功能涉及的微服务接口数、服务化调用链路长度都在迅速增加,业务的回归测试越来越难以覆盖到所有的调用链路和业务逻辑,通过仅在测试环境进行业务测试的方式来保证系统稳定性的难度越来越高。
有赞coder
2020/08/24
2K0
有赞灰度发布与蓝绿发布实践
代码上线方案走过的历史
IDC正式上线的过程对于JAVA程序,可以是AB组分组上线的思路,即平滑下线一半的服务器,然后发布更新代码,重启测试,无问题后,挂上更新后的服务器,同时再平滑下线另一半的服务器,然后发布更新代码测试(或者直接发布后,重启,挂上线)
BUG弄潮儿
2021/04/26
8430
蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别
在有关微服务、DevOps、Cloud-native、系统部署等的讨论中,蓝绿部署、A/B 测试、灰度发布、滚动发布、红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如下: 一、蓝绿部署(Blue/Green Deployment) 过去的 10 年里,很多公司都在使用蓝绿部署(发布)来实现热部署,这种部署方式具有安全、可靠的特点。蓝绿部署虽然算不上“ Sliver Bullet”,但确实很实用。 蓝绿部署是最常见的一种0 downtime部署的方式,是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。蓝绿部署原理上很简单,就是通过冗余来解决问题。通常生产环境需要两组配置(蓝绿配置),一组是active的生产环境的配置(绿配置),一组是inactive的配置(蓝绿配置)。用户访问的时候,只会让用户访问active的服务器集群。在绿色环境(active)运行当前生产环境中的应用,也就是旧版本应用version1。当你想要升级到version2 ,在蓝色环境(inactive)中进行操作,即部署新版本应用,并进行测试。如果测试没问题,就可以把负载均衡器/反向代理/路由指向蓝色环境了。随后需要监测新版本应用,也就是version2 是否有故障和异常。如果运行良好,就可以删除version1 使用的资源。如果运行出现了问题,可以通过负载均衡器指向快速回滚到绿色环境。 蓝绿部署的优点: 这种方式的好处在你可以始终很放心的去部署inactive环境,如果出错并不影响生产环境的服务,如果切换后出现问题,也可以在非常短的时间内把再做一次切换,就完成了回滚。而且同时在线的只有一个版本。蓝绿部署无需停机,并且风险较小。 (1) 部署版本1的应用(一开始的状态),所有外部请求的流量都打到这个版本上。 (2) 部署版本2的应用,版本2的代码与版本1不同(新功能、Bug修复等)。 (3) 将流量从版本1切换到版本2。 (4) 如版本2测试正常,就删除版本1正在使用的资源(例如实例),从此正式用版本2。 从过程不难发现,在部署的过程中,应用始终在线。并且,新版本上线的过程中,并没有修改老版本的任何内容,在部署期间,老版本的状态不受影响。这样风险很小,并且,只要老版本的资源不被删除,理论上,可以在任何时间回滚到老版本。 蓝绿部署的弱点: 使用蓝绿部署需要注意的一些细节包括: 1、当切换到蓝色环境时,需要妥当处理未完成的业务和新的业务。如果数据库后端无法处理,会是一个比较麻烦的问题。 2、有可能会出现需要同时处理“微服务架构应用”和“传统架构应用”的情况,如果在蓝绿部署中协调不好这两者,还是有可能导致服务停止; 3、需要提前考虑数据库与应用部署同步迁移/回滚的问题。 4、蓝绿部署需要有基础设施支持。 5、在非隔离基础架构( VM 、 Docker 等)上执行蓝绿部署,蓝色环境和绿色环境有被摧毁的风险。 6、另外,这种方式不好的地方还在于冗余产生的额外维护、配置的成本,以及服务器本身运行的开销。 蓝绿部署适用的场景: 1、不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。 2、蓝绿发布是一种用于升级与更新的发布策略,部署的最小维度是容器,而发布的最小维度是应用。 3、蓝绿发布对于增量升级有比较好的支持,但是对于涉及数据表结构变更等等不可逆转的升级,并不完全合适用蓝绿发布来实现,需要结合一些业务的逻辑以及数据迁移与回滚的策略才可以完全满足需求。
孙杰
2019/10/29
8.2K0
推荐阅读
相关推荐
企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档