自动缩放的最佳实践

Azure Monitor 自动缩放仅适用于 Azure 虚拟机规模集Azure 云服务、[Azure 应用服务 Web 应用功能]/app-service/web/)和 Azure API 管理

自动缩放的概念

  • 一个资源只能具有一个自动缩放设置。
  • 自动缩放设置可以具有一个或多个配置文件,每个配置文件可以具有一个或多个自动缩放规则。
  • 自动缩放设置缩放实例,即通过增加实例数量横向扩展和通过减少实例数量横向缩减
  • 自动缩放设置具有实例的最大、最小值和默认值。
  • 自动缩放作业始终会读取作为缩放依据的相关指标,并检查该指标是否已越过为扩容或缩容配置的阈值。 你可以在 Azure Monitor 自动缩放常用指标中查看自动缩放可用作缩放依据的指标列表。
  • 所有阈值都在实例级别计算。 例如,“如果实例计数为 2,则在平均 CPU > 80% 时横向扩展 1 个实例”。它表示在所有实例的平均 CPU 大于 80% 时进行横向扩展。
  • 所有自动缩放失败事件都会记录到活动日志中。 然后可以配置活动日志警报,以便在出现自动缩放故障时,可通过电子邮件、短信或 Webhook 获得通知。
  • 同样,所有成功的缩放操作也会发布到活动日志中。 然后可以配置活动日志警报,以便在自动缩放操作成功时,可通过电子邮件、短信或 Webhook 获得通知。 还可以配置电子邮件或 Webhook 通知,以通过自动缩放设置上的通知选项卡获取有关成功缩放操作的通知。

自动缩放最佳做法

使用自动缩放时,可使用以下最佳做法。

确保最大值和最小值不同,并在它们之间有足够的边距

如果设置的最小值为 2,最大值为 2,并且当前实例计数为 2,则不可能发生任何缩放操作。 在最大和最小实例计数之间保留足够的余量(包括端值)。 自动缩放始终在这些限制范围内进行。

手动缩放会被自动缩放的最小值和最大值重置

如果手动将实例计数更新为高于或低于最大值的值,则自动缩放引擎会自动缩放回最小值(如果低于)或最大值(如果高于)。 例如,设置介于 3 和 6 之间的范围。 如果有一个正在运行的实例,则自动缩放引擎将在下次运行时缩放为三个实例。 同样,如果手动将缩放设置为 8 个实例,在下一次运行自动缩放时,它会在下次运行时将其缩减为 6 个实例。 除非还重置了自动缩放规则,否则手动缩放效果只是暂时的。

始终使用同时执行横向扩展和横向缩减的规则组合

如果只使用组合的一部分,则自动缩放只会在单个方向(横向扩展或缩小)执行操作,直到达到配置文件中定义的最大或最小实例计数。 这种情况不是最佳情况。 理想情况下,你希望资源在使用率较高时可以横向扩展以确保可用性。 同样,在使用率较低时,你会希望缩减资源规模,从而节省成本。

使用缩容和扩容规则时,最好使用同一个指标来控制两者。 否则,缩容和扩容条件可能会同时满足,从而导致一定程度的波动。 例如,不要使用以下规则组合,因为内存使用量没有横向扩展规则:

  • 如果 CPU > 90%,则横向扩展 1 个
  • 如果内存 > 90%,则横向扩展 1 个实例
  • 如果 CPU < 45 %,则横向缩减 1 个

在此示例中,可能会遇到内存使用率超过 90% 但 CPU 使用率低于 45% 的情况。 只要这两个条件同时满足,这种情况就可能导致抖动。

为诊断指标选择适当的统计信息

对于诊断指标,可以选择“平均值”、“最小值”、“最大值”和“总计”作为进行缩放所依据的指标。 最常见的统计信息是“平均值” 。

有关特殊指标的缩放阈值的注意事项

对于特殊指标(如 Azure 存储或 Azure 服务总线队列长度指标),阈值是按照当前实例数的可用消息平均数。 请慎重选择此指标的阈值。

若要说明行为,请考虑以下示例:

  • 当存储队列中的消息计数 >= 50 时,将实例数增加 1
  • 当存储队列消息计数 <= 10 时,将实例数减少 1 个

