Amazon web services 新应用程序版本的AWS不可变更新

Amazon web services 新应用程序版本的AWS不可变更新,amazon-web-services,amazon-elastic-beanstalk,load-balancing,blue-green-deployment,Amazon Web Services,Amazon Elastic Beanstalk,Load Balancing,Blue Green Deployment,尝试使用不变的部署策略在AWS Elastic Beanstalk上部署新的应用程序版本。是否仍然需要确定AWS如何处理从旧实例到新实例的流量?因为在给定的点上,负载平衡器后面运行着两组新旧实例 这可以看作是蓝绿色部署的一种变体吗?既然我们使用了相同的负载平衡器,只需更改这些实例上运行的应用程序版本 我在AWS文档中没有看到明显的解释 不可变更新是如何工作的 不可变更新的结果是,Elastic Beanstalk将创建一个新的自动缩放组,其参数与活动的自动缩放组完全相同。它将把一个实例引导到此组

尝试使用不变的部署策略在AWS Elastic Beanstalk上部署新的应用程序版本。是否仍然需要确定AWS如何处理从旧实例到新实例的流量?因为在给定的点上,负载平衡器后面运行着两组新旧实例

这可以看作是蓝绿色部署的一种变体吗?既然我们使用了相同的负载平衡器,只需更改这些实例上运行的应用程序版本

我在AWS文档中没有看到明显的解释

不可变更新是如何工作的

不可变更新的结果是,Elastic Beanstalk将创建一个新的自动缩放组,其参数与活动的自动缩放组完全相同。它将把一个实例引导到此组中,检查它是否变得健康。此实例将连接到负载平衡器,并开始沿已激活的实例提供流量服务。EB随后将继续引导实例,直到AutoScaling组中出现所需数量的实例,与原始AutoScaling组中的数量匹配。如果所有新实例都已启动且运行正常,EB将把它们移到原始的自动缩放组,并通过连接排空清理新创建的自动缩放组和旧实例。因此,是的,暂时来说,您将运行两倍数量的实例

与滚动更新相比,使用不可变更新的原因是什么

您不会像滚动更新那样冒部分部署的风险。可能并非所有批处理都已在更新中运行,从而导致环境部分升级。这里要认识到的非常重要的一点是滚动更新在同一个自动缩放组中工作,不可变的更新会创建一个新的自动缩放组。 当滚动更新失败时,它必须再次更新自动缩放组,以便回滚更新。回滚一个不可变的更新就像杀死新的自动缩放组一样简单——完成了。 考虑到您正在执行自动缩放组的回滚,根据您的参数,也可能会发生这样的情况:您必须使用旧的应用程序版本重新启动一定数量的计算机。这在某种程度上意味着你的弹性豆茎环境的破坏。 您的实例总是被替换。虽然这看起来微不足道,但它确实会在每次部署时为您提供一个新实例,而不是永远在同一个实例上运行。 不可变更新的真正价值在于所有这些特性的组合:每次部署都会在新实例上同时完全执行。回滚不会中断正在运行的实例

绿色/蓝色部署的关系是什么?不一样吗

绿色/蓝色实际上是启动一个全新的环境,进行各种检查,然后翻转负载平衡器的URL。从基础设施的角度来看,不可变部署与绿色/蓝色部署非常相似。但是,如果您对您的环境进行所有类型的功能检查—冒烟测试、健全性检查。。。这些都不是基础设施性质的,它有很大的不同,因为这个过程是自动化的。EB仅在执行此更新时执行运行状况检查

所以。。。为什么不总是使用这种部署形式

嗯,不可变部署无法同时处理资源配置更新,即:负载平衡器设置和应用程序版本更新。如果要同时执行这两个更新,则必须将它们拆分为两个连续更新,或者使用绿色/蓝色部署

脑海中浮现的其他一些随机思考:

假设您的帐户中有X个实例的限制,并且您已经在使用X-2实例。您的环境是5个实例。您无法执行不可变更新,因为它不符合您的限制

如果您的环境有50个实例,那么我在这里只是随机声明一个巨大的数字。启动由50个实例组成的整个自动缩放组以及原始的自动缩放组进行更新需要花费大量的时间、金钱和资源

不可变更新是如何工作的

不可变更新的结果是,Elastic Beanstalk将创建一个新的自动缩放组,其参数与活动的自动缩放组完全相同。它将把一个实例引导到此组中,检查它是否变得健康。此实例将连接到负载平衡器,并开始沿已激活的实例提供流量服务。EB随后将继续引导实例,直到AutoScaling组中出现所需数量的实例,与原始AutoScaling组中的数量匹配。如果所有新实例都已启动且运行正常,EB将把它们移到原始的自动缩放组,并通过连接排空清理新创建的自动缩放组和旧实例。所以,是的,暂时来说,你会有双倍的ins tances跑步

