zhcn 技术 游戏 解释金丝雀部署及其在 DevOps 中的作用

解释金丝雀部署及其在 DevOps 中的作用

金丝雀部署是一种软件开发和部署技术,其中新功能和更新逐渐向有限数量的用户发布,然后再推广到整个用户群。

这种方法涉及创建软件的新版本,将其部署给一小部分用户,并继续为其余用户运行旧版本。开发团队密切监控新版本,以确保稳定性和性能达到预期。

如果一切顺利,新版本将向更多用户推出,并最终覆盖整个用户群。通过这种方式,项目团队可以最大限度地减少引入错误或其他可能同时影响所有用户的问题的风险。

金丝雀部署的目的是降低向大量用户群引入新功能的风险。逐步向用户推出更改可以让开发人员监控新版本的性能和稳定性。在向整个用户群推出之前进行必要的调整。因此,向新版本的过渡将会更加顺利。

解释金丝雀部署及其在 DevOps 中的作用
解释金丝雀部署及其在 DevOps 中的作用

主要原则和好处

资料来源: martinfowler.com
图 16
图 16

金丝雀部署的主要原则包括:

  1. 首先将新版本部署给少数用户,然后随着时间的推移逐渐将其推广给更多用户。
  2. 仔细监控新版本,以确保它们稳定并按预期工作。
  3. 如果出现问题,您可以快速轻松地将部署回滚到以前的版本。
  4. 尽可能自动化部署过程,以减少人为错误的风险。

DevOps 中金丝雀部署的好处包括:

  1. 通过逐步推出更改,您可以最大限度地降低引入可能同时影响所有用户的错误或其他问题的风险。
  2. 开发人员可以更快地收到有关新版本的反馈,从而使他们能够在将新版本推广到整个用户群之前进行必要的调整。
  3. 通过监控新版本的性能和稳定性,开发人员可以确保新版本在向整个用户群推出之前符合所需的质量标准。
  4. 金丝雀部署通过降低引入可能影响用户体验的问题的风险,帮助提高开发人员和利益相关者对部署过程的信心。

基于概念和术语的金丝雀开发

来源: cncf.io
金丝雀交通转移
金丝雀交通转移

让我们看一下流程的典型生命周期。

这一切都始于金丝雀,它是新版本系统的“早期采用者”。并行的还有基线组。所有不在金丝雀中的剩余用户都属于这里。

随着 Canary 用户继续使用新版本,Canary 的采用范围扩大到更多用户。这就是流量转移。随着 Canary 组的增长和 Baseline 组的缩小,系统会逐步推出

在此过程中,监控流程会记录所有活动和使用结果,并生成开发人员需要的反馈指标。然后开发人员做出反应并修复所需的内容。或者,如果此时无法解决问题,请回滚到基线。

自动化所有监控和部署活动。这使得开发人员能够专注于解决问题。

金丝雀组可能会发现新版本中的某些功能更差,而另一些功能则更好。因此,开发人员可以标记有问题的功能并在部署过程中禁用它们。

开发人员同时监控 Canary 组和 Baseline 组。用户正在生成A/B 测试的结果。这是新旧系统在相同条件下的行为。此外,在新版本的系统上不断运行自动化测试,以确保金丝雀组的健康检查稳定。

与传统部署策略的区别

一旦您了解了高级生命周期流程,该流程与传统部署流程之间的区别就变得清晰起来。

  • 与其立即向每个人部署并等待影响整个生产环境的问题发生,不如分阶段部署并更好地控制。
  • 你不能将新版本中的错误风险限制在金丝雀组中,同时让整个世界都面临这个问题。
  • 与其在新版本可供用户使用后对其进行监控并在发布过程的超级维护阶段投入大量时间和资源,不如在用户收到新版本之前对其进行监控。
  • 您可以决定如何在将新版本完全部署到生产环境之前回滚新版本。一方面,我们安排另一个发布窗口,以便在生产发布完成后立即取消生产。
  • 金丝雀部署要求您尽可能投资自动化工具和流程。另一方面,坚持传统的部署策略自然会降低所有自动化计划的优先级,并将它们推到积压列表的底部。

金丝雀部署中的 CI/CD 管道

来源: aws.amazon.com
AWS-金丝雀
AWS-金丝雀

在典型的 CI/CD 管道中,更改会自动构建、测试并部署到临时环境中,以便在部署到生产之前进行进一步测试。这也是金丝雀部署中的完美用例。

将更改部署到临时环境并通过所有必需的测试后,CI/CD 管道会自动将金丝雀版本部署到生产中的一小部分用户。

如果出现问题,只需运行另一个管道进行回滚即可。或者,您可以标记有问题的功能,这样它就不会再出现在部署管道的部署过程中。一切都会自动完成,因此您无需再担心。

