金丝雀释放策略与蓝/绿

IAm*_*aja 106 deployment production-environment release-management blue-green-deployment canary-deployment

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

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

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

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

  • 是否存在金丝雀优于蓝/绿的情况,反之亦然?
  • 是否存在部署模型可以同时实施这两种策略的情况?

Dav*_*uth 80

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

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

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

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

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

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


ita*_*ysk 62

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

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

蓝绿色: 在此输入图像描述

加纳利: 在此输入图像描述

  • 非常好的解释.但它会更好地显示金丝雀插图上的用户负载百分比样本. (4认同)
  • 您的插图很棒,我可能会考虑将其嵌入您的答案中,但请保留链接以进行更深入的讲解。 (3认同)
  • 一张图值一千字!! (2认同)

Rah*_*arg 7

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

金丝雀

  1. 金丝雀发布是一种降低在生产中引入新软件版本风险的技术,方法是在将更改推广到整个基础架构之前,将更改缓慢地推广到一小部分用户。

  2. 即将了解新版本将如何执行(与其他应用程序、CPU、内存、磁盘使用等集成)。

蓝绿:

  1. 它更多是关于具有零停机时间部署的可预测发布。
  2. 在失败的情况下轻松回滚。
  3. 完全自动化的部署过程


小智 6

2022 年 5 月更新:

蓝绿部署(Blue-Green Release)金丝雀部署(Canary Release)的区别在于:

  • 蓝绿部署快
  • 金丝雀部署是渐进的

蓝绿部署:

两种环境,蓝色环境是“旧”的,包含一个或多个应用程序(实例或容器)绿色环境是“新”的,包含一个或多个应用程序(实例或容器)

然后,100%的流量立即从蓝色环境快速切换到绿色环境,如下所示,可以说蓝绿部署是金丝雀部署的快捷方式

在此输入图像描述 上面的图片来自https://www.encora.com/insights/zero-downtime-deployment-techniques-blue-green-deployments最初由“Encora”公司创建

金丝雀部署:

两种环境,蓝色环境是“旧”环境,包含一个或多个应用程序(实例或容器),绿色环境是“新”环境,包含一个或多个应用程序(实例或容器)

然后,100%流量逐渐从蓝色环境切换到绿色环境,花费的时间比蓝绿部署更长(30分钟、小时或天) ,如下所示,可以说金丝雀部署是蓝绿部署的渐进方式

在此输入图像描述 上面的图片来自https://www.encora.com/insights/zero-downtime-deployment-techniques-canary-deployments最初由“Encora”公司创建


Shi*_*his 5

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

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

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

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

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

  • 蓝绿色部署不会"针对目标受众进行测试"; 您可以立即将所有流量切换到新环境.另外,我不明白你的第二段(你能说出你的意思是"允许基础设施与自动化同步吗?"),但蓝色/绿色和金丝雀部署似乎同样与云兼容. (6认同)
  • 谢谢你的链接:) (2认同)

Aja*_*mar 5

这里有一些内联定义 -

  • 蓝绿部署- 部署应用程序的新版本时,会创建第二个环境。测试新环境后,它将接管旧版本。然后可以关闭旧环境。

     

  • A/B 测试- 一个应用程序的两个版本同时运行。每个请求都有一部分。然后开发人员可以比较版本。  
  • Canary 发布- 微服务的新版本与旧版本一起启动。然后该新版本可以接受一部分请求,并且团队可以测试这个新版本如何与整个系统交互。

  • A/B 和 Canary 都在说同样的事情。 (3认同)