

# 使用分配策略确定 EC2 实例集或竞价型实例集如何满足竞价型和按需型容量
<a name="ec2-fleet-allocation-strategy"></a>

在 EC2 实例集或竞价型实例集中使用多个容量池（每个容量池都包含一个实例类型和可用区）时，可以使用*分配策略*来管理 Amazon EC2 如何利用这些容量池满足竞价型和按需型容量。分配策略可以针对可用容量、价格和要使用的实例类型进行优化。竞价型实例和按需型实例有不同的分配策略。

**Topics**
+ [

## 竞价型实例的分配策略
](#ec2-fleet-allocation-strategies-for-spot-instances)
+ [

## 按需型实例的分配策略
](#ec2-fleet-allocation-strategies-for-on-demand-instances)
+ [

## 选择合适的竞价型分配策略
](#ec2-fleet-allocation-use-cases)
+ [

## 维持竞价型实例的目标容量
](#ec2-fleet-maintain-fleet-capacity)
+ [

## 针对按需容量优化实例类型
](#ec2-fleet-on-demand-priority)

## 竞价型实例的分配策略
<a name="ec2-fleet-allocation-strategies-for-spot-instances"></a>

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

**注意**  
（仅限 Linux 实例）如果将竞价型实例配置为启动并开启 [AMD SEV-SNP](sev-snp.md)，则您需要按小时支付额外的使用费，费率为所选实例类型[按需小时费率](https://www.amazonaws.cn/ec2/pricing/on-demand/)的 10%。如果分配策略使用价格作为输入，则实例集不包括这笔额外费用；只使用竞价型价格。

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

**价格容量优化**（推荐）  
实例集根据正在启动的实例数确定具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。然后，实例集从这些池中价格最低的池请求竞价型实例。  
**价格容量优化**分配策略是大多数竞价型工作负载的最佳选择，例如无状态容器化应用程序、微服务、Web 应用程序、数据和分析任务以及批处理。  
如果使用的是 Amazon CLI，则 EC2 实例集的参数名称为 `price-capacity-optimized`，竞价型实例集的参数名称为 `priceCapacityOptimized`。

**容量优化**  
实例集根据正在启动的实例数确定具有最高可用容量的池。这意味着我们将从我们认为短期内中断概率最低的池中请求竞价型实例。  
使用竞价型实例，定价会根据长期供需趋势缓慢发生变化，但容量会实时波动。**容量优化**策略通过查看实时容量数据并预测可用性最高的池，自动在可用性最高的池中启动竞价型实例。这适用于因重启工作而导致中断成本更高的工作负载，例如长时间持续集成（CI）、图像和媒体渲染、深度学习以及高性能计算（HPC）工作负载，这些工作负载可能具有与重启工作相关的更高的中断成本。通过实现更低的中断可能性，**容量优化**策略可以降低工作负载的整体成本。  
或者，您也可以使用**容量优化优先级**分配策略，该策略带有优先级参数，可从最高到最低优先级对实例类型进行排序。您可以为不同的实例类型设置相同的优先级。实例集首先会针对容量进行优化，但会尽力遵循实例类型的优先级（例如，如果遵循优先级不会显著影响实例集预置最佳容量的能力）。对于必须最大限度地减少中断可能性，同时对某些实例类型的偏好也很重要的工作负载来说，这是一个不错的选择。请注意，为竞价型容量的实例类型设置优先级时，如果按需型分配策略设置为**优先**，那么相同的优先级也会应用于按需型实例。对于竞价型实例集，仅当实例集使用启动模板时，才支持使用优先级。  
如果使用的是 Amazon CLI，则 EC2 实例集的参数名称为 `capacity-optimized` 和 `capacity-optimized-prioritized`，竞价型实例集的参数名称为 `capacityOptimized` 和 `capacityOptimizedPrioritized`。

**多元化**  
竞价型实例 分布在所有 Spot 容量池中。如果使用的是 Amazon CLI，则 EC2 实例集和竞价型实例集的参数名称皆为 `diversified`。

**最低价格**（不推荐）  
不推荐使用**最低价格**分配策略，因为这对竞价型实例造成的中断风险最高。
竞价型实例来自价格最低并且具有可用容量的池。这是使用 Amazon CLI 时的默认策略。不过，建议指定**价格容量优化**分配策略来覆盖默认值。  
借助最低价格策略，如果价格最低的池没有可用容量，则竞价型实例将来自价格次低且具有可用容量的池。如果某个池在满足所需容量之前耗尽容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保达到所需容量，您可能会获得来自多个容量池的竞价型实例。  
由于此策略仅考虑实例价格而不考虑容量可用性，因此可能会导致较高的中断率。  
最低价格分配策略仅在使用 Amazon CLI 时可用。EC2 实例集的参数名称为 `lowest-price`，竞价型实例集的参数名称为 `lowestPrice`。

**要使用的池数量**  
在其中分配您的目标 Spot 容量的 Spot 池数量。仅当分配策略设置为**最低价格**时有效。实例集选择价格最低的竞价型池，并在指定数量的竞价型池之间平均分配目标竞价型容量。  
请注意，实例集会尽力根据指定的池数量提取竞价型实例。如果池在满足目标容量之前耗尽竞价型容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保达到目标容量，您可能会从超过指定数量的池接收竞价型实例。同样，如果大多数池没有 Spot 容量，则您可能会从少于指定数量的池接收完整目标容量。  
此参数仅在指定**最低价格**分配策略且使用 Amazon CLI 时可用。EC2 实例集和竞价型实例集的参数名称皆为 `InstancePoolsToUseCount`。

## 按需型实例的分配策略
<a name="ec2-fleet-allocation-strategies-for-on-demand-instances"></a>

您的启动配置决定了 EC2 实例集或竞价型实例集可以从中启动按需型实例的所有可能容量池（实例类型和可用区）。但在启动实例时，实例集将使用您指定的分配策略从所有可能的池中选择特定的池。

您可以为按需型实例指定以下分配策略之一：

**最低价格**  
按需型实例来自价格最低且具有可用容量的池。这是默认策略。  
如果价格最低的池没有可用容量，则按需型实例将来自价格次低且具有可用容量的池。  
如果某个池在满足所需容量之前耗尽容量，则实例集将继续从价格次低的池中提取实例来满足请求。为确保满足所需容量，您可能会获得来自多个容量池的按需型实例。

**优先级**  
实例集使用为每个启动模板覆盖分配的优先级，先启动最高优先级的实例类型。此策略不能与基于属性的实例类型选择一起使用。有关如何使用此分配策略的示例，请参阅[针对按需容量优化实例类型](#ec2-fleet-on-demand-priority)。

## 选择合适的竞价型分配策略
<a name="ec2-fleet-allocation-use-cases"></a>

您可以选择适当的 Spot 分配策略，从而根据您的使用案例来优化实例集。

### 平衡最低价格和可用容量
<a name="ec2-fleet-strategy-balance-price-and-capacity-availability"></a>

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

如果实例集运行弹性和无状态的工作负载（包括容器化应用程序、微服务、Web 应用程序、数据和分析作业以及批量处理），则使用**价格容量优化**分配策略来实现最大的成本节约和可用容量。

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

有关使用**价格容量优化**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 10：在价格容量优化的实例集中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config11)
+ 竞价型实例集 – [示例 11：在 priceCapacityOptimized 实例集中启动竞价型实例](spot-fleet-examples.md#fleet-config11)

### 当工作负载拥有较高中断成本时
<a name="ec2-fleet-strategy-capacity-optimized"></a>

如果您运行的工作负载使用价格相似的实例类型，或中断成本非常高，以至于任何成本节约都不足以负担一个轻微中断，则可以选择使用**容量优化**策略。此策略从可用容量最多的 Spot 容量池分配容量，这些容量池中断的可能性更低，从而可降低您工作负载的整体成本。

如果必须将中断的可能性降至最低，但某些实例类型的首选项又很紧要时，则可使用**容量优化优先级**分配策略来表达池的优先级，然后按从最高到最低优先级的顺序设置要使用的实例类型。

请注意，为**容量优化优先级**设置优先级时，如果按需型分配策略设置为**优先**，那么相同的优先级也会应用于按需型实例。另请注意，对于竞价型实例集，仅当实例集使用启动模板时，才支持使用优先级。

有关使用**容量优化**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 8：在容量优化的队列中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config9)
+ 竞价型实例集 – [示例 9：在容量优化的队列中启动竞价型实例](spot-fleet-examples.md#fleet-config9)

有关使用**容量优化优先级**分配策略的 JSON 配置示例，请参阅以下内容：
+ EC2 实例集 – [示例 9：在具有优先级的容量优化队列中启动竞价型实例](ec2-fleet-examples.md#ec2-fleet-config10)
+ 竞价型实例集 – [示例 10：在具有优先级的容量优化队列中启动竞价型实例](spot-fleet-examples.md#fleet-config10)

### 当您的工作负载时间灵活且可用容量不是一个因素时
<a name="ec2-fleet-strategy-time-flexible-workload"></a>

如果实例集较小或运行时间较短，则可以使用**价格容量优化**来最大限度地节省成本，同时还要考虑可用容量。

### 当您的实例集较大或运行时间较长时
<a name="ec2-fleet-strategy-large-workload-long-time"></a>

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

## 维持竞价型实例的目标容量
<a name="ec2-fleet-maintain-fleet-capacity"></a>

在竞价型实例因竞价型价格或竞价型容量池的可用容量发生变化而终止之后，`maintain` 类型的实例集会启动替换竞价型实例。分配策略确定从哪个池启动替换实例，如下所示：
+ 如果分配策略为**价格容量优化**，则实例集在具有最高竞价型实例可用容量的池中启动替换实例，同时还要考虑价格，并确定价格最低且具有高可用容量的池。
+ 如果分配策略为**容量优化**，则实例集在具有最高竞价型实例可用容量的池中启动替换实例。
+ 如果分配策略为**多元化**，则实例集在其余池间分配替换竞价型实例。

## 针对按需容量优化实例类型
<a name="ec2-fleet-on-demand-priority"></a>

EC2 实例集或竞价型实例集尝试满足按需型容量时，默认首先启动价格最低的实例类型。如果按需型分配策略设置为**优先**，则实例集使用优先级确定在满足按需型容量时先使用哪个实例类型。优先级分配给启动模板覆盖，优先级最高的最先启动。

**示例：确定实例类型的优先级**

在本例中，您可以配置三个启动模板覆盖，每个覆盖具有不同的实例类型。

实例类型的按需价格在价格范围内。以下是本例中使用的实例类型，按价格顺序列出，从价格最低的实例类型开始：
+ `m4.large` – 价格最低
+ `m5.large`
+ `m5a.large`

如果您不使用优先级来确定顺序，则实例集将从价格最低的实例类型开始满足按需容量。

但是，假设您有想要先使用的未用 `m5.large` 预留实例。您可以设置启动模板覆盖优先级，以便按优先级顺序使用实例类型，如下所示：
+ `m5.large` – 优先级 1
+ `m4.large` – 优先级 2
+ `m5a.large` – 优先级 3