金丝雀版本包含大量自动化运行状况检查测试,因此它们自然是 CI/CD 管道基本功能的一部分。无论哪种方式,这些都是任何优秀 CI/CD 管道的重要组成部分。

工作流程和金丝雀部署阶段

总而言之,这是您可以在项目中使用的典型 Canary 部署的正常工作流程。

#1.规划和准备

在此阶段,开发团队计划并准备金丝雀的部署。这包括定义用于识别所做的更改或更新、创建软件的新版本以及监控新版本的性能的指标和运行状况检查。该团队还确定了将首先收到新版本的用户子集,并定义了部署计划。

#2.实施流量路由和监控

新版本的软件将向规划阶段确定的一部分用户推出。实施流量路由是为了将部分用户流量引导至新版本,同时为其余用户保持旧版本运行。使用指标和运行状况检查密切监控新版本的性能和稳定性,以确保它们按预期运行。

#3。实施绩效分析与评价

根据规划阶段定义的指标和健康检查来分析和评估新版本的性能。如果新版本表现良好,随着时间的推移,它将逐步向更多用户推出。如果新版本遇到问题,可以快速将部署回滚到之前的版本。

#4。升级或回滚部署

开发团队决定是否向整个用户群推广新版本或回滚到以前的版本。如果新版本表现良好并符合所需的质量标准,请将其推广给您的整个用户群。如果您在新版本中遇到问题,您可以快速轻松地将部署回滚到以前的版本。

来源: aws.amazon.com
金丝雀部署
金丝雀部署

最佳实践和策略

在您的平台中实施金丝雀部署时,首先要定义明确的目标以及您的最终成功是什么。在这里,我们可以在性能指标、用户反馈标准、业务影响等方面提供帮助。

创建一小部分用户来测试软件的新(金丝雀)版本。拥有大量的第一组并不是真正的优势。你需要尽可能灵活,尤其是在一开始。

正如已经多次提到的,我们使用指标和运行状况检查来监控新版本的性能和稳定性。如果您发现可疑情况,请立即做出反应。分阶段推出时,反应过度总比反应不足要好。

随着时间的推移,我们将逐步向更多用户提供新版本。这使得向新版本的过渡更加顺利。

尽可能使用自动化工具和流程来简化部署和监控流程。将这些合并到您的 CI/CD 管道中以自动触发计划的部署流程。这降低了人为错误的风险,并确保部署过程的一致性和可重复性。

实施功能标志以启用或禁用软件的特定功能。它使您可以控制未来的部署过程,而无需不断地手动修复或更新它。开发人员可以更加专注于重要领域:修复错误。

使用 A/B 测试来比较两个不同版本软件的性能。将随机用户分配给其中一个版本。确定哪个版本性能更好,并在未来的开发决策中解决这个问题。

如果您在新版本中遇到问题,您可以随时快速回滚您的部署。这可以减少问题的影响并实现更快的恢复。

挑战和案例研究

尽管实施金丝雀有明显的好处,但仍然存在一些与之相关的挑战。

金丝雀部署的挑战之一是网络延迟,这可能会影响新版本软件的性能。为了应对这一挑战,开发人员可以使用负载均衡器和内容交付网络等工具来提高网络性能。这不仅仅是由于外部使用而导致的系统延迟。但是,它也会引入内部流程(例如部署和运行 CI/CD 管道)的延迟。这些应该尽快完成。否则,开发人员队列将处于空闲状态,等待管道完成运行。

另一个挑战是确保新旧版本软件之间的数据一致性。为了应对这一挑战,开发人员可以使用数据库复制和同步等技术来确保所有版本之间的数据一致性。当生产用户同时在旧版本和新版本上工作时,两个版本始终完全同步,以确保不会因为用户位于 Canary/Baseline 组而丢失生产数据,这会增加期望。 。这可能很难满足期望,因此请确保您有一个可靠的后台流程。

Netflix 是公司使用金丝雀部署来部署对其流媒体服务的更改的著名示例。该公司结合使用自动化测试、功能标记和 A/B 测试来缓慢推出更改。

谷歌是使用金丝雀部署来部署云服务变更的公司的另一个例子。同样,该公司利用自动化测试、流量分段和监控的内在优势,逐步向某些用户推出更改,然后再向所有人推出。这种方法帮助谷歌提高了其服务的质量和稳定性。

最后一句话

与所有流程、方法和策略一样,金丝雀部署并不能解决世界上所有问题。环境限制、人们的知识或缺乏一般概念理解可能使实施几乎不可能。我

更适合新时代的项目。当敏捷思维成为坚定不移的基本特征时,所有流程的自动化绝对是首要任务,而最大的可靠性则是利益相关者的强烈期望。

在这种情况下,从某种意义上说,金丝雀部署是敏捷开发实践的下一个层次。这使您可以将您的团队带到项目以前从未去过的领域。

