关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。
Fargate 和 Lambda 是 AWS 生态系统中可用的两个流行的无服务器计算选项。该博客旨在更深入地了解这场战斗。
Fargate 与 Lambda 最近成为无服务器领域的热门话题。Fargate 和 Lambda 是 AWS 生态系统中可用的两个流行的无服务器计算选项。虽然这两种工具都提供无服务器计算,但它们在用例、操作边界、运行时资源分配、价格和性能方面有所不同。该博客旨在更深入地了解 Fargate 与 Lambda 之争。
什么是 AWS Fargate?
AWS Fargate 是 Amazon 提供的无服务器计算引擎,使您能够高效地管理容器,而无需预置服务器和底层基础设施。当集群容量管理、基础设施管理、修补和配置资源任务被删除时,您最终可以专注于交付更快、质量更好的应用程序。AWS Fargate 与Amazon Elastic Container Service (ECS) 和 Amazon Elastic Kubernetes Service (EKS)配合使用,支持一系列容器用例,例如机器学习应用程序、微服务架构应用程序、本地应用程序迁移到云以及批处理任务.
没有 AWS Fargate
- 开发人员构建容器镜像
- 定义 EC2 实例并部署它们
- 配置内存和计算资源并管理它们
- 创建单独的 VM 以隔离应用程序
- 运行和管理应用程序
- 运行和管理基础设施
- 支付 EC2 实例使用费
何时实施 AWS Fargate
- 开发人员构建容器镜像
- 定义计算和内存资源
- 运行和管理应用程序
- 支付计算资源使用费
在 Fargate 与 Lambda 的对比中,Fargate 是 AWS 中的无服务器计算选项,当您已经为您的应用程序拥有容器并且只是想更轻松、更快速地编排它们时使用。它与 Elastic Kubernetes Service (EKS) 以及 Elastic Container Service (ECS) 配合使用。
EKS 和 ECS 有两种类型的计算选项:
1. EC2 类型:使用此选项,您需要处理配置实例/服务器的复杂性。对于没有经验的用户来说,这可能是一个挑战。您必须在 ECS 或 EKS 配置的帮助下设置 EC2 实例并将容器放入服务器中。
2. Fargate 类型:此选项可让您减轻服务器管理负担,同时轻松更新和增加运行 Fargate 所需的配置限制。
什么是无服务器?
在深入研究 Lambda 与 Fargate 或 Fargate 与 Lambda 的无服务器计算之争之前,首先对无服务器概念有一个基本的了解很重要。无服务器计算是一种使开发人员无需配置服务器基础设施即可运行应用程序的技术。云提供商将按需提供后端基础设施,并根据即用即付模式向您收费。
“无服务器”一词可能会误导某些人。事实上,值得注意的是,无服务器技术并不意味着没有服务器。相反,云提供商将使用该技术管理服务器基础架构,从而使开发人员可以将精力集中在应用程序的前端代码和逻辑上。资源在代码执行函数时旋转,并在函数停止时终止。计费是基于资源的执行时间的持续时间。因此,运营成本得到了优化,因为您无需为闲置资源付费。
借助无服务器技术,您可以告别容量规划、管理负担和维护。此外,您可以零成本享受高可用性和灾难恢复。自动缩放到零也是可用的。最终资源利用率为100%,计费精细化,以100毫秒为单位。
什么是 AWS Lambda?
AWS Lambda 是一种事件驱动的无服务器计算服务。Lambda 运行预定义代码以响应事件或操作,使开发人员能够执行无服务器计算。这个跨平台由亚马逊开发,2014年首次发布,支持C#、Python、Java、Ruby、Go、Node.js等主流编程语言。它还支持自定义运行时。Lambda 的一些流行用例包括更新 DynamoDB 表、将数据上传到 S3 存储桶以及运行事件以响应 IoT 传感器数据。定价基于使用的毫秒数,四舍五入到最接近的毫秒数。此外,Lambda 允许您通过 ECR 管理最大 50 GB 的 Docker 容器。
当您比较 Fargate 与 Lambda 时,Fargate 适用于运行数天、数周或数年的容器化应用程序。Lambda 专门设计用于处理应用程序的一小部分,例如函数。例如,可以使用 Lambda 执行一个每 6 小时清除一次缓存并持续 30 秒的函数。
典型的 AWS Lambda 架构
AWS Lambda 是一种功能即服务 (FaaS),可帮助开发人员构建事件驱动的应用程序。在应用程序的计算层中,Lambda 触发 AWS 事件。
Lambda 架构的三个核心组件是什么?
1) 函数:函数是开发人员为执行任务而编写的一段代码。该代码还包含函数运行时环境的详细信息。运行时环境基于 Amazon Linux AMI,包含所有必需的库和包。容量和维护由 AWS 处理。
A。 代码包:包含代码运行所需的二进制文件和资产的打包代码。压缩版本的最大大小为 250 MB 或 50 MB。
b. 处理程序:调用函数的起点,该函数根据事件对象提供的参数运行任务。
C。 事件对象:提供给处理程序以执行操作逻辑的参数。
d. 上下文对象:促进功能代码和执行环境之间的交互。可用于上下文对象的数据包括:
我。AWS 请求 ID
二. 函数超时剩余时间
三. 将语句记录到 CloudWatch
2) 配置:指定功能如何执行的规则。
A。 IAM 角色:为函数分配与 AWS 服务交互的权限。
b. 网络配置:指定在 VPC 内部或 VPC 外部运行函数的规则。
C。 版本:将功能恢复到以前的版本。
d. Memory Dial:控制功能的资源分配。
e. 环境变量:在运行时注入代码的值。
F。 超时:函数运行的时间。
3) 事件源:触发函数的事件。
A。 推送模型:通过 S3 对象、API 网关和 Amazon Alexa 触发的功能。
b. 拉取模型:Lambda 从 DynamoDB 或 Kinesis 中拉取事件。
典型的 AWS Fargate 架构
AWS Fargate 架构的四个核心组件是什么?
1) 任务定义:一个 JSON 文件,描述至少一个应用程序容器的定义。
2) 任务:集群级别任务定义的实例化。
3) 集群:在 Amazon ECS 中按逻辑分组的任务或服务。
4) Service : 根据任务定义在 Amazon ECS 集群中运行任务的进程。
Fargate 与 Lambda:性能
就 AWS Fargate 与 Lambda 辩论中的性能而言,AWS Fargate 是赢家,因为它在专用资源上运行。Lambda 在分配计算和内存资源方面有一定的局限性。AWS 根据选定的 RAM 量分配相应的 CPU 资源,这意味着用户无法自定义 CPU 资源。此外,Lambda 函数的最大可用内存为 10 GB,而 Fargate 允许 120 GB 的内存。此外,Fargate 允许您选择最多 16 个 vCPU 资源。另一个值得注意的问题是 Lambda 函数每次调用的运行时间仅为 15 分钟。另一方面,在没有运行时限制的情况下,Fargate 环境始终处于温暖状态。
Fargate 功能必须打包到容器中,将加载时间增加到 60 秒左右。与可在 5 秒内启动的 Lambda 函数相比,这是一个非常长的时间。Fargate 允许您使用 ECS RunTask API 每秒启动 20 个任务。此外,您可以使用 ECS Service Scheduler 在 120 秒内为每个服务启动 500 个任务。也就是说,在意外峰值请求和健康监控期间扩展环境往往会导致启动时间有点延迟。
Lambda 冷启动
当 Lambda 收到执行任务的请求时,它首先从 S3 存储桶下载代码,并根据预定义的内存及其相应的计算资源创建执行环境。如果有任何初始化代码,Lambda 会在环境外运行它,然后运行处理程序代码。下载代码和准备执行环境所需的时间计为冷启动时长。执行代码后,Lambda 会冻结环境,以便再次调用相同的函数时可以快速运行。如果您同时运行该函数,则每次调用都会冷启动。如果代码更新,也会有一个代码启动。冷启动的典型时间介于 100 毫秒和 1 秒之间。鉴于上述情况,Lambda 在冷启动方面的 Lambda 与 Fargate 竞赛中表现不佳。
运行时选择也会对 Lambda 冷启动产生影响。例如,Java运行时涉及多个资源来运行JVM环境,这会延迟启动。另一方面,C# 或 Node.js 运行时环境提供较低的延迟。
Fargate 冷启动
Fargate 需要时间来配置资源并启动任务。一旦环境启动并运行,容器就会获得专用资源并按定义运行代码。
Fargate 与 Lambda:支持
AWS Fargate 作为无服务器计算架构的操作层来管理基于 Docker 的 ECS 或基于 Kubernetes 的 EKS 环境。对于 ECS,您可以使用 JSON 在文本文件中定义容器任务。也支持其他运行时环境。Fargate 提供比 Lambda 更多的容量部署控制,因为 Lambda 限制为 10GB 的空间和 10GB 的容器映像包大小,以及 250MB 的部署到 S3 存储桶。
Lambda 支持所有主要的编程语言,例如 Python、Go、Ruby、PHP、C#、Node.js 和 Java,以及代码编译工具,例如 Maven 和 Gradle。也就是说,Lambda 仅支持基于 Linux 的容器映像。
借助 Fargate,您可以使用 Docker Compose 在本地开发 Docker 容器镜像并在 Fargate 中运行它们,而无需担心兼容性问题。由于开发和架构独立于 Fargate,因此它在这一特定类别中的表现优于 Lambda。
当对容器环境的更多控制是关键要求时,AWS Fargate 绝对是正确的选择。
Fargate 与 Lambda:成本
在比较 Fargate 与 Lambda 的成本时,请务必注意这两种工具的用途不同。Lambda 是一种功能即服务,而 Fargate 是一种用于基于容器的工作负载的无服务器计算工具。
Lambda 成本以毫秒计费。AWS Lambda 每 100 万个请求收取 0.20 美元,对于前 60 亿 GB 秒/月,每 GB 秒持续时间 0.0000166667 美元。持续时间成本因分配的内存而异。例如,128 MB 内存每毫秒花费 0.0000000021 美元,10 GB 内存每毫秒花费 0.0000001667 美元。
例如,考虑具有 6 个 vCPU 和并发性的 10 GB 内存,它始终处于运行状态。上述各项的每月费用为 432.50 美元。如果并发为二,则价格翻倍。如果环境运行半天,价格将除以二。如果它每天运行 10 分钟,则成本为每月 9.10 美元。
如果您在 Fargate 中考虑相同的配置,价格会大大降低。
- Fargate 按每个 vCPU 每小时 0.04048 美元(每月 29.145 美元)的固定费率收费
- 每小时每 GB 0.004445 美元(每月 3.20 美元)
因此,具有 6 个 vCPU 的 10 GB 内存连续运行一个月并发一个将花费 206.87 美元。此外,Fargate 将 CPU 与内存分开,允许您选择合适大小的配置。因此,您可以根据需要通过减少 CPU 来节省成本。当您考虑 10 的并发时,差异呈指数增长。Fargate 的另一个优势是现货定价,可额外节省 30%。
请注意,当空闲时间较长时,Lambda 成本低于 Fargate。综上所述,我们可以得出结论,Lambda 更适合长时间空闲的工作负载。如果资源闲置时间为四分之一或更少,Lambda 是具有成本效益的。Lambda 是快速扩展或将安全性与应用程序代码隔离的最佳选择。相比之下,Fargate 适合具有最少空闲工作负载的云环境。我们认为最好的选择是实施基础架构即代码 (IaC)并从 Lambda 开始。当工作负载增加时,您可以无缝切换到 Fargate。
Fargate 与 Lambda:易于工作
Lambda 易于设置和操作,因为与 Fargate 相比,需要调整的旋钮最少。更多的抽象意味着更少的操作负担。但是,这也意味着灵活性有限。Lambda 带有丰富的生态系统,可提供完全自动化的管理。您可以使用管理控制台或API来同步或异步调用和控制功能,包括并发。运行时支持一组通用的功能,并允许您在不同的框架和语言之间切换。
就操作负担而言,与 EC2 相比,Lambda 更容易。Fargate 在这一类别中介于 Lambda 和 EC2 之间,更接近于 Lambda。也就是说,EC2 在配置和操作环境方面提供了更大的灵活性,其次是 Fargate 和 Lambda。
Fargate 与 Lambda:社区
AWS Fargate 和 Lambda 都是 AWS 无服务器生态系统的一部分。因此,这两种工具都享有相同级别的社区支持。这两种服务都为新用户和高级用户提供充分的支持,从文档和操作指南到教程和常见问题解答。
Fargate 与 Lambda:与云无关
每个云供应商以不同方式管理无服务器环境。例如,为 AWS 编写的 C# 函数将无法在谷歌云上运行。鉴于上述情况,如果涉及多云和混合云架构,开发人员需要考虑与云无关的问题。在不同的云供应商之间移动涉及相当大的费用和运营影响。因此,供应商锁定是无服务器功能的一大挑战。为了克服这个问题,我们建议使用 Serverless Inc 提供的开源无服务器框架。
此外,实施六边形架构是一个好主意,因为它允许您在不同的无服务器云环境之间移动代码。
Fargate 与 Lambda:可扩展性
就 Lambda 与 Fargate 的可扩展性而言,Lambda 被称为当今市场上可用的最佳扩展技术之一。快速缩放和缩放至零是 Lambda 的两个关键优势。该工具可立即从零扩展到数千,并从 1000 缩小到 0,使其成为低工作负载、测试环境和具有意外流量峰值的工作负载的理想选择。就 Fargate 而言,容器扩展取决于调整底层集群的大小。此外,它本身不会缩小到零。因此,您必须在工作时间以外关闭 Fargate 任务以节省运营成本。在维护方面,配置自动缩放和更新基础容器镜像等任务会增加。
Fargate 与 Lambda:安全性
作为 AWS 生态系统的一部分,Lambda 和 Fargate 本质上是安全的。您可以使用 AWS Identity and Access Management (IAM) 服务保护环境。同样,这两种工具都抽象出底层基础设施,这意味着基础设施的安全性由其他服务管理。这两个工具的区别在于 IAM 配置。Lambda 允许您为每个功能或服务自定义 IAM 角色,而 Fargate 则自定义每个容器和 Pod。Fargate 任务在隔离的计算环境中运行,其中 CPU 或内存不与其他任务共享。同样,Lambda 函数在专用的执行环境中运行。此外,与 Lambda 相比,Fargate 提供了对环境的更多控制和更安全的接触点。
何时使用 Fargate 或 Lambda?
AWS Lambda 用例:
- 运营无服务器网站
- 大规模扩展操作
- 实时处理大量数据
- 预测页面呈现
- 每个任务和数据备份的计划事件
- 解析用户输入并清理后端数据以增加网站的快速响应时间
- 按需分析日志数据
- 与外部服务集成
- 按需将文档转换为用户请求的格式
现实生活中的 Lambda 用例
无服务器网站:喧嚣
Lambda 的最佳用例之一是运行无服务器网站。通过在 S3 存储桶上托管前端应用程序并使用CloudFront内容交付,组织可以管理静态网站并利用 Lambda 定价模型。
Bustle是一个面向女性的新闻、娱乐和时尚网站。该公司在扩展其应用程序时遇到了困难。此外,服务器管理、监控和自动化正成为一项重要的管理负担。因此,该公司决定迁移到 AWS Lambda with API Gateway 和 Amazon Kinesis 来运行无服务器网站。现在,公司不必担心扩展问题,其开发人员可以以极低的成本部署代码。
具有空闲时间的工作负载的事件驱动模型:汤森路透
管理大部分时间处于空闲状态的工作负载的公司可以从 Lambda 无服务器功能中受益。一个著名的例子是Thomson Reuters,它是世界上最值得信赖的新闻机构之一。该公司希望构建自己的分析引擎。从事该项目的小团队希望减轻管理负担。同时,该工具需要在突发新闻期间进行弹性扩展。路透社选择了 Lambda。该工具从 Amazon Kinesis 接收数据并自动将此数据加载到 S3 存储桶中的主数据集中。Lambda 由与 Kinesis 和 S3 的数据集成触发。因此,路透社以尽可能低的成本享有高可扩展性。
高度可扩展的实时处理环境:Realtor.com
AWS Lambda 使组织能够扩展资源,同时即时且经济高效地实时处理任务。Realtor.com是房地产市场的领导者。进入数字世界后,该公司的流量开始呈指数级增长。此外,该公司需要一种解决方案来实时更新广告列表。
Realtor.com 选择 AWS 用于其云运营。该公司使用 Amazon Kinesis Data Streams 来收集和流式传输广告印象。内部计费系统使用 Amazon Kinesis Firehose 使用此数据,并将聚合数据发送到 Amazon Redshift 数据仓库进行分析。该应用程序使用 AWS Lambda 读取 Kinesis Data Streams 并处理每个事件。Realtor.com 现在能够经济高效地大规模扩展运营,同时实时更改广告列表。
AWS Fargate 使用案例
AWS Fargate 是管理基于容器的工作负载且空闲时间最短的最佳选择。
- 使用容器构建、运行和管理 API、微服务和应用程序,享受速度和不变性
- 高度可扩展的基于容器的数据处理工作负载
- 迁移在 EC2 实例上运行的遗留应用程序,无需重构或重新架构它们
- 构建和管理高度可扩展的 AI 和 ML 开发环境
现实生活中的用例
三星
三星是电子产品领域的领导者。该公司运营着一个名为“Samsung Developers”的在线门户网站,其中包括用于物联网 (IoT) 的 SmartThings 门户网站、用于基于语音的移动服务控制的 Bixby 门户网站以及用于移动消息传递的 Rich Communication Services (RCS)。该公司使用 Amazon ECS 来管理在线门户。在 re: Invent 2017 活动之后,三星受到启发实施 Fargate 以提高运营效率。迁移到 AWS Fargate 后,公司不再需要专门的操作员和管理员来管理门户网站的 Web 服务。
现在,地理位置分散的团队只需创建新的容器镜像,上传到 ECR 并转移到 Fargate 上的测试环境。因此,开发人员可以更专注于代码和频繁部署,管理员可以更专注于性能和安全性。计算成本降低了 44.5%。
Quola Insurtech Startup
Quola 是一家位于雅加达的保险科技初创公司。该公司开发了使用人工智能和机器学习算法自动处理索赔的软件,以消除手动物理审查。Quola 选择 AWS 云和 Fargate 来运行和管理基于容器的工作负载。Amazon Simple Queue Service (SQS) 用于消息队列服务。借助 Fargate,Quola 能够无缝扩展应用程序。当一个新的合作伙伴加入网络时,数据交易量在一天内从 10,000 增加到 100,000。尽管如此,该应用程序能够在不影响性能的情况下立即扩展。
先锋金融服务
Vanguard 是美国领先的金融服务提供商。该公司于 2015 年将其本地运营转移到 AWS 云,现在管理着 1000 个在微服务架构上运行的应用程序。由于安全性是金融行业的关键要求,Vanguard 在 Fargate 的安全环境中运营。借助 Fargate,该公司可以为其容器提供无缝计算能力,并将成本降低 50%。
迁移到无服务器架构时的注意事项
受到无服务器架构惊人优势的启发,许多企业都在积极拥抱无服务器计算模型。以下是将整体应用程序和遗留应用程序迁移到无服务器架构的步骤。
a) 从单体到微服务:大多数遗留应用程序都是使用单体架构构建的。在这种情况下,第一步是将大型服务分解为更小的模块化微服务,然后每个微服务将执行特定的任务或功能。
b) 将每个微服务实现为 REST API: 下一步是确定最适合这些微服务的服务。将每个微服务实现为 REST API,并将 API 端点作为资源。Amazon API Gateway 是一项完全托管的服务,可以为您提供帮助。
c) 实施无服务器计算引擎: 实施无服务器计算引擎,例如 Lambda 或 Fargate,并将业务逻辑移至无服务器工具,以便 AWS 在每次调用函数时提供资源。
d) 交错部署策略: 将微服务迁移到无服务器架构可以在交错过程中完成。确定正确的服务,然后构建、测试和部署它们。继续这个过程,将整个应用程序平滑无缝地迁移到新架构。
迁移到 Amazon Lambda 的注意事项
将遗留应用程序迁移到 Lambda 并不困难。如果您的应用程序是使用任何 Lambda 支持的语言编写的,您只需重构代码并将应用程序迁移到 Lambda。您只需要进行一些根本性的更改,例如将对本地存储的依赖更改为 S3 或更新身份验证模块。在考虑 Fargate 与 Lambda 安全性时,Lambda 需要保护的接触点比 Fargate 少。
如果您使用的是 Java 运行时,请记住,运行时环境和资源的大小可能会导致比 Node.js 或 C# 更多的冷启动。另一个需要考虑的关键点是内存分配。目前,Lambda 的最大内存分配为 3 GB。如果您的应用程序需要更多的计算和内存资源,Fargate 是更好的选择。
迁移到 AWS Fargate 的注意事项
在 AWS 管理资源配置的同时,客户仍然需要处理网络安全任务。例如,创建任务时,AWS 在 VPC 中创建弹性网络接口 (ENI),并自动将每个任务 ENI 附加到其对应的子网。因此,管理 ENI 与其接触点之间的连接是客户的唯一责任。更具体地说,您需要管理 ENI 对 AWS EC2、CloudWatch、在本地或其他区域运行的应用程序、Egress、Ingress 等的访问。此外,必须仔细管理审计和合规性方面,这就是为什么 Fargate 不是首选的原因受监管的环境。
结论
随着基于容器的系统和无服务器系统之间的差距日益缩小,Fargate 与 Lambda 之争变得越来越有趣。在决定哪种服务最好时没有灵丹妙药。随着将 Lambda 函数部署为 Docker 容器映像的新功能,越来越多的组织似乎倾向于使用 Lambda。另一方面,需要对容器运行时环境进行更多控制的组织坚持使用 Fargate。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.