与滚动更新相比,使用不可变更新的原因是什么

您不会像滚动更新那样冒部分部署的风险。可能并非所有批处理都已在更新中运行,从而导致环境部分升级。这里要认识到的非常重要的一点是滚动更新在同一个自动缩放组中工作,不可变的更新会创建一个新的自动缩放组。 当滚动更新失败时,它必须再次更新自动缩放组,以便回滚更新。回滚一个不可变的更新就像杀死新的自动缩放组一样简单——完成了。 考虑到您正在执行自动缩放组的回滚,根据您的参数,也可能会发生这样的情况:您必须使用旧的应用程序版本重新启动一定数量的计算机。这在某种程度上意味着你的弹性豆茎环境的破坏。 您的实例总是被替换。虽然这看起来微不足道,但它确实会在每次部署时为您提供一个新实例,而不是永远在同一个实例上运行。 不可变更新的真正价值在于所有这些特性的组合:每次部署都会在新实例上同时完全执行。回滚不会中断正在运行的实例

绿色/蓝色部署的关系是什么?不一样吗

绿色/蓝色实际上是启动一个全新的环境,进行各种检查,然后翻转负载平衡器的URL。从基础设施的角度来看,不可变部署与绿色/蓝色部署非常相似。但是,如果您对您的环境进行所有类型的功能检查—冒烟测试、健全性检查。。。这些都不是基础设施性质的,它有很大的不同,因为这个过程是自动化的。EB仅在执行此更新时执行运行状况检查

所以。。。为什么不总是使用这种部署形式

嗯,不可变部署无法同时处理资源配置更新,即:负载平衡器设置和应用程序版本更新。如果要同时执行这两个更新,则必须将它们拆分为两个连续更新,或者使用绿色/蓝色部署

脑海中浮现的其他一些随机思考:

假设您的帐户中有X个实例的限制,并且您已经在使用X-2实例。您的环境是5个实例。您无法执行不可变更新,因为它不符合您的限制

如果您的环境有50个实例,那么我在这里只是随机声明一个巨大的数字。启动由50个实例组成的整个自动缩放组以及原始的自动缩放组进行更新需要花费大量的时间、金钱和资源


非常感谢您的详细回复!您提到的这个实例将连接到负载平衡器,并开始沿着已经活动的实例提供流量服务。EB随后将继续引导实例,直到AutoScaling组中出现所需数量的实例,与原始AutoScaling组中的数量匹配。因为我正在部署一个新的应用程序,这意味着我有一个实例为新版本的流量服务,而其他实例仍在运行旧版本。这不是不可变部署的问题吗?好吧,这是一个正确的观点,但这在应用程序级别上比在部署级别上更是一个问题。部署级别上的不变性更多地取决于您执行的是完全替换,而不是现有机器的更新。我们正在使用设置中的设置,这也是我关心的问题-如果出现任何问题,我将把它放在这里;几个月后,我们全面推出了这一计划。我可以确认,您的负载平衡器在某个时间点将有多个版本。负载平衡器只是添加实例,并开始检查它们的运行状况。只有在将新实例放入原始自动缩放组后,旧实例才会被删除。对于API而言,这不是问题,因为您有一个非常严格的不中断更改策略。对于我们的前端应用程序,它是。我们通过在负载平衡器上使用粘性会话解决了这个问题。我同意,sticky sessions不是一个可扩展的添加,但它是解决我们问题的唯一方法。非常感谢您的详细回复!您提到的这个实例将连接到负载平衡器,并开始沿着已经活动的实例提供流量服务。EB随后将继续引导实例,直到AutoScaling组中出现所需数量的实例,与原始AutoScaling组中的数量匹配。因为我正在部署一个新的应用程序,这意味着我有一个实例为新版本的流量服务,而其他实例仍在运行旧版本。这不是不可变部署的问题吗?好吧,这是一个正确的观点,但这在应用程序级别上比在部署级别上更是一个问题。部署级别上的不变性在于mor
e事实上,你做的是完全替换,而不是更新现有的机器。我们正在玩我们设置中的设置,这也是我关心的问题-如果出现任何问题,我会把它放在这里;几个月后,我们全面推出了这一计划。我可以确认,您的负载平衡器在某个时间点将有多个版本。负载平衡器只是添加实例,并开始检查它们的运行状况。只有在将新实例放入原始自动缩放组后,旧实例才会被删除。对于API而言,这不是问题,因为您有一个非常严格的不中断更改策略。对于我们的前端应用程序,它是。我们通过在负载平衡器上使用粘性会话解决了这个问题。我同意,sticky sessions不是一个可扩展的附加功能,但它是解决我们问题的唯一方法。