Azure 应用服务自动扩缩

注意

自动缩放适用于所有应用类型:Windows 和 Linux(作为代码和容器部署)。 部署槽位流量不支持自动缩放。

自动缩放是一种新的横向扩展选项,用于自动处理 Web 应用和应用服务计划的缩放决策。 它不同于预先存在的 Azure 自动缩放,后者允许你根据计划和资源定义缩放规则。 使用自动缩放,你可以调整缩放设置以提高应用的性能并避免冷启动问题。 该平台会预热实例以在横向扩展时充当缓冲区,确保实现性能的平稳转换。 每个实例(包括预热的实例)按秒收费。

应用服务上可用的横向扩展和横向缩减选项的比较:

  手动 自动缩放 自动缩放
可用定价层 基本和更高 标准和更高 Premium V2(P1V2、P2V2、P3V2)定价层
基于规则的扩缩 否,平台会根据 HTTP 流量管理横向扩展和横向缩减。
基于时间计划的扩缩
始终就绪实例 无,Web 应用在手动扩缩的实例上运行。 否,Web 应用根据已为自动缩放规则定义的阈值在横向扩展操作期间可用的其他实例上运行。 有(至少 1 个)
预热实例 有(默认为 1 个)
每应用最大值 No

自动扩缩的工作原理

请为应用服务计划启用自动扩缩,并为每个 Web 应用配置一系列实例。 当 Web 应用开始接收 HTTP 流量时,应用服务会监视相应负载并添加实例。 当一个应用服务计划中的多个 Web 应用需要同时横向扩展时,可能会共享资源。

下面是一些应自动进行横向扩展的场景:

  • 你不希望基于资源指标设置自动扩缩规则。
  • 你希望同一应用服务计划中的 Web 应用能够以不同的方式相互独立地进行扩缩。
  • Web 应用连接到了数据库或旧系统,其扩缩速度可能不如 Web 应用快。 通过自动扩缩,可以设置应用服务计划可以扩展到的最大实例数。 此设置有助于避免 Web 应用给后端造成过重的负担。

启用自动扩缩

“最大突发数”是应用服务计划可以根据传入的 HTTP 请求增加到的最大实例数。 对于高级 v2 和 v3 计划,可以设置最多 30 个实例的最大突发数。 最大突发数必须等于或大于为应用服务计划指定的辅助角色数。

若要启用自动缩放,请导航到 Web 应用的左侧菜单并选择“横向扩展(应用服务计划)”。 选择“自动”,更新“最大突发数”值,然后选择“保存”按钮。

在 Azure 门户中启用自动扩缩

设置最小 Web 应用实例数

“始终就绪实例数”是一种应用级设置,用于指定最小实例数。 如果负载超过始终就绪实例可以处理的负载,则会添加额外的实例(最多为应用服务计划的指定最大突发数)。

若要设置 Web 应用实例的最小数量,请导航到 Web 应用的左侧菜单并选择“横向扩展(应用服务计划)”。 更新“始终就绪实例”值,然后选择“保存”按钮。

“始终就绪实例数”屏幕截图

设置最大 Web 应用实例数

“最大扩缩限制”将设置 Web 应用可扩展到的最大实例数。 当下游组件(如数据库)的吞吐量有限时,最大扩缩限制将会有所帮助。 每应用最大值可以介于 1 和最大突发数之间。

若要设置 Web 应用实例的最大数量,请导航到 Web 应用的左侧菜单并选择“横向扩展(应用服务计划)”。 选择“强制实施横向扩展限制”,更新“最大缩放限制”,然后选择“保存”按钮。

“最大扩缩限制”屏幕截图

更新预热实例

预热实例设置将在 HTTP 扩缩和激活事件期间提供热实例作为缓冲区。 预热实例将持续提供缓冲,直至达到最大横向扩展限制。 默认的预热实例计数为 1,在大多数情况下此值应保留为 1。

无法在门户中更改预热实例设置,必须改用 Azure CLI 才行。

禁用自动扩缩

若要禁用自动缩放,请导航到 Web 应用的左侧菜单并选择“横向扩展(应用服务计划)”。 选择“手动”,然后选择“保存”按钮。

手动扩缩的屏幕截图

