译者 | 陈峻
审校 | 孙淑娟
在构建企业级应用时,我们往往希望能够给客户带来无缺陷的使用体验。不过,我们无法保证每次部署新的代码,都不会出现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