Atualizar automaticamente unidades de mensagens de um namespace do Barramento de Serviço do Azure

O dimensionamento automático permite que você tenha a quantidade certa de recursos em execução para lidar com a carga em seu aplicativo. Ele permite que você adicione recursos para lidar com aumentos de carga e também economizar dinheiro removendo recursos que estão ociosos. Consulte Visão geral do dimensionamento automático no Microsoft Azure para saber mais sobre o recurso Autoscale do Azure Monitor.

As Mensagens Premium do Service Bus fornecem isolamento de recursos no nível de CPU e memória para que cada carga de trabalho do cliente seja executada de forma isolada. Este contentor de recursos é designado por unidade de mensagens. Para saber mais sobre unidades de mensagens, consulte Mensagens Premium do Service Bus.

Usando o recurso Dimensionamento automático para namespaces premium do Service Bus, você pode especificar um número mínimo e máximo de unidades de mensagens e adicionar ou remover unidades de mensagens automaticamente com base em um conjunto de regras.

Por exemplo, você pode implementar os seguintes cenários de dimensionamento para namespaces do Service Bus usando o recurso Autoscale.

  • Aumente as unidades de mensagens para um namespace do Service Bus quando o uso da CPU do namespace for superior a 75%.
  • Diminua as unidades de mensagens para um namespace do Service Bus quando o uso da CPU do namespace for inferior a 25%.
  • Use mais unidades de mensagens durante o horário comercial e menos durante o horário de folga.

Este artigo mostra como você pode dimensionar automaticamente um namespace do Service Bus (atualizar unidades de mensagens) usando o portal do Azure e um modelo do Azure Resource Manager.

Importante

Este artigo aplica-se apenas à camada premium do Barramento de Serviço do Azure.

Configurar com o portal do Azure

Nesta seção, você aprenderá a usar o portal do Azure para configurar o dimensionamento automático de unidades de mensagens para um namespace do Service Bus.

Página de configuração de dimensionamento automático

Primeiro, siga estas etapas para navegar até a página Configurações de dimensionamento automático para seu namespace do Service Bus.

  1. Inicie sessão no portal do Azure.

  2. Na barra de pesquisa, digite Service Bus, selecione Service Bus na lista suspensa e pressione ENTER.

  3. Selecione seu namespace premium na lista de namespaces.

  4. Alterne para a página Escala .

    Namespace do Service Bus - página Dimensionar

Dimensionamento manual

Essa configuração permite definir um número fixo de unidades de mensagens para o namespace.

  1. Na página Configuração de dimensionamento automático, selecione Escala manual se ainda não estiver selecionada.

  2. Para Configuração de unidades de mensagens, selecione o número de unidades de mensagens na lista suspensa.

  3. Selecione Salvar na barra de ferramentas para salvar a configuração.

    Dimensionar manualmente unidades de mensagens

Dimensionamento automático personalizado - condição padrão

Você pode configurar o dimensionamento automático de unidades de mensagens usando condições. Esta condição de escala é executada quando nenhuma das outras condições de escala corresponde. Você pode definir a condição padrão de uma das seguintes maneiras:

  • Dimensionar com base em uma métrica (como uso de CPU ou memória)
  • Dimensionar para um número específico de unidades de mensagens

Não é possível definir uma programação para dimensionamento automático em dias ou intervalos de datas específicos para uma condição padrão. Esta condição de escala é executada quando nenhuma das outras condições de escala com tabelas corresponde.

Nota

Para melhorar a taxa de transferência de recebimento, o Service Bus mantém algumas mensagens em seu cache. O Barramento de Serviço corta o cache somente quando o uso de memória excede um determinado limite alto, como 80%. Portanto, se uma entidade está enviando mensagens, mas não as recebendo, essas mensagens são armazenadas em cache e isso reflete no aumento do uso de memória. Normalmente, isso significa que não há nada com que se preocupar, pois o Service Bus corta o cache, se necessário, o que eventualmente faz com que o uso de memória diminua. Como tal, recomenda-se aumentar a escala apenas quando o uso de memória atingir 90%. Além disso, recomenda-se não reduzir a escala, desde que o uso de memória não fique abaixo de 90%.

Dimensionamento com base na métrica

