利用 AWS Spot 实例与 ECS 自动扩展,将生产环境服务器成本降低三分之二
我们的后端系统建立在 AWS(亚马逊云平台)之上。本文将详细介绍我们如何通过在生产环境中使用 Spot 实例,将服务器成本降低至原来的三分之一。此外,还将指导您如何配置自动扩展功能。文章分为两个部分:首先是工作原理的概述,其次是具体的操作步骤。
什么是 AWS Spot 实例?
AWS Spot 实例是一种可以显著降低计算成本的云服务实例类型。由于其价格波动较大,长期以来我们主要在开发(DEV)环境中使用它,或者用于将中间结果保存到 S3 或数据库的计算任务,而非生产(PROD)环境。虽然市场上有第三方解决方案可以在生产环境中使用 Spot 实例,但由于我们业务场景的特殊性,存在诸多限制,因此未采用这些方案。
本文介绍的方法完全基于 AWS 的标准功能,无需额外的脚本或定时任务。以下是一些 Spot 实例的定价历史截图,展示了其成本节省的潜力。
m5.large实例(爱尔兰区域,eu-west-1)
价格在三个月内基本稳定,节省成本约为 2.9 倍。

m5.large实例(美国东部区域,us-east-1)
价格波动较大,节省成本在 2.3 倍至 2.8 倍之间,具体取决于可用区。

t3.small实例(美国东部区域,us-east-1)
价格稳定,节省成本约为 3.4 倍。

服务架构
以下是本文讨论的服务架构示意图:

应用程序负载均衡器(ALB)→ EC2 目标组(TG)→ 弹性容器服务(ECS)
- 应用程序负载均衡器(ALB):作为流量分发器,将请求发送到 EC2 目标组。
- EC2 目标组(TG):负责在 ALB 实例上打开端口,并将其连接到 ECS 容器端口。
- 弹性容器服务(ECS):AWS 提供的容器编排服务,类似于 Kubernetes,用于管理 Docker 容器。
在 ECS 中,一个实例可以运行多个功能容器,这些容器可能使用相同的端口。因此,ECS 会动态分配端口,并通过 TG 监控健康状况。如果发现问题,TG 会停止将请求发送到有故障的实例。
EC2 自动扩展组(ASG)+ ECS 容量提供商(CP)
ASG 负责根据负载自动调整 EC2 实例的数量。然而,直到最近,AWS 并未提供内置功能来管理 ECS 所需的实例数量。ECS 容量提供商(CP)的引入解决了这一问题:
- ECS 服务可以与 ASG 关联。
- 当任务需要更多实例时,ASG 会启动新实例。
- 当实例处于空闲状态时,ASG 会关闭多余的实例。
- ECS CP 允许设置目标容量百分比,以确保始终有一定数量的实例可供快速扩展使用。
EC2 启动模板
EC2 启动模板简化了实例的创建过程,避免了重复配置。以下是关键配置参数:
- ECS_ENABLE_SPOT_INSTANCE_DRAINING=true:当 Spot 实例即将被回收时,ECS 会将其任务切换到“排空”状态,不再分配新任务。
- ECS_CONTAINER_STOP_TIMEOUT:设置任务停止的超时时间,默认 30 秒,可根据需求调整。
- ECS_CLUSTER:指定实例所属的 ECS 集群。
创建服务
以下是创建服务的具体步骤:
1. 创建 EC2 启动模板
- 亚马逊机器映像(AMI):推荐使用 ECS 优化的 AMI。
- 实例类型:根据任务需求选择合适的实例类型。
- 网络设置:配置虚拟私有云(VPC)和安全组。
- 用户数据:配置 ECS 代理参数,例如
ECS_ENABLE_SPOT_INSTANCE_DRAINING。
2. 配置 EC2 自动扩展组(ASG)
- 启动模板:选择之前创建的模板。
- 购买选项:设置按需实例与 Spot 实例的比例,例如 20% 按需,80% Spot。
- 组大小:定义实例的最小和最大数量。
- 扩展策略:基于 ECS 任务数量自动扩展实例。
3. 配置应用程序负载均衡器(ALB)和目标组(TG)
- 侦听器:配置 HTTP(80)和 HTTPS(443)端口。
- 目标组:设置健康检查参数,确保实例的可用性。
4. 创建 ECS 任务定义
- 容器定义:配置内存限制、端口映射、环境变量等。
- 日志记录:将日志输出到 AWS CloudWatch。
5. 创建 ECS 集群和容量提供商
- 集群:创建空集群,并与启动模板中的 ECS_CLUSTER 名称保持一致。
- 容量提供商:关联 ASG,并设置目标容量百分比。
6. 配置 ECS 服务
- 任务定义:选择之前创建的任务定义。
- 扩展配置:设置任务的最小健康百分比和最大百分比,确保部署过程中服务的可用性。
总结
通过本文的方法,您可以利用 AWS Spot 实例显著降低服务器成本,同时通过自动扩展功能确保服务的高可用性。无论是配置 EC2 启动模板、自动扩展组,还是设置 ECS 服务和容量提供商,所有步骤均基于 AWS 的标准功能,无需额外工具支持。希望本文能为您的系统优化提供实用参考。
原文链接: https://adapty.io/blog/designing-scalable-api-on-aws-spot-instance/
最新文章
- 十大企业级 API 管理工具全景指南
- Meta×Google 云计算协议:2025 多云/混合云 API 极速落地 AI 出海成本降 40%
- Kimi Chat API入门指南:从注册到实现智能对话
- 5种最佳API认证方法,显著提升…
- API接口重试的8种方法
- AI 推理(Reasoning AI)优势:超越生成模型的架构、算法与实践指南
- 如何使用 DeepSeek 构建 AI Agent:终极指南
- AI 智能体 ReAct 架构设计模式剖析
- 深入解析谷歌翻译API:基于Gemini的规模化高质量翻译与创新应用
- 面向开发者的5个开源大型语言模型API
- 如何使用Python创建API – Ander Fernández Jauregui
- API 集成成本全景解析:从 2 千到 15 万美元的隐藏账单与 ROI 攻略