前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >怎样才是真正的灰度发布?

怎样才是真正的灰度发布?

作者头像
Oilbeater
发布于 2020-04-22 06:06:15
发布于 2020-04-22 06:06:15
9350
举报
文章被收录于专栏:云计算自习室云计算自习室

究竟什么才是灰度发布其实并没有一个严格的标准,因为这个东西不是黑的也不是白的是个中间过渡地带,这类的东西定义都会比较麻烦。由于工作的原因看到好多友商所谓的灰度发布产品,有意思的是他们实现的是完全不一样的功能,对外都说自己是灰度发布。我看到的有三种:

1. 更新过程可以暂停,停在一个既有新版本又有旧版本的状态,然后选择升级或者回滚

2. 支持流量比例分配,可以把百分之几的流量分配给一个服务,剩下的给另一个服务

3. 支持 url 路径流量分配,一个路径下的流量给一个服务,另一个路径流量给另一个服务

那究竟哪个才能算是灰度发布呢?抛开具体的技术实现,让我们从需求的角度来考虑一下为什么要有灰度发布?灰度发布究竟是要做什么?从目的出发再来看技术实现就会清晰很多。

既然要灰度就是不希望所有人都看到,就是为了控制影响范围,之所以要做这种限制就说明发布的人心里对这个发布的版本就是不确定的,害怕影响范围太大风险不可控。也就是说这个风险因素在开发和测试环境都没有办法控制,只能在生产环境来观察,那究竟是怎样的因素会导致必须要上线观察而不是在开发测试环节来解决呢?主要有从运维和产品两大方面的考量因素。

从运维的角度讲,任何一次上线都是有风险的,或者有一些步骤的遗漏,流程的不规范,或者有一些隐藏的代码 bug都会导致线上的不稳定。控制风险的办法就是小批量上线,验证之后在全部更新。此外一些稳定性和性能的问题在开发测试环境很难复现,因此这一类的修复和功能只能到生产环境来验证,同样由于效果的未知也不可能全量更新。再有一些大的重构,比如编程语言的变化,框架的变化,基础库的更新,操作系统的更新都会有未知的影响,而这些影响也需要生产的检验。

从产品的角度讲,有一些产品设计,交互,界面展现形式都不是坐在办公室里拍桌子就可以定出最佳实践的。产品经理的视角和用户的视角是不同的,即使是产品经理之间的风格,偏好也是不一致的。小到按钮的顺序,弹框展示的位置,大到页面整体的布局,广告位的展示策略,究竟用哪种设计更好并没有理论上的最佳实践。而这种情况就需要大家分别作出自己的方案,去线上收集真实的用户数据作对比。也就是硅谷里常说的 A/B testing,也可以归到灰度发布的范畴。本质上就是基于数据驱动来作抉择,在用户的投票中选择哪种方案,而不是传统的看谁嗓门大会拍桌子,看谁官大来做决策。

了解了需求,我们就很容易推导出所有人都在说的灰度发布真正是什么了

1. 精确的流量分发控制

这是一切的核心,从运维风险控制的角度,需要把受影响的流量控制在一个精确的范围内,在上线前就知道哪部分用户会有问题,而不是真出问题谁受到影响都不知道。一个常见场景是新版本只让公司内部的员工能访问到,再一个市,一个省的一点点推上去。从产品角度看要做 A/B test,就需要控制测试样本,哪些用户是 A 版本,哪些用户是 B 版本,在发布后应该就是固定的,而不是一个用户一会儿访问 A,一会儿访问 B。而传统的负载均衡器策略只能做到粗犷的比例分配,并没有细粒度的流量规则控制。而一个理想的灰度发布系统应该有很细粒度的流量规则,比如匹配 android 用户,匹配某个地区的用户,甚至能组合多种条件匹配到特定的人群。

2. 监控系统的支撑

流量精确分配只是第一步,接下来更重要的是获得多个版本的关键指标。对运维来说可能是看错误率,吞吐量,延迟,cpu 内存消耗这些系统层面指标。对于产品来说可能是要看点击率,pv,uv 等业务指标的变化。这些都需要能把数据收集并作展示,来方便后续决策:全量推还是回滚?使用方案 A 还是 B?不然的话灰度发布带来不了更多业务方面的促进,也不能帮你更好的了解业务的状态和用户行为。

3. 灵活的发布系统

