译者|陈军审稿人|孙书娟在构建企业级应用时,我们往往希望给客户带来无缺陷的体验。但是,我们不能保证每次部署新代码时,都不会出现错误。为此,软件项目组需要在新的应用版本影响用户之前,仔细设置部署流程,从更高的维度识别bug。在众多部署方式中,金丝雀部署可以通过实现无缝和无错误的应用程序发布来确保用户的完美体验。下面,我将向大家介绍金丝雀部署的基本概念、不同的阶段、它们能带来的好处,以及它们与AWS、ECS(ElasticComputeService)上的蓝绿部署有何不同。什么是金丝雀部署从概念上讲,金丝雀部署通过在允许每个用户访问统一的软件版本之前缓慢地将更新版本分发给一小群用户来降低直接部署在生产环境中的成本。引入软件更新的风险。简单来说,这是一种分阶段发布的做法。基本思路是:先将软件更新推送给一小部分用户,让他们测试更新并提供反馈,直到成功接受新版本,最后再向其他用户发布更新。在典型的金丝雀部署中,用户流量在增量阶段被定向到新版本。而且每个阶段都需要完成效果验证才能进入下一阶段。何时使用金丝雀部署策略当您对平台的稳定性以及发布新版本软件可能带来的影响缺乏信心时;当您希望用户测试新版本平台的集成状态时;当您想将任何错误或不良部署控制在相对有限的范围内,并且您可以及时修复它们并且可能对用户产生负面影响时。金丝雀部署将是您最好的选择。金丝雀部署的各个阶段如前所述,典型的金丝雀部署会阶段性增加,不断通过部分用户的测试和反馈,推动全面发布。通常,金丝雀部署包括以下三个阶段:1.规划和构建此阶段涉及构建部署了最新软件版本的金丝雀基础架构。其中,部分用户流量会被送往金丝雀实例,而大部分用户在生产环境中会继续使用基线实例。2.分析对于转移到金丝雀实例的用户流量,项目组会收集各种指标数据,日志,各种网络流量监控器的信息,以及综合交易监控器的结果。识别并确定新的金丝雀实例是否正常工作。在实践中,软件项目团队分析收集到的各种数据,并将结果与??基线版本进行比较。3.部署金丝雀分析完成后,团队将决定是继续发布版本并向其余用户滚动,还是回滚到之前的基线状态来解决发现的问题。金丝雀部署的好处作为一种有效且有益的发布策略,金丝雀部署可以为我们带来以下好处:对功能部署的细粒度控制。整个工作流程中断的风险。也就是说,如果您的团队能够及时识别金丝雀发布中的错误,只有少数有权访问新版本的用户会受到影响,而且这通常是团队可以轻松修复的小问题。真实场景测试作为折中策略,金丝雀部署引入了小规模的真实场景测试,可以有效避免将全新的应用直接推送到生产环境,迫使所有用户承担风险。生产环境零宕机,回滚更快一旦新发布的软件版本在小部分用户试用过程中出现问题,项目组可以快速回滚,然后将这部分流量重新路由回基线。同时,他们能够快速推出错误版本,以便DevOps团队能够确定根本原因、解决问题并根据需要引入下一轮金丝雀版本。使小型基础设施更便宜由于金丝雀部署仅在少数用户上运行,DevOps团队只需为此准备一个小型基础设施,从而降低开发过程的成本,从而降低整个项目的成本。探索新功能的灵活性由于Canary实例首先仅在少量用户流量上进行了测试,因此它对整个组织的用户体验和基础架构的影响微乎其微。因此,开发人员可以灵活地构建和试验新功能,而不必担心对用户体验的任何直接影响或后果。什么是蓝/绿部署?蓝/绿部署也是一种用于将新代码发布到生产中的部署技术。该策略的目的是简化更新的回滚,减少软件停机时间,避免应用服务中断,满足所有关键服务的正常运行时间要求。蓝/绿部署使用两个相同的生产环境,其中一个正在为用户提供服务,另一个被设置为空闲。软件的更新版本直接推送到主要生产环境并监控错误。空闲环境充当备份,仅在出现错误时才将用户流量路由到那里。金丝雀与蓝/绿部署的对比金丝雀部署和蓝/绿部署策略都需要在部署前的规划阶段对业务应用和生产环境的架构进行各种预先规划和考虑。其中,蓝绿部署为IT团队提供了一次将待发布的新版本推送到生产环境并进行测试的机会。方便IT团队统一将所有用户切换到新版本。金丝雀部署是一种分阶段发布的方式。对于需要在每个新版本中更新应用程序非常友好。AWS或ECS上的蓝绿部署往往需要大量预算才能满足大规模基础设施的需求,因为IT团队通常需要维护两个相同的托管环境。正因如此,资源有限或受应用模块化和配置驱动的企业更倾向于选择金丝雀部署。译者介绍社区编辑JulianChen。他在实施IT项目方面拥有超过十年的经验。擅长管控内外部资源和风险,注重传播网络与信息安全方面的知识和经验。原标题:金丝雀部署详解,作者:RuchitaVarma
