蓝绿部署与金丝雀部署:关键区别

软件交付的部署阶段在今天的软件开发中发挥着重要作用,尤其是在云环境中。

尽管如此,部署阶段也是最被低估的交付阶段之一。公司通常不会投入足够的时间和精力来使部署变得快速、可靠和自动化。

大多数情况下,我仍然看到各种形式的手动部署过程。在较好的情况下,至少有一个适当记录步骤的清单。在最糟糕的情况下,只是在最后几分钟中临时制定的随机计划。

自动化部署过程始终是一个遥远的目标和短期和中期的路线图占位符,但实际的实现过程是坎坷和不可预测的。但是拥有一个完全自动化和可靠的部署过程是节约时间的关键。然后,您可以消除开发团队通常为每个生产发布所花费的大部分工作来部署。

金丝雀和蓝绿部署策略提供了所有这些好处,并且增加了更多的高可用性、快速安装和回滚过程。使团队能够更频繁地发布,而无需再度度过不眠之夜。让我们看看它们带来了什么以及它们的区别。

蓝绿部署:概述

来源:cncf.io

蓝绿部署通过创建两个相同的环境(活动环境和非活动环境)来减少新软件版本的停机时间和风险。

活动环境是当前软件版本运行的地方,用户产生生产流量。非活动环境是部署和测试新版本软件的地方。

一旦新版本经过测试并准备就绪,流量将从活动环境切换到非活动环境,使其成为新的活动环境。您可以根据需要重复此过程。

还可阅读:解释devops中的蓝绿部署及其作用

主要特点和优势

这些是蓝绿部署过程的特定特点:

  • 两个相同的环境在数据和处理的角度上是相同的。蓝色(活动)环境是生产用户运行其日常流程的地方。绿色(非活动)环境是新部署安装的地方,并且始终与蓝色环境保持同步。
  • 可以从活动环境切换到非活动环境,使其成为新的活动环境。切换是瞬时的。所有部署现在都成为过去。没有停机窗口。用户不需要做任何操作就可以访问新环境。
  • 出现问题时可以快速回滚。这样可以确保如果新版本的软件出现问题,最小化停机时间,应用程序仍然高可用。
  • 自动化测试是蓝绿部署的关键。它确保在部署到活动环境之前对软件的新版本进行彻底测试。
  • 这种部署是持续交付流水线的一部分,最终意味着更快、更频繁地将软件发布到生产环境中。由于部署已经完成,只需要进行流量切换本身,所以速度非常快,您可以每天都这样做。假设您在测试活动上很快。

金丝雀部署:概述

来源:cncf.io

金丝雀部署在将新功能或更新逐步发布给一小部分用户之前,先对整个用户群体进行全面发布。

这种方法涉及创建软件的新版本并将其部署给一小组用户,同时保持老版本为其他用户提供服务。开发团队密切监控新版本,确保其稳定并按预期运行。

如果一切顺利,新版本将逐渐向更多用户发布,直到最终覆盖整个用户群体。通过这种方式,项目团队最小化了一次性给所有用户引入错误或其他问题的风险。

其目的是降低向大型用户群体引入新功能的风险,因此过渡到新版本更加平稳。

还可阅读:金丝雀部署及其在devops中的作用解析

关键特点和优势

以下是金丝雀部署过程的具体特点:

  • 首先将新版本部署给一小部分用户,然后逐渐向更多用户发布。这样可以最小化一次性给所有用户引入错误或其他问题的风险。
  • 密切监控新版本,确保其稳定并按预期运行。开发人员可以更快地收到有关新版本的反馈,从而可以在部署到整个用户群体之前进行任何必要的调整。
  • 如果出现任何问题,可以快速轻松地回滚到先前的版本。这有助于增加开发人员和利益相关者对部署过程的信心,因为它减少了给用户体验带来影响的问题的风险。
  • 尽可能自动化部署过程,以减少人为错误的风险。

总结:蓝绿部署 vs 金丝雀部署

蓝绿部署 vs. 金丝雀部署:特点

部署

蓝绿部署意味着存在两个环境(蓝色和绿色)。但同时,这两个环境的数据保持不断同步。这增加了两个环境之间永久数据同步过程的需求。