从上面的介绍可以看出灰度发布并不是个短暂的过程,可能会持续很久。例如某个重大的框架或者系统更新可能会持续很久,有可能整个服务在几个月内都是新旧并存,甚至有可能需要两个版本分别各自迭代。而从产品的角度来看可能就会更灵活,很有可能线上有五六个方案都在收集数据,每天有了一些新想法都要上一些小版本看效果,每个版本上线后可能都要再各自做优化调整观察效果。这种情况可能线上就永远不会有一个统一的版本灰度反而是个常态来应对不断变化的需求和挑战。而发布系统也需要做相应的调整,不在把每个服务看成一个单一版本的运行体,只在更新的短时间内出现多版本共存,只允许全量推和回滚这种粗粒度策略。而是应该将多版本共存看成常态,允许每个版本各自迭代,版本之间又能区分对应的监控日志信息,这样灵活的发布系统才能配合灵活的灰度策略。

说了这么写灰度系统要做的事情其实就是流量控制和数据收集,来控制风险并帮助产品做决策。再看一下最开始提出的三个所谓的灰度发布:更新过程可以暂停,流量比例分配,url分流。它们充其量也只是做到了流量精确分配的某几个特殊情况,而且还都是不很精确的分配。而如果结合使用场景就会发现,这几种在实际中是很难用起来的,因为没有流量的精确控制很难控制风险范围,如果风险都不可控,那还要灰度发布干什么呢?更不要提后面的监控数据收集和灵活的发布了。

所以说一个真实好用的发布系统是十分复杂的,绝对不是页面上点两三下就可以完成的,而后面的实现更需要一整套体系来支撑。如果你想打造一个灰度发布系统,希望这篇文章能对你有所启发。

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

