了解自动缩放设置

使用自动缩放设置有助于确保运行适当数量的资源来处理应用程序负载的波动。 可将自动缩放设置配置为基于指标(指示负载或性能)触发,或者在计划好的日期和时间触发。

本文介绍自动缩放设置。

自动缩放设置的架构

以下示例演示具有以下属性的自动缩放设置:

  • 单个默认配置文件。
  • 此配置文件包含两条指标规则:一条规则针对扩展,另一条规则针对缩减。
    • 当虚拟机规模集的平均 CPU 百分比指标在过去 10 分钟大于 85% 时,将触发横向扩展规则。
    • 当虚拟机规模集的平均值在过去 1 分钟小于 60% 时,将触发缩减规则。

注意

一项设置可以包含多个配置文件。 有关详细信息,请参阅配置文件部分。 还可以在一个配置文件中定义多个扩展规则和缩减规则。 有关评估方法,请参阅评估部分。

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Insights/autoscaleSettings",
            "apiVersion": "2015-04-01",
            "name": "VMSS1-Autoscale-607",
            "location": "chinaeast2",
            "properties": {

                "name": "VMSS1-Autoscale-607",
                "enabled": true,
                "targetResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
    "profiles": [
      {
        "name": "Auto created default scale condition",
        "capacity": {
          "minimum": "1",
          "maximum": "4",
          "default": "1"
        },
        "rules": [
          {
            "metricTrigger": {
              "metricName": "Percentage CPU",
              "metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
              "timeGrain": "PT1M",
              "statistic": "Average",
              "timeWindow": "PT10M",
              "timeAggregation": "Average",
              "operator": "GreaterThan",
              "threshold": 85,
              "dividePerInstance": false
            },
            "scaleAction": {
              "direction": "Increase",
              "type": "ChangeCount",
              "value": "1",
              "cooldown": "PT5M"
            }
          },
          {
            "metricTrigger": {
              "metricName": "Percentage CPU",
              "metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
              "timeGrain": "PT1M",
              "statistic": "Average",
              "timeWindow": "PT10M",
              "timeAggregation": "Average",
              "operator": "LessThan",
              "threshold": 60,
              "dividePerInstance": false
            },
            "scaleAction": {
              "direction": "Decrease",
              "type": "ChangeCount",
              "value": "1",
              "cooldown": "PT5M"
            }
          }
        ]
      }
    ]
  }
}

下表描述了上述自动缩放设置的 JSON 中的元素。

