应用程序架构 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

应用程序架构

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

使用 Fargate 启动类型

使用 在 Amazon ECS 上构建应用程序以运行时AWS Fargate,主要问题是什么时候应该将多个容器放在同一个任务定义中,而不是分别在多个任务定义中部署容器。

当需要以下条件时,我们建议您在单个任务定义中部署容器:

  • 您的容器共享一个公共生命周期(即,它们一起启动和终止)。

  • 您的容器必须在同一底层主机上运行(即,一个容器在 localhost 端口上引用另一个容器)。

  • 您需要您的容器共享资源。

  • 您的容器共享数据卷。

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

使用 EC2 启动类型

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

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

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

  • 为前端服务提供的APIs后端服务

  • 数据存储

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

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

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

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

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

鉴于这些缺点,您应创建任务定义,以将用于共同目的的容器分组,并将不同的组件分成多个独立的任务定义。在本上述示例中,三个任务定义分别指定一个容器。以下示例集群(如下图所示)有三个容器实例注册到三个前端服务容器、两个后端服务容器和一个数据存储服务容器。


					应用程序架构示例

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

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