Amazon EC2 Auto Scaling 的预测式扩展 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon EC2 Auto Scaling 的预测式扩展

使用预测性扩展可在流量流的每日和每周模式之前增加 Auto Scaling 组中的 EC2 实例数量。

预测扩展非常适合您具有以下情况的情况:

  • 周期性交通,例如正常营业时间内的高资源利用率以及晚上和周末的低资源利用率

  • 重复性的打开和关闭工作负载模式,例如批处理、测试或定期数据分析

  • 初始化需要很长时间的应用程序,从而在横向扩展事件期间对应用程序性能造成明显的延迟影响

一般来说,如果您有定期的流量增长模式以及需要很长时间才能初始化的应用程序,则应考虑使用预测性扩展。与仅使用动态扩展相比,预测扩展可以通过在预测负载之前启动容量,从而帮助您更快地扩展。预测性扩展还可以帮助您避免需要过度配置容量,从而节省 EC2 账单上的资金。

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

使用Amazon Web Services Management Console,Amazon CLI或其中一个软件开发工具包,将预测扩展策略添加到任何 Auto Scaling 组。

预测式扩展的工作方式

预测扩展使用机器学习来根据 CloudWatch 的历史数据预测容量需求。机器学习算法会消耗可用的历史数据,并计算最适合历史负载模式的容量,然后根据新数据不断学习,以使未来的预测更加准确。

要使用预测扩展,首先需要创建一个包含一对指标和一个目标利用率的扩展策略。如果至少有 24 小时的历史数据,则在创建策略后立即开始创建 Forecast。预测扩展查找前 14 天的 CloudWatch 指标数据中的模式,以创建未来 48 小时的每小时预测。根据最新的 CloudWatch 指标数据每天更新 Forecast 数据。

您可以在仅预测模式,以便您可以在允许预测扩展主动扩展容量之前对预测进行评估。然后,您可以从 Amazon EC2 Auto Scaling 控制台以图形形式查看 CloudWatch 中的预测和最近指标数据。您还可以通过使用Amazon CLI或其中一个开发工具包。

当您准备好使用预测扩展开始扩展时,请将策略从仅预测模式设置预测和扩展模式。切换到预测和扩展模式时,Auto Scaling 组将根据预测开始缩放。

通过使用预测,Amazon EC2 Auto Scaling 可在每小时开始时扩展实例数:

  • 如果实际容量小于预测容量,Amazon EC2 Auto Scaling 会扩展您的 Auto Scaling 组,使其所需容量与预测容量相等。

  • 如果实际容量大于预测容量,则 Amazon EC2 自动扩展不会扩展容量。

  • 如果预测容量超出此范围,则会遵守为 Auto Scaling 组的最小容量和最大容量设置的值。

最佳实践

  • 确认预测扩展是否适合您的工作负载。如果工作负载显示特定于一周中某一天或一天中时间的重复加载模式,则工作负载非常适合预测扩展。若要检查这一点,请在仅预测模式。

  • 在允许预测扩展主动扩展应用程序之前,评估预测及其准确性。预测扩展需要至少 24 小时的历史数据才能开始预测。但是,如果历史数据跨越整整两周,预测会更有效。如果您通过创建新的 Auto Scaling 组并删除旧组来更新应用程序,则新的 Auto Scaling 组需要 24 小时的历史加载数据,然后预测扩展才能再次开始生成预测。在这种情况下,您可能需要等待几天才能获得更准确的预测。

  • 创建多个预测扩展策略仅预测模式来测试不同衡量指标的潜在影响。您可以为每个 Auto Scaling 组创建多个预测扩展策略,但只能将其中一个策略用于活动扩展。

  • 如果您选择自定义指标对,则需要定义指标。您不能使用自定义指标,但可以使用负载衡量指标和扩展指标的不同组合。为避免出现问题,请确保您选择的加载量度表示应用程序上的满负载。

  • 使用具有动态扩展功能的预测性扩展。动态扩展用于根据资源利用率的实时变化自动扩展容量。将其与预测扩展结合使用可帮助您紧密跟踪应用程序的需求曲线,在低流量期间进行扩展,并在流量高于预期时向外扩展。当多个扩展策略处于活动状态时,每个策略将独立确定所需容量,并将所需容量设置为这些容量的最大容量。例如,如果要求 10 个实例保持目标跟踪扩展策略中的目标利用率,并且需要 8 个实例保持在预测扩展策略中的目标利用率,则组的所需容量设置为 10。

创建预测式扩展策略(控制台)

创建 Auto Scaling 组后,您可以在组上配置预测扩展策略。