部分 元素名称 门户名称 说明
设置 ID 自动缩放设置的资源 ID。 自动缩放设置属于 Azure 资源管理器资源。
设置 name 自动缩放设置的名称。
设置 location 自动缩放设置的位置。 此位置可与缩放的资源所在的位置不同。
properties targetResourceUri 缩放的资源的资源 ID。 针对每个资源,只能使用一项自动缩放设置。
properties 配置文件 缩放条件 自动缩放设置由一个或多个配置文件组成。 自动缩放引擎每次运行时,将会执行一个配置文件。 每个自动缩放设置最多配置 20 个配置文件。
配置文件 name 配置文件的名称。 可以选择有助于识别该配置文件的任何名称。
配置文件 capacity.maximum 实例限制 - 最大值 允许的最大容量。 此值可以确保自动缩放在执行此配置文件时,不会将资源扩展到超过此数字。
配置文件 capacity.minimum 实例限制 - 最小值 允许的最小容量。 此值可以确保自动缩放在执行此配置文件时,不会将资源缩减到低于此数字
配置文件 capacity.default 实例限制 - 默认值 如果读取资源指标时出现问题,且当前容量低于默认容量,则自动缩放将扩展到默认值。 此操作可确保资源的可用性。 如果当前容量已大于默认容量,则自动缩放不会缩减。
配置文件 规则 规则 自动缩放使用配置文件中的规则在最大和最小容量之间自动缩放。 在配置文件中定义最多 10 个单独的规则。 通常,规则是成对定义的:一个用于确定何时横向扩展,另一个用于确定何时横向缩减。
规则 (rule) metricTrigger 缩放规则 定义规则的指标条件。
metricTrigger metricName 指标名称 指标的名称。
metricTrigger metricResourceUri 发出指标的资源的资源 ID。 在大多数情况下,它与缩放的资源相同。 在某些情况下,它可能不同。 例如,可以基于存储队列中的消息数缩放虚拟机规模集。
metricTrigger timeGrain 时间粒度(分钟) 指标采样持续时间。 例如,timeGrain = "PT1M" 表示应使用 statistic 元素中指定的聚合方法每 1 分钟聚合一次指标。
metricTrigger statistic 时间粒度统计信息 timeGrain 时间段内的聚合方法。 例如,statistic = "Average"timeGrain = "PT1M" 表示每分钟取平均值来聚合指标。 此属性规定指标的采样方式。
metricTrigger timeWindow 持续时间 查找指标的时间范围。 例如,timeWindow = "PT10M" 表示自动缩放每次运行时,都会查询过去 10 分钟的指标。 使用该时间范围可将指标规范化,避免对暂时性的峰值作出反应。
metricTrigger timeAggregation 时间聚合 用于聚合已采样指标的聚合方法。 例如,如果 timeAggregation = "Average",则应取平均值来聚合采样的指标。 上例取 10 个 1 分钟样本并求其平均值。
metricTrigger dividePerInstance 用值除以实例计数。 如果 dividePerInstance = true,则指标除以资源中的实例数。 对于最好使用 SumCount 进行合并且需要根据活动实例数进行规范化的指标,此选项非常有用。 例如,如果指标是队列长度,并且合并为 Sum,则当 dividePerInstance = true 时,该指标将除以虚拟机规模集中的实例数,提供所有虚拟机的平均队列长度。 dividePerInstance 对与使用 SumCount 进行合并的指标很有用,但不适用于 Average 合并
rule scaleAction 操作 触发规则的 metricTrigger 时要执行的操作。
scaleAction direction 操作 “Increase”表示扩展,“Decrease”表示缩减。
scaleAction 实例计数 要将资源容量增大或减小多少。
scaleAction cooldown 冷却(分钟) 在执行缩放操作之后、再次执行缩放操作之前所要等待的时间。 冷却期在横向缩减或横向扩展事件后生效。 例如,如果 cooldown = "PT10M",则自动缩放只会在 10 分钟之后才尝试再次执行缩放。 在添加或删除实例之后,cooldown(冷却)可让指标变稳定。

自动缩放配置文件

每个自动缩放设置最多定义 20 个不同的配置文件。
有三种类型的自动缩放配置文件:

  • 默认配置文件:如果不需要根据特定日期和时间或星期日期缩放资源,请使用默认配置文件。 没有适用于当前日期和时间的其他配置文件时,默认配置文件将运行。 只能有一个默认的配置文件。

  • 固定日期配置文件:固定日期配置文件与单个日期和时间相关。 使用固定日期配置文件为特定事件设置缩放规则。 此配置文件在事件的日期和时间仅运行一次。 对于所有其他时间,自动缩放使用默认配置文件。

        ...
        "profiles": [
            {
                "name": " regularProfile",
                "capacity": {
                    ...
                },
                "rules": [
                    ...
                ]
            },
            {
                "name": "eventProfile",
                "capacity": {
                ...
                },
                "rules": [
                    ...
                ],
                "fixedDate": {
                    "timeZone": "Pacific Standard Time",
                    "start": "2017-12-26T00:00:00",
                    "end": "2017-12-26T23:59:00"
                }
            }
        ]
    
  • 定期配置文件:定期配置文件针对一周中的某一天或几天使用。 定期配置文件的架构不包括结束日期。 定期配置文件的结束日期和时间由以下配置文件的开始时间设置。 使用门户配置定期配置文件时,默认配置文件会自动更新为在为定期配置文件指定的结束时间开始。 有关配置多个配置文件的详细信息,请参阅具有多个配置文件的自动缩放

    此处的部分架构示例显示了一个定期配置文件。 它从 06:00 开始,在周六和周日19:00 结束。 默认配置文件已修改为从周六和周日的 19:00 开始。

        {
            "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "resources": [
                {
                    "type": "Microsoft.Insights/    autoscaleSettings",
                    "apiVersion": "2015-04-01",
                    "name": "VMSS1-Autoscale-607",
                    "location": "chinaeast2",
                    "properties": {
    
                        "name": "VMSS1-Autoscale-607",
                        "enabled": true,
                        "targetResourceUri": "/subscriptions/    abc123456-987-f6e5-d43c-9a8d8e7f6541/    resourceGroups/rg-vmss1/providers/    Microsoft.Compute/    virtualMachineScaleSets/VMSS1",
                        "profiles": [
                            {
                                "name": "Weekend profile",
                                "capacity": {
                                    ...
                                },
                                "rules": [
                                    ...
                                ],
                                "recurrence": {
                                    "frequency": "Week",
                                    "schedule": {
                                        "timeZone": "E. Europe     Standard Time",
                                        "days": [
                                            "Saturday",
                                            "Sunday"
                                        ],
                                        "hours": [
                                            6
                                        ],
                                        "minutes": [
                                            0
                                        ]
                                    }
                                }
                            },
                            {
                                "name": "{\"name\":\"Auto created default scale condition\",\"for\":\"Weekend profile\"}",
                                "capacity": {
                                   ...
                                },
                                "recurrence": {
                                    "frequency": "Week",
                                    "schedule": {
                                        "timeZone": "E. Europe     Standard Time",
                                        "days": [
                                            "Saturday",
                                            "Sunday"
                                        ],
                                        "hours": [
                                            19
                                        ],
                                        "minutes": [
                                            0
                                        ]
                                    }
                                },
                                "rules": [   
                                  ...
                                ]
                            }
                        ],
                        "notifications": [],
                        "targetResourceLocation": "chinaeast2"
                    }
    
                }
            ]
                }
    
    

