零停机部署—— 即 确保您的应用程序可以在不对客户产生负面影响的情况下部署——是我们大多数人所追求的目标。它是成功持续交付的先决条件,因此您可以随时进行部署,而不必担心推出新版本。
ElasticBeanstalk 是 AWS 的平台即服务组件,对零停机部署有很好的支持。在不久前在 Codeship 上与它构建集成后,我们看到许多团队将 Elastic Beanstalk 与 Codeship 结合使用。因此,我们想让您更深入地了解它们的功能以及上手的难易程度。
默认情况下,以下所有配置都适用于 Codeship 中的内置 Elastic Beanstalk 部署。
您可以在 我们的 ElasticBeanstalk 文档页面 中阅读更多关于我们的部署集成的信息。
Elastic Beanstalk 在去年推出了一些功能,使零停机部署变得安全和简单。通过设置批次和健康检查,您的应用程序将自动部署到正在使用的服务器子集,这样您的客户就不会看到任何负面影响。
Elastic Beanstalk 由具有包含服务器实例的环境集合的应用程序组成。要了解有关这些组件的更多信息,您可以查看它们的 介绍文档 。
批量部署配置
批量部署配置允许您批量部署到环境的服务器。因此,您始终可以拥有预定义数量的资源来满足请求,同时其余资源得到更新。通过自动健康检查,系统将确保部署成功。
如以下屏幕截图所示,您可以进行基于百分比的批量部署或定义固定批量大小。
特别是在使用自动缩放时,基于百分比的方法似乎是更好的解决方案。否则,您可能会根据环境中的服务器数量定义太大或太小的批次。
确保您有足够的容量进行部署;一些服务器将在一段时间内主动退出轮换,这会降低您的整体容量。如果在更新时从生产中删除某些实例不适合您,请尝试创建一个额外的环境并通过 交换环境上的 CNAME 进行 部署,或者在运行部署之前增加容量。
当然,这现在意味着您的应用程序的两个版本同时运行。您需要确保将 零停机时间部署 内置到您的更改中,以便您的应用程序在过渡期间为您的客户服务。
它是如何部署的
当您触发新部署时,如果您配置了连接耗尽,Elastic Beanstalk 将首先开始从与您的配置匹配的一批服务器中耗尽连接。
连接耗尽
您可以在环境配置的网络层中设置连接耗尽。设置超时以强制关闭连接(如果它们在该时间内未关闭)。默认情况下,超时时间为 20 秒;任何已启动但未在 20 秒内完成的请求都将被切断。不会向当前正在更新的那批服务器发送新请求。
一旦当前批次中的服务器集不存在打开的连接,就会部署新版本的应用程序。
部署健康检查
在实例上完成部署后,ElasticBeanstalk 检查应用程序的运行状况。如果一段时间健康检查失败,达到每台机器的部署超时,仍然会在其他服务器上继续部署。
与连接耗尽一样,这些健康检查可以在网络层中配置:
默认情况下,EB 将在您机器的端口 80 上发送 HTTP 请求,但您可以定义不同的路径甚至不同的端口/协议。运行状况检查需要返回 HTTP 状态 200。您可以在其 运行状况检查文档 中阅读有关详细信息的更多信息。
滚动配置更新 -> 运行状况更新
另一个重要的配置是滚动配置更新。虽然不是特定于部署,但这会对您的应用程序正常运行时间产生很大影响。
每当您想更改实例上的任何配置或 AWS 需要更换您环境中的服务器时,它们都会根据此配置进行。
滚动配置更新让您可以配置一次更新多少个实例,以及是否应该在更新结束时进行健康检查。您还可以进行基于时间的更新;它不会等待成功的健康检查,而是等待更新不同批次的服务器之间的特定时间。
使用的健康检查与部署期间使用的健康检查相同,并且作为基础设施的一般检查。
虽然不直接负责部署,但它绝对是一个重要的配置,您应该非常仔细地检查它,以免因服务器上的配置更新而导致停机而感到惊讶。
结论
Elastic Beanstalk 批量部署是在 AWS 上进行零停机部署的一种非常简单但功能强大的方法。因为它重用了现有的基础设施,所以速度很快,比建立新环境和切换 CNAME 快得多。
凭借所有这些功能,Elastic Beanstalk 是一项非常有趣的服务,可以在其中运行您的应用程序。它们对 Docker 容器的支持以及 与 Elastic Container Service 的集成 提供了一种在 AWS 上开始构建应用程序的绝佳方式。
您应该尝试一下,看看它让 AWS 入门变得多么容易。在评论中让我们知道您对 AWS Elastic Beanstalk 的体验,以及它们的批量部署和零停机部署。