Azure 应用服务自动扩缩

注意

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

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

借助自动缩放,可以调整缩放设置以提高性能并减少冷启动延迟。 平台会预热实例,作为缓冲器,确保平滑的缩放过渡。 你将按每秒为每个实例(包括预热实例)收取费用。

在您开始之前

应用服务中的自动尺度功能与自动缩放特性不同。
如果希望应用服务根据 HTTP 流量自动处理缩放,而无需创建规则或计划,请使用自动缩放。

自动缩放(本文):

  • 根据传入的 HTTP 流量自动缩放
  • 每个应用单独配置
  • 支持始终保持可用、每个应用的限制、最大突发量和预热的实例

自动缩放:

  • 使用指标(CPU、内存、队列长度、自定义指标)
  • 支持基于计划的缩放
  • 适用于整个应用服务计划

如果需要 CPU、内存或基于时间的缩放,请改用自动缩放。
应用服务计划中只应激活一种缩放方法。

应用服务中可用的横向扩展选项

  手动 自动缩放 自动缩放
可用级别 基本和更高 标准及以上 Premium v2 和 Premium v3
基于规则的扩缩 否(基于流量)
基于时间计划的扩缩
始终就绪的实例 有(至少 1 个)
预热实例 有(默认为 1 个)
每应用最大值
ARR 关联行为 默认开启 默认启用,除非手动禁用 应手动禁用

自动扩缩的工作原理

为应用服务计划启用自动缩放并为每个 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 相关性如何影响自动缩放?

注意

在应用服务计划中启用自动缩放时,计划中的所有预先存在的应用将自动禁用 ARR 相关性。

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

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

为什么我的应用服务计划显示比应用中的始终激活设置更多的已分配实例?

当计划分配的实例高于计划中任何应用使用的最高始终就绪实例计数时,可能会发生这种情况。 分配的实例表示计划必须运行的最小实例数。 如果此值高于始终就绪值,计划将继续使用该最小值。

若要修正此配置,请更新计划中任何应用的始终就绪实例数量。 必须更改该值。 保存相同的值不会触发重新计算。 更新后,计划会将其分配的实例计数设置为计划中所有应用的最高始终就绪值。

必须使用 CLI 或 Azure 资源管理器 API 完成此更新。 Azure 门户目前无法正确应用重新计算。

例子: 计划可能有 7 个分配的实例。 计划中的应用可能始终具有 2、3 和 5 的常备值。 由于最小实例数为 7,因此计费以 7 为基准。 如果更改任何应用的始终就绪值(例如 3 到 4),则计划会重新计算。 然后,它将分配的实例计数设置为 5,这是始终就绪的最高值。