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

EC2 Spot 的最佳实践

Amazon EC2 Spot 实例是 Amazon 云中的备用 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 实例中断的最佳方法是,设计应用程序以提供容错能力。为此,您可以利用 EC2 实例再平衡建议和 Spot 实例中断通知。

EC2 实例再平衡建议是一个新信号,可在 Spot 实例处于较高的中断风险时通知您。该信号使您有机会在两分钟的 Spot 实例中断通知之前主动管理 Spot 实例。您可以决定将工作负载再平衡到不处于较高中断风险的新的或现有的 Spot 实例。通过使用 Auto Scaling 组和 Spot 实例集中的容量再平衡功能,我们使您可以轻松地使用这个新信号。有关更多信息,请参阅使用主动容量再平衡

Spot 实例中断通知是在 Amazon EC2 中断 Spot 实例之前的两分钟发出的警告。如果工作负载为“时间灵活型”负载,您可以将 Spot 实例配置为在中断时停止或休眠,而不是终止。Amazon EC2 在中断时使 Spot 实例自动停止或休眠,并在我们具有可用容量时自动恢复这些实例。

我们建议您在 Amazon EventBridge 中创建一个规则以捕获再平衡建议和中断通知,然后触发工作负载进度的检查点或正常处理中断。有关更多信息,请参阅监控再平衡建议信号。有关指导您如何创建和使用事件规则的详细示例,请参阅利用 Amazon EC2 Spot 实例中断通知

有关更多信息,请参阅EC2 实例再平衡建议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 队列以实现容量优化

使用主动容量再平衡

容量再平衡功能可在运行中的 Spot 实例收到两分钟的 Spot 实例中断通知之前,主动使用新的 Spot 实例扩展您的队列,从而帮助您维护工作负载的可用性。启用容量再平衡后,Auto Scaling 或 Spot 队列将尝试主动替换已收到再平衡建议的 Spot 实例,从而使您有机会将工作负载再平衡到不处于较高中断风险的新 Spot 实例。

容量再平衡补充了容量优化型分配策略(旨在帮助找到最佳备用容量)和混合实例策略(旨在通过在多个可用区中运行的多个实例类型上部署实例来提高可用性)。

有关更多信息,请参阅容量再平衡

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

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