【问题标题】:In AWS - difference between Immutable and Blue/Green deployments?在 AWS - 不可变和蓝/绿部署之间的区别?
【发布时间】:2021-05-01 15:53:22
【问题描述】:

根据 AWS 文档,我的印象是 Immutable 和 Blue/Green 是同一个东西,只是名称不同。在这两种情况下,您都在创建一组全新的服务器,并在部署的最后一步过渡到这些服务器。

也许有一些细微的细节可以区分这两者。但是如果很好,那么当它们实际上是相同的东西时,将它们区分出来又有什么意义呢?

根据 AWS 文档: (来源:https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/immutable-and-bluegreen-deployment.html

不可变模式通过使用新配置或应用程序代码版本启动一组全新的服务器来指定应用程序代码的部署。此模式利用云功能,即通过简单的 API 调用创建新的服务器资源。

蓝/绿部署策略是一种不可变部署,也需要创建另一个环境。一旦新环境启动并通过了所有测试,流量就会转移到这个新部署。至关重要的是,旧环境(即“蓝色”环境)保持空闲状态,以防需要回滚。

“至关重要”这句话听起来像是区别因素,但在不可变部署中,如果您愿意,您也可以将目标组中的旧实例保持在空闲状态。

【问题讨论】:

    标签: amazon-web-services amazon-elastic-beanstalk aws-code-deploy


    【解决方案1】:

    它们的执行方式不同:

    不可变:在相同的环境中(因此在相同的负载均衡器下),在旧的旁边创建一个新的自动缩放组。一旦创建了第一个新实例,它就开始为流量提供服务。当新实例都健康时,旧实例将被关闭。

    蓝/绿:从头开始创建一个新环境(因此另一个负载均衡器)。当新环境准备就绪且健康时,在 DNS 级别执行切换,将流量从 OLD 路由到 NEW。

    主要区别在于,在 不可变 更新中,新实例与旧实例一起提供流量,而在 蓝/绿 中,这不会发生(您立即完成从旧到新的完全切换)。

    所以,在某些情况下,例如:

    • 如果您的应用程序依赖于某些必须从旧版本更改的配置 新版本的版本
    • 由于应用限制,新版本无法与旧版本同时运行
    • “您想将环境更新到不兼容的平台版本”(取自 AWS 文档)

    您必须使用蓝绿部署策略。

    【讨论】:

      【解决方案2】:

      补充以上答案:

      不可变 vs 滚动

      不可变部署实际上被认为是滚动部署的替代方案。主要区别如下:

      Rolling Immutable
      New new ASG is created Second ASG is created and it serves traffic
      alongside first ASG until deployment is done
      Deployment takes place on batches of existing instances Only one but a brand new instance is created first
      If passes health check, additional instances are created
      until the number of instances matches with the first ASG
      Failure requires manual redeploy of old version Rollback is achieved by terminating the second ASG
      How Rolling Deployments work? How Immutable Deployments work?

      不可变/滚动与蓝绿

      A blue-green deployment 与上述两种部署方式截然不同。

      • 在此部署中,将创建一个新环境并将其标记为 绿色(已存在的环境被视为蓝色)。
      • 当绿色环境满足要求(健康检查/容量)时,将执行 CNAME 交换以将流量从蓝色环境切换到绿色环境。
      • 如果新代码与旧代码不兼容(没有向后兼容或接口破坏性更改),蓝绿部署是唯一的选择

      在所有这些部署中,停机时间为零,故障的影响将最小化。

      金丝雀部署

      • 流量拆分部署允许您执行金丝雀测试。据我了解,分流部署最接近不可变部署。
      • 根据我在 documentation 中看到的内容,金丝雀测试也可以使用蓝/绿部署来执行。

      Summary of differences from AWS documentation

      【讨论】:

        【解决方案3】:

        EC2 的不可变部署仅适用于 Elastic Beanstalk,而蓝/绿部署也适用于 lambda/ec2。

        【讨论】:

          猜你喜欢
          • 2017-12-28
          • 2019-05-20
          • 2020-07-23
          • 2019-03-16
          • 2016-12-04
          • 2017-06-12
          • 2021-09-16
          • 2019-01-01
          • 2021-07-18
          相关资源
          最近更新 更多