比较容器和无服务器计算函数的 FinOps 指南

作者: Steph Gooch, Rugved Dighe |

在不断变化的云计算环境中,您在优化计算资源时面临一个关键决定:容器还是无服务器函数?但是,这不是一个非此即彼的命题,在某些情况下您可以两者兼而有之。有效的成本管理和运营效率的关键在于了解这两种技术在架构良好的云环境中都有其一席之地。选择取决于您的特定用例、工作负载特征和整体应用程序架构。这些因素将帮助您确定适合您需求的计算服务。

什么是容器?

在云计算中,容器是包含所有用于运行软件的应用程序文件的图像文件。它们在需要一致、可重复的环境、高效的资源利用和简化跨不同环境的部署的场景中表现出色。容器还提供对运行时环境的高度控制,这对于具有特定依赖关系或配置要求的应用程序至关重要。在这篇博客中,我们将重点介绍亚马逊弹性容器服务(Amazon ECS)。

何时使用 Amazon ECS?

Amazon ECS 的关键场景是:

  • 长时间运行的进程
  • 需要完全控制运行时和环境的应用程序
  • 流量稳定、可预测的工作负载

什么是无服务器?

无服务器架构是一种云计算方法,允许开发人员在不管理底层基础设施的情况下构建和运行应用程序。无服务器服务包括 Amazon Sagemaker Servereless 和 Amazon DynamoDB。在本博客中,我们将重点介绍使用 Amazon Lambda 函数进行无服务器计算。基于内存分配和执行时间的 Amazon Lambda 定价模型可以为动态工作负载节省大量成本。

何时使用 Amazon Lambda?

Amazon Lambda 的关键场景是:

  • 事件驱动的无状态工作负载
  • 高度可变或不可预测的流量模式
  • 运行时间短的进程(< 15 分钟)
  • 当你想最大限度地减少运营开销时

如何比较 Amazon Lambda 和 Amazon ECS?

要评估何时 Amazon Lambda 或 Amazon ECS 最适合您的工作负载,您需要查看以下四个组成部分。

1. 生命周期和负载概况

Amazon ECS

在为您的应用程序评估 Amazon ECS 时,请考虑其不间断运行的特性以及无需重启即可处理多个连续请求的能力。如果您的工作负载具有稳定、可预测的流量模式,且稳定性能至关重要,那么这种持续运行时间使 Amazon ECS 非常理想。Amazon ECS 在需要长时间运行的进程、大量内存要求或需要保持请求之间状态的场景中表现出色。但是,请做好管理扩展配置的准备,并认识到即使在空闲期间,您也需要为资源付费。当您的应用程序需要稳定的响应时间、具有稳定的流量或需要受益于持续初始化的特定运行环境时,请选择 Amazon ECS。

Amazon Lambda

要充分利用 Amazon Lambda,请评估您的工作负载是否符合按需执行模式。函数架构更适合于可变或动态的流量模式、事件驱动的处理,以及成本优化至关重要,因为您只需为实际执行时间付费。考虑潜在的冷启动对延迟敏感型应用程序的影响、执行时间限制(通常为 15 分钟或更短)以及最多 10 GB 的内存限制。如果您想最大限度地减少运营开销,需要在不进行容量规划的情况下进行自动扩展,流量模式不可预测,或者想要优化不常使用的服务的成本,而为闲置容量付费并不具有经济意义,请选择 Amazon Lambda。

2. 比较 Amazon Lambda 和 Amazon ECS 的成本

在比较 Amazon ECS 和 Amazon Lambda 的成本时,必须考虑现实的部署方案,而不是简单的一对一比较。让我们从运行五个服务的典型微服务应用程序的角度来探讨这个问题,每个服务每天处理大约 100,000 个请求。

容器部署选项和成本

使用 Amazon Elastic Compute Cloud (Amazon EC2) 上的 Amazon ECS,您可以在两个 t3.medium 实例上运行服务,每月费用约为 60 美元(每个实例每小时 0.0416 美元)。需要了解的关键是,这些实例可以高效地托管多个 Amazon ECS,通常每个 t3.medium 实例可以托管 8-12 个 Amazon ECS,具体取决于您的工作负载特征。这意味着所有五个微服务都有可能在这些实例上运行,使您的基础设施总成本达到每月 70 美元左右(包括数据传输),或所有服务的每个请求约 0.0000047 美元。亚马逊云科技成本和使用率报告 (CUR) 在 ECS 任务级别计算和分配您的共享 EC2 实例成本,因此您可以更好地将成本退还给您的业务部门。阅读本博客中的拆分成本分配数据功能,使用亚马逊云科技拆分成本分配数据提高 Amazon ECS 和 Amazon Batch 的成本可见性。

