自动缩放的最佳做法
Azure Monitor 自动缩放仅适用于 Azure 虚拟机规模集、Azure 云服务、[Azure 应用服务 Web 应用功能]/app-service/web/) 和 Azure API 管理。
自动缩放概念
- 一个资源只能具有一个自动缩放设置。
- 自动缩放设置可以具有一个或多个配置文件,每个配置文件可以具有一个或多个自动缩放规则。
- 自动缩放设置可水平缩放实例,它在增加实例时是扩大,在减少实例数时是缩小。
- 自动缩放设置具有最大、最小和默认实例值。
- 自动缩放作业始终读取要作为缩放依据的关联指标,检查它是否超过针对扩大或缩小配置的阈值。 可以在 Azure 监视器自动缩放常用指标查看可以作为自动缩放依据的指标列表。
- 所有阈值都在实例级别进行计算。 例如,“如果实例计数为 2,则在平均 CPU > 80% 时横向扩展 1 个实例”。它表示在所有实例的平均 CPU 大于 80% 时进行横向扩展。
- 所有自动缩放失败将会记录到活动日志中。 然后可以配置活动日志警报,以便在出现自动缩放故障时,可通过电子邮件、短信或 Webhook 获得通知。
- 同样,所有成功的缩放操作也会发布到活动日志中。 然后可以配置活动日志警报,以便在自动缩放操作成功时,可通过电子邮件、短信或 Webhook 获得通知。 还可以配置电子邮件或 Webhook 通知,以通过自动缩放设置上的通知选项卡获取有关成功缩放操作的通知。
自动缩放最佳做法
使用自动缩放时,可使用以下最佳做法。
确保最大和最小值不同,并且它们之间具有足够的余量
如果设置的最小值为 2,最大值为 2,并且当前实例计数为 2,则不可能发生任何缩放操作。 在最大和最小实例计数之间保留足够的余量(包括端值)。 自动缩放始终在这些限制之间进行。
自动缩放最小值和最大值可重置手动缩放
如果手动将实例计数更新为高于或低于最大值的值,则自动缩放引擎会自动缩放回最小值(如果低于)或最大值(如果高于)。 例如,将范围设置在 3 和 6 之间。 如果有一个正在运行的实例,则自动缩放引擎会在下次运行时缩放为三个实例。 同样,如果将缩放规模手动设置为八个实例,则自动缩放会在下次运行时收缩回六个实例。 除非还重置了自动缩放规则,否则手动缩放效果只是暂时的。
始终使用执行增加和减少的扩大和缩小规则组合
如果仅使用组合的一个部件,按配置文件所定义,自动缩放在达到最大或最小实例计数前将仅在单个方向执行操作(横向扩展或缩减)。 这种情况不是最佳情况。 理想情况下,你希望资源在使用率较高时可以横向扩展以确保可用性。 同样,当使用率较低时,你会希望资源横向缩减,以便可以实现成本节省。
使用横向缩减和横向扩展规则时,最好使用相同的指标来控制两二者。 否则,可能会同时满足横向缩减和横向扩展条件,从而导致某种程度的回摆。 例如,不建议使用以下规则组合,因为其中不存在适用于内存使用率的横向缩减规则:
- 如果 CPU > 90%,则横向扩展 1 个
- 如果内存 > 90%,则横向扩展 1 个
- 如果 CPU < 45 %,则横向缩减 1 个
在此示例中,可能会遇到内存使用率超过 90% 但 CPU 使用率低于 45% 的情况。 只要同时满足这两个条件,此方案就会导致回摆。
为诊断指标选择相应统计信息
对于诊断指标,可以选择“平均值”、“最小值”、“最大值”和“总计”作为进行缩放所依据的指标。 最常见的统计信息是“平均值” 。
有关特殊指标的缩放阈值的注意事项
对于特殊指标(如 Azure 存储或 Azure 服务总线队列长度指标),阈值是按照当前实例数的可用消息平均数。 请慎重选择此指标的阈值。
我们来通过一个示例进行说明,以确保更好地理解该行为:
- 当存储队列消息计数 >= 50 时,按 1 增加实例计数
- 当存储队列消息计数 <= 10 时,按 1 减少实例计数
考虑以下序列:
- 有两个存储队列实例。
- 消息不断传入,在查看存储队列时,总计数达到 50。 可能认为自动缩放应启动扩大操作。 但请注意,它仍是每个实例 50/2 = 25 个消息。 因此,不会进行横向扩展。 要进行第一次横向扩展,存储队列中的消息总计应为 100。
- 接下来,假定总消息计数达到 100。
- 由于横向扩展操作,会添加第三个存储队列实例。 在队列中的总消息计数达到 150 之前,不会进行下一次横向扩展操作,因为 150/3 = 50。
- 现在队列中的消息数量变小。 在有三个实例的情况下,当所有队列中的总消息数加起来达到 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,则可能会遇到问题。