39

我对整个 Serverless 环境还是很陌生,我正在努力思考何时使用 Fargate 与 Lambda。

我知道 Fargate 是 ECS 的无服务器子集,而 Lambda 也是无服务器的,但由事件驱动。但我希望能够向其他熟悉容器但不太了解 AWS 和无服务器的人解释这两种范式。

目前我们有几个物理服务器负责接收文本文件,解析它们,并用结果填充几个数据库表。根据我的理解,我认为这将是一个更适合 Lambda 的用例,因为解析文本文件的过程是由计划触发的,运行时间不长,并且在不使用时会下降。

但是,如果我们要移植到我们的一台接收 API 调用的服务器上,我们可能希望使用 Fargate,因为我们总是需要至少一个映像实例启动并运行。

就容器而言,笼统地说,如果容器的设计目的是:

docker run <some_input>

然后这是 Lambda 的工作。

但是,如果容器被设计为执行以下操作:

docker run --expose 80

然后这是 Fargate 的工作。

这是一个很好的类比吗?

4

4 回答 4

24

这是一个很好的类比的开始。但是 Lambda 在可用 CPU 和 RAM 方面也有限制,每次调用的最大运行时间为 15 分钟。因此,任何需要更多资源或需要运行超过 15 分钟的东西都更适合 Fargate。

此外,我不确定您为什么说某些东西更适合 Fargate,因为您“总是需要至少一个运行的实例”。Lambda+API Gateway 非常适合 API 调用。API Gateway 始终准备好接收 API 调用,然后它将调用 Lambda 函数来处理它(如果尚未缓存响应)。

于 2018-09-11T13:16:28.777 回答
18

请务必注意,使用 Lambda,您无需构建、保护或维护容器。您只需要担心代码。现在如前所述,Lambda 有一个最大运行时间限制和 3GB 内存限制(CPU 按比例增加)。此外,如果偶尔使用它,可能需要预热(按计划调用)以获得额外性能。

Fargate 管理您需要定义、维护和保护的 docker 容器。如果您需要对运行代码的环境中可用的内容进行更多控制,您可能会使用容器(或服务器),但这又与管理有关。您还有更多关于内存/CPU 大小和运行时间长度的选项。

即使对于您提到的 API 服务器,您也可以将 API 网关放在前面并调用 Lambda。

于 2018-09-11T20:16:35.720 回答
4

正如 Mark 已经提到的,您可以使用 Lambda + API Gateway 将您的 lambda 函数公开为 API。但是 lambda 在函数执行方面有很大的局限性。支持的编程语言、内存消耗和执行时间都有限制(最近从之前的 5 分钟增加到 15 分钟)。这就是 AWS Fargate 可以通过提供容器世界和无服务器 (FaaS) 世界的优势来提供帮助的地方。在这里,您只需担心容器(其 CPU、内存要求、IAM 策略......),其余的则通过选择 Fargate 启动类型留给 Amazon ECS。ECS 将选择正确的实例类型,管理您的集群,它是自动扩展的,最佳利用率。

于 2018-12-05T21:19:50.653 回答
2

这是正确的类比,但它并不是能够解释这两种范式的详尽清单。

一般来说,Lambda 更适合无服务器应用程序。它的本质是功能即服务(FaaS)。它只是完成简单的任务,仅此而已。不要期望太多。

它应该被视为无服务器模块的首选。但它有更多的限制和限制。模块架构从功能性和非功能性需求、围绕基础设施和许多其他因素进行阐述。

为了做出最低限度的决定,您必须查看限制列表,例如:

  1. 可移植性
  2. 环境控制
  3. 触发类型
  4. 响应时间
  5. 响应大小
  6. 处理时间
  7. 内存使用情况

这些是主要因素。但该列表并未涵盖这两种无服务器技术之间要考虑的所有因素和限制。

要了解更多关于我推荐这篇文章https://greenm.io/aws-lambda-or-aws-fargate/

于 2019-08-28T13:40:17.533 回答