O procedimento a seguir mostra como adicionar uma condição para aumentar automaticamente as unidades de mensagens (scale-out) quando o uso da CPU for maior que 75% e diminuir as unidades de mensagens (scale-in) quando o uso da CPU for inferior a 25%. Os incrementos são feitos de 1 a 2, 2 a 4, 4 a 8 e 8 a 16. Da mesma forma, os decréscimos são feitos de 16 a 8, 8 a 4, 4 a 2 e 2 a 1.

  1. Na página Configuração de dimensionamento automático, selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar seu recurso.

  2. Na seção Padrão da página, especifique um nome para a condição padrão. Selecione o ícone de lápis para editar o texto.

  3. Selecione Dimensionar com base em uma métrica para o modo Escala.

  4. Selecione + Adicionar uma regra.

    Padrão - escala baseada em uma métrica

  5. Na página Regra de escala , siga estas etapas:

    1. Selecione uma métrica na lista suspensa Nome da métrica . Neste exemplo, é CPU.

    2. Selecione um operador e valores limite. Neste exemplo, eles são Maior que e 75 para o limite Métrico para acionar a ação de escala.

    3. Selecione uma operação na seção Ação . Neste exemplo, está definido como Aumentar.

    4. Em seguida, selecione Adicionar

      Padrão - dimensionamento se o uso da CPU for maior que 75%

      Nota

      O recurso de dimensionamento automático aumenta as unidades de mensagens para o namespace se o uso geral da CPU for superior a 75% neste exemplo. Os incrementos são feitos de 1 a 2, 2 a 4, 4 a 8 e 8 a 16.

  6. Selecione + Adicionar uma regra novamente e siga estas etapas na página Regra de escala:

    1. Selecione uma métrica na lista suspensa Nome da métrica . Neste exemplo, é CPU.

    2. Selecione um operador e valores limite. Neste exemplo, eles são Menos que e 25 para o limite de métrica para disparar a ação de escala.

    3. Selecione uma operação na seção Ação . Neste exemplo, está definido como Diminuir.

    4. Em seguida, selecione Adicionar

      Padrão - dimensionar se o uso da CPU for inferior a 25%

      Nota

      O recurso de dimensionamento automático diminui as unidades de mensagens para o namespace se o uso geral da CPU for inferior a 25% neste exemplo. Os decréscimos são feitos de 16 a 8, 8 a 4, 4 a 2 e 2 a 1.

  7. Defina o número mínimo , máximo e padrão de unidades de mensagens.

    Regra padrão baseada em uma métrica

  8. Selecione Salvar na barra de ferramentas para salvar a configuração de dimensionamento automático.

Dimensionar para um número específico de unidades de mensagens

Siga estas etapas para configurar a regra para dimensionar o namespace para usar um número específico de unidades de mensagens. Novamente, a condição padrão é aplicada quando nenhuma das outras condições de escala corresponde.

  1. Na página Configuração de dimensionamento automático, selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar seu recurso.

  2. Na seção Padrão da página, especifique um nome para a condição padrão.

  3. Selecione Dimensionar para unidades de mensagens específicas para o modo de escala.

  4. Em Unidades de mensagens, selecione o número de unidades de mensagens padrão.

    Padrão - dimensionar para unidades de mensagens específicas

Dimensionamento automático personalizado - condições adicionais

A seção anterior mostra como adicionar uma condição padrão para a configuração de dimensionamento automático. Esta seção mostra como adicionar mais condições à configuração de dimensionamento automático. Para essas condições adicionais não padrão, você pode definir um cronograma com base em dias específicos de uma semana ou em um intervalo de datas.

Dimensionamento com base na métrica

  1. Na página Configuração de dimensionamento automático, selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar seu recurso.

  2. Selecione Adicionar uma condição de escala no bloco Padrão .

    Personalizado - adicionar um link de condição de escala

  3. Especifique um nome para a condição.

  4. Confirme se a opção Dimensionar com base em uma métrica está selecionada.

  5. Selecione + Adicionar uma regra para adicionar uma regra para aumentar as unidades de mensagens quando o uso geral da CPU for superior a 75%. Siga as etapas da seção de condição padrão.

  6. Defina o número mínimo , máximo e padrão de unidades de mensagens.

  7. Você também pode definir uma agenda em uma condição personalizada (mas não na condição padrão). Você pode especificar datas de início e término para a condição (ou) selecionar dias específicos (segunda-feira, terça-feira e assim por diante.) de uma semana.

    1. Se você selecionar Especificar datas de início/término, selecione o Fuso horário, Data e hora de início e Data e hora de término (conforme mostrado na imagem a seguir) para que a condição esteja em vigor.

      Valores mínimos, máximos e padrão para o número de unidades de mensagens

    2. Se você selecionar Repetir dias específicos, selecione os dias da semana, fuso horário, hora de início e hora de término em que a condição deve ser aplicada.

      Repetir dias específicos

Dimensionar para um número específico de unidades de mensagens

  1. Na página Configuração de dimensionamento automático, selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar seu recurso.

  2. Selecione Adicionar uma condição de escala no bloco Padrão .

    Personalizado - adicionar um link de condição de escala

  3. Especifique um nome para a condição.

  4. Selecione a opção Dimensionar para unidades de mensagens específicas para o modo Dimensionar.

  5. Selecione o número de unidades de mensagens na lista suspensa.

  6. Para a agenda, especifique as datas de início e término para a condição (ou) selecione dias específicos (segunda-feira, terça-feira e assim por diante.) de uma semana e horários.

    1. Se você selecionar Especificar datas de início/término, selecione o Fuso horário, Data e hora de início e Data e hora de término para que a condição esteja em vigor.

    Dimensionar para unidades de mensagens específicas - datas de início e término

    1. Se você selecionar Repetir dias específicos, selecione os dias da semana, fuso horário, hora de início e hora de término em que a condição deve ser aplicada.

    Dimensionar para unidades de mensagens específicas - repetir dias específicos

    Para saber mais sobre como as configurações de dimensionamento automático funcionam, especialmente como ele seleciona um perfil ou condição e avalia várias regras, consulte Compreender as configurações de dimensionamento automático.

    Nota

    • As métricas que você revisa para tomar decisões sobre o dimensionamento automático podem ter de 5 a 10 minutos. Quando você estiver lidando com cargas de trabalho espinhosas, recomendamos que você tenha durações mais curtas para aumentar a escala e durações mais longas para reduzir (> 10 minutos) para garantir que haja unidades de mensagens suficientes para processar cargas de trabalho espinhosas.

    • Se você vir falhas devido à falta de capacidade (sem unidades de mensagens disponíveis), levante um tíquete de suporte conosco. O cumprimento da capacidade está sujeito às restrições do ambiente e é realizado com o nosso melhor esforço.

Execuções

Alterne para a guia Histórico de execução na página Escala para ver um gráfico que plota o número de unidades de mensagens conforme observado pelo mecanismo de dimensionamento automático. Se o gráfico estiver vazio, isso significa que o dimensionamento automático não foi configurado ou configurado, mas desativado, ou está em um período de resfriamento.

Captura de ecrã a mostrar **Histórico de execução** na página **Escala**.

Notificações

Mude para o separador Notificar na página Escala para:

  • Habilite o envio de e-mails de notificação para administradores, coadministradores e quaisquer administradores adicionais.

  • Habilite o envio de e-mails de notificação para um ponto de extremidade HTTP ou HTTPS exposto por webhooks.

    Captura de ecrã a mostrar o separador **Notificar** da página **Escala**.

Configurar usando um modelo do Gerenciador de Recursos

Você pode usar o seguinte modelo de exemplo do Gerenciador de Recursos para criar um namespace do Service Bus com uma fila e para definir as configurações de dimensionamento automático para o namespace. Neste exemplo, duas condições de escala são especificadas.

  • Condição de escala padrão: aumente as unidades de mensagens quando o uso médio da CPU for superior a 75% e diminua as unidades de mensagens quando o uso médio da CPU for inferior a 25%.
  • Atribua duas unidades de mensagens ao namespace nos fins de semana.

Template

{
	"$schema": "https: //schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
	"contentVersion": "1.0.0.0",
	"parameters": {
		"serviceBusNamespaceName": {
			"type": "String",
			"metadata": {
				"description": "Name of the Service Bus namespace"
			}
		},
		"serviceBusQueueName": {
			"type": "String",
			"metadata": {
				"description": "Name of the Queue"
			}
		},
		"autoScaleSettingName": {
			"type": "String",
			"metadata": {
				"description": "Name of the auto scale setting."
			}
		},
		"location": {
			"defaultValue": "[resourceGroup().location]",
			"type": "String",
			"metadata": {
				"description": "Location for all resources."
			}
		}
	},
	"resources": [{
			"type": "Microsoft.ServiceBus/namespaces",
			"apiVersion": "2021-11-01",
			"name": "[parameters('serviceBusNamespaceName')]",
			"location": "[parameters('location')]",
			"sku": {
				"name": "Premium"
			},
			"properties": {}
		},
		{
			"type": "Microsoft.ServiceBus/namespaces/queues",
			"apiVersion": "2021-11-01",
			"name": "[format('{0}/{1}', parameters('serviceBusNamespaceName'), parameters('serviceBusQueueName'))]",
			"dependsOn": [
				"[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
			],
			"properties": {
				"lockDuration": "PT5M",
				"maxSizeInMegabytes": 1024,
				"requiresDuplicateDetection": false,
				"requiresSession": false,
				"defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
				"deadLetteringOnMessageExpiration": false,
				"duplicateDetectionHistoryTimeWindow": "PT10M",
				"maxDeliveryCount": 10,
				"autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
				"enablePartitioning": false,
				"enableExpress": false
			}
		},
		{
			"type": "Microsoft.Insights/autoscaleSettings",
			"apiVersion": "2021-05-01-preview",
			"name": "[parameters('autoScaleSettingName')]",
			"location": "East US",
			"dependsOn": [
				"[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
			],
			"tags": {},
			"properties": {
				"name": "[parameters('autoScaleSettingName')]",
				"enabled": true,
				"predictiveAutoscalePolicy": {
					"scaleMode": "Disabled",
					"scaleLookAheadTime": null
				},
				"targetResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
				"profiles": [{
						"name": "Increase messaging units to 2 on weekends",
						"capacity": {
							"minimum": "2",
							"maximum": "2",
							"default": "2"
						},
						"rules": [],
						"recurrence": {
							"frequency": "Week",
							"schedule": {
								"timeZone": "Eastern Standard Time",
								"days": [
									"Saturday",
									"Sunday"
								],
								"hours": [
									6
								],
								"minutes": [
									0
								]
							}
						}
					},
					{
						"name": "{\"name\":\"Scale Out at 75% CPU and Scale In at 25% CPU\",\"for\":\"Increase messaging units to 4 on weekends\"}",
						"capacity": {
							"minimum": "1",
							"maximum": "8",
							"default": "2"
						},
						"rules": [{
								"scaleAction": {
									"direction": "Increase",
									"type": "ServiceAllowedNextValue",
									"value": "1",
									"cooldown": "PT5M"
								},
								"metricTrigger": {
									"metricName": "NamespaceCpuUsage",
									"metricNamespace": "microsoft.servicebus/namespaces",
									"metricResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
									"operator": "GreaterThan",
									"statistic": "Average",
									"threshold": 75,
									"timeAggregation": "Average",
									"timeGrain": "PT1M",
									"timeWindow": "PT10M",
									"Dimensions": [],
									"dividePerInstance": false
								}
							},
							{
								"scaleAction": {
									"direction": "Decrease",
									"type": "ServiceAllowedNextValue",
									"value": "1",
									"cooldown": "PT5M"
								},
								"metricTrigger": {
									"metricName": "NamespaceCpuUsage",
									"metricNamespace": "microsoft.servicebus/namespaces",
									"metricResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
									"operator": "LessThan",
									"statistic": "Average",
									"threshold": 25,
									"timeAggregation": "Average",
									"timeGrain": "PT1M",
									"timeWindow": "PT10M",
									"Dimensions": [],
									"dividePerInstance": false
								}
							}
						],
						"recurrence": {
							"frequency": "Week",
							"schedule": {
								"timeZone": "Eastern Standard Time",
								"days": [
									"Saturday",
									"Sunday"
								],
								"hours": [
									18
								],
								"minutes": [
									0
								]
							}
						}
					}
				],
				"notifications": [],
				"targetResourceLocation": "East US"
			}
		}
	]
}

Você também pode gerar um exemplo JSON para um recurso de configuração de dimensionamento automático no portal do Azure. Depois de definir as configurações de dimensionamento automático no portal do Azure, selecione JSON na barra de comandos da página Escala .

Imagem mostrando a seleção do botão JSON na barra de comandos da página **Scale** no portal do Azure.

Em seguida, inclua o resources JSON na seção de um modelo do Gerenciador de Recursos, conforme mostrado no exemplo anterior.

Considerações adicionais

Quando você usa a opção Dimensionamento automático personalizado com a condição ou perfil padrão, as unidades de mensagens são aumentadas (1 -> 2 -> 4 -> 8 -> 16) ou diminuídas (16 -> 8 -> 4 -> 2 -> 1) gradualmente.

Quando você cria condições adicionais, as unidades de mensagens podem não ser aumentadas ou diminuídas gradualmente. Suponha que você tenha dois perfis definidos conforme mostrado no exemplo a seguir. Às 06:00 UTC, as unidades de mensagens são definidas para 16 e, às 21:00 UTC, são reduzidas para 1.

{

	"Profiles": [
		{
			"Name": "standardProfile",
			"Capacity": {
				"Minimum": "16",
				"Maximum": "16",
				"Default": "16"
			},
			"Rules": [],
			"Recurrence": {
				"Frequency": "Week",
				"Schedule": {
					"TimeZone": "UTC",
					"Days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"
					],
					"Hours": [6],
					"Minutes": [0]
				}
			}
		},
		{
			"Name": "outOfHoursProfile",
			"Capacity": {
				"Minimum": "1",
				"Maximum": "1",
				"Default": "1"
			},
			"Rules": [],
			"Recurrence": {
				"Frequency": "Week",
				"Schedule": {
					"TimeZone": "UTC",
					"Days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
					"Hours": [21],
					"Minutes": [0]
				}
			}
		}
	]
}

Recomendamos que você crie regras para que as unidades de mensagens sejam aumentadas ou diminuam gradualmente.

Próximos passos

Para saber mais sobre unidades de mensagens, consulte Mensagens Premium