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

竞价型实例的分配策略

您的启动配置决定了 EC2 Fleet 可以从中启动竞价型实例的所有可能竞价型容量池(实例类型和可用区)。但在启动实例时,EC2 Fleet 将使用您指定的分配策略从所有可能的池中选择特定的池。

分配策略

您可以为竞价型实例指定以下分配策略之一:

price-capacity-optimized(推荐)

EC2 实例集为正在启动的实例数识别具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。然后,EC2 实例集从这些池中价格最低的池请求竞价型实例。

price-capacity-optimized 分配策略是大多数 Spot 工作负载的最佳选择,例如无状态容器化应用程序、微服务、Web 应用程序、数据和分析任务以及批处理。

capacity-optimized

EC2 实例集为正在启动的实例数识别具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。您可以选择使用 capacity-optimized-prioritized 为队列中的每种实例类型设置优先级。EC2 队列首先会针对容量进行优化,但会尽最大努力遵循实例类型的优先级。

使用竞价型实例,定价会根据长期供需趋势缓慢发生变化,但容量会实时波动。capacity-optimized 策略通过查看实时容量数据并预测可用性最高的池,自动在可用性最高的池中启动 Spot 实例。这适用于因重启工作而导致中断成本更高的工作负载,例如长时间持续集成(CI)、图像和媒体渲染、深度学习以及高性能计算(HPC)工作负载,这些工作负载可能具有与重启工作相关的更高的中断成本。通过实现更低的中断可能性,capacity-optimized 策略可以降低您工作负载的整体成本。

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

diversified

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

lowest-price

竞价型实例来自价格最低并且具有可用容量的池。这是默认策略。然而,我们建议您通过指定 price-capacity-optimized 分配策略来覆盖默认值。

如果价格最低的池没有可用容量,则竞价型实例将来自价格次低且具有可用容量的池。

如果某个池在满足您所需的容量之前耗尽容量,则 EC2 实例集将继续从价格次低的池中提取实例,以满足您的请求。为确保达到所需容量,您可能会获得来自多个容量池的竞价型实例。

由于此策略仅考虑实例价格而不考虑容量可用性,因此可能会导致较高的中断率。

InstancePoolsToUseCount

在其中分配您的目标 Spot 容量的 Spot 池数量。仅当分配策略设置为 lowest-price 时有效。EC2 实例集选择价格最低的 Spot 池,并在指定数量的 Spot 池之间平均分配目标 Spot 容量。

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

选择合适的分配策略

您可以选择适当的 Spot 分配策略,从而根据您的使用案例来优化实例集。对于按需型实例目标容量,EC2 实例集始终根据公开按需型价格选择价格最低的实例类型,同时对竞价型实例按照分配策略(price-capacity-optimizedcapacity-optimizeddiversifiedlowest-price)执行分配。

平衡最低价格和可用容量

为了获得价格最低价格 Spot 容量池与具有最高可用容量的 Spot 容量池之间的平衡,我们建议您使用 price-capacity-optimized 分配策略。该策略根据池的价格以及这些池中竞价型实例的可用容量来决定向哪些池请求竞价型实例。这意味着将从我们认为短期内中断概率最低的池中请求竞价型实例,同时还要考虑价格。

如果您的实例集运行弹性和无状态的工作负载(包括容器化应用程序、微服务、Web 应用程序、数据和分析作业以及批量处理),则使用 price-capacity-optimized 分配策略以实现最大的成本节约和可用容量。

如果实例集运行的工作负载可能会因重启工作而导致更高的中断成本,则应设置检查点,以便应用程序中断时可从该点重启。通过使用检查点,可以使 price-capacity-optimized 分配策略变得非常适合这些工作负载,因其会从价格最低的池中分配容量,这些池同时还具有较低的竞价型实例中断率。

有关使用 price-capacity-optimized 分配策略的示例配置,请参阅 示例 11:在价格容量优化的实例集中启动竞价型实例

当工作负载拥有较高中断成本时

如果您运行的工作负载使用价格相似的实例类型,或中断成本非常高,以至于任何成本节约都不足以负担一个轻微中断,则可以选择使用 capacity-optimized 策略。此策略从可用容量最多的 Spot 容量池分配容量,这些容量池中断的可能性更低,从而可降低您工作负载的整体成本。有关使用 capacity-optimized 分配策略的示例配置,请参阅 示例 9:在容量优化的队列中启动竞价型实例

如果必须将中断的可能性降至最低,但某些实例类型的首选项又很紧要时,则您可以通过使用 capacity-optimized-prioritized 分配策略来表达您的池优先级,然后将要使用的实例类型的顺序设置为从最高到最低优先级。有关示例配置,请参阅 示例 10:在具有优先级的容量优化队列中启动竞价型实例

请注意,仅当您的实例集使用启动模板时,才支持使用优先级。还需注意,为 capacity-optimized-prioritized 设置优先级时,如果按需 AllocationStrategy 设置为 prioritized,那么相同的优先级也会应用于您的按需型实例。

当您的工作负载时间灵活且可用容量不是一个因素时

如果您的实例集较小或运行时间较短,则可以使用 price-capacity-optimized 来最大限度地节省成本,同时还要考虑可用容量。

如果您的工作负载时间灵活且可用容量不是一个因素,则可以选择使用 lowest-price 分配策略来最大限度地节省成本。然而请注意,由于 lowest-price 分配策略仅考虑实例价格而不考虑可用容量,因此可能会导致较高的竞价型实例中断率。

当您的实例集较大或运行时间较长时

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

若要创建低成本且多元化的实例集,请将 lowest-price 策略与 InstancePoolsToUseCount 结合使用。例如,如果您的目标容量是 10 个竞价型实例,并且您(为 InstancePoolsToUseCount)指定了 2 个 Spot 容量池,则 EC2 实例集将从两个价格最低的池提取实例,以满足您的 Spot 容量。

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

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

维持目标容量

在 Spot 实例 因 Spot 价格或 Spot 容量池的可用容量发生变化而终止之后,maintain 类型的 EC2 队列 会启动替换 Spot 实例。分配策略确定从哪个池启动替换实例,如下所示:

  • 如果分配策略是 price-capacity-optimized,则实例集在具有最多竞价型实例容量的池中启动替换实例,同时还要考虑价格并确定价格最低且具有高可用容量的池。

  • 如果分配策略是 capacity-optimized,则实例集在当前具有最多竞价型实例可用容量的池中启动替换实例。

  • 如果分配策略是 diversified,则队列在其余池间分配替换 Spot 实例。

  • 如果分配策略是 lowest-price,则 队列在当前具有最低 Spot 价格的池中启动替换实例。

  • 如果分配策略是 lowest-priceInstancePoolsToUseCount 的组合,则队列选择具有最低价格的 Spot 容量池并跨您指定数量的 Spot 容量池启动 Spot 实例。