自动缩放最佳实践

Azure Monitor 自动缩放仅适用于虚拟机规模集云服务应用服务 - Web 应用API 管理服务

自动缩放概念

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

自动缩放最佳做法

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

确保最大和最小值不同,并且它们之间具有足够的余量

如果设置的最小值和最大值都为 2,并且当前的实例计数为 2,则不可能执行缩放操作。 在最大和最小实例计数(包含)之间保留足够的余量。 自动缩放始终在这些限值之间执行缩放操作。

手动缩放通过自动缩放最小和最大值来重置

如果手动将实例计数更新为高于或低于最大值的值,则自动缩放引擎会自动缩放回最小值(如果低于)或最大值(如果高于)。 例如,将范围设置为 3 到 6。 如果有一个正在运行的实例,则自动缩放引擎会在下次运行时缩放为三个实例。 同样,如果将缩放规模手动设置为八个实例,则自动缩放会在下次运行时收缩回六个实例。 手动缩放效果只是暂时的,除非也重置了自动缩放规则。

始终使用执行增加和减少的扩大和缩小规则组合

如果仅使用组合的一个部件,则自动缩放将仅在单个方向采取操作(横向扩展或收缩),直至它达到配置文件中定义的最大或最小实例计数。 这不是最佳的,理想情况下,你希望资源在使用率过高时纵向扩展以确保可用性。 同样,当使用率过低时,你希望资源纵向收缩,以便可以实现成本节省。

为诊断指标选择相应统计信息

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

认真为所有指标类型选择阈值

我们建议基于实际情况为扩大和缩小认真选择不同阈值。

我们 建议不要 使用如同以下示例的自动缩放设置,其中针对扩大和缩小条件的阈值相同或非常相似:

  • 当线程计数 <= 600 时,按 1 计数增加实例
  • 当线程计数 >= 600 时,按 1 计数减少实例

让我们看一下可能会导致看起来令人困惑的行为的示例。 请考虑以下情景。

  1. 假设开始时有两个实例,随后每个实例的平均线程数增长到 625。
  2. 自动缩放会通过添加第三个实例进行横向扩展。
  3. 接下来,假定实例间的平均线程数下降到 575。
  4. 进行减少之前,自动缩放会尝试估计缩小后的最终状态。 例如,575 x 3(当前实例计数)= 1,725/2(减少后的最终实例数)= 862.5 个线程。 这意味着如果平均线程计数保持不变,甚至是仅仅少量下降,则自动缩放必须立即再次扩大(即使在进行缩小之后)。 但是,如果它再次增加,则整个过程会重复,从而导致无限循环。
  5. 为了避免这种情况(称之为“波动”),自动缩放根本不会减少。 相反,它会跳过,并在服务作业下次执行时再次重新评估条件。 这可能会使许多人感到困惑,因为在平均线程计数是 575 时,自动缩放似乎未起作用。

在缩小期间进行估计是为了避免缩小和扩大操作持续来回切换的“摆动”情况。 为扩大和缩小选择相同阈值时,请记住此行为。

我们建议在扩大阈值和缩小阈值之间选择足够的余量。 作为示例,请考虑以下更好的规则组合。

  • 当 CPU% >= 80 时,按 1 计数增加实例
  • 当 CPU% <= 60 时,按 1 计数减少实例

在这种情况下,

  1. 假定开始有 2 个实例。
  2. 如果实例间的平均 CPU% 达到 80,则自动缩放会通过添加第三个实例来进行扩大。
  3. 现在假定随着时间的推移,CPU% 下降到 60。
  4. 自动缩放的缩小规则会估计缩小后的最终动态。 例如,60 x 3(当前实例计数)= 180/2(减少后的最终实例数)= 90。 因此自动缩放不会缩小,因为它必须立即再次扩大。 相反,它会跳过减少。
  5. 下次进行自动缩放检查时,CPU 会继续减少到 50。 随后再次估计 - 50 x 3 个实例 = 150/2 个实例 = 75,这低于扩大阈值 80,因此可以成功缩小为 2 个实例。

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

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

我们来通过一个示例演示它,以确保更好地了解行为。

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

假设出现以下情景:

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

有关在自动缩放设置中配置多个配置文件时进行自动缩放的注意事项

在自动缩放设置中,可以选择默认配置文件(这会始终应用,对计划或时间没有任何依赖),也可以选择定期配置文件或用于具有日期和时间范围的固定期间的配置文件。

当自动缩放服务处理它们时,它始终按照以下顺序进行检查:

  1. 固定的日期配置文件
  2. 定期配置文件
  3. 默认(“始终”)配置文件

如果满足配置文件条件,则自动缩放不会检查位于其下的下一个配置文件条件。 自动缩放一次只处理一个配置文件。 这意味着如果还要包括来自较低层配置文件的处理条件,则必须在当前配置文件中也包含这些规则。

我们使用示例对此进行回顾:

下图显示一个自动缩放设置,其默认配置文件的最小实例数 = 2,最大实例数 = 10。 在此示例中,规则配置为在队列中的消息计数大于 10 时进行扩大,在队列中的消息计数小于 3 时进行缩小。 因此,现在资源可以在 2 到 10 个实例之间进行缩放。

此外,为星期一设置了定期配置文件。 它设置为最小实例数 = 3,并且最大实例数 = 10。 这意味着在星期一,自动缩放首次检查此条件时,如果实例计数是 2,则它缩放为新的最小值 3。 只要自动缩放继续发现匹配此配置文件条件(星期一),它便只处理为此配置文件配置的基于 CPU 的扩大/缩小规则。 此时,它不会检查队列长度。 但是,如果还要检查队列长度条件,则应在星期一配置文件中也包括默认配置文件中的那些规则。

同样,自动缩放切换回默认配置文件时,它会首先检查是否符合最小值和最大值条件。 如果当时的实例数是 12,则它会缩小为 10(默认配置文件允许的最大值)。

自动缩放设置

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

在某些情况下可能必须在一个配置文件中设置多个规则。 设置了多个规则时,服务会使用以下自动缩放规则集。

进行 扩大时,如果满足任何规则,则自动缩放会运行。 进行 缩小时,自动缩放需要满足所有规则。

为了进一步说明,假定你具有以下 4 个自动缩放规则:

  • 如果 CPU < 30 %,则减少 1 个
  • 如果内存 < 50%,则减少 1 个
  • 如果 CPU > 75 %,则增加 1 个
  • 如果内存 > 75%,则增加 1 个

随后发生以下事件:

  • 如果 CPU 是 76% 且内存是 50%,则我们会进行扩大。
  • 如果 CPU 是 50% 且内存是 76%,则我们会进行扩大。

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

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

默认实例计数十分重要,当指标不可用时,自动缩放将服务缩放到该计数。 因此,请选择对工作负荷安全的默认实例计数。

配置自动缩放通知

发生以下任何一种情况时,自动缩放会发布至活动日志:

  • 自动缩放发出缩放操作
  • 自动缩放服务成功完成缩放操作
  • 自动缩放服务未能执行缩放操作。
  • 自动缩放服务无法使用指标进行缩放决策。
  • 指标再次可用(恢复)于进行缩放决策。

还可以使用活动日志警报监视自动缩放引擎的运行状况。 下面举例说明如何创建活动日志警报以监视订阅上的所有自动缩放引擎操作创建活动日志警报以监视订阅上所有失败的自动缩放缩小/扩大操作

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

后续步骤