接下来,看看扩展和优化 CI/CD。

金丝雀部署是一种软件开发和部署技术,其中新功能和更新逐渐向有限数量的用户发布,然后再推广到整个用户群。

这种方法涉及创建软件的新版本,将其部署给一小部分用户,并继续为其余用户运行旧版本。开发团队密切监控新版本,以确保稳定性和性能达到预期。

如果一切顺利,新版本将向更多用户推出,并最终覆盖整个用户群。通过这种方式,项目团队可以最大限度地减少引入错误或其他可能同时影响所有用户的问题的风险。

金丝雀部署的目的是降低向大量用户群引入新功能的风险。逐步向用户推出更改可以让开发人员监控新版本的性能和稳定性。在向整个用户群推出之前进行必要的调整。因此,向新版本的过渡将会更加顺利。

解释金丝雀部署及其在 DevOps 中的作用
解释金丝雀部署及其在 DevOps 中的作用

主要原则和好处

资料来源: martinfowler.com
图 16
图 16

金丝雀部署的主要原则包括:

  1. 首先将新版本部署给少数用户,然后随着时间的推移逐渐将其推广给更多用户。
  2. 仔细监控新版本,以确保它们稳定并按预期工作。
  3. 如果出现问题,您可以快速轻松地将部署回滚到以前的版本。
  4. 尽可能自动化部署过程,以减少人为错误的风险。

DevOps 中金丝雀部署的好处包括:

  1. 通过逐步推出更改,您可以最大限度地降低引入可能同时影响所有用户的错误或其他问题的风险。
  2. 开发人员可以更快地收到有关新版本的反馈,从而使他们能够在将新版本推广到整个用户群之前进行必要的调整。
  3. 通过监控新版本的性能和稳定性,开发人员可以确保新版本在向整个用户群推出之前符合所需的质量标准。
  4. 金丝雀部署通过降低引入可能影响用户体验的问题的风险,帮助提高开发人员和利益相关者对部署过程的信心。

基于概念和术语的金丝雀开发

来源: cncf.io
金丝雀交通转移
金丝雀交通转移

让我们看一下流程的典型生命周期。

这一切都始于金丝雀,它是新版本系统的“早期采用者”。并行的还有基线组。所有不在金丝雀中的剩余用户都属于这里。

随着 Canary 用户继续使用新版本,Canary 的采用范围扩大到更多用户。这就是流量转移。随着 Canary 组的增长和 Baseline 组的缩小,系统会逐步推出

在此过程中,监控流程会记录所有活动和使用结果,并生成开发人员需要的反馈指标。然后开发人员做出反应并修复所需的内容。或者,如果此时无法解决问题,请回滚到基线。

自动化所有监控和部署活动。这使得开发人员能够专注于解决问题。

金丝雀组可能会发现新版本中的某些功能更差,而另一些功能则更好。因此,开发人员可以标记有问题的功能并在部署过程中禁用它们。

开发人员同时监控 Canary 组和 Baseline 组。用户正在生成A/B 测试的结果。这是新旧系统在相同条件下的行为。此外,在新版本的系统上不断运行自动化测试,以确保金丝雀组的健康检查稳定。

与传统部署策略的区别

一旦您了解了高级生命周期流程,该流程与传统部署流程之间的区别就变得清晰起来。

  • 与其立即向每个人部署并等待影响整个生产环境的问题发生,不如分阶段部署并更好地控制。
  • 你不能将新版本中的错误风险限制在金丝雀组中,同时让整个世界都面临这个问题。
  • 与其在新版本可供用户使用后对其进行监控并在发布过程的超级维护阶段投入大量时间和资源,不如在用户收到新版本之前对其进行监控。
  • 您可以决定如何在将新版本完全部署到生产环境之前回滚新版本。一方面,我们安排另一个发布窗口,以便在生产发布完成后立即取消生产。
  • 金丝雀部署要求您尽可能投资自动化工具和流程。另一方面,坚持传统的部署策略自然会降低所有自动化计划的优先级,并将它们推到积压列表的底部。

金丝雀部署中的 CI/CD 管道

来源: aws.amazon.com
AWS-金丝雀
AWS-金丝雀

在典型的 CI/CD 管道中,更改会自动构建、测试并部署到临时环境中,以便在部署到生产之前进行进一步测试。这也是金丝雀部署中的完美用例。

将更改部署到临时环境并通过所有必需的测试后,CI/CD 管道会自动将金丝雀版本部署到生产中的一小部分用户。

如果出现问题,只需运行另一个管道进行回滚即可。或者,您可以标记有问题的功能,这样它就不会再出现在部署管道的部署过程中。一切都会自动完成,因此您无需再担心。