Amazon Fargate 上的 Amazon ECS 提供不同的成本模式,按 vCPU 收费(每小时 0.04048 美元)和内存(每 GB 每小时 0.004445 美元)。对于每项服务 0.5 个 vCPU 和 1GB 内存的典型配置,所有五项服务每月的费用约为 90 美元。虽然这可能看起来比 EC2 高,但请记住,Fargate 无需集群管理,提供了更精细的扩展能力。

功能成本和注意事项

在 Amazon Lambda 上运行这些相同的服务会呈现出不同的成本结构。每项服务都会产生请求费用(每百万个请求 0.20 美元),并根据内存分配和执行持续时间计算成本。以我们的示例为例,如果分配了 256MB 的内存和 500 毫秒的平均执行时间,则所有五项服务每月的费用约为 34.50 美元。但是,这些成本可以随流量线性扩展,这与成本保持相对稳定的容器部署不同。

图 1 部署选项的月度成本比较

图 1 部署选项的月度成本比较

比较函数和 Amazon ECS 成本时的注意事项

开发和测试环境为容器和功能架构的成本优化提供了独特的机会。像 Amazon ECS 这样的现代容器编排平台提供复杂的扩展功能,允许 Amazon ECS 在下班时间通过容量提供商或计划扩展扩展到零。对于一个 8 小时的工作日,两个仅在工作时间内运行的 t3.medium 实例每月的费用约为 13.31 美元,而 Fargate 仅对任务运行时收费,从而提供更精细的扩展。同样,Lambda 的按使用付费模式意味着开发工作负载的成本通常在每月 6-7 美元之间。

在实施自动化环境管理、围绕工作时间安排资源以及根据开发需求进行合理调整时,这两种方法都具有很高的性价比。在开发环境中选择 Amazon ECS 和 Amazon Lambda 通常取决于团队工作流程、测试要求和现有工具,而不仅仅是成本方面的考虑。

决策转向利用率高、稳定的生产工作负载。以高流量应用程序为例:使用亚马逊云科技储蓄计划的容器成本:每个实例每年 730 美元(1 年期承诺),与按需定价相比,最多可节省 50%。由于每次调用收费,持续高容量流量的函数成本可能会超过这些数字。对于全天候稳定高流量运行的应用程序,容器部署通常比 Amazon Lambda 更具成本效益,因为 Amazon Lambda 的每次调用成本可能超过利用率良好的 Amazon ECS 的固定基础设施成本。

3. 便携性

便携性通常可以影响决策过程。Amazon ECS 提供更高的可移植性,允许应用程序相对轻松地在云提供商之间或本地环境之间移动。对于希望保持云战略灵活性的组织或需要在多云环境中运营的组织来说,这种灵活性可能具有吸引力。Amazon Lambda 虽然与云提供商的生态系统紧密结合,但可以通过精心架构设计实现可移植性。

尽管可移植性可能是一个相关因素,但还应考虑在计算选项之间迁移的成本,因为移植到 Amazon Lambda 和从 Amazon Lambda 移植可能比移动基于容器的工作负载花费更多的工程/开发时间。

4. Amazon Lambda 和 Amazon ECS 的优化技术

