第007题 - sap
NGC 7635:气泡星云
题目翻译 (Question Translation)
English: A company is running a traditional web application on Amazon EC2 instances. The company needs to refactor the application as microservices that run on containers. Separate versions of the application exist in two distinct environments: production and testing. Load for the application is variable, but the minimum load and the maximum load are known. A solutions architect needs to design the updated application with a serverless architecture that minimizes operational complexity.
Which solution will meet these requirements MOST cost-effectively?
中文翻译: 一家公司正在 Amazon EC2 实例上运行一个传统的 Web 应用程序。公司需要将该应用程序重新构建为基于容器运行的微服务。该应用程序在两个独立的环境中存在不同的版本:生产环境和测试环境。应用程序的负载是可变的,但已知其最小负载和最大负载。解决方案架构师需要设计更新的应用程序,采用无服务器架构,并尽可能降低操作复杂性。
以下哪种解决方案最具成本效益且满足这些要求?
选项分析 (Answer Analysis)
选项 A
Upload the container images to AWS Lambda as functions. Configure a concurrency limit for the associated Lambda functions to handle the expected peak load. Configure two separate Lambda integrations within Amazon API Gateway: one for production and one for testing.
分析:
- Lambda 的支持性: 从 2020 年开始,AWS Lambda 支持基于容器的运行时。开发者可以将容器镜像上传到 Amazon Elastic Container Registry (ECR),然后作为 Lambda 函数运行。
- 无服务器架构: Lambda 是完全无服务器的,无需管理底层基础设施,符合“最小化操作复杂性”的要求。
- 成本效益: 按需计费(基于请求数和函数执行时间),非常适合负载波动大的场景。
- 多环境支持: 使用 API Gateway 的两个集成(生产和测试)可以有效隔离环境。 此选项非常适合需求,且具有最高的成本效益。
选项 B
Upload the container images to Amazon Elastic Container Registry (Amazon ECR). Configure two auto scaled Amazon Elastic Container Service (Amazon ECS) clusters with the Fargate launch type to handle the expected load. Deploy tasks from the ECR images. Configure two separate Application Load Balancers to direct traffic to the ECS clusters.
分析:
- ECS Fargate 的特点: Fargate 是无服务器的容器运行时,无需管理底层 EC2 实例。然而,ECS 仍需进行额外的配置(如任务定义、ALB 配置),操作复杂性较高。
- 成本效益: Fargate 按计算和内存使用量计费,较 Lambda 略贵,尤其在小负载情况下。
- 多环境支持: 需要为生产和测试分别部署两个 ECS 集群和两个负载均衡器,这会增加配置和成本。 此选项操作复杂性高,成本效益较低。
选项 C
Upload the container images to Amazon Elastic Container Registry (Amazon ECR). Configure two auto scaled Amazon Elastic Kubernetes Service (Amazon EKS) clusters with the Fargate launch type to handle the expected load. Deploy tasks from the ECR images. Configure two separate Application Load Balancers to direct traffic to the EKS clusters.
分析:
- EKS 的特点: Amazon EKS 是完全托管的 Kubernetes 服务,提供灵活的容器编排功能。然而,EKS 的复杂性高,尤其是需要管理 Kubernetes 控制平面和相关的 Fargate 配置。
- 成本效益: 与 ECS 类似,但 Kubernetes 的开销更大(例如控制平面每月收费)。
- 多环境支持: 需要分别为生产和测试创建两个 EKS 集群,并额外配置 ALB,进一步增加复杂性和成本。 此选项操作复杂性高,成本效益最差。
选项 D
Upload the container images to AWS Elastic Beanstalk. In Elastic Beanstalk, create separate environments and deployments for production and testing. Configure two separate Application Load Balancers to direct traffic to the Elastic Beanstalk deployments.
分析:
- Elastic Beanstalk 的特点: Elastic Beanstalk 是 AWS 的 PaaS 服务,可以快速部署容器化应用。但它本质上仍需管理负载均衡器、实例和环境,不能完全称为无服务器架构。
- 成本效益: Beanstalk 支持按需扩展,但底层 EC2 实例的成本固定,因此不如 Lambda 具有成本效益。
- 多环境支持: 需要创建两个独立的 Elastic Beanstalk 环境和 ALB,但仍然存在运维复杂性。 此选项适合特定场景,但复杂性和成本效益不如选项 A。
最佳答案 (Correct Answer)
答案:A
关键原因:
- 操作复杂性最低: Lambda 完全无服务器,支持直接运行容器镜像,不需要管理集群或负载均衡器。
- 最具成本效益: Lambda 按使用量计费,非常适合负载波动的场景,尤其是当负载较小时,避免了 ECS 或 EKS 的基础设施成本。
- 多环境分离: 使用 API Gateway 的两个 Lambda 集成可以轻松实现生产和测试环境的隔离。
详细解决方案 (Detailed Solution)
- 使用容器化的 Lambda 函数:
- 将应用程序打包为容器镜像,并上传到 Amazon ECR。
- 使用 Lambda 从 ECR 加载容器镜像,部署为无服务器函数。
- 配置两个环境:
- 使用 Amazon API Gateway 分别配置生产和测试的 Lambda 集成。
- API Gateway 提供无缝的请求路由,支持多环境隔离。
- 处理负载波动:
- 配置 Lambda 的并发限制以满足预期的峰值负载,同时利用按需扩展处理波动。
总结 (Summary)
选项 A 提供了最简单、成本最低的无服务器解决方案,完全满足题目要求,是正确的答案。