Azure Monitor 自动缩放支持多种资源类型,包括 Azure 虚拟机规模集、Azure 应用服务 的 Web 应用 功能、Azure API 管理 以及 Azure 数据资源管理器 群集。 有关当前列表,请参阅 自动缩放支持的服务。
自动缩放的概念
在采用这些最佳做法之前,请先了解自动缩放的核心组成部分。 资源具有单个自动缩放设置,该设置由配置文件和规则组成,并定义最小、最大值和默认实例计数。 阈值在实例级别计算,每个缩放操作都会写入活动日志。 有关完整模型,请参阅 “了解自动缩放设置”。 有关可用于自动缩放的指标,请参阅Azure Monitor 自动缩放常用指标。
自动缩放最佳做法
使用自动缩放时,可使用以下最佳做法。
确保最大值和最小值不同,并在它们之间有足够的边距
如果设置的最小值为 2,最大值为 2,并且当前实例计数为 2,则不可能发生任何缩放操作。 在最大和最小实例计数之间保留足够的余量(包括端值)。 自动缩放始终在这些限制范围内进行。
手动缩放会被自动缩放的最小值和最大值重置
如果手动将实例计数更新为超出最小值和最大范围的值,则自动缩放引擎会自动缩减为最小值或最大值。 例如,设置介于 3 和 6 之间的范围。 如果有一个正在运行的实例,则自动缩放引擎将在下次运行时缩放为三个实例。 同样,如果将缩放手动设置为 8 个实例,则自动缩放引擎将在下次运行时将其缩减为 6 个实例。 除非还重置了自动缩放规则,否则手动缩放效果只是暂时的。
始终使用同时执行横向扩展和横向缩减的规则组合
如果只使用组合的一部分,则自动缩放只会在单个方向(横向扩展或缩小)执行操作,直到达到配置文件中定义的最大或最小实例计数。 这种情况不是最佳情况。 理想情况下,你希望资源在使用率较高时可以横向扩展以确保可用性。 同样,在使用率较低时,你会希望缩减资源规模,从而节省成本。
使用缩容和扩容规则时,最好使用同一个指标来控制两者。 否则,缩容和扩容条件可能会同时满足,从而导致一定程度的波动。 例如,不要使用以下规则组合,因为内存使用量没有横向扩展规则:
- 如果 CPU > 90%,则横向扩展 1 个
- 如果内存 > 90%,则横向扩展 1 个实例
- 如果 CPU < 45 %,则横向缩减 1 个
在此示例中,内存使用率可能超过 90%,而 CPU 使用率低于 45%。 只要这两个条件同时满足,这种情况就可能导致抖动。
为诊断指标选择适当的统计信息和时间聚合
对于诊断指标(即资源通过 Azure Monitor 发出的指标),请针对评估的不同阶段配置 statistic 和 timeAggregation。 ARM statistic 属性将多个资源实例中的指标值合并到每个示例中。 然后,timeAggregation 属性会在该规则的时间窗口内将这些样本合并。
| ARM 属性 | 允许的值 | 何时使用 |
|---|---|---|
statistic |
Average、Min、Max、Sum、Count |
选择如何在每个示例的实例之间组合值。
Average 是最常见的选择。 |
timeAggregation |
Average、Minimum、Maximum、Total、Count、Last |
在将结果与阈值进行比较之前,选择如何在时间范围内合并样本。 |
例如,当 timeGrain 为 1 分钟、statistic 设置为 Average 且 timeAggregation 设置为 Maximum 时,自动缩放会先对每一分钟的各实例指标求平均值。 然后,它将时间范围内最高的 1 分钟平均值与规则阈值进行比较。
调整队列长度指标阈值时的注意事项
对于队列长度指标(Azure 存储队列或Azure 服务总线队列),阈值是每个当前实例数可用的平均消息数。 请慎重选择此指标的阈值。
若要说明行为,请考虑以下示例:
- 当 Azure 存储 队列消息计数 >= 50 时,实例数增加 1
- 当队列消息数 <= 10 时,将实例数减少 1
考虑以下序列:
- 有两个实例。
- 消息不断到来,当你查看队列时,总数显示为 50。 你可能会认为自动缩放应启动横向扩展操作。 但请注意,每个实例仍然是 50/2 = 25 条消息。 因此,不会进行横向扩展。 若要执行第一个横向扩展操作,队列中的总消息计数应为 100。
- 接下来,假定总消息计数达到 100。
- 由于横向扩展操作,新增了第三个实例。 在队列中的总消息计数达到 150 之前,不会进行下一次横向扩展操作,因为 150/3 = 50。
- 现在队列中的消息数量变小。 对于三个实例,第一个横向缩减操作发生在总消息增加 30 时,因为每个实例有 30/3 = 10 条消息,这是横向扩展阈值。
配置文件中配置的多个规则的注意事项
可能需要在配置文件中设置多个规则。 设置多个规则时,自动缩放引擎将应用以下逻辑:
| 方向 | 条件 |
|---|---|
| Scale-out | 如果满足任一规则,自动缩放就会执行。 |
| 横向缩减 | 自动缩放要求满足 所有 规则。 |
例如,假设你具有 4 个自动缩放规则:
- 如果 CPU < 30%,则缩减 1 个实例
- 如果内存 < 50%,缩容 1
- 如果 CPU > 75%,则横向扩展 1 个示例
- 如果内存 > 75%,则横向扩展 1 个实例
然后会执行以下操作:
- 如果 CPU 为 76% 且内存为 50%,则自动缩放会横向扩展。
- 如果 CPU 为 50% 且内存为 76%,则自动缩放会横向扩展。
另一方面,如果 CPU 为 25%,内存为 51%,则自动缩放不会自动缩减。 要进行横向缩减,CPU 必须为 29% 且内存为 49%。
有关另一个工作示例,请参阅 自动缩放评估。
始终选择安全的默认实例计数
默认实例数很重要,因为当读取资源指标出现问题时,自动缩放会使用该值。 如果当前容量低于默认值,则自动缩放将扩展到默认值,以确保资源的可用性。 如果当前容量已经高于默认值,自动缩放不会缩减。 选择适合工作负荷的默认实例计数。 有关详细信息,请参阅 自动缩放设置架构。
配置自动缩放通知
如果发生以下任一情况,自动缩放会在活动日志中写入记录:
- 自动缩放会发出缩放操作。
- 自动缩放引擎成功完成缩放操作。
- 自动缩放引擎无法执行缩放操作。
- 没有可用的指标供自动缩放引擎做出缩放决策。
- 可以再次使用指标(恢复)来进行缩放决策。
- 自动缩放引擎可检测浮点和中止或调整缩放尝试。
当自动缩放引擎检测到抖动时,它会在活动日志中记录以下日志类型之一:
| 日志类型 | Meaning | Action |
|---|---|---|
Flapping |
自动缩放引擎检测到抖动,因此中止了此次扩缩容操作。 | 请考虑阈值是否太窄。 |
FlappingOccurred |
自动缩放引擎检测到拍打,但仍成功缩放。 它扩缩容到不同的实例数量(例如,三个实例而不是两个实例),从而不再导致抖动。 | 无需采取措施。 如果调整后的计数不是预期值,请查看阈值。 |
若要监视自动缩放引擎的运行状况,请使用活动日志警报。 一个示例显示了如何创建活动日志警报以监视订阅上的所有自动缩放引擎操作。 另一个示例显示如何创建活动日志警报以监视订阅上所有失败的自动缩放横向缩减/横向扩展操作。
除了活动日志警报,还可以配置电子邮件或 Webhook 通知,以便在自动缩放设置的通知选项卡上获取缩放操作的通知。