竞价型实例的分配策略 - Amazon Elastic Compute Cloud

竞价型实例的分配策略

EC2 实例集 的分配策略决定了如何根据启动说明从可能的 Spot 容量池满足针对竞价型实例的请求。以下是可在队列中指定的分配策略:

lowest-price

竞价型实例 来自价格最低的 Spot 容量池。这是默认策略。

diversified

竞价型实例 分布在所有 Spot 容量池中。

capacity-optimized

竞价型实例 来自为启动的实例数量提供最佳容量的 Spot 容量池。您可以选择使用 capacity-optimized-prioritized 为队列中的每种实例类型设置优先级。EC2 队列首先会针对容量进行优化,但会尽最大努力遵循实例类型的优先级。

使用竞价型实例,定价会根据长期供需趋势缓慢发生变化,但容量会实时波动。capacity-optimized 策略通过查看实时容量数据并预测可用性最高的池,自动在可用性最高的池中启动 Spot 实例。这适用于与中断相关的重启工作和检查点成本较高的工作负载,例如大数据和分析、图像和媒体渲染、机器学习以及高性能计算。通过实现更低的中断可能性,capacity-optimized 策略可以降低您工作负载的整体成本。

或者,您也可以使用 capacity-optimized-prioritized 分配策略,该策略带有优先级参数,以便从最高到最低优先级对实例类型进行排序。您可以为不同的实例类型设置相同的优先级。EC2 队列首先会针对容量进行优化,但会尽最大努力遵循实例类型的优先级(例如,如果遵循优先级不会显著影响 EC2 队列预置最佳容量的能力)。对于必须最大限度地减少中断可能性,同时对某些实例类型的偏好也很重要的工作负载来说,这是一个不错的选择。仅当您的队列使用启动模板时,才支持使用优先级。请注意,当您为 capacity-optimized-prioritized 设置优先级时,如果按需 AllocationStrategy 设置为 prioritized,那么相同的优先级也会应用于您的按需型实例。

InstancePoolsToUseCount

竞价型实例 分布在您指定数量的 Spot 容量池中。此参数仅在与 lowest-price 结合使用时有效。

维持目标容量

在 Spot 实例 因 Spot 价格或 Spot 容量池的可用容量发生变化而终止之后,maintain 类型的 EC2 队列 会启动替换 Spot 实例。如果分配策略是 lowest-price,则 队列在当前具有最低 Spot 价格的池中启动替换实例。如果分配策略是 lowest-priceInstancePoolsToUseCount 的组合,则队列选择具有最低价格的 Spot 容量池并跨您指定数量的 Spot 容量池启动 Spot 实例。如果分配策略是 capacity-optimized,则实例集在当前具有最多可用竞价型实例容量的池中启动替换实例。如果分配策略是 diversified,则队列在其余池间分配替换 Spot 实例。

选择合适的分配策略

您可以基于您的使用案例来优化队列。

如果您的队列运行的工作负载可能会因重启工作和检查点而导致更高的中断成本,则使用 capacity-optimized 策略。此策略提供更低的中断可能性,这可以降低您工作负载的整体成本。对于必须最大限度地减少中断可能性,同时对某些实例类型的偏好也很重要的工作负载来说,请使用 capacity-optimized-prioritized 策略。

如果队列较小或运行较短时间,则竞价型实例中断的可能性较小,即使所有实例位于单个 Spot 容量池中。因此,lowest-price 策略可能会满足您的需求,同时提供最低的成本。

如果队列较大或长时间运行,则可以通过使用 diversified 策略在多个池间分配 Spot 实例 来提高队列的可用性。例如,如果 EC2 实例集指定 10 个池,目标容量为 100 个实例,则队列会在每个池中启动 10 个竞价型实例。如果某个池的 Spot 价格超过您在该池中的最高价,您的队列仅 10% 受到影响。使用此策略还可降低您的队列对单个池的 Spot 价格随时间上涨的敏感度。使用 diversified 策略时,EC2 队列不在 Spot 价格等于或高于按需价格的任何池中启动 Spot 实例。

要创建低成本且多元化的队列,请将 lowest-price 策略与 InstancePoolsToUseCount 结合使用。您可以使用少量或大量的 Spot 容量池以在其中分配您的竞价型实例。例如,如果您运行批处理,我们建议指定少量的 Spot 容量池(例如,InstancePoolsToUseCount=2)以确保队列始终具有计算容量,同时尽可能节省成本。如果您运行 Web 服务,我们建议您指定大量 Spot 容量池(例如,InstancePoolsToUseCount=10)以尽可能减少某个 Spot 容量池临时不可用造成的影响。

配置 EC2 队列 以实现成本优化

要优化 Spot 实例的使用成本,请指定 lowest-price 分配策略,以便 EC2 队列自动基于当前 Spot 价格部署实例类型和可用区的最低成本组合。

对于个按需实例目标容量,EC2 队列始终根据公开按需价格选择成本最低的实例类型,同时对 Spot 实例继续按照策略(lowest-pricecapacity-optimizeddiversified)执行分配。

配置 EC2 队列 以实现成本优化和多元化

要创建低成本且多元化的竞价型实例实例集,请将 lowest-price 分配策略与 InstancePoolsToUseCount 结合使用。EC2 队列基于所指定数量的 Spot 容量池中的当前 Spot 价格,自动部署实例类型和可用区的最低成本组合。此组合可用于避免最昂贵的竞价型实例。

例如,如果您的目标容量是 10 个竞价型实例,并且您(为 InstancePoolsToUseCount)指定了 2 个 Spot 容量池,EC2 实例集将使用两个价格最低的池来满足 Spot 容量。

请注意,EC2 实例集会尽力尝试根据您指定的池数量提取竞价型实例。如果池在满足目标容量之前耗尽 Spot 容量,EC2 队列将继续通过从下一个最便宜的池中提取来满足您的请求。为确保达到目标容量,您可能会从超过指定数量的池接收竞价型实例。同样,如果大多数池没有 Spot 容量,则您可能会从少于指定数量的池接收完整目标容量。

配置 EC2 队列 以实现容量优化

要在可用性最高的 Spot 容量池中启动竞价型实例,请使用 capacity-optimized 分配策略。有关示例配置,请参阅 示例 9:在容量优化的队列中启动竞价型实例

您还可以通过使用 capacity-optimized-prioritized 分配策略来表达您的池优先级,然后将要使用的实例类型的顺序设置为从最高到最低优先级。仅当您的队列使用启动模板时,才支持使用优先级。请注意,当您为 capacity-optimized-prioritized 设置优先级时,如果按需 AllocationStrategy 设置为 prioritized,那么相同的优先级也会应用于您的按需型实例。有关示例配置,请参阅 示例 10:在具有优先级的容量优化队列中启动竞价型实例