竞价型实例的分配策略 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

竞价型实例的分配策略

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

注意

(仅限 Linux 实例)如果将竞价型实例配置为启动并开启 AMD SEV-SNP,则您需要按小时支付额外的使用费,费率为所选实例类型按需小时费率的 10%。如果分配策略使用价格作为输入,则 EC2 实例集不包括这笔额外费用;只使用 Spot 价格。

分配策略

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

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(不推荐)
警告

不推荐使用 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 分配策略的示例配置,请参阅 示例 10:在价格容量优化的实例集中启动竞价型实例

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

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

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

请注意,当您为 capacity-optimized-prioritized 设置优先级时,如果按需 AllocationStrategy 设置为 prioritized,那么相同的优先级也会应用于您的按需型实例。

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

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

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

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

维持目标容量

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

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

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

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