云计算在过去 10 年彻底改变了软件行业。如今,由于与本地基础设施相比易于部署、高安全性、可扩展性和低维护成本,大多数组织更喜欢在云上托管应用程序和服务。
2006 年,亚马逊推出了其云服务平台Amazon Web Services (AWS),这是迄今为止领先的云服务提供商之一。目前,AWS 提供超过 200 种云服务,包括云托管、存储、机器学习和容器管理。
AWS Elastic Container Service (ECS) 和 AWS Lambda都是 Amazon 代码部署解决方案,各有优势和用例。在本文中,我们将比较 AWS ECS 与 AWS Lambda,它们各自如何实现其功能,以及哪一个更适合您的业务需求。
什么是 AWS ECS?
AWS ECS 是一种容器管理解决方案,用于管理和部署 Docker 容器。它将每个容器视为一项任务,并为用户提供使用以下组件轻松运行、停止和管理它们的功能:
- 任务定义: 这些定义了任务的配置。如果需要,用户可以将单个定义应用于多个任务。
- 任务: 任务定义的实例称为任务。任务可以独立运行,也可以作为服务的一部分运行。简单来说,任务就是一个正在运行的容器。
- 集群: 多个正在运行的任务组成一个集群。一个集群可以在其中应用多个任务定义。
从本质上讲,容器化是一种部署技术,它使用容器将整个应用程序存储在一个映像文件中,包括代码、所有相关安装和操作系统 (OS) 要求。这些文件非常轻量级,易于部署,并为应用程序运行构建了完整的环境。开发人员使用容器来避免依赖性问题的麻烦,并使部署尽可能顺利。
现代基于微服务的应用程序使用容器进行部署。然而,管理多个容器变得具有挑战性,这意味着大多数公司选择 AWS ECS 来简化他们的容器管理需求。AWS ECS 允许开发人员使用AWS Elastic Compute Cloud ( EC2 ) 部署他们的容器,用户必须在其中维护 EC2 基础设施。
AWS ECS 和 AWS Fargate
AWS ECS 也可以通过AWS Fargate部署。 AWS Fargate 是一种新的计算引擎,可以自动创建和管理运行容器所需的底层基础设施。Fargate 只需要用户上传要部署的镜像并选择 CPU 和内存需求。易于部署使 AWS Fargate 成为使用 AWS ECS 的更好选择。
需要注意的一个关键点是 AWS ECS 解决了大规模应用程序的部署问题,但这可能并不总是您想要管理的。如果需要部署一小段代码怎么办?或者您需要使用特定触发器执行的功能?在这种情况下,您可以求助于 AWS Lambda。
什么是 AWS Lambda?
AWS Lambda 是一种计算服务,允许用户在无服务器环境中部署少量代码,在该环境中,服务器完全由云提供商在幕后管理。它原生支持 Java、Go、PowerShell、Node.js、C#、Python 和 Ruby,并提供允许用户使用任何其他编程语言的运行时 API。
AWS Lambda 中定义的函数在隔离的环境中运行,每个函数都有其独立的资源和文件系统视图。这些函数绑定到触发器,并在某些事件发生时执行。例如,您可以为图像创建预处理函数并将其存储在 AWS Lambda 上。现在,每当有图像文件上传到AWS S3 bucket时,该函数就会被触发,图像会在上传前通过算法运行。
其他 AWS Lambda 触发器包括:
- 插入、更新和删除数据 Dynamo DB 表
- 对 S3 存储桶中对象的修改
- 从 Amazon Simple Notification Service (SNS) 发送的通知。
另一个需要注意的基本点是 AWS Lambda 函数在容器中执行,这进一步有助于代码的隔离和安全。适当的运行时环境(Python、Node.js)在执行期间在容器内初始化。执行完成后,容器将暂停并仅在后续调用时恢复。如果在特定时间段内没有调用,AWS 运行时会删除容器,之后必须初始化一个新容器。
AWS ECS 与 AWS Lambda:有何区别?
这两种服务都可以帮助客户部署应用程序和代码,但它们的用例却截然不同。探索这些差异以了解两者中哪一个最适合您的要求很重要。
下表概述了 AWS ECS 与 AWS Lambda 的并排比较:
亚马逊云服务器AWS 拉姆达高性能和可扩展的容器管理服务为响应触发器而运行的功能执行服务,由无服务器环境提供支持。仅适用于容器。您需要做的就是将您的 Docker 镜像指向一个容器注册表,其余的由服务管理。只需要你写代码。目前,AWS Lambda 支持 Python、NodeJS、Java、Ruby、GO、C# 和 Powershell。用于运行 Docker 容器和部署整个企业级应用程序。用于使用几行代码构建的小型应用程序。任务可以运行很长时间,并且可以通过与 Amazon CloudWatch 警报集成来扩展任务计数。Lambda 函数执行时间限制为 15 分钟。正在运行的 EC2 集群按小时收费,这意味着它们的成本更高。AWS Fargate 的 vCPU 起价约为每小时 0.04 美元。AWS Lambda 根据对更具成本效益的函数的请求数量计费。
没有明显的赢家,因为这两种服务似乎都有利于不同的领域。但是,比较中有一些关键要点:
- AWS ECS 旨在处理大型应用程序并提供可扩展性,而 AWS Lambda 可快速执行代码以执行重要的运行时任务。
- 成本是另一个重要因素,AWS Lambda 在这方面胜出,因为您只需为运行 Lambda 函数时使用的处理能力付费。
要做出明智的决定,您首先需要探索您的业务需求。
AWS ECS 与 AWS Lambda:如何选择
在上述服务中进行选择时,以下问题可以帮助明确决定:
- 我的应用程序的大小是多少?
大型应用程序在 AWS Lambda 上将难以管理;因此,AWS ECS 是更好的选择。
- 我的应用程序的运行时间是多少?
AWS Lambda 将程序执行时间限制为 15 分钟,因此如果应用程序要运行更长时间,AWS ECS 是更好的选择。
- 我的软件开发和部署预算是多少?
这两种服务似乎都非常适合各自的场景,但 AWS Lambda 更便宜的定价结构使其比 AWS ECS 更具优势。
- 我的项目配置要求是什么?
尽管简单,AWS ECS 仍然比 AWS Lambda 有更多的设置要求,但它提供了更大的配置灵活性。相比之下,如果您希望程序以最少的配置立即执行,AWS Lambda 是更好的选择。
这些问题应该有助于在 AWS ECS 与 AWS Lambda 之间选择部署服务时做出更好的决策。
结论
如果您使用 Amazon Web Services,您目前可能至少使用了这些核心 AWS 功能中的一项。它们提供的好处有时似乎重叠。但是每项服务都有独特的功能,您可能希望在某些情况下使用这些功能,而在其他情况下则不需要那么多。
我们详细的 AWS ECS 与 AWS Lambda 比较强化了这一观点,很明显,前者适用于大型应用程序,而后者在您需要快速执行代码以执行重要的运行时任务时效果更好。