蓝绿部署与金丝雀部署:主要区别

在当今的软件开发流程中,软件交付的部署阶段至关重要,尤其是在云环境中。

然而,这个阶段经常被低估。许多公司往往没有投入足够的时间和资源来确保部署过程快速、可靠且自动化。

我仍然经常看到各种形式的手动部署流程。情况好一些的,会有一个详细记录的步骤清单。最糟糕的情况是,部署计划只是在最后一刻临时制定的。

自动化部署流程一直是一个长远的目标,或者说是短期路线图中的一个占位符,但实际的实施过程往往充满挑战且难以预测。然而,拥有一个完全自动化且可靠的部署流程对于长期节省成本至关重要。这样可以大大减少开发团队在每次生产版本部署时所花费的精力。

金丝雀部署和蓝绿部署策略不仅具备以上优势,还能提高高可用性,并支持快速部署和回滚。这使得团队能够更频繁地发布软件,而无需担心发布过程中的问题。接下来,让我们深入了解这两种策略,并探讨它们的差异。

蓝绿部署:概述

来源:cncf.io

蓝绿部署通过建立两个完全相同的环境,即活动环境(蓝色)和非活动环境(绿色),来降低停机时间和新软件版本发布的风险。

活动环境是当前运行软件版本的地方,用户的所有生产流量都指向这里。非活动环境则用于部署和测试新版本的软件。

一旦新版本经过测试并确认可以部署,流量就会从活动环境切换到非活动环境,使后者成为新的活动环境。你可以根据需要重复这个流程。

延伸阅读:蓝绿部署及其在 DevOps 中的作用解析

主要特性和优点

以下是蓝绿部署流程的具体特点:

  • 从数据和流程角度来看,两个环境完全一致。蓝色(活动)环境是生产用户日常运行工作流程的地方。绿色(非活动)环境是安装新部署的位置,并且始终与蓝色环境保持同步。
  • 你可以将流量从活动环境切换到非活动环境,使其成为新的活动环境。切换过程是即时发生的。所有部署操作都发生在切换之前。因此没有停机窗口。用户无需进行任何操作即可访问新环境。
  • 这种方法实现了快速回滚,以便在出现问题时迅速恢复。 如果新版本的软件出现任何问题,可以确保最短的停机时间,并保持应用程序的高可用性。
  • 自动化测试是蓝绿部署的关键环节。它确保新版本的软件在部署到活动环境之前经过充分的测试。
  • 蓝绿部署是持续交付管道的重要组成部分,这意味着可以更快更频繁地将软件发布到生产环境。 由于部署已经完成,你只需要执行流量切换操作,速度非常快,可以每天进行多次。 前提是你的测试流程足够快速。

金丝雀部署:概述

来源:cncf.io

金丝雀部署是指先将新功能或更新逐步发布给一小部分用户,然后再推广到整个用户群。

这种方法首先创建软件的新版本,并将其部署给一部分用户,而其余用户仍然使用旧版本。开发团队密切监控新版本,以确保其稳定并按预期运行。

如果一切顺利,新版本将逐渐推广到更多用户,直到覆盖整个用户群。通过这种方式,项目团队可以最大程度地降低因错误或其他问题同时影响所有用户的风险。

其目的是降低向大量用户群体推出新功能所带来的风险,从而实现更平稳的新版本过渡。

延伸阅读:金丝雀部署及其在 DevOps 中的作用解析

主要特性和优点

以下是金丝雀部署流程的具体功能:

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

摘要:蓝绿部署与金丝雀部署

功能 蓝绿部署 金丝雀部署
数据同步 蓝绿环境之间持续数据同步。 一部分用户或服务器接收新版本;其余的继续使用当前版本。
激活过程 当新版本准备就绪时,从活动环境切换到非活动环境。 逐步推出到积极测试新版本的指定用户子集。
生产用户体验 无生产停机时间;活动环境之间的无缝切换。 一部分生产用户积极测试新版本;该组用户可能遇到潜在问题。
高可用性与反馈速度 优先考虑高可用性。 优先考虑更快的反馈和受控的推出。
风险缓解 通过快速切换到稳定的先前版本来减少问题的可能性。 通过逐步发布到用户子集来减少问题的可能性。
测试方法 主要在非活动环境中进行测试;测试人员可能无法捕获所有现实世界的问题。 生产用户充当测试人员,尽早发现现实世界的问题。
值得注意的用例 Netflix、Amazon、Etsy、LinkedIn 和 IBM 使用蓝绿部署。 Netflix 和 Google 使用金丝雀部署,并结合自动化测试逐步推出。