自动扩缩是否支持 Azure Functions 应用?

注意

当应用服务 Web 应用和 Azure 函数应用位于同一应用服务计划中时,自动缩放会处于禁用状态。

否,只能在要启用自动扩缩的应用服务计划中使用 Azure 应用服务 Web 应用。 对于 Azure Functions,建议改为使用 Azure Functions 高级计划

自动缩放如何在后台工作?

设置为自动缩放的应用程序会持续受监视,辅助角色运行状况评估至少每隔几秒就进行一次。 如果系统检测到应用程序负载增加,运行状况检查将变得更加频繁。 如果辅助角色运行状况恶化且请求变慢,则会请求更多实例。 添加实例的速度因单个应用程序的负载模式和启动时间而异。 对于启动时间短且负载间歇性突发的应用程序,可能会每隔几秒到一分钟就会添加一个虚拟机。

负载消退后,平台会启动审查以了解是否可能进行横向缩减。 此过程通常在负载停止增加后大约 5-10 分钟开始。 在横向缩减期间,将以最大速率(每隔几秒到一分钟一个)删除实例。

此外,如果在同一应用服务计划中部署了多个 Web 应用程序,平台会尽力根据每个单独 Web 应用程序的负载在各可用实例之间分配资源。

如何对预热实例计费?

若要了解如何对预付费实例付费,请考虑此场景:假设 Web 应用有五个始终就绪的实例,以及一个预热实例(设置为默认值)。

当 Web 应用处于空闲状态且未收到任何 HTTP 请求时,它会使用五个始终就绪的实例运行。 在此期间,不会对预热实例计费,因为未使用始终就绪的实例,并且因此没有分配预热实例。

但是,一旦 Web 应用开始接收 HTTP 请求并且五个始终就绪的实例处于活动状态,就会分配一个预热实例,并开始对其计费。

如果 HTTP 请求的速率持续增加并且应用服务决定扩展到最初的五个实例之外,它将开始利用预热实例。 这意味着,当有六个活动实例时,会立即预配第七个实例来填充预热缓冲区。

此缩放和预热过程将继续,直至达到应用的最大实例计数。 请务必注意,如果超过最大实例计数,则不会预热或激活任何实例。

为何 AppServiceHTTPLogs 具有类似于“/admin/host/ping”且状态为 404 的日志条目?

应用服务自动缩放会定期检查 /admin/host/ping 终结点以及平台固有的其他运行状况检查机制。 这些检查是专门实现的功能。 有时,由于现有的平台配置,这些 ping 可能会返回 404 错误。 但是,请务必注意,这些 404 错误不应影响应用的可用性或缩放性能。

如果 Web 应用返回 5xx 状态,则这些终结点 ping 可能会导致间歇性重启,但这种情况并不常见。 我们目前正在实施增强功能来解决这些间歇性重启问题。 在此之前,请确保 Web 应用不会在此终结点上返回 5xx 状态。 请注意,这些 ping 端点无法自定义。

如何在自动缩放事件期间跟踪横向扩展实例数?

AutomaticScalingInstanceCount 指标将报告运行应用的虚拟机数量,包括预热实例(如果已部署)。 此指标还可用于跟踪 Web 应用在某个自动缩放事件期间横向扩展的最大实例数。 此指标仅适用于启用了自动缩放的应用。

ARR 相关性如何影响自动缩放?

Azure 应用服务使用称为 ARR 相关性的应用程序请求路由 Cookie。 ARR 相关性 Cookie 会限制缩放,因为它们仅将请求发送到与 Cookie 关联的服务器,而不是任何可用的实例。 对于存储状态的应用,最好纵向扩展(增加单个实例上的资源)。 对于无状态应用,横向扩展(添加更多实例)可提供更大的灵活性和可伸缩性。 默认情况下,在应用服务上启用 ARR 相关性 Cookie。 根据应用程序需求,可以选择在使用自动缩放时禁用 ARR 关联 Cookie。

若要禁用 ARR 相关性 Cookie:请选择应用服务应用,然后在“设置”下,选择“配置”。 接下来,选择“常规设置”选项卡。在“ARR 关联”下,选择“关闭”,然后选择“保存”按钮。

更多资源