考虑以下序列:

  1. 有两个存储队列实例。
  2. 消息不断传入,在查看存储队列时,总计数达到 50。 你可能会认为自动缩放应启动横向扩展操作。 但请注意,每个实例仍然是 50/2 = 25 条消息。 因此,不会进行横向扩展。 要发生第一次横向扩展操作,存储队列中的消息总数应达到 100。
  3. 接下来,假定总消息计数达到 100。
  4. 由于横向扩展操作,会添加第三个存储队列实例。 在队列中的总消息计数达到 150 之前,不会进行下一次横向扩展操作,因为 150/3 = 50。
  5. 现在队列中的消息数量变小。 在有三个实例的情况下,当所有队列中的总消息数加起来达到 30 时,会进行第一缩小操作,因为 30/3 = 10 个消息/实例(这是缩小阈值)。

有关在配置文件中配置了多个规则时进行缩放的注意事项

可能需要在配置文件中设置多个规则。 设置多个规则时,自动缩放引擎使用以下规则:

  • 横向扩展时,如果满足任一条规则,则运行自动缩放
  • 横向缩减时,自动缩放需要满足所有规则

例如,假设你具有 4 个自动缩放规则:

  • 如果 CPU < 30%,则横向缩减 1 个
  • 如果内存 < 50%,则向内缩减 1
  • 如果 CPU > 75%,则横向扩展 1 个示例
  • 如果内存 > 75%,则横向扩展 1 个实例

然后会执行以下操作:

  • 如果 CPU 为 76% 且内存为 50%,则自动缩放会横向扩展。
  • 如果 CPU 为 50% 且内存为 76%,则自动缩放会横向扩展。

另一方面,如果 CPU 为 25%,内存为 51%,则自动缩放不会自动缩减。 要进行横向缩减,CPU 必须为 29% 且内存为 49%。

始终选择安全的默认实例计数

默认实例数很重要,因为当读取资源指标出现问题时,自动缩放会使用该值。 如果当前容量低于默认值,则自动缩放将扩展到默认值,以确保资源的可用性。 如果当前容量已经高于默认值,自动缩放不会缩减。 选择适合工作负荷的默认实例计数。 有关详细信息,请参阅 自动缩放设置架构

配置自动缩放通知

如果发生以下任一情况,自动缩放会在活动日志中写入记录:

  • 自动缩放功能启动缩放操作。
  • 自动缩放服务成功完成缩放操作。
  • 自动缩放服务无法执行缩放操作。
  • 自动缩放服务不提供用于做出缩放决策的指标。
  • 可以再次使用指标(恢复)来进行缩放决策。
  • 自动缩放检测到摆动并中止缩放尝试。 在这种情况下,你会看到 Flapping 日志类型。 如果看到此日志类型,请考虑阈值的范围是否过窄。
  • 自动缩放检测到摆动,但仍能成功缩放。 在这种情况下,你会看到 FlappingOccurred 日志类型。 如果您看到这种日志类型,则表示自动缩放引擎曾尝试进行缩放(例如,从四个实例缩减到两个实例),但判定这一更改会导致抖动。 相反,自动扩缩引擎将实例数量调整为另一个数值(例如使用三个实例而不是两个),这样就不再会导致波动,因此它便扩展到了这一实例数量。

使用活动日志警报监测自动缩放引擎的运行状况。 一个示例显示了如何创建活动日志警报以监视订阅上的所有自动缩放引擎操作。 另一个示例显示如何创建活动日志警报以监视订阅上所有失败的自动缩放横向缩减/横向扩展操作

除了使用活动日志警报以外,还可以配置电子邮件或 Webhook 通知,以通过自动缩放设置上的通知选项卡获取有关缩放操作的通知。

使用 TLS 1.2 安全地发送数据

若要确保传输到 Azure Monitor 的数据的安全性,请将代理配置为至少使用传输层安全性 (TLS) 1.2。 较旧版本的 TLS/安全套接字层(SSL)易受攻击。 尽管它们目前仍可用于允许向后兼容性,但不要使用它们。 本行业不久之后即会放弃对这些旧协议的支持。

PCI 安全标准委员会设定了 2018 年 6 月 30 日的最后期限,以禁用旧版 TLS/SSL 并升级到更安全的协议。 Azure删除旧版支持后,如果代理无法通过 TLS 1.2 进行通信,则无法将数据发送到Azure Monitor日志。

除非必要,否则不要将代理显式设置为仅使用 TLS 1.2。 最好允许代理自动检测、协商和利用未来的安全标准。 否则,你可能会错过更新标准的增强安全性,并且如果因支持更新的标准而弃用 TLS 1.2,则可能会遇到问题。

后续步骤