在 AWS ElasticBeanstalk 中批量部署

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

零停机部署—— 确保您的应用程序可以在不对客户产生负面影响的情况下部署——是我们大多数人所追求的目标。它是成功持续交付的先决条件,因此您可以随时进行部署,而不必担心推出新版本。

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 的体验,以及它们的批量部署和零停机部署。

相关文章