实现面向高密度托管的按应用扩展

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 若要开始,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

可以通过缩放运行 Azure 应用服务应用的应用服务计划来缩放应用。 默认情况下,计划级 perSiteScaling 属性为 false,每个应用和部署时隙都使用计划中所有可用的实例。

perSiteScalingtrue 时,每个应用和部署槽位都可以有自己的 siteConfig.numberOfWorkers 限制。 例如,一个计划的配置容量可以是10名员工,而应用的配置限制是5名员工。 每个部署槽位都有自己的限制;配置生产应用并不会同时配置其槽位。

注意

  • 按应用缩放仅适用于 标准高级高级 V2高级 V3独立 定价等级。
  • 单个应用的限制并不会单独减少为应用服务计划或其计费配置的专用容量。

保持以下数值的区分:

  • 已配置的套餐容量:套餐的 sku.capacity 值。
  • 配置的应用或部署槽位辅助角色限制:资源的 siteConfig.numberOfWorkers 值。
  • 观察到的活动应用实例:某一时刻的运行时观测结果。 实际人数不能超过可用计划工作人员。 计划缩容可将此数量减少到低于配置的应用或槽位限制。

该平台通过尽力而为的方式,将应用程序分配给不同的计划工作人员。 排名与度量无关。

Scenario 值语义
1 的极限 该应用或时段最多只能使用一名可用的套餐工作人员。 只有当单一工人安置符合工作量时,才选择此数值。
极限大于 1 价值限制了应用或时段能使用的不同计划工作人员数量。 实际活跃的实例可能更少。
超出当前可用套餐容量上限 可用的计划工作进程决定了实际应用或部署槽位实例的上限。
计划缩容 在移除计划工人后,应用或时段可用少于配置限制的员工数运行。

每个应用的扩展是固定的、与指标无关的配置,分布在计划的可用员工中。 它不响应需求,也不改变计划容量。 要根据需求调整容量,可以使用自动缩放Azure Monitor 自动扩展

重要

区域冗余 分发应用服务计划实例;它不会创建隐藏的应用副本。 采用按应用缩放时,应用或槽位限制为 1 表示最多只能部署到一个计划实例上,且不得将其视为同时存在的跨区域副本。 限制为 2 或更高时,可以将应用部署到多个不同的计划工作器上,但并不公开保证这些应用实例分布在不同的物理区域。 关于可靠性设计指导,请参见 应用服务中的可靠性

物业模型及前提条件

使用支持的定价层级、一个可以更新套餐、应用和时段的账户,以及你所选工具的当前版本。 示例使用 Azure CLI 2.89.1 和 Az PowerShell 16.2.0。

Scope 资源属性 Example
规划功能 properties.perSiteScaling true
计划容量 sku.capacity 10
应用期望限制 properties.siteConfig.numberOfWorkers 5
槽位期望限制 properties.siteConfig.numberOfWorkers 2
应用或插槽配置 GET 响应 properties.numberOfWorkers 52

在 Azure CLI 中,类似名称的选项有不同的范围:az appservice plan ... --number-of-workers设置计划容量,以及az webapp config set ... --number-of-workers设置应用或时段限制。

配置每个应用的缩放

使用首选工具对应的选项卡。 在运行命令或部署模板前,先替换占位符和位置。

选择计划的创建步骤或更新步骤。 更新步骤只会更改 perSiteScaling;不会更改现有的计划容量。

resourceGroup='<resource-group-name>'
planName='<app-service-plan-name>'
appName='<app-name>'
slotName='staging'
location='westus3'

# Create a plan with capacity 10 and per-app scaling.
az appservice plan create \
    --resource-group $resourceGroup \
    --name $planName \
    --location $location \
    --sku P1V3 \
    --number-of-workers 10 \
    --per-site-scaling

# Or enable per-app scaling on an existing plan without changing its capacity.
az appservice plan update \
    --resource-group $resourceGroup \
    --name $planName \
    --set properties.perSiteScaling=true

# Configure the production app and its staging slot independently.
az webapp config set \
    --resource-group $resourceGroup \
    --name $appName \
    --number-of-workers 5

az webapp config set \
    --resource-group $resourceGroup \
    --name $appName \
    --slot $slotName \
    --number-of-workers 2

此处,套餐 --number-of-workers 10 指的是容量。 同名的 Web 应用配置选项就是所需的应用或槽位限制。 检查配置值:

az appservice plan show \
    --resource-group $resourceGroup \
    --name $planName \
    --query "{planCapacity:sku.capacity, perSiteScaling:perSiteScaling}"

az webapp config show \
    --resource-group $resourceGroup \
    --name $appName \
    --query "{appWorkerLimit:numberOfWorkers}"

az webapp config show \
    --resource-group $resourceGroup \
    --name $appName \
    --slot $slotName \
    --query "{slotWorkerLimit:numberOfWorkers}"

关于命令细节,请参见 az appservice planaz webapp config

验证配置

每次更改或部署后,检查每个配置值。

价值 预期示例 在哪里验证
规划功能 true 计划响应 properties.perSiteScaling
计划容量 10 计划响应 sku.capacity
生产应用的期望限制 5 生产config/web响应properties.numberOfWorkers
分级槽期望限制 2 槽位config/web响应properties.numberOfWorkers

这些值是配置值,而非观察到的活跃实例计数。 运行时的布置仍为尽力而为,并受限于可用的计划工作者。 在将每个应用的扩展与区域冗余结合之前,请先审查套餐容量以及每个应用或时段的限制。 为现有的应用服务计划设置区域冗余

为你的场景配置高密度托管

全球 Azure 区域和应用服务环境均支持按应用扩展。 根据工作负载容量和可靠性要求选择应用和时段限制,而不是对每个工作负载都套用一个限制。

对于高密度托管场景:

  1. 将应用服务计划指定为高密度计划,并将其扩展到所需的容量。

  2. 在应用服务计划中将 PerSiteScaling 标志设置为 true。

  3. 根据每个应用和部署时段 numberOfWorkers 的需求设定限制。

    • 将限制设为 1 时,可实现最高密度,但仅适用于可以接受最多放置在一个计划辅助角色上的工作负载。
    • 当工作负载应可被放置到多个不同的计划工作器上时,在计划有可用容量的前提下,应使用 2 或更高的限制值。
  4. 在工作负载要求发生变化时,单独审查限制。 例如,使用率更高的应用可以使用 的 3 限制以增加处理能力,而另一个应用则在适合单一员工配置时使用 1