18 | 蓝绿红黑灰度发布:这些五颜六色的发布到底怎么用?
葛俊

该思维导图由 AI 生成,仅供参考
你好,我是葛俊。今天,我来和你聊聊最近流行的一些部署、发布方法,以及测试右移。
最近几年,我见到了很多跟颜色相关的部署、发布方法,比如蓝绿部署、红黑部署、灰度发布等。今天,我会首先与你分享它们的基本定义和要解决的根本问题;然后,与你一起深入看一看高效应用这些方法的基本原则,以及一些具体的实践。
各种部署方式的定义
我们先来看看蓝绿部署(Blue-green Deployment)、红黑部署(Red-black Deployment)和灰度发布(Gray Release ,或 Dark Launch)的定义和流程吧。
蓝绿部署
蓝绿部署,是采用两个分开的集群对软件版本进行升级的一种方式。它的部署模型中包括一个蓝色集群 A 和一个绿色集群 B,在没有新版本上线的情况下,两个集群上运行的版本是一致的,同时对外提供服务。
系统升级时,蓝绿部署的流程是:
首先,从负载均衡器列表中删除集群 A,让集群 B 单独提供服务。
然后,在集群 A 上部署新版本。
接下来,集群 A 升级完毕后,把负载均衡列表全部指向 A,并删除集群 B,由 A 单独提供服务。
在集群 B 上部署完新版本后,再把它添加回负载均衡列表中。
这样,我们就完成了两个集群上所有机器的版本升级。
红黑部署
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

本文深入介绍了蓝绿部署、红黑部署和灰度发布等不同的部署、发布方法,以及它们的基本定义和流程。这些方法旨在解决频繁发布的生产模式带来的挑战,如减少服务停止时间和控制新版本发布风险。文章强调了将服务上线过程拆分为部署、发布和发布后三个阶段,并充分利用这些阶段的特点来提高服务上线的效率、质量和安全性。在部署阶段,可以进行集成测试、流量镜像、压测和配置方面的测试。在发布阶段,建议采用金丝雀发布和监控方法。而在发布后阶段,重点是监控、A/B测试和混沌工程。文章还提到了金丝雀发布在移动端应用或桌面应用上的实现方式。总的来说,本文对部署、发布方法的原理和实践进行了深入浅出的介绍,对于想要了解这些技术特点的读者来说,是一篇值得阅读的文章。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《研发效率破局之道》,新⼈⾸单¥59
《研发效率破局之道》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 技术修行者你觉得金丝雀发布可以用在移动端应用或者桌面应用上吗?如果可以的话,大概要怎么实现呢? 首先,我们目前一般都在采用红黑部署的模式,对于不重要的更新,偶尔会尝试灰度部署。灰度部署可能对于互联网类型的大流量高并发的应用更有意义,因为它们会涉及到更多的资源,灰度发布会更节省资源。 我理解金丝雀发布这种方式并不会和某种应用类型绑定,之所以在Web应用中流行,是因为对于用户来说,Web类型的应用,只需要在用户端安装浏览器即可,不需要有额外的配置,所有的安装部署全部在服务器端进行,更容易控制。 如果在移动端或者桌面端实施这一部署方式,需要1. 筛选种子用户,发送版本更新消息,并提供更新途径。2. 用户更新版本后,收集用户使用情况,评估新版本是否达到预期目标。3. 根据评估结果,决定是否升级版本或者回滚。 种子用户的维护比较重要,一般会先从内部用户开始逐渐扩展。 无论哪种类型的应用,采用金丝雀的方式进行部署,都会对监控提出更高的要求。
作者回复: @日拱一卒 同学,每一次的回答都很到位。先赞一个! 这里稍微补充一点。在移动端进行金丝雀发布还是比较普遍的。因为很多移动端APP。都是强依赖一个后端服务。可以比较方便的通过后端API来进行控制。如果是桌面版的程序,要实现金丝雀发布,前提也是需要有一个和后端服务沟通的渠道。 这里的一个技巧,是使用功能开关来控制版本的回归,而不用要求客户重新安装旧版本。
2019-10-0227 - 25ma中午知道蓝绿红黑灰的使用场景和定义,非常受用
作者回复: 👍👍👍
2020-03-291 - 文中我们通过 A/B Test 框架来实现移动端应用的金丝雀发布。具体的方式就是,A/B 的流量划分模块指引逻辑的路由,不同流量背后的实验定义完全参数化,这样就有办法通过后端的配置来控制前端行为。这种思想对于: - 待上线新功能进行内部 dog-food、线下试运营、灰度发布 - 对有特殊情况的真实用户,调整系统的业务处理逻辑 - 在并行自动化测试中,隔离其他测试用例或设置的影响 - 生产环境回归测试 都可以用到。
作者回复: 赞!!
2020-04-14 - lisa在生产环境下做集成测试提到了两个方法对于写用例的成本太高了,尤其是测试同学来写集成用例,因为涉及到和被测系统的联动,比如识别测试标签,识别后可能会根据测试点需要做不同的处理,感觉很难落地,facebook在这块落地上有遇到什么困难,怎么解决的,可以详细说说么?
作者回复: 我在Facebook工作的时候,Facebook没有怎么使用在生产环境下做集成测试。大家很多集成测试是在开发环境和测试环境直接做的。不过因为开发环境、测试环境和生产环境共享数据,所以集成测试跟线上环境还是很相似。这里有一个做法可以参考,对对测试数据打标签、所有业务逻辑都对测试标签进行处理。所以我觉得"识别后可能会根据测试点需要做不同的处理"这个就得这么做。
2019-10-07 - 一打七文中提到发布阶段的监控很重要,那老师之前说很多大公司的发布流程可以做到分钟级别,想咨询下他们的监控环节是怎么处理的?按理说这么短的时间也监控不到有效的信息,比如监控的波形图也不会有明显的变化2023-10-29归属地:北京
- Sam_Deep_Thinking这篇是这个专栏里的精品文章,写的很好,优秀。2019-12-08
收起评论