AWS 中滚动、滚动附加批处理和不可变部署之间的区别?

Posted

技术标签:

【中文标题】AWS 中滚动、滚动附加批处理和不可变部署之间的区别?【英文标题】:Difference between rolling, rolling with additional batch and immutable deployments in AWS? 【发布时间】:2016-12-04 00:57:22 【问题描述】:

我正在使用 Elastic Beanstalk 来处理我的部署。

我阅读了这些部署选项的说明,但对我来说不是很清楚。

谁能用更简单的话解释一下?

【问题讨论】:

【参考方案1】:

我认为这会有所帮助。

Immutable – 首先将您的应用程序代码部署到一个新创建的 EC2 实例。在第一个实例上成功部署后,将创建创建并行队列所需的剩余实例数,并将应用程序代码部署到它们。在整个并行队列上部署成功后,运行旧应用程序版本的实例一次终止 25%。此部署策略可确保将失败部署的影响降至最低(即:单个 EC2 实例),并使您的应用程序能够在持续部署期间以满负荷提供流量。

Rolling with an additional batch – 首先将您的应用程序代码部署到一批新创建的 EC2 实例。一旦第一批实例部署成功,应用代码将分批部署到剩余实例,直到最后一批实例保留。至此,最后一批实例被终止。此部署策略可确保部署失败的影响仅限于一批实例,并使您的应用程序能够在持续部署期间满负荷提供流量。

Rolling – 首先将您的应用程序代码部署到一批现有 EC2 实例。第一批部署成功后,应用程序代码将分批部署到其余实例。此部署策略可确保失败部署的影响仅限于单个批次。但是,由于在部署期间没有创建新实例,因此您的应用程序可以以减少的容量提供流量(即:在部署期间的任何给定时间,一批实例都停止服务)。

【讨论】:

谢谢!是否可以通过直接从旧队列切换而不是一次 25% 来切换到不可变方法中的新“新并行队列”。 ?我不希望我的应用程序同时提供旧代码 + 新代码。 不,你不能使用不可变来做到这一点,你必须使用“一次性”部署。 蓝/绿更适合你【参考方案2】:

我发现this post 比公认的答案更容易理解,所以这是我的看法。

按风险从高到低排序,并调用已部署的版本v1v2

一次全部:同时将所有v1 替换为v2。未处理失败。 Canary:部署并观察到v2。如果成功,将立即部署所有剩余的 v2 实例。 滚动:将v1 实例替换为v2 实例,一次一个。注意失败。 批量滚动:创建一些新的v2 实例。如果成功,则在 v1 实例上推出。当所有都是 v2 实例时,缩小到原始大小。 不可变:不要更改v1 实例。创建相同数量的v2 实例。等待成功,然后停止 v1 实例。 蓝/绿:不是在就地环境中操作,而是创建一个完全配置有 v2 的新环境(网络等),并在准备好时切换。

【讨论】:

以上是关于AWS 中滚动、滚动附加批处理和不可变部署之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

粘性导航栏可变大小更改滚动位置

为啥AWS弹性beantalk滚动版本更新仍然有503s的2分钟停机时间?

如何在不将 onscroll 处理程序附加到每个容器的情况下捕获页面上的所有滚动事件

数据表问题和不需要的水平滚动条

UITableView 不能向下滚动。键盘同时显示和不显示

可变对象和不可变对象之间的区别[重复]