蓝绿部署与金丝雀部署:特点

部署

蓝绿部署意味着存在两个环境(蓝色和绿色)。同时,这两个环境在数据方面始终保持同步,需要一个持续的数据同步过程。

一旦新版本经过测试并认为可以部署,流量就会从活动环境切换到非活动环境,使后者成为新的活动环境。

你无需花费任何时间来部署新代码,并且不会涉及生产停机时间。所有生产用户始终在当前活动环境中工作,他们甚至不会注意到切换的发生。

来源:aws.amazon.com

金丝雀部署涉及将软件的新版本部署给一小部分用户,而大多数用户或服务器仍然使用当前版本。这是一个渐进的部署过程,而不是全面的切换。在这种情况下,测试人员是直接的生产用户,尽管他们只是其中一部分。该小组正在积极测试新版本在生产环境中的流程,如果最终稳定,新版本将被推广给其他用户。

如果高可用性是主要考虑因素,那么应该选择蓝绿部署。如果偏好更快的反馈和更受控制(尽管更慢)的部署,可以选择金丝雀部署。

降低风险差异

蓝绿部署通过快速切换到稳定的先前版本来降低发布失败的风险。对于每个用户来说,这个切换过程都是即时的。当然,如果发生回滚,新功能仍然存在延迟向用户提供的风险,但至少没有用户会因为新版本中的严重问题而无法使用应用程序。

金丝雀部署的风险缓解策略在于逐步降低问题发生的可能性。由于新功能是向一小部分生产用户发布的,因此他们在向所有用户发布之前就已经使用了该软件版本。这些初始用户很可能会快速发现问题。

测试方法差异

蓝绿部署只在非活动环境中进行测试。开发人员、测试人员和各种利益相关者可以测试他们想要的任何内容。由于两个环境之间的数据和配置始终保持同步,你可以期待测试结果与在活动生产环境上直接测试类似。

虽然测试人员在运行测试,但他们可能仍然无法捕获真实生产用户会遇到的所有问题。 然而,这并不是一个严重的问题,因为非活动和活动环境之间的切换非常快。 之后,你可以让开发人员解决问题并再次进行切换。

来源:ibm.com

金丝雀部署允许你使用生产用户作为测试人员。这类用户通常倾向于在更短的时间内发现更多问题。他们只是以完整的端到端的方式运行日常业务流程。

他们之所以能够发现更多问题,并非因为他们设计了专门的测试场景和案例,而是因为他们需要这样做。你可能会面临一小部分用户在一段时间内遇到严重问题的风险。但这并不会影响大多数用户,而且开发团队可以立即专注于解决最紧迫的实际问题。

经验和用例

以下是一些已知的成功应用案例:

  • Netflix 使用蓝绿部署来部署其流媒体服务的新版本。
  • Amazon 和 Etsy 使用蓝绿部署来部署其电子商务平台的新版本。
  • LinkedIn 使用蓝绿部署来部署其社交网络平台的新版本。
  • IBM 使用蓝绿部署来部署其云平台的新版本。
  • Netflix 还使用金丝雀部署来对流媒体服务进行更改。该公司结合使用自动化测试、功能标记和 A/B 测试来逐步推出更改。
  • Google 使用金丝雀部署来对云服务进行更改。同样,该公司利用自动化测试、流量分割和监控,逐步向一小部分用户推出更改,然后再部署到所有用户。

最佳实践和未来趋势

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

  • 在服务、数据、用户或权限方面创建或更新目标环境。
  • 直接从代码存储库自动部署源代码的完整或增量版本。
  • 数据库架构升级和数据刷新。
  • 在部署活动期间直接自动执行测试。
  • 如果任何重要的测试用例未能成功完成,则自动回滚过程。
  • 将任何手动干预步骤减少到零。

一旦有了这样的部署管道,你就可以在其中插入金丝雀或蓝绿流程,或者你喜欢的任何其他流程。 这些只是两种已经被证明有效的方法。 但这些方法只是解决大多数部署活动问题的哲学框架。 随着时间的推移,可以灵活地在它们之间切换,或使用两者的组合。

最后的话

坚持使用手动部署流程是不成熟的开发流程或团队的体现。它也可能反映出特定公司在软件交付方面缺乏灵活性。在这两种情况下,改变现状都意味着要做出大量努力。因此,请尝试为你的项目实施上述的部署策略。

接下来,了解如何在 Kubernetes 中部署应用程序。