

# 使用历史模式通过预测式扩缩来扩展 Amazon ECS 服务
<a name="predictive-auto-scaling"></a>

预测式扩缩可查看流量中过去的负载数据，以分析每日或每周的模式。然后，它会使用此分析来预测未来的需求，并根据需要主动增加服务中的任务。

预测式自动扩缩在以下情况中最有用。
+ 周期性流量：正常营业时间内的高资源利用率以及晚上和周末的低资源利用率。
+ 重复的打开和关闭工作负载模式：例如批处理、测试或定期数据分析。
+ 初始化需要很长时间的应用程序：会造成明显延迟的横向扩展事件期间，这可能会影响应用程序性能。

如果应用程序需要很长时间才能初始化并且存在流量定期增长的情况，则应考虑使用预测式扩缩。这将通过主动增加任务数以应对预测的负载，从而帮助您更快地扩展，而不是仅使用目标跟踪或步进扩缩等动态扩缩策略。预测式扩缩还可帮助您避免过度预置任务数的风险，从而节省成本。

例如，考虑在营业时间内具有高利用率以及夜间具有低利用率的应用程序。在每个工作日开始时，预测式扩缩可以在流量第一次涌入之前横向扩展任务。这有助于您的应用程序在利用率较低的时期内保持高可用性和性能。您不必等待动态扩展来响应不断变化的流量。您也不必花时间查看应用程序的负载模式，并尝试使用计划的扩展计划适当的任务。

预测式扩展是一种服务级别功能，它可独立于底层计算容量（例如 EC2 或 Fargate）的扩展来扩展服务任务。对于 Fargate，AWS 会根据任务要求管理和自动扩展底层容量。对于 EC2 容量，您可以使用自动扩缩组容量提供程序，根据任务的扩展要求来自动扩展底层 EC2 实例。

**Topics**
+ [预测式扩缩概览](#predictive-auto-scaling-overview)
+ [创建预测性扩展策略](predictive-scaling-create-policy.md)
+ [评估预测性扩展策略](predictive-scaling-graphs.md)
+ [覆盖预测](predictive-scaling-overriding-forecast-capacity.md)
+ [使用自定义指标](predictive-scaling-custom-metrics.md)

## 预测式扩展在 Amazon ECS 中的工作原理
<a name="predictive-auto-scaling-overview"></a>

您可以在本页了解使用预测式扩缩的注意事项、预测式扩缩的工作原理以及相关使用限制。

### 使用预测式扩缩的注意事项
<a name="predictive-auto-scaling-considerations"></a>
+ 您需要确保预测式扩缩适合您的工作负载。您可以通过在**仅预测**模式下配置扩缩策略来确认这一点，并查看控制台有何建议。在开始使用预测式扩缩之前，您应该评估预测和建议。
+ 预测式扩缩至少需要 24 小时的历史数据才能开始预测。可用的历史数据越多，预测就越有效，最理想的时间范围是两周。当您删除 Amazon ECS 服务并创建新服务时，还需要等待 24 小时，预测式扩缩才能生成新预测。加快此过程的方法之一是使用自定义指标来聚合新旧 Amazon ECS 服务的指标。
+ 选择一个负载指标，该指标应准确代表应用程序的全部负载，并且是应用程序中对扩缩最重要的方面。
+ 借助采用预测式扩缩的动态扩缩，您可以紧密跟踪应用程序的需求，进而可以在平缓期间进行横向缩减并在流量意外增加时横向扩展。当多个扩缩策略处于活动状态时，每个策略将独立确定所需任务数，而所需任务数将设置为其中最大的任务数。
+ 您可以将预测式扩缩与动态扩缩策略（例如目标跟踪或步进扩缩）一起使用，以便应用程序就可以根据实时和历史模式进行扩展。预测式扩缩本身并不能横向缩减您的任务。
+ 如果您在调用 `register-scalable-target` API 时使用自定义角色，则可能会收到一条错误消息，提示预测式扩缩策略只能在启用 SLR 的情况下生效。在这种情况下，您应该再次调用 `register-scalable-target`，但不要使用 role-arn。注册可扩展目标时使用 SLR 并调用 `put-scaling-policy` API。

### 预测式扩展的工作方式
<a name="predictive-auto-scaling-details"></a>

要使用预测式扩缩，请创建预测式扩缩策略，指定要监控和分析的 CloudWatch 指标。预测式扩缩至少需要 24 小时的数据才能开始预测未来值。

创建策略后，预测性扩展将开始分析最多过去 14 天的指标数据，以确定模式。此分析可用于生成未来 48 小时的每小时需求预测。最新的 CloudWatch 数据将用于每 6 小时更新一次预测。随着新数据的出现，预测式扩缩会不断提高未来预测的准确性。

首次启用预测性扩展时，该功能将在*仅预测*模式下运行。它以这种模式生成预测，但它不会根据这些预测扩展 Amazon ECS 服务。这使您可以评估预测的准确性和适用性。您可以使用 `GetPredictiveScalingForecast` API 操作或 AWS 管理控制台 查看预测数据。

当您决定开始使用预测式扩缩时，请将扩缩策略切换到*预测和扩展*模式。在此模式下会发生以下情况。

Amazon ECS 服务默认会根据该小时的预测进行扩展。您可以在 `PutScalingPolicy` API 操作中使用 `SchedulingBufferTime` 属性选择提前启动。这会使新任务在预测的需求之前启动，并使其有时间启动并准备好处理流量。

### 最大任务数限制
<a name="predictive-scaling-maximum-tasks-limit"></a>

注册 Amazon ECS 服务以进行扩缩时，您会定义每项服务可启动的最大任务数。默认情况下，设置扩缩策略后，这些策略无法将任务数增加到高于最大限制。

或者，您可以允许在预测接近或超过 Amazon ECS 服务的最大任务数时，自动增加服务的最大任务数。

**警告**  
允许自动增加最大任务数时应谨慎行事。如果不对增加的最大任务数进行监控和管理，则可能导致启动的任务数超出预期。然后，增加的最大任务数将变为 Amazon ECS 服务新的正常最大任务数，直到您手动对其进行更新。最大任务数不会自动降回到原来的最大值。

### 支持的区域
<a name="predictive-auto-scaling-supported-regions"></a>
+ 美国东部（弗吉尼亚州北部）
+ 美国东部（俄亥俄州）
+ 美国西部（北加利福尼亚）
+ 美国西部（俄勒冈州）
+ 非洲（开普敦）
+ 亚太地区（香港）
+ 亚太地区（雅加达）
+ 亚太地区（孟买）
+ 亚太地区（大阪）
+ 亚太地区（首尔）
+ 亚太地区（新加坡）
+ 亚太地区（悉尼）
+ 亚太地区（东京）
+ 加拿大（中部）
+ 中国（北京）
+ 中国（宁夏）
+ 欧洲地区（法兰克福）
+ 欧洲地区（爱尔兰）
+ 欧洲地区（伦敦）
+ 欧洲地区（米兰）
+ 欧洲地区（巴黎）
+ 欧洲地区（斯德哥尔摩）
+ 中东（巴林）
+ 南美洲（圣保罗）
+ AWS GovCloud（美国东部）
+ AWS GovCloud（美国西部）