EC2 Spot 的最佳实践 - Amazon Elastic Compute Cloud
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

EC2 Spot 的最佳实践

Amazon EC2 Spot 实例是 AWS 云中的备用 EC2 计算容量,与按需实例价格相比,这种实例可以为您最多节省 90% 的成本。按需实例 和 Spot 实例之间的唯一区别是,当 Amazon EC2 再次需要使用容量时,Amazon EC2 可以中断 Spot 实例 并提前两分钟发出通知。

Spot 实例建议用于无状态、容错且灵活的应用程序。例如,Spot 实例非常适合大数据、容器化工作负载、CI/CD、无状态 Web 服务器、高性能计算 (HPC) 和渲染工作负载。

在运行时,Spot 实例与按需实例完全相同。不过,Spot 不能保证您可以将运行的实例保持足够长的时间以完成工作负载。Spot 也不能保证您可以立即使用查找的实例,或者不能保证您始终可以获得请求的总容量。此外,Spot 实例中断和容量可能会随着时间的推移而发生变化,因为 Spot 实例可用性根据供需关系而发生变化,过去的性能并不能保证将来的结果。

Spot 实例不适用于不灵活、有状态、非容错或在实例节点之间紧密耦合的工作负载。对于不能容忍目标容量偶尔不完全可用的工作负载,也不建议使用该实例。我们强烈警告您不要在这些工作负载中使用 Spot 实例或尝试故障转移到按需实例以处理中断。

无论您是经验丰富的 Spot 用户还是 Spot 实例新用户,如果您当前遇到 Spot 实例中断或可用性问题,我们建议您按照以下最佳实践以获得使用 Spot 服务的最佳体验。

准备各个实例以处理中断

正常处理 Spot 实例中断的最佳方法是,设计应用程序以提供容错能力。为此,您可以利用 Spot 实例中断通知。Spot 实例中断通知是在 Amazon EC2 中断 Spot 实例之前的两分钟发出的警告。我们建议您在 Amazon EventBridge 中创建一个规则以捕获中断通知,然后触发工作负载进度的检查点或正常处理中断。有关指导您如何创建和使用事件规则的详细示例,请参阅利用 Amazon EC2 Spot 实例中断通知

如果工作负载是“时间灵活的”,您也可以将 Spot 实例配置为在中断时停止或休眠。Amazon EC2 在中断时自动停止或休眠 Spot 实例,并在我们具有可用容量时自动恢复这些实例。

有关更多信息,请参阅 Spot 实例中断

灵活地选择实例类型和可用区

Spot 实例 池是一组具有相同实例类型(如 m5.large)和可用区(如 us-east-1a)的未使用 EC2 实例。您应该灵活地选择请求哪些实例类型,以及可以在哪些可用区中部署工作负载。这为 Spot 提供了更好的机会以查找和分配所需数量的计算容量。例如,如果您希望使用 c4、m5 和 m4 系列中的大型实例,则不要仅请求 c5.large

根据您的特定需求,您可以评估可灵活地选择哪些实例类型以满足您的计算要求。如果可以纵向扩展工作负载,您应该在请求中包括更大的实例类型(更多的 vCPU 和内存)。如果您只能横向扩展,您应该包括较旧一代的实例类型,因为按需客户很少需要使用它们。

一条很好的经验法则是,对于每种工作负载,灵活地在至少 10 种实例类型之间进行选择。此外,还要确保所有可用区配置为在 VPC 中使用,并为工作负载选择了这些可用区。

使用 EC2 Auto Scaling 组或 Spot 队列管理总容量

Spot 允许您考虑总容量(包括 vCPU、内存、存储或网络吞吐量的单位),而不是考虑单个实例。通过使用 Auto Scaling 组和 Spot 队列,您可以启动和保持目标容量,以及自动请求资源以替换任何中断或手动终止的资源。在配置 Auto Scaling 组或 Spot 队列时,您仅需要根据应用程序需求指定实例类型和目标容量。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的 Auto Scaling 组和本用户指南中的创建 Spot 队列请求

使用容量优化的分配策略

Auto Scaling 组中的分配策略可以帮助您预置目标容量,而无需手动查找具有备用容量的 Spot 实例池。我们建议使用 capacity optimized 策略,因为该策略自动从最可用的 Spot 实例池中预置实例。您也可以在 Spot 队列中利用 capacity optimized 分配策略。由于 Spot 实例容量来自于具有最佳容量的池,因此,这会降低回收 Spot 实例的可能性。有关分配策略的更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的 Spot 实例和本用户指南中的配置 Spot 队列以实现容量优化

使用集成的 AWS 服务以管理 Spot 实例

其他 AWS 服务与 Spot 集成在一起以降低总体计算成本,而无需管理各个实例或队列。我们建议您针对适用的工作负载考虑以下解决方案:Amazon EMR、Amazon ECS、AWS Batch、Amazon EKS、SageMaker、AWS Elastic Beanstalk 和 Amazon GameLift。要了解这些服务的 Spot 最佳实践的更多信息,请参阅 Amazon EC2 Spot 实例 Workshops 网站