Atualizar automaticamente unidades de mensagens de um espaço de nomes Azure Service Bus

O dimensionamento automático permite-lhe ter a quantidade certa de recursos em execução para processar a carga na sua aplicação. Permite-lhe adicionar recursos para lidar com aumentos de carga e poupar dinheiro ao remover recursos que estão inativos. Veja Descrição geral do dimensionamento automático no Microsoft Azure para saber mais sobre a funcionalidade dimensionamento automático 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 as unidades de mensagens, consulte Mensagens Premium do Service Bus.

Ao utilizar a funcionalidade Dimensionamento Automático para espaços de nomes premium do Service Bus, pode especificar um número mínimo e máximo de unidades de mensagens e adicionar ou remover unidades de mensagens automaticamente com base num conjunto de regras.

Por exemplo, pode implementar os seguintes cenários de dimensionamento para espaços de nomes do Service Bus com a funcionalidade Dimensionamento Automático.

  • Aumente as unidades de mensagens para um espaço de nomes do Service Bus quando a utilização da CPU do espaço de nomes for superior a 75%.
  • Diminuir as unidades de mensagens para um espaço de nomes do Service Bus quando a utilização da CPU do espaço de nomes for inferior a 25%.
  • Utilize mais unidades de mensagens durante o horário comercial e menos durante as horas de folga.

Este artigo mostra-lhe como pode dimensionar automaticamente um espaço de nomes do Service Bus (atualizar unidades de mensagens) com o portal do Azure e um modelo de Resource Manager do Azure.

Importante

Este artigo aplica-se apenas ao escalão premium de Azure Service Bus.

Configurar com o portal do Azure

Nesta secção, irá aprender a utilizar o portal do Azure para configurar o dimensionamento automático de unidades de mensagens para um espaço de nomes do Service Bus.

Página de definições de dimensionamento automático

Primeiro, siga estes passos para navegar para a página Definições de dimensionamento automático do espaço de nomes do Service Bus.

  1. Inicie sessão no portal do Azure.

  2. Na barra de pesquisa, escreva Service Bus, selecione Service Bus na lista pendente e prima ENTER.

  3. Selecione o seu espaço de nomes premium na lista de espaços de nomes.

  4. Mude para a página Dimensionar .

    Espaço de Nomes do Service Bus - Página de dimensionamento

Dimensionamento manual

Esta definição permite-lhe definir um número fixo de unidades de mensagens para o espaço de nomes.

  1. Na página Definição de dimensionamento automático, selecione Dimensionamento manual se ainda não estiver selecionado.

  2. Para a definição Unidades de mensagens , selecione o número de unidades de mensagens na lista pendente.

  3. Selecione Guardar na barra de ferramentas para guardar a definição.

    Dimensionar manualmente unidades de mensagens

Dimensionamento automático personalizado – Condição predefinida

Pode configurar o dimensionamento automático de unidades de mensagens com condições. Esta condição de dimensionamento é executada quando nenhuma das outras condições de dimensionamento corresponde. Pode definir a condição predefinida de uma das seguintes formas:

  • Dimensionar com base numa métrica (como utilização da CPU ou da memória)
  • Dimensionar para um número específico de unidades de mensagens

Não pode definir uma agenda para dimensionamento automático num intervalo de dias ou datas específico para uma condição predefinida. Esta condição de dimensionamento é executada quando nenhuma das outras condições de dimensionamento com agendas corresponde.

Nota

Para melhorar o débito de receção, o Service Bus mantém algumas mensagens na respetiva cache. O Service Bus corta a cache apenas quando a utilização da memória excede um determinado limiar elevado, como 90%. Por isso, se uma entidade estiver a enviar mensagens, mas não as receber, essas mensagens são colocadas em cache e refletem o aumento da utilização da memória. Não há nada com que se preocupar, uma vez que o Service Bus corta a cache, se necessário, o que acaba por fazer com que a utilização da memória fique inativa. A memória não causará qualquer problema, a menos que exista um desempenho ou outros problemas com o espaço de nomes. Recomendamos que utilize a métrica de utilização da CPU para dimensionamento automático com o Service Bus.

