在 AWS 中 - 不可变部署和蓝/绿部署之间的区别?

doo*_*fus 12 amazon-web-services amazon-elastic-beanstalk aws-code-deploy

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

\n

也许有一些细节可以区分这两者。但如果这么好,那么当它们实际上是同一件事时,让它们截然不同又有什么意义呢?

\n

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

\n
\n

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

\n
\n
\n

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

\n
\n

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

\n

小智 22

它们的执行方式不同:

immutable:在相同的环境中(即在相同的负载均衡器下),会在旧的自动伸缩组旁边创建一个新的自动伸缩组。一旦创建第一个新实例,它就开始提供流量。当新实例全部正常时,旧实例将被关闭。

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

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

因此,在某些情况下,例如:

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

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