Hospedagem de alta densidade no Serviço de Aplicativo do Azure usando escalonamento por aplicativo
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Ao usar o Serviço de Aplicativo, você pode dimensionar seus aplicativos dimensionando o plano do Serviço de Aplicativo em que eles são executados. Quando vários aplicativos estão em execução no mesmo plano do Serviço de Aplicativo, cada instância em expansão é executada em todos os aplicativos no plano.
O dimensionamento por aplicativo pode ser habilitado no nível do plano do Serviço de Aplicativo para permitir o dimensionamento de um aplicativo independentemente do plano do Serviço de Aplicativo que o hospeda. Dessa forma, um Plano do Serviço de Aplicativo pode ser dimensionado para 10 instâncias, mas um aplicativo pode ser configurado para usar apenas cinco.
Observação
O dimensionamento por aplicativo está disponível somente para camadas de preço Standard, Premium, Premium V2, Premium V3 e Isolado.
Os aplicativos são alocados para o plano do Serviço de Aplicativo disponível usando uma abordagem de melhor esforço para uma distribuição uniforme entre instâncias. Embora uma distribuição uniforme não seja garantida, a plataforma garantirá que duas instâncias do mesmo aplicativo não serão hospedadas na mesma instância do plano do Serviço de Aplicativo.
A plataforma não depende de métricas para decidir sobre a alocação de trabalho. Os aplicativos são rebalanceados somente quando instâncias são adicionadas ou removidas do plano do Serviço de Aplicativo.
Dimensionamento por aplicativo usando PowerShell
Crie um plano com dimensionamento por aplicativo passando o parâmetro -PerSiteScaling $true
para o New-AzAppServicePlan
cmdlet.
New-AzAppServicePlan -ResourceGroupName $ResourceGroup -Name $AppServicePlan `
-Location $Location `
-Tier Premium -WorkerSize Small `
-NumberofWorkers 5 -PerSiteScaling $true
Habilite o escalonamento por aplicativo com um Plano do Serviço de Aplicativo existente passando o parâmetro -PerSiteScaling $true
para o Set-AzAppServicePlan
cmdlet.
# Enable per-app scaling for the App Service Plan using the "PerSiteScaling" parameter.
Set-AzAppServicePlan -ResourceGroupName $ResourceGroup `
-Name $AppServicePlan -PerSiteScaling $true
No nível do aplicativo, configure o número de instâncias que o aplicativo pode usar no plano do serviço de aplicativo.
No exemplo abaixo, o aplicativo está limitado a duas instâncias, independentemente de para quantas instâncias o plano do serviço de aplicativo subjacente pode ser dimensionado.
# Get the app we want to configure to use "PerSiteScaling"
$newapp = Get-AzWebApp -ResourceGroupName $ResourceGroup -Name $webapp
# Modify the NumberOfWorkers setting to the desired value.
$newapp.SiteConfig.NumberOfWorkers = 2
# Post updated app back to azure
Set-AzWebApp $newapp
Importante
$newapp.SiteConfig.NumberOfWorkers
é diferente de $newapp.MaxNumberOfWorkers
. O dimensionamento por aplicativo usa $newapp.SiteConfig.NumberOfWorkers
para determinar as características de dimensionamento do aplicativo.
Dimensionamento por aplicativo usando o Azure Resource Manager
O seguinte modelo do Azure Resource Manager cria:
- Um Plano de Serviço de Aplicativo que é dimensionado para 10 instâncias
- Um aplicativo configurado para dimensionar para um máximo de cinco instâncias.
O Plano do Serviço de Aplicativo está definindo a propriedade PerSiteCalling como verdadeira ("perSiteScaling": true
). O aplicativo está definindo o número de trabalhadores a usar como 5 ("properties": { "numberOfWorkers": "5" }
).
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters":{
"appServicePlanName": { "type": "string" },
"appName": { "type": "string" }
},
"resources": [
{
"comments": "App Service Plan with per site perSiteScaling = true",
"type": "Microsoft.Web/serverFarms",
"sku": {
"name": "P1",
"tier": "Premium",
"size": "P1",
"family": "P",
"capacity": 10
},
"name": "[parameters('appServicePlanName')]",
"apiVersion": "2015-08-01",
"location": "West US",
"properties": {
"name": "[parameters('appServicePlanName')]",
"perSiteScaling": true
}
},
{
"type": "Microsoft.Web/sites",
"name": "[parameters('appName')]",
"apiVersion": "2015-08-01-preview",
"location": "West US",
"dependsOn": [ "[resourceId('Microsoft.Web/serverFarms', parameters('appServicePlanName'))]" ],
"properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverFarms', parameters('appServicePlanName'))]" },
"resources": [ {
"comments": "",
"type": "config",
"name": "web",
"apiVersion": "2015-08-01",
"location": "West US",
"dependsOn": [ "[resourceId('Microsoft.Web/Sites', parameters('appName'))]" ],
"properties": { "numberOfWorkers": "5" }
} ]
}]
}
Configuração recomendada para Hospedagem de Alta Densidade
O dimensionamento por aplicativo é um recurso que está habilitado em regiões globais do Azure e Ambientes do Serviço de Aplicativo. No entanto, a estratégia recomendada é usar Ambientes de Serviço de Aplicativo para aproveitar os recursos avançados e os planos do Serviço de Aplicativo de maior capacidade.
Siga estas etapas para configurar a hospedagem de alta densidade para seus aplicativos:
- Designe um plano do Serviço de Aplicativo como o plano de alta densidade e dimensione-o para a capacidade desejada.
- Defina o sinalizador
PerSiteScaling
como verdadeiro no Plano do Serviço de Aplicativo. - Novos aplicativos são criados e atribuídos a esse Plano do Serviço de Aplicativo com a propriedade numberOfWorkers definida como 1.
- O uso dessa configuração produz a densidade mais alta possível.
- O número de trabalhadores pode ser configurado independentemente por aplicativo, a fim de conceder recursos adicionais conforme necessário. Por exemplo:
- Um aplicativo de alto consumo pode definir o numberOfWorkers como 3 para ter mais capacidade de processamento para esse aplicativo.
- Os aplicativos de baixo consumo definiriam o numberOfWorkers como 1.