Dimensionar com base numa métrica

O procedimento seguinte mostra como adicionar uma condição para aumentar automaticamente as unidades de mensagens (aumentar horizontalmente) quando a utilização da CPU for superior a 75% e diminuir as unidades de mensagens (dimensionar) quando a utilização 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 decrementos são feitos de 16 a 8, 8 a 4, 4 a 2 e 2 a 1.

  1. Na página definição Dimensionamento Automático , selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar o recurso .

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

  3. Selecione Dimensionar com base numa métrica para o Modo de dimensionamento.

  4. Selecione + Adicionar uma regra.

    Predefinição – dimensionar com base numa métrica

  5. Na página Regra de dimensionamento, siga estes passos:

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

    2. Selecione um operador e valores de limiar. Neste exemplo, são Maiores do que e 75 para o limiar de Métrica para acionar a ação de dimensionamento.

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

    4. Em seguida, selecione Adicionar

      Predefinição – aumentar horizontalmente se a utilização da CPU for superior a 75%

      Nota

      A funcionalidade de dimensionamento automático aumenta as unidades de mensagens para o espaço de nomes se a utilização geral da CPU ultrapassar os 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 estes passos na página Regra de dimensionamento:

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

    2. Selecione um operador e valores de limiar. Neste exemplo, são Menores do que e 25 para o limiar de Métrica para acionar a ação de dimensionamento.

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

    4. Em seguida, selecione Adicionar

      Predefinição – dimensionar se a utilização da CPU for inferior a 25%

      Nota

      A funcionalidade de dimensionamento automático diminui as unidades de mensagens para o espaço de nomes se a utilização geral da CPU for inferior a 25% neste exemplo. As decrementos são feitas de 16 a 8, 8 a 4, 4 a 2 e 2 a 1.

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

    Regra predefinida com base numa métrica

  8. Selecione Guardar na barra de ferramentas para guardar a definição de dimensionamento automático.

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

Siga estes passos para configurar a regra para dimensionar o espaço de nomes para utilizar um número específico de unidades de mensagens. Novamente, a condição predefinida é aplicada quando nenhuma das outras condições de dimensionamento corresponde.

  1. Na página definição Dimensionamento Automático , selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar o recurso .

  2. Na secção Predefinição da página, especifique um nome para a condição predefinida.

  3. Selecione Dimensionar para unidades de mensagens específicas para o Modo de dimensionamento.

  4. Para Unidades de mensagens, selecione o número de unidades de mensagens predefinidas.

    Predefinição – dimensionar para unidades de mensagens específicas

Dimensionamento automático personalizado – condições adicionais

A secção anterior mostra-lhe como adicionar uma condição predefinida para a definição de dimensionamento automático. Esta secção mostra-lhe como adicionar mais condições à definição de dimensionamento automático. Para estas condições adicionais não predefinidas, pode definir uma agenda com base em dias específicos de uma semana ou num intervalo de datas.

