Azure 应用服务自动扩缩

注意

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

自动扩展是一种扩展选项,可自动处理您的 Web 应用和应用服务计划的扩展决策。 它不同于 Azure 自动缩放,它允许根据计划和资源定义缩放规则。

使用自动缩放,你可以调整缩放设置以提高应用的性能并避免冷启动问题。 该平台会预热实例以在横向扩展时充当缓冲区,确保实现性能的平稳转换。 每个实例(包括预热的实例)按秒收费。

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

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

自动扩缩的工作原理

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

下面是应选择自动横向扩展的一些情况:

  • 你不希望基于资源指标设置自动扩缩规则。
  • 你希望同一应用服务计划内的 Web 应用能够彼此独立地进行不同方式的扩展。
  • Web 应用已连接到数据库或旧系统,该系统可能无法像 Web 应用那样快速缩放。 通过自动缩放,可以设置应用服务计划可缩放到的最大实例数。 此设置可帮助 Web 应用避免使后端不堪重负。

启用自动扩缩

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

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

显示 Azure 门户中的自动缩放的屏幕截图

设置 Web 应用实例的最小数量

应用级设置“始终就绪的实例数”用于指定最小实例数。 如果负载超过在 Always ready 实例中设置的最小数目,则会添加额外实例,直至达到应用服务计划中规定的 最大突发 值。

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

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

设置 Web 应用实例的最大数目

最大缩放限制值设置 Web 应用可缩放到的最大实例数。 当下游组件(如数据库)的吞吐量有限时, 最大缩放限制 非常有用。 每应用最大值可以介于 1 和最大突发值之间。

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

最大缩放限制的屏幕截图。

更新预热实例

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

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

禁用自动扩缩

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

手动缩放的屏幕截图。

常见问题

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

不,你只能在想要启用自动缩放的应用服务计划中拥有 Azure 应用服务的 Web 应用。 对于 Azure Functions 应用,我们建议改用 Azure Functions Premium 计划

注意

当应用服务 Web 应用和 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:请选择应用服务应用,然后在“设置”下,选择“配置”。 接下来,选择“ 常规设置 ”选项卡。在 “会话关联”下,选择“ 关闭 ”,然后选择“ 保存 ”按钮。