金丝雀版本包含大量自动化运行状况检查测试,因此它们自然是 CI/CD 管道基本功能的一部分。无论哪种方式,这些都是任何优秀 CI/CD 管道的重要组成部分。

工作流程和金丝雀部署阶段

总而言之,这是您可以在项目中使用的典型 Canary 部署的正常工作流程。

#1.规划和准备

在此阶段,开发团队计划并准备金丝雀的部署。这包括定义用于识别所做的更改或更新、创建软件的新版本以及监控新版本的性能的指标和运行状况检查。该团队还确定了将首先收到新版本的用户子集,并定义了部署计划。

#2.实施流量路由和监控

新版本的软件将向规划阶段确定的一部分用户推出。实施流量路由是为了将部分用户流量引导至新版本,同时为其余用户保持旧版本运行。使用指标和运行状况检查密切监控新版本的性能和稳定性,以确保它们按预期运行。

#3。实施绩效分析与评价

根据规划阶段定义的指标和健康检查来分析和评估新版本的性能。如果新版本表现良好,随着时间的推移,它将逐步向更多用户推出。如果新版本遇到问题,可以快速将部署回滚到之前的版本。

#4。升级或回滚部署

开发团队决定是否向整个用户群推广新版本或回滚到以前的版本。如果新版本表现良好并符合所需的质量标准,请将其推广给您的整个用户群。如果您在新版本中遇到问题,您可以快速轻松地将部署回滚到以前的版本。

来源: aws.amazon.com
金丝雀部署
金丝雀部署

最佳实践和策略

在您的平台中实施金丝雀部署时,首先要定义明确的目标以及您的最终成功是什么。在这里,我们可以在性能指标、用户反馈标准、业务影响等方面提供帮助。

创建一小部分用户来测试软件的新(金丝雀)版本。拥有大量的第一组并不是真正的优势。你需要尽可能灵活,尤其是在一开始。

正如已经多次提到的,我们使用指标和运行状况检查来监控新版本的性能和稳定性。如果您发现可疑情况,请立即做出反应。分阶段推出时,反应过度总比反应不足要好。

随着时间的推移,我们将逐步向更多用户提供新版本。这使得向新版本的过渡更加顺利。

尽可能使用自动化工具和流程来简化部署和监控流程。将这些合并到您的 CI/CD 管道中以自动触发计划的部署流程。这降低了人为错误的风险,并确保部署过程的一致性和可重复性。

实施功能标志以启用或禁用软件的特定功能。它使您可以控制未来的部署过程,而无需不断地手动修复或更新它。开发人员可以更加专注于重要领域:修复错误。

使用 A/B 测试来比较两个不同版本软件的性能。将随机用户分配给其中一个版本。确定哪个版本性能更好,并在未来的开发决策中解决这个问题。

如果您在新版本中遇到问题,您可以随时快速回滚您的部署。这可以减少问题的影响并实现更快的恢复。

挑战和案例研究

尽管实施金丝雀有明显的好处,但仍然存在一些与之相关的挑战。

金丝雀部署的挑战之一是网络延迟,这可能会影响新版本软件的性能。为了应对这一挑战,开发人员可以使用负载均衡器和内容交付网络等工具来提高网络性能。这不仅仅是由于外部使用而导致的系统延迟。但是,它也会引入内部流程(例如部署和运行 CI/CD 管道)的延迟。这些应该尽快完成。否则,开发人员队列将处于空闲状态,等待管道完成运行。

另一个挑战是确保新旧版本软件之间的数据一致性。为了应对这一挑战,开发人员可以使用数据库复制和同步等技术来确保所有版本之间的数据一致性。当生产用户同时在旧版本和新版本上工作时,两个版本始终完全同步,以确保不会因为用户位于 Canary/Baseline 组而丢失生产数据,这会增加期望。 。这可能很难满足期望,因此请确保您有一个可靠的后台流程。

Netflix 是公司使用金丝雀部署来部署对其流媒体服务的更改的著名示例。该公司结合使用自动化测试、功能标记和 A/B 测试来缓慢推出更改。

谷歌是使用金丝雀部署来部署云服务变更的公司的另一个例子。同样,该公司利用自动化测试、流量分段和监控的内在优势,逐步向某些用户推出更改,然后再向所有人推出。这种方法帮助谷歌提高了其服务的质量和稳定性。

最后一句话

与所有流程、方法和策略一样,金丝雀部署并不能解决世界上所有问题。环境限制、人们的知识或缺乏一般概念理解可能使实施几乎不可能。我

更适合新时代的项目。当敏捷思维成为坚定不移的基本特征时,所有流程的自动化绝对是首要任务,而最大的可靠性则是利益相关者的强烈期望。

在这种情况下,从某种意义上说,金丝雀部署是敏捷开发实践的下一个层次。这使您可以将您的团队带到项目以前从未去过的领域。

接下来,看看扩展和优化 CI/CD。