创建预测式扩展策略

  1. 以下网址打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/.

  2. 选中 Auto Scaling 组旁边的复选框。

    将在 Auto Scaling groups (Auto Scaling 组) 页面底部打开一个拆分窗格,其中显示有关所选组的信息。

  3. 在存储库的自动扩展选项卡, 在扩展策略中,选择创建预测式扩展策略.

  4. 要定义策略,请执行以下操作:

    1. 输入策略的名称。

    2. 启用 。按预测扩展,授予 Amazon EC2 Auto Scaling 权限,以便立即开始扩展。

      若要将策略保留在仅预测模式,保留按预测扩展关闭。

    3. 适用于指标中,从选项列表中选择您的指标。选项包括CPU网络输入网络输出Application Load Balancer 请求计数, 和自定义指标对.

      如果您选择每个目标的 Application Load Balancer 请求,然后在目标组. 每个目标的 Application Load Balancer 请求仅当您已将 Application Load Balancer 目标组附加到 Auto Scaling 组时才支持。

      如果您选择自定义指标对中,从负载指标扩展指标.

  5. 适用于目标利用率中,输入 Amazon EC2 Auto Scaling 应保持的目标值。Amazon EC2 Auto Scaling 可扩展您的容量,直到平均利用率达到目标利用率,或直到达到您指定的最大实例数。

    如果您的扩展指标是... 然后目标利用率代表...
    CPU

    每个实例理想应使用的 CPU 百分比。

    网络输入

    每个实例理想情况下应接收的平均每分钟字节数。

    网络输出

    每个实例理想情况下应发出的平均每分钟字节数。

    每个目标的 Application Load Balancer 请求

    每个实例理想情况下应接收的平均每分钟请求数。

  6. (可选)预启动实例中,选择您希望在预测调用增加负载之前启动实例的距离。

  7. (可选)最大容量行为中,选择当预测容量超过定义的最大值时,是否允许 Amazon EC2 Auto Scaling 向外扩展高于组的最大容量。启用此设置允许在预测流量达到最高期间进行横向扩展。

  8. (可选)高于预测容量的缓冲区最大容量中,选择在预测容量接近或超过最大容量时使用的附加容量。该值以相对于预测容量的百分比指定。例如,如果缓冲区为 10,这表示 10% 缓冲区,因此,如果预测容量为 50 并且最大容量为 40,则实际的最大容量为 55。

    如果设置为 0,Amazon EC2 Auto Scaling 可以将容量扩展到高于最大容量,直至等于最大容量。

  9. 选择创建预测式扩展策略.

创建预测式扩展策略 (Amazon CLI)

使用Amazon CLI为 Auto Scaling 组配置预测扩展策略。有关可以为预测扩展策略指定的 CloudWatch 指标的更多信息,请参阅预测扩展指标规范中的Amazon EC2 Auto Scaling API 参考.

示例 1:创建预测但不扩展的预测性扩展策略

以下示例策略显示了一个完整的策略配置,该配置使用 CPU 利用率度量进行预测扩展,目标利用率为40.ForecastOnly模式默认使用,除非您明确指定要使用的模式。将此配置保存在名为 config.json 的文件中。

{ "MetricSpecifications": [ { "TargetValue": 40, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ASGCPUUtilization" } } ] }

要创建此策略,请运行put-caling命令与指定配置文件一起使用,如以下示例所示。

aws autoscaling put-scaling-policy --policy-name cpu40-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

如果成功,此命令将返回策略的 Amazon 资源名称 (ARN)。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:2f4f5048-d8a8-4d14-b13a-d1905620f345:autoScalingGroupName/mygroup:policyName/cpu40-predictive-scaling-policy", "Alarms": [] }

示例 2:用于预测和缩放的预测性扩展策略

对于允许 Amazon EC2 Auto Scaling 预测和扩展的策略,请添加属性Mode值为ForecastAndScale. 以下示例显示了使用应用程序负载均衡器请求计数指标的策略配置。目标利用率为1000,并且预测缩放设置为ForecastAndScale模式。

{ "MetricSpecifications": [ { "TargetValue": 1000, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ALBRequestCount", "ResourceLabel": "app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff" } } ], "Mode": "ForecastAndScale" }

要创建此策略,请运行put-caling命令与指定配置文件一起使用,如以下示例所示。

aws autoscaling put-scaling-policy --policy-name alb1000-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

如果成功,此命令将返回策略的 Amazon 资源名称 (ARN)。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:19556d63-7914-4997-8c81-d27ca5241386:autoScalingGroupName/mygroup:policyName/alb1000-predictive-scaling-policy", "Alarms": [] }

示例 3:一种可扩展高于最大容量的预测性扩展策略

以下示例说明如何创建一个策略,该策略可以在您需要该策略来处理高于正常负载的情况下扩展比组的最大大小限制。默认情况下,Amazon EC2 Auto Scaling 的 EC2 容量不会超过您定义的最大容量。但是,如果让它进行更高的扩展,并稍微增加容量,以避免性能或可用性问题,则可能会有所帮助。

要为 Amazon EC2 Auto Scaling 提供空间,以便在容量预计达到或非常接近组的最大大小时配置额外容量,请指定MaxCapacityBreachBehaviorMaxCapacityBuffer属性,如以下示例所示。您必须指定MaxCapacityBreachBehavior值为IncreaseMaxCapacity. 您的组可以拥有的实例的最大数量取决于MaxCapacityBuffer.

{ "MetricSpecifications": [ { "TargetValue": 70, "PredefinedMetricPairSpecification": { "PredefinedMetricType": "ASGCPUUtilization" } } ], "MaxCapacityBreachBehavior": "IncreaseMaxCapacity", "MaxCapacityBuffer": 10 }

在此示例中,策略配置为使用 10% 的缓冲区 ("MaxCapacityBuffer": 10),因此,如果预测容量为 50 并且最大容量为 40,则实际的最大容量为 55。如果可以将容量扩展到高于最大容量以等于最大容量以等于但不能超过预测容量的策略将具有 0 ("MaxCapacityBuffer": 0)。

要创建此策略,请运行put-caling命令与指定配置文件一起使用,如以下示例所示。

aws autoscaling put-scaling-policy --policy-name cpu70-predictive-scaling-policy \ --auto-scaling-group-name my-asg --policy-type PredictiveScaling \ --predictive-scaling-configuration file://config.json

如果成功,此命令将返回策略的 Amazon 资源名称 (ARN)。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:d02ef525-8651-4314-bf14-888331ebd04f:autoScalingGroupName/mygroup:policyName/cpu70-predictive-scaling-policy", "Alarms": [] }

Limitations

预测扩展需要 24 小时的指标历史记录才能生成预测。

您目前无法将预测扩展用于具有混合实例策略的 Auto Scaling 组。

您当前无法在预测扩展策略中指定自定义量度。