金丝雀部署的详细指南

译文 精选
开发 架构 测试
本文将向您介绍有关金丝雀部署的基本概念、不同的阶段、可以实现的好处,以及它们与AWS、ECS上的蓝/绿部署的不同之处。

译者 | 陈峻

审校 | 孙淑娟

在构建企业级应用时,我们往往希望能够给客户带来无缺陷的使用体验。不过,我们无法保证每次部署新的代码,都不会出现bug。为此,软件项目团队需要通过精心设置部署过程,实现在新的应用版本影响用户之前,能够从更高的维度识别出bug。

在众多部署方法中,金丝雀(Canary)部署能够通过实现无缝、无缺陷的应用发布,来确保用户的完美体验。下面,我将向您介绍有关金丝雀部署的基本概念、不同的阶段、可以带来的好处,以及它们与AWS、ECS(Elastic Compute Service)上的蓝/绿部署的不同之处。

什么是金丝雀部署

从概念上说,金丝雀部署是通过在允许每个用户能够访问统一的软件版本之前,将更新的版本缓慢地分发给一小部分用户,从而降低在生产环境中直接引入软件更新的风险。

简单而言,这是一种分阶段式的发布实践。其基本思想是:先向一小部分用户推送软件的更新,以便他们可以对更新进行测试,并提供反馈,直到他们能够顺利地接受了新的版本,最终再将该更新发布给其他的用户。

在典型的金丝雀部署中,被引导至新版本的用户流量,是分阶段递增的。而且,每个阶段都需要完成效果验证之后,才能进入下一个阶段。

什么时候可以使用金丝雀部署策略

  • 在您对平台的稳定性、以及发布软件的某个新版本可能带来的影响,缺乏信心时;
  • 当您希望由用户来测试应用的新版本、以及它与平台的集成状况时;
  • 当您希望将任何错误或不良的部署,控制在相对有限的范围内,并且可以及时修复可能给用户造成负面影响时。

金丝雀部署都将是您最好的选择。

金丝雀部署的各个阶段

如前文所述,一个典型的金丝雀部署会以分阶段递增的方式,不断通过部分用户的测试与反馈,来促进全面发布。通常,金丝雀部署包含了如下三个阶段:

1.计划与构建

该阶段涉及到构建一个部署了最新软件版本的金丝雀基础设施。其中,一部分的用户流量会被发送到该金丝雀实例上,而大多数用户仍然会继续使用生产环境中的基线实例。

2.分析

针对被转移到金丝雀实例中的用户流量,项目团队会收集各种指标数据、日志、来自各种网络流量监控器的信息、以及来自合成事务(synthetic transaction)监控器的结果,以识别和判定新的金丝雀实例是否能够正常工作。在实际操作中,软件项目团队会分析各种收集到的数据,并将结果与基线版本进行比较。

3.部署

在金丝雀分析完成后,团队将决定是继续发布该版本、并推出给其余用户呢,还是回滚到以前的基线状态、以解决发现的问题。

金丝雀部署的好处

作为一种有效且有益的发布策略,金丝雀部署可以给我们带来如下好处:

  • 对功能性部署的精细控制

执行较小且定期的功能性部署,能够降低由于错误而对整个工作流造成中断的风险。也就是说,如果您的团队能够及时识别到金丝雀部署中的错误的话,那么只有少数能够接触到新版本的用户会受到影响,并且这通常是团队可以轻松解决的一个小问题。

  • 真实场景测试

作为一种折中策略,金丝雀部署引入了小规模的真实场景测试,可有效地避免将全新的应用直接推向生产环境,让全体用户都被迫地接受风险。

  • 零生产环境的宕机时间和更快的回滚

一旦新发布的软件版本,在小部分用户的试用过程中出现问题,项目团队就可以迅速回滚,然后将这部分流量重新路由回基线。同时,他们能够将错误的版本迅速下线,以便DevOps团队确定根本原因,解决问题,按需引入下一轮金丝雀部署。

  • 让小型基础设施成本更低

由于金丝雀部署只是在一小部分用户上运行,因此DevOps团队只需要为此准备一个小的基础设施,从而降低了开发过程、乃至整个项目的成本。

  • 灵活地探索新功能

由于金丝雀的实例首先仅在少量用户流量上进行测试,因此它对于整个组织的用户体验和基础设施的影响可谓最小。也正因为如此,开发人员可以灵活地构建和试验新的特性,而不必担心对用户体验造成任何直接的影响或结果。

什么是蓝/绿部署?

蓝/绿部署也是一种将新的代码发布到生产环境中的部署技术。该策略的目的是简化更新的回滚,减少软件的宕机时间,避免应用程序的服务中断,进而满足所有关键性服务的运行时间要求。

蓝/绿部署使用两个完全相同的生产环境,其中的一个会主动为用户提供服务,另一个环境则被设置为空闲。软件的更新版本会被直接推送到主生产环境中,并被监视是否有bug的产生。而空闲的环境只是作为一个备份,仅在错误发生时,将用户流量路由到那里。

金丝雀与蓝/绿部署的比较

无论是金丝雀部署、还是蓝/绿部署策略都需要在执行部署之前的计划阶段,对业务应用和生产环境的体系结构进行各种预先的规划和考虑。其中,蓝/绿部署为IT团队提供了一次性将待推出的新版本,推送到生产环境中,并予以测试的机会。它方便了IT团队将所有用户统一地切换到新的版本上。而金丝雀部署则是分阶段的发布方式。它对于需要在每个新版本中更新应用的需求,十分友好。

AWS或ECS上的蓝绿色部署,往往需要大量的预算,来满足大型基础设施的需求,因为IT团队通常需要维护两套完全相同的托管环境。正是因为这个原因,那些资源有限、或以应用模块化和配置驱动的企业,更趋向于选择金丝雀部署。

译者介绍

陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

原文标题:A Detailed Guide to Canary Deployment,作者:Ruchita Varma

责任编辑:华轩 来源: 51CTO
相关推荐

2022-02-17 13:09:55

金丝雀部署服务集群测试

2021-07-29 05:09:54

Linkerd金丝雀部署Flagger

2021-07-13 06:35:11

Argo Rollou GitOpsKubernetes

2024-04-01 13:04:01

停机部署滚动部署蓝绿部署

2021-06-15 05:52:33

Linkerd canary网络技术

2023-10-08 07:34:04

2021-10-08 20:12:22

微服务架构Service

2022-08-22 10:40:40

Kubernete部署分析运行

2021-02-28 07:52:24

蠕虫数据金丝雀

2021-06-03 05:48:58

GitOps 云原生Kubernetes

2024-01-18 08:24:08

2022-08-15 20:48:28

Chrome安卓网页

2013-11-01 11:00:10

2015-08-20 10:49:39

Windows 10版本

2021-10-14 18:21:52

架构IstioService

2023-09-05 07:24:33

Traefik加权轮询

2023-11-09 07:23:57

Istio路由分析

2010-01-11 14:36:43

VB.NET安装部署

2022-05-07 08:27:42

缓冲区溢出堆栈

2021-07-07 09:00:00

分解式存储架构云服务
点赞
收藏

51CTO技术栈公众号