金丝雀释放策略与蓝/绿

问题描述 投票:92回答:5

我对金丝雀版本的理解是,它是部分发布到生成节点的子集,并打开了粘性会话。这样,如果您最终发布了错误的错误,您可以控制并最大限度地减少受影响的用户/客户数量。

我对蓝色/绿色版本的理解是你有2个镜像生产环境(“蓝色”和“绿色”),你将更改推送到蓝色或绿色的所有节点,然后使用网络魔术来控制用户通过DNS路由到哪些环境。

所以,在我开始之前,如果我到目前为止所说的任何内容都不正确,请先纠正我!

假设我或多或少走上正轨,那么关于这两个策略的几个问题:

  • 是否存在金丝雀优于蓝/绿的情况,反之亦然?
  • 是否存在部署模型可以同时实施这两种策略的情况?
deployment production-environment release-management blue-green-deployment canary-deployment
5个回答
77
投票

蓝绿色释放更简单,更快捷。

如果您在测试环境中测试了新版本并且非常确定新版本将在生产中正常运行,则可以执行蓝绿色版本。始终使用feature toggles是增加您对新版本的信心的好方法,因为新版本的功能与旧版本完全相同,直到有人翻转功能切换。将您的应用程序分解为小型,可独立发布的服务是另一种选择,因为测试的次数较少,而且可以破解的次数较少。

如果您不完全确定新版本在生产中是否正常运行,则需要执行金丝雀释放。即使你是一个彻底的测试人员,互联网也是一个庞大而复杂的地方,总是会遇到意想不到的挑战。即使您使用功能切换,也可能会错误地实现。

部署自动化需要付出努力,因此大多数组织都计划每次都使用一种策略或另一种策略。

如果您致力于让您对此有信心的实践,那么蓝绿部署也是如此。否则,发出金丝雀。

蓝绿色的本质是一次性部署,并且canary部署的本质是逐步部署,因此,给定一个用户池,我无法想到一个我将描述为同时执行这两个过程的过程。如果您有多个独立的用户池,例如使用不同的区域数据中心,您可以在每个数据中心内进行蓝绿色,并在数据中心内进行金丝雀绿化。虽然如果您不需要在数据中心内部进行金丝雀部署,但您可能不需要跨数据中心。


56
投票

我在这里写了一篇关于这个主题的详细论文:http://blog.itaysk.com/2017/11/20/deployment-strategies-defined

在我看来,区别在于新的“绿色”版本是否暴露给真实用户。如果是,那我就称之为金丝雀。实施Canary的常用方法是定期使用Blue / Green,并在特定用户的新版本中添加智能路由。阅读帖子进行详细比较

蓝/绿:enter image description here

金丝雀:enter image description here


5
投票

蓝色/绿色和金丝雀版本在向更广泛的受众发布软件功能之前,解决了针对目标受众测试软件的相同目的。对于金丝雀,部署可以在下面共享相同的基础设施,但是在蓝/绿的情况下,整个基础设施与前面的路由器/ DNS / reverseeproxy重复用于路由流量。

在云环境中,脚本和重新创建基础架构更容易,蓝/绿部署是首选,因为它允许基础架构与自动化同步。当需要重建环境的能力时,这具有很强的能力。

您可以参考以下文章进行更详细的比较:

BlueGreen部署:http://martinfowler.com/bliki/BlueGreenDeployment.html

金丝雀部署:http://martinfowler.com/bliki/CanaryRelease.html


2
投票

尽管这两个术语看起来彼此非常接近,但它们之间存在细微差别。一个人对你的功能发布充满信心,而另一个则对你发布的方式充满信心。

加纳利

  1. 金丝雀版本是一种技术,通过在将更改推送到整个基础架构之前将更改缓慢地推广到一小部分用户,从而降低在生产中引入新软件版本的风险。
  2. 它即将了解新版本将如何执行(与其他应用程序,CPU,内存,磁盘使用等集成)。

蓝绿色:

  1. 它更多地是关于可预测的版本,零停机时间部署。
  2. 如果发生故障,可轻松回滚。
  3. 完全自动化的部署过程

1
投票

定义的良好开端。如果您在“部署”和“发布(功能)”中拆分“发布”定义,我认为它还有助于为您的策略做出决策。

部署(二进制文件)

将产品二进制部署到(生产)系统的操作。

发布(功能)

管理(组)用户的功能可用性的操作。

为什么? “释放”时通常会有(多个)两个问题:1)错误/向后兼容性等等2)验证新功能的有效性/可用性

在选择Canary或Blue / green或任何灰色/混合模式策略之前,请先问问自己:在发布/部署新版本时我们有什么顾虑?只有这样,如果您了解自己的疑虑,请选择您的策略。

此外,可以执行更复杂的部署/发布策略。例如,在某些云/下文中,可以拥有多个生产服务器,并以不同的比例将负载中继到产品的不同服务器和版本,并在将发布/部署扩展到所有用户之前监控健全性。

功能标记

“配置”(冷,甚至热)哪些功能(不)可用于(组)用户的操作

如果您还执行类似“功能标记”的操作,则可以先部署,从向后兼容性/错误角度测量发布的稳健性,并逐渐向不同用户发布新功能,反之亦然(缩小甚至回滚功能和/或二进制文件) )。功能标记允许从二进制文件的部署中分离功能的可用性,并且提供更精细的决策,然后仅“部署/回滚”

© www.soinside.com 2019 - 2024. All rights reserved.