自动缩放评估

自动缩放设置可具有多个配置文件。 每个配置文件可以设有多个规则。 每当自动缩放作业运行时,首先会选择适用的配置文件。 然后,自动缩放将评估该配置文件中的最小、最大值和任何指标规则,并确定是否需要执行缩放操作。 自动缩放作业每 30 到 60 秒运行一次,具体取决于资源类型。 发生缩放操作后,自动缩放作业将等待冷却期,然后再次缩放。 冷却期适用于横向扩展和横向缩减操作。

自动缩放会使用哪个配置文件?

每次运行自动缩放服务时,都会按以下顺序评估配置文件:

  1. 固定日期配置文件
  2. 定期配置文件
  3. 默认配置文件

将使用找到的第一个合适的配置文件。

自动缩放如何评估多个规则?

自动缩放确定要运行哪个配置文件之后,会评估该配置文件中的横向扩展规则(即,direction = "Increase")。 如果触发了一个或多个扩展规则,自动缩放将计算为其中每个规则指定的 scaleAction 确定的新容量。 如果触发了多个扩展规则,则自动缩放将缩放到指定的最高容量,以确保服务可用性。

例如,假设有两个规则:规则 1 指定横向扩展 3 个实例,规则 2 指定横向扩展 5 个实例。 如果同时触发了两个规则,则自动缩放将横向扩展 5 个实例。 同样,如果一个规则指定横向扩展 3 个实例,而另一个规则指定横向扩展 15%,则将使用两个实例计数中的较高值。

如果未触发横向扩展规则,自动缩放会评估横向缩减规则(即,设置为 direction = "Decrease" 的规则)。 如果触发了所有横向缩减规则,自动缩放只会横向缩减。

自动缩放计算其中每个规则的 scaleAction 确定的新容量。 为了确保服务可用性,自动缩放会尽可能少地缩减,以实现指定的最大容量。 例如,假设有两条横向缩减规则:一个规则将容量减小 50%,另一个将容量减小 3 个实例。 如果第一个规则缩减 5 个实例,而第二个规则缩减 7 个实例,则自动缩放将缩减为 7 个实例。

自动缩放每次计算缩减操作的结果时,都会评估该操作是否会触发扩展操作。 缩放操作触发相反的缩放操作的情况称为“回摆”。 自动缩放可能会延迟横向缩减操作以避免回摆,或者可能会按照小于规则中指定的数量进行缩放。 有关回摆的详细信息,请参阅自动缩放中的回摆

后续步骤

详细了解自动缩放: