高密度ホスティング用にアプリごとのスケーリングを実装する

Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「 Azure PowerShell を AzureRM から Az に移行する」を参照してください。

Azure App Service アプリは、実行されている App Service プラン をスケーリングすることでスケーリングできます。 デフォルトではプランレベルの perSiteScaling プロパティは falseされており、すべてのアプリとデプロイスロットはプラン内の利用可能なすべてのインスタンスを使用します。

perSiteScalingtrueされると、各アプリや展開スロットごとに独自のsiteConfig.numberOfWorkers制限が設定されることがあります。 例えば、プランでは 10 ワーカーの容量が設定されている一方で、アプリでは 5 ワーカーの上限が設定されています。 各デプロイ スロットにはそれぞれ個別の制限があります。本番アプリを構成しても、そのスロットが構成されるわけではありません。

  • アプリごとのスケーリングは、StandardPremiumPremium V2、Premium V3Isolated の価格レベルでのみ使用できます。
  • アプリごとの制限は、App Serviceプランやその請求のために設定された専用容量を減らすものではありません。

これらの価値は明確にしてください:

  • 構成プラン容量:プランの sku.capacity 価値。
  • 設定されたアプリまたはスロットワーカーの上限:リソースの siteConfig.numberOfWorkers 価値。
  • 観測されたアクティブなアプリ インスタンス: ある時点での実行時の観測結果。 実際の数は利用可能なプラン労働者を超えてはなりません。 計画のスケールインにより、この数を設定されたアプリやスロットの制限以下に抑えることができます。

このプラットフォームは、ベストエフォート方式を用いて、特定のプラン従業員にアプリを配置します。 配置はメートル法に依存しません。

Scenario 値意味論
1 の極限 アプリやスロットは最大で1人のプランワーカーを利用できます。 この値は、単一作業者の配置が作業量に対して許容できる場合にのみ選びます。
上限が 1 より大きい この価値は、アプリやスロットが使用できる複数のプランワーカー数に上限を設けています。 実際のアクティブインスタンスは少ない場合もあります。
利用可能なプラン容量を超える上限 利用可能なプランのワーカー数が、実際のアプリまたはスロットのインスタンス数の上限となります。
スケールインを計画 プランワーカーを外した後、アプリやスロットは設定された制限より少ないワーカーで動作できます。

アプリごとのスケーリングは、プラン内の利用可能なワーカー内で固定的かつ指標に依存しない配置です。 需要に反応せず、プランの容量も変更しません。 需要に応じて容量を変更するには、自動スケーリングAzure Monitorの自動スケーリングを使います。

Von Bedeutung

ゾーン冗長性 では App Service プランのインスタンスが分散配置されますが、見えない形でアプリのレプリカが作成されるわけではありません。 アプリごとのスケーリングでは、アプリまたはスロットの上限が 1 の場合、配置先は高々 1 つのプラン インスタンスに限られ、同時実行されるクロスゾーン レプリカとして扱ってはなりません。 2以上の制限は複数の異なるプランワーカーに配置することを許可しますが、それらのアプリインスタンスが物理的なゾーンにまたがっているという公的な保証は提供しません。 信頼性設計の指針については、「 Reliability in App Service」を参照してください。

物件モデルと前提条件

対応価格帯、プラン、アプリ、スロットを更新できるアカウント、そして選んだツールの最新バージョンを使いましょう。 例はAzure CLI 2.89.1とAz PowerShell 16.2.0を使用しています。

Scope リソース プロパティ
平面図の特徴 properties.perSiteScaling true
容量を計画する sku.capacity 10
アプリ希望の制限 properties.siteConfig.numberOfWorkers 5
希望スロットの上限 properties.siteConfig.numberOfWorkers 2
アプリまたはスロットの構成の GET 応答 properties.numberOfWorkers 5 または 2

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 は容量です。 同名のウェブアプリ設定オプションが、希望するアプリまたはスロットの制限です。 設定された値を確認してください:

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

これらの値は設定であり、観測されたアクティブインスタンス数ではありません。 ランタイム配置は引き続き最善努力であり、利用可能なプランワーカーによって制限されます。 アプリごとのスケーリングとゾーン冗長性を組み合わせる前に、プランの容量と各アプリまたはスロットの制限を確認してください。 既存のApp Serviceプランに対してゾーン冗長を設定してください。

シナリオに合わせて高密度ホスティングを設定しましょう

アプリごとのスケーリングは、グローバルなAzureリージョンおよびApp Service Environmentsの両方で利用可能です。 すべてのワークロードに一つの制限を適用するのではなく、ワークロードの容量や信頼性の要件に応じてアプリとスロットの制限を選びましょう。

高密度ホスティングのシナリオ:

  1. 高密度プランとして App Service プランを指定し、目的の容量にスケールアウトします。

  2. App Service プランで PerSiteScaling フラグを true に設定します。

  3. 各アプリと展開スロットの numberOfWorkers 制限は、そのニーズに応じて設定してください。

    • 1の制限は最も高い密度を提供しますが、最大1人のプランワーカーに配置が許容されるワークロードにのみ使用してください。
    • ワークロードを、利用可能なプラン容量の範囲で複数の異なるプラン ワーカーに配置できるようにする場合は、2 以上の制限を使用してください。
  4. 業務量の要件が変わるごとに、制限は独立して見直しましょう。 例えば、利用率の高いアプリは処理能力を増やすために 3 の制限を設けることができ、別のアプリは単一ワーカー配置が適切な場合に 1 を利用できます。