本文分享自 我的观点 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
有赞灰度发布与蓝绿发布实践
近几年,随着有赞用户的迅速增长和业务的快速发展,对业务开发人员要求越来越高,一方面要求为用户提供稳定的服务,一方面要求进行快速业务迭代。然而,随着公司业务复杂度和服务化整体规模的增长,单个业务功能涉及的微服务接口数、服务化调用链路长度都在迅速增加,业务的回归测试越来越难以覆盖到所有的调用链路和业务逻辑,通过仅在测试环境进行业务测试的方式来保证系统稳定性的难度越来越高。
有赞coder
2020/08/24
2K0
有赞灰度发布与蓝绿发布实践
浅析蓝绿部署、滚动发布和灰度发布
这样传统的发布方式不仅使得服务中断,并且存在新版本上线失败的风险(如环境问题、版本问题等),少说用户抱怨、多则可能谈及经济损失。
Nine_Thous
2024/12/26
3070
灰度发布实现及蓝绿发布
随着公司业务的不断发展壮大,需要一套稳妥的发布方案,如果发布的新版本服务有问题能及时撤回,不至于造成太大范围的影响;
iginkgo18
2021/08/08
1.6K0
自从用了灰度发布,睡觉真香!
最近,栈长又参加了腾讯云小伙伴邀请的Techo Day 技术开放日 2.0的线上活动,这一期又是干货满满,主要是云原生和微服务方面的,比如:云原生网关、容器、安全、云监控、灰度发布等等,这些内容都与我们现有的微服务系统息息相关。
Java技术栈
2022/12/17
7780
自从用了灰度发布,睡觉真香!
灰度发布、蓝绿发布、滚动发布,有什么区别?这下明白了
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。目前有很多部署发布的技术, 这儿将常见的做一个总结。
程序员小富
2021/12/05
7.1K0
灰度发布、蓝绿发布、滚动发布,有什么区别?这下明白了
大规模微服务场景下灰度发布与流量染色实践
本文内容选自中国DevOps社区年会 · 2019年会,刘超老师分享的《大规模微服务场景下灰度发布与流量染色实践》实录。
kirito-moe
2019/12/17
8.2K0
大规模微服务场景下灰度发布与流量染色实践
灰度发布与 A/B 测试:如何降低上线风险?
每次上线新功能,总是有点让人紧张。万一有 bug?万一影响现有用户?传统的 全量发布 方式风险太大,一旦出问题,后果可能很严重。
网罗开发
2025/03/17
1500
灰度发布与 A/B 测试:如何降低上线风险?
蓝绿发布、滚动发布、灰度发布等部署方案,这些你必须懂!
在项目迭代的过程中,不可避免需要进行项目上线。上线对应着部署或者重新部署,部署对应着修改,修改则意味着风险。
用户5927304
2019/07/31
1.9K0
云原生时代的灰度发布有几种“姿势”?
随着企业数字化转型进程不断发展,云原生时代的来临,企业应用越来越多,不得不面对应用程序升级的巨大挑战。传统的停机发布方式,新旧版本应用切换少则停机30分钟,多则停机10小时以上,愈发无法满足业务端的需求。
嘉为蓝鲸
2022/12/29
1.4K0
云原生时代的灰度发布有几种“姿势”?
腾讯云TSF日调用量超万亿次背后的故事
腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每天应对万亿次调用的服务托管与治理。
用户1532637
2018/03/22
4.8K4
腾讯云TSF日调用量超万亿次背后的故事
GitOps 实践之渐进式发布
本文作者:陈钧桐 腾讯云 CODING DevOps 高级解决方案架构师,从事多年技术布道工作,对于云原生时代下企业数字化转型、IT 与 DevOps 建设、价值流体系搭建等有丰富的经验,曾为多家大型企业提供咨询、解决方案以及内训服务。既关注工程师视角的云原生开发建设与最佳实践落地,也关注管理者视角的过程管理与研发效能提升。
腾讯云 CODING
2023/06/07
5560
GitOps 实践之渐进式发布
前端灰度发布落地方案
一个大型的前端项目在发布时,都会采取灰度策略。第一次听同事说灰度的时候,还是停留在疑惑阶段,对这个词不了解,后续做了一些功课,才明白灰度的意义。
coder_koala
2021/10/12
2.8K0
前端灰度发布落地方案
咦,如何通过容器同时实现:灰度发布+滚动发布?
(1) 蓝绿部署:不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。
魏新宇
2018/09/30
3.7K0
咦,如何通过容器同时实现:灰度发布+滚动发布?
微服务部署:蓝绿部署、滚动部署、灰度发布等部署方案对比与总结
在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得停机,有的不需要停机即可完成部署。本文笔者简单讨论一下目前比较流行的几种部署方案,或者说策略。如有不足之处请指出,如有谬误,请指正^_^。 Blue/Green Deployment(蓝绿部署) 蓝绿部署无需停机,并且风险较小。 (1) 部署版本1的应用(一开始的状态) 所有外部请求的流量都打到这个版本上。 (2) 部署版本2的应用 版本2的代码与版
用户1516716
2018/04/02
2.2K0
灰度发布,链接 Dev 与 Ops 的正确姿势
序言 在软件吞噬时间的时代,在IT基础设施多样性与分布式趋势中,部署的复杂性与规模日益增加,而大部分的软件崩溃都发生在部署过程中。目前提高部署效率与稳定性成为了一个严峻的挑战。本文讨论在原生云应用的场
DevOps时代
2018/02/02
2.2K0
灰度发布,链接 Dev 与 Ops 的正确姿势
案例 | 沃尔玛 x 腾讯云 Serverless 应用实践,全力保障消费者购物体验
深耕零售,没有比中国更好的地方,也没有比现在更好的时间。1996 年,国际零售巨头沃尔玛进入中国,在深圳开设了第一家山姆会员商店。25 年后的今天,山姆会员商店拥有 数百万付费会员,成为 国内遥遥领先的会员制商店。 当位于深圳的山姆会员商店连续 10 余年成为沃尔玛全球销售第一的门店,沃尔玛又一次亮出了优秀的业绩。为什么能够在极度竞争的中国零售市场保持强劲增长?2020 年全球零售行业调研报告作出了如下总结:在沃尔玛,各种各样的先进技术被广泛应用以提高工作效率。沃尔玛的管理者认为,先进的科技在零售市场
腾讯云原生
2021/08/04
9540
游戏灰度发布
制定一个版本计划,开发,与运营沟通,确定版本内容,到了时间,所有游戏区全部关闭入口,停止服务器,发布,部署,重启,开放入口,一气呵成,快哉!
码农戏码
2021/03/23
1.4K0
[MCP学习笔记]MCP灰度发布系统:流量染色与渐进式迭代
MCP(Model Context Protocol)集成了流量染色和渐进式迭代等多种先进技术,为软件发布提供了更强大、更灵活的解决方案。
数字扫地僧
2025/04/30
1310
[MCP学习笔记]MCP灰度发布系统:流量染色与渐进式迭代
轻量化方式实现灰度发布落地
前段时间业务组负责人提出因为合规原因,一个功能模块需要在 App 实现灰度发布,具体来讲就是要在不同的地域和用户等级开展差异化的活动内容展示。利用这个契机恶补了一些“灰度发布”相关的知识,顺势将其中有价值的一些内容梳理与大家进行分享。
Onegun
2022/09/15
8530
轻量化方式实现灰度发布落地
金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?
​ 根据 2017 年的 DevOps 发展报告,高效能组织和低效能组织在软件交付的效率上有数量级上的差异。技术组织的软件交付能力是一种综合能力,涉及众多环节,其中发布是尤为重要的环节。
changxin7
2019/12/25
1.3K0
推荐阅读
相关推荐
有赞灰度发布与蓝绿发布实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档