Dimensionar com base numa métrica

  1. Na página definição Dimensionamento Automático , selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar o recurso .

  2. Selecione Adicionar uma condição de dimensionamento no bloco Predefinido .

    Personalizado – adicionar uma ligação de condição de dimensionamento

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

  4. Confirme que a opção Dimensionar com base numa métrica está selecionada.

  5. Selecione + Adicionar uma regra para adicionar uma regra para aumentar as unidades de mensagens quando a utilização geral da CPU ultrapassar os 75%. Siga os passos da secção de condição predefinida .

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

  7. Também pode definir uma agenda numa condição personalizada (mas não na condição predefinida). Pode especificar datas de início e de fim para a condição (ou) selecionar dias específicos (segunda-feira, terça-feira, etc.) de uma semana.

    1. Se selecionar Especificar datas de início/fim, selecione o Fuso Horário, Data e hora de início e Data e hora de fim (conforme mostrado na imagem seguinte) para que a condição esteja em vigor.

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

    2. Se selecionar Repetir dias específicos, selecione os dias da semana, fuso horário, hora de início e hora de fim quando 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 de definições dimensionamento automático , selecione Dimensionamento automático personalizado para a opção Escolher como dimensionar o recurso .

  2. Selecione Adicionar uma condição de dimensionamento no bloco Predefinido .

    Personalizado - adicionar uma ligação de condição de dimensionamento

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

  4. Selecione a opção dimensionar para unidades de mensagens específicas para o Modo de dimensionamento.

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

  6. Para a agenda, especifique as datas de início e de fim para a condição (ou) selecionar dias específicos (segunda-feira, terça-feira, etc.) de uma semana e horas.

    1. Se selecionar Especificar datas de início/fim, selecione o Fuso Horário, Data e hora de início e Data e hora de fim para a condição estar em vigor.

    dimensionar para unidades de mensagens específicas – datas de início e de fim

    1. Se selecionar Repetir dias específicos, selecione os dias da semana, fuso horário, hora de início e hora de fim quando a condição deve ser aplicada.

    dimensionar para unidades de mensagens específicas – repetir dias específicos

    Para saber mais sobre como funcionam as definições de dimensionamento automático, especialmente como escolhe um perfil ou condição e avalia múltiplas regras, veja Compreender as definições do Dimensionamento Automático.

    Nota

    • As métricas que rever para tomar decisões sobre o dimensionamento automático podem ter entre 5 e 10 minutos. Quando estiver a lidar com cargas de trabalho elevadas, recomendamos que tenha durações mais curtas para aumentar verticalmente e durações mais longas para reduzir verticalmente (> 10 minutos) para garantir que existem unidades de mensagens suficientes para processar cargas de trabalho espetaculares.

    • Se vir falhas devido à falta de capacidade (sem unidades de mensagens disponíveis), crie um pedido de suporte connosco.

Histórico de execuções

Mude para o separador Histórico de execuções na página Escala para ver um gráfico que desenha o número de unidades de mensagens conforme observado pelo motor de dimensionamento automático. Se o gráfico estiver vazio, significa que o dimensionamento automático não foi configurado ou configurado, mas está desativado ou está num período de arrefecimento.

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

Notificações

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

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

  • Ative o envio de e-mails de notificação para pontos finais HTTP ou HTTPS expostos por webhooks.

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

Configurar com um modelo de Resource Manager

Pode utilizar o seguinte modelo de Resource Manager de exemplo para criar um espaço de nomes do Service Bus com uma fila e para configurar as definições de dimensionamento automático para o espaço de nomes. Neste exemplo, são especificadas duas condições de dimensionamento.

  • Condição de dimensionamento predefinida: aumente as unidades de mensagens quando a utilização média da CPU for superior a 75% e diminua as unidades de mensagens quando a utilização média da CPU for inferior a 25%.
  • Atribua duas unidades de mensagens ao espaço de nomes aos fins de semana.

Modelo

{
	"$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"
			}
		}
	]
}

Também pode gerar um exemplo JSON para um recurso de definição de dimensionamento automático a partir do portal do Azure. Depois de configurar as definições de dimensionamento automático no portal do Azure, selecione JSON na barra de comandos da página Dimensionar.

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

Em seguida, inclua o JSON na resources secção de um modelo de Resource Manager, conforme mostrado no exemplo anterior.

Considerações adicionais

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

Quando cria condições adicionais, as unidades de mensagens podem não ser aumentadas ou diminuídas gradualmente. Suponha que tem dois perfis definidos, conforme mostrado no exemplo seguinte. Às 06:00 UTC, as unidades de mensagens estão definidas como 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 crie regras para que as unidades de mensagens sejam aumentadas ou diminuam gradualmente.

Passos seguintes

Para saber mais sobre as unidades de mensagens, consulte as mensagens Premium