一旦新版本经过测试并被认为准备就绪,流量将从活动环境切换到非活动环境,使其成为新的活动环境。

您不需要花费任何时间来部署新代码,并且没有涉及到生产停机时间。所有生产用户始终在当前活动环境上工作,甚至都不会注意到切换。

来源:aws.amazon.com

金丝雀部署涉及将软件的新版本部署到一小部分用户中,而大多数用户或服务器继续使用当前版本。这是一个逐步的部署,而不是一个完全的切换。测试人员在这种情况下是直接的生产用户,尽管只有其中一部分。这个群组正在积极测试具有生产流程的新版本,并且当最终稳定时,新版本将传播到其他用户。

如果高可用性是首要考虑因素,您可以选择蓝绿部署。如果您更喜欢更快的反馈和更受控(尽管更慢)的部署,您可以选择金丝雀部署。

风险缓解的差异

蓝绿部署通过快速切换到稳定的先前版本来减轻发布失败的风险。适用于每个用户,立即生效。显然,如果回滚,新功能可能会延迟提供给用户,但至少没有用户会因为新版本的一些关键问题而被阻止。

金丝雀部署的风险缓解策略在于逐渐减少问题可能性。由于新功能先发布给一部分生产用户,他们在发布到所有用户之前就已经使用了该软件版本。这样,这些初始用户很有可能很快发现任何这样的问题。

测试方法差异

蓝绿部署将测试流程仅留给非活动环境。在这里,开发人员、测试人员和各种利益相关者可以随心所欲地进行测试。您可以始终期望与直接在活动生产环境上运行测试时的行为相似(因为两个环境之间的数据和配置始终同步)。

因此,您的测试人员在负责测试的同时,仍然有可能无法发现所有实际生产用户可能会发现的问题。然而,这并不是真正的问题,因为非活动环境和活动环境之间的切换总是很快的。然后,您可以让开发人员修复问题并再次进行切换。

来源:ibm.com

金丝雀部署允许您将生产用户用作测试人员。这些用户通常能够在更短的时间内发现更多问题。他们以完整的端到端方式运行日常业务流程。

这不仅是因为他们构建了这些测试场景和用例,还因为他们必须这样做。您可能会冒着该组中的人在一段时间内遇到严重问题的风险。但这并不会影响大多数用户,开发团队可以立即集中解决最严重的实际问题。

经验和使用案例

以下是一些已经成功运行此类部署的已知使用案例:

  • netflix使用蓝绿部署来部署其流媒体服务的新版本。
  • 亚马逊和etsy使用蓝绿部署来部署其电子商务平台的新版本。
  • linkedin使用蓝绿部署来部署其社交网络平台的新版本。
  • ibm使用蓝绿部署来部署其云平台的新版本。
  • netflix还使用金丝雀部署来推出对其流媒体服务的更改。该公司使用自动化测试、特性标志和a/b测试的组合来逐步推出更改。
  • google使用金丝雀部署来推出对其云服务的更改。同样,该公司利用自动化测试、流量分割和监控包含来逐步将更改推出给一小部分用户,然后再部署给所有用户。

最佳实践和未来趋势

自动化是关键,而devops管道绝对是部署流程的未来。这些是完全自动化的流程,包含以下步骤:

  • 根据服务、数据、用户或权限创建或更新目标环境。
  • 直接从代码仓库自动部署源代码的完整/增量版本。
  • 数据库架构升级和数据刷新。
  • 在部署过程中直接执行自动化测试。
  • 如果某个重要的测试用例未能成功完成,自动回滚流程。
  • 将任何手动干预步骤降至零。

一旦你拥有这样的部署管道,你可以插入金丝雀发布或蓝绿部署流程或任何你喜欢的流程。这些只是已被证明有效的两个例子。但是,这些只是解决部署活动中大部分问题的哲学框架。随时间切换或同时使用两种方法甚至不难。

最后的话

坚持手动部署程序是不成熟的开发流程或团队的标志。或者,它可能暴露了特定公司在软件交付方面的僵化和庞大。在这两种情况下,都需要大量工作来修复现状。因此,尝试为您的项目实施上述部署策略。

接下来,查看如何在kubernetes中部署应用程序。

类似文章