Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

应用程序架构

如何在 Amazon ECS 上构建您的应用程序取决于几个因素,其中您使用的启动类型是一个关键因素。我们给出以下指导,按启动类型分类,这应该有助于这个过程。

使用 Fargate 启动类型

使用 Fargate 启动类型为您的任务构建应用程序时,主要问题是什么时候应该把多个容器放到同一个任务定义中,而不是分别在多个任务定义中部署容器。

在符合以下条件时,您应在同一任务定义中放置多个容器:

  • 容器共享公共生命周期 (即,它们应该一起启动和终止)

  • 容器需要在相同的底层主机上运行 (即一个容器在 localhost 端口上引用另一个容器)

  • 您希望您的容器共享资源

  • 您的容器共享卷

否则,您应该在单独的任务定义中定义您的容器,以便您可以分别对其进行扩展、预置和取消预置。

使用 EC2 启动类型

当您考虑如何使用 EC2 启动类型对任务定义和服务建模时,它可以帮助考虑哪些流程需要一起运行以及您将如何扩展每个组件。

例如,假设某个应用程序包含以下组件:

  • 一项在网页上显示信息的前端服务

  • 一项为前端服务提供 API 的后端服务

  • 数据存储

在您的开发环境中,您可能要在 Docker 主机上同时运行所有三个容器。您可能倾向于对生产环境使用同一方法,但此方法具有以下几个缺点:

  • 对一个组件的更改可能影响所有三个组件,更改的范围可能大于您所预期的范围

  • 每个组件更难以扩展,因为您必须按比例扩展每个容器

  • 任务定义只能具有 10 个容器定义,并且您的应用程序堆栈现在或将来可能需要更多容器

  • 任务定义中的每个容器必须登录同一容器实例,这可能会将您的实例选择限制为最大大小

相反,您应创建将对用于相同目的的容器进行分组的任务定义,并将不同的组件分成多个任务定义。在此示例中,三个任务定义分别指定一个容器。以下示例群集具有已注册到三个前端服务容器、两个后端服务容器和一个数据存储服务容器的三个容器实例。

 应用程序架构示例

您可以对任务定义中的相关容器(例如,必须一起运行的已链接的容器)进行分组。例如,您可以将日志流容器添加到前端服务,并将其包含在同一任务定义中。

在拥有任务定义后,您可以从这些任务定义创建服务以保持所需任务的可用性。有关更多信息,请参阅 创建服务。在您的服务中,可以将容器与 Elastic Load Balancing 负载均衡器关联。有关更多信息,请参阅 服务负载均衡。当您的应用程序要求发生更改时,您可以更新服务以增大或减小所需任务数,或者在任务中部署更新版本的容器。有关更多信息,请参阅 更新服务