在优化方面,这些计算资源有一些重叠之处。

  • 亚马逊 Graviton
    • Amazon Lambda Graviton 优化:
      Amazon Lambda 支持使用 Graviton2 处理器,与基于 x86 的实例相比,Graviton2 处理器的性价比最高可提高 10%。创建新的 Amazon Lambda 函数时,选择 "ARM64" 架构。
    • Amazon ECS Graviton 优化:
      对于在 Amazon ECS 或 Amazon EKS 上运行的容器化工作负载,您可以利用基于 Graviton2 的 Amazon EC2 实例来受益于 Graviton2 处理器性价比的提高。选择基于 Graviton2 的实例类型,例如 m6g 或 c6g 系列。
  • 内存
    • Amazon Lambda 内存优化:
      让 Amazon Lambda 任务在性能和成本之间找到优秀平衡。从所需的最小内存开始,逐渐增加内存,直到达到所需的性能,持续监控每次调用或任务执行的成本。您还可以使用亚马逊云科技提供的开源工具 Lambda Power Tune 来帮助您可视化和微调您的配置。
    • Amazon ECS 内存优化:
      通过仔细分析实际内存使用模式,优化容器的内存分配。使用 Amazon ECS Exec 等工具连接到正在运行的容器并评估内存使用率。调整容器定义中的内存限制和请求,以满足应用程序的实际需求,避免过度配置,并最大限度地减少不必要的成本。
  • 日志记录
    • Amazon Lambda 日志优化:
      使用 Lambda,日志成本会随着记录的数据量而增加。查看您的 Lambda 函数日志,找出减少不必要日志记录的机会,例如限制日志语句的数量、日志级别和每个事件记录的数据量。利用亚马逊云科技 CloudWatch Logs Insights 来分析您的日志并确定成本优化机会。
    • Amazon ECS 日志优化:
      通过配置日志驱动程序来优化您的容器日志,从而最大限度地降低成本。例如,使用 awslogs 或 jsonfile 日志驱动程序而不是默认的 docker 日志驱动程序,后者可能会更昂贵。此外,定期查看您的容器日志,删除任何不必要或多余的日志语句,以控制成本。
  • 计算储蓄计划:
    • Lambda 和 ECS 都可以利用计算储蓄计划。通过承诺在 1 年或 3 年期内保持稳定的使用水平,您可以节省资源。
  • 适用于 Amazon ECS 的竞价型实例
    • 对于在 Amazon ECS 或 Amazon EKS 上运行的容器化工作负载,您可以利用竞价型实例来节省大量成本。与按需定价相比,竞价型实例可以提供高达 90% 的折扣,但需要权衡潜在的工作负载中断。FinOps 团队应仔细分析其工作负载特征和对中断的容忍度,以确定竞价型实例的适当用途,同时平衡成本节省和运营弹性。

做出决定 Amazon ECS 与 Amazon Lambda

与其将其视为 Amazon ECS 与 Amazon Lambda,不如采用数据驱动的方法来选择正确的计算选项:

  1. 首先了解您的工作负载特征、操作要求和流量模式
  2. 试用 Amazon ECS 和 Amazon Lambda 来收集实际性能和成本数据
  3. 在对您的应用程序最有意义的地方利用每种技术的优势
  4. 愿意随着需求的变化而随着时间的推移改进您的架构

结论

归根结底,容器与无服务器函数之间的决策——或两者的实施——应基于对工作负载特征、成本影响和运营要求的透彻理解。作为 FinOps 专业人员,您应该与开发和运营团队密切合作,分析使用模式,对不同场景下的成本进行建模,并考虑开发速度、运营开销和长期可维护性等因素。通过利用容器和无服务器技术的优势,您可以构建灵活、经济实惠的云架构,以适应不断变化的业务需求,同时优化资源利用率和支出。

要了解有关亚马逊云科技上的 Amazon ECS 和函数的更多信息,请查看以下资源:

  • Amazon Fargate 容器无服务器计算
  • Amazon Lambda 无服务器计算
  • 用于容器编排的 Amazon ECS
  • 适用于托管 Kubernetes 的 Amazon EKS


斯蒂芬·古奇

Steph Gooch

Steph 是高级优化解决方案架构师倡导者。她是一位主题专家,负责指导客户如何优化其当前和未来的亚马逊云科技支出。她使客户能够组织和解释账单和使用数据,从这些数据中找出切实可行的见解,并制定可持续的战略,将成本融入他们的文化。在她之前的职业生涯中,她曾管理过四巨头之一的 FinOps 团队。

Rugved Dighe

Rugved Dighe

Rugved 是一名优化解决方案架构师,专门从事云财务管理。他帮助组织优化云支出,同时最大限度地提高业务价值。凭借在 FinOps 实践和云技术方面的专业知识,他指导公司实施有效的成本优化策略、自动化财务控制和建立可持续的云财务管理框架。Rugved 的方法将技术知识与财务洞察力相结合,帮助企业就其云投资做出数据驱动的决策。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。