Actualización automática de las unidades de mensajería de un espacio de nombres de Azure Service Bus

Gracias al escalado automático, puede ejecutar la cantidad correcta de recursos para administrar la carga de la aplicación. Permite agregar recursos para controlar el aumento de la carga y ahorrar dinero mediante la eliminación de recursos inactivos. Consulte Información general sobre el escalado automático en Microsoft Azure para más información sobre la característica de escalado automático de Azure Monitor.

La mensajería Premium de Service Bus proporciona aislamiento de recursos en el nivel de CPU y memoria para que cada carga de trabajo de cliente se ejecute de forma aislada. Este contenedor de recursos se llama unidad de mensajería. Para más información sobre las unidades de mensajería, consulte la Mensajería Premium de Service Bus.

Mediante el uso de la característica de escalado automático para los espacios de nombres de Service Bus Premium, puede especificar un número mínimo y máximo de unidades de mensajería y agregar o quitar unidades de mensajería automáticamente en función de un conjunto de reglas.

Por ejemplo, puede implementar los siguientes escenarios de escalado para los espacios de nombres de Service Bus mediante la característica de escalado automático.

  • Aumento de las unidades de mensajería para un espacio de nombres de Service Bus cuando el uso de CPU del espacio de nombres supera el 75 %.
  • Disminución de las unidades de mensajería para un espacio de nombres de Service Bus cuando el uso de CPU del espacio de nombres cae por debajo del 25 %.
  • Uso de más unidades de mensajería durante el horario comercial y menos durante las horas de inactividad.

En este artículo se muestra cómo puede escalar automáticamente un espacio de nombres de Service Bus (actualizar las unidades de mensajería) mediante Azure Portal y una plantilla de Azure Resource Manager.

Importante

Este artículo se aplica solo al nivel Premium de Azure Service Bus.

Configurar mediante Azure Portal

En esta sección, aprenderá a usar Azure Portal para configurar el escalado automático de unidades de mensajería para un espacio de nombres de Service Bus.

Página de configuración del escalado automático

En primer lugar, siga estos pasos para navegar a la página Configuración de la escalabilidad automática de su espacio de nombres de Service Bus.

  1. Inicie sesión en Azure Portal.

  2. En la barra de búsqueda, escriba Service Bus, seleccione Service Bus en la lista desplegable y presione Entrar.

  3. Seleccione el espacio de nombres premium en la lista de espacios de nombres.

  4. Cambie a la página Escala.

    Espacio de nombres de Service Bus: página Escala

Escala manual

Esta configuración permite establecer un número fijo de unidades de mensajería para el espacio de nombres.

  1. En la página Configuración de la escalabilidad automática, seleccione Escala manual si aún no está seleccionada.

  2. En la configuración Unidades de mensajería, seleccione el número de unidades de mensajería en la lista desplegable.

  3. Seleccione Guardar en la barra de herramientas para guardar la configuración.

    Escalado manual de unidades de mensajería

Escalado automático personalizado: condición predeterminada

Puede configurar el escalado automático de unidades de mensajería mediante el uso de condiciones. Esta condición de escalado se ejecuta cuando ninguna de las otras condiciones de escalado coincide. Puede establecer la condición predeterminada de una de las siguientes maneras:

  • Escalado basado en una métrica (como el uso de CPU o de memoria)
  • Escalado a un número específico de unidades de mensajería

No se puede establecer una programación para el escalado automático en un determinado día o intervalo de fechas para una condición predeterminada. Esta condición de escalado se ejecuta cuando no coincide ninguna de las otras condiciones de escalado con programaciones.

Nota:

Para mejorar el rendimiento de recepción, Service Bus conserva algunos mensajes en su memoria caché. Service Bus recorta la memoria caché solo cuando el uso de la memoria supera un determinado umbral alto, como el 90 %. Por lo tanto, si una entidad envía mensajes pero no los recibe, esos mensajes se almacenan en caché y se reflejan en un mayor uso de memoria. No hay nada que preocuparse, ya que Service Bus recorta la memoria caché si es necesario, lo que a la larga hace que el uso de memoria disminuya. La memoria no causará ningún problema a menos que haya problemas de rendimiento o de otro tipo con el espacio de nombres. Se recomienda usar la métrica de uso de CPU para el escalado automático con Service Bus.

Escalado basado en una métrica

En el procedimiento siguiente se muestra cómo agregar una condición para aumentar automáticamente las unidades de mensajería (escalar horizontalmente) cuando el uso de CPU es superior al 75 % y reducir las unidades de mensajería (reducir horizontalmente) cuando el uso de CPU es inferior al 25 %. Los incrementos se realizan de 1 a 2, de 2 a 4, de 4 a 8 y de 8 a 16. De forma similar, los decrementos se realizan de 16 a 8, de 8 a 4, de 4 a 2 y de 2 a 1.

  1. En la página Configuración de la escalabilidad automática, seleccione Escalabilidad automática personalizada para la opción Choose how to scale your resource (Elija cómo escalar el recurso).

  2. En la sección Valor predeterminado de la página, especifique un nombre para la condición predeterminada. Seleccione el icono de lápiz para editar el texto.

  3. Seleccione Escalado basado en una métrica, para Modo de escala.

  4. Seleccione +Agregar una regla.

    Valor predeterminado: escalado basado en una métrica

  5. En la página Escalar regla, siga estos pasos:

    1. Seleccione una métrica de la lista desplegable Nombre de métrica. En este ejemplo, es CPU.

    2. Seleccione un operador y los valores de umbral. En este ejemplo, son Mayor que y 75 para Umbral de la métrica para desencadenar la acción de escalado.

    3. Seleccione una operación en la sección Acción. En este ejemplo, se ha establecido en Aumentar.

    4. Luego, seleccione Agregar.

      Valor predeterminado: escalar horizontalmente si el uso de CPU es superior al 75 %

      Nota

      La característica de escalado automático aumenta las unidades de mensajería del espacio de nombres si el uso total de CPU supera el 75 % en este ejemplo. Los incrementos se realizan de 1 a 2, de 2 a 4, de 4 a 8 y de 8 a 16.

  6. Seleccione + Agregar una regla y siga estos pasos en la página Escalar regla:

    1. Seleccione una métrica de la lista desplegable Nombre de métrica. En este ejemplo, es CPU.

    2. Seleccione un operador y los valores de umbral. En este ejemplo, son Menor que y 25 para Umbral de la métrica para desencadenar la acción de escalado.

    3. Seleccione una operación en la sección Acción. En este ejemplo, se ha establecido en Disminuir.

    4. Luego, seleccione Agregar.

      Valor predeterminado: reducir horizontalmente en caso de que el uso de CPU sea inferior al 25 %

      Nota

      La característica de escalado automático disminuye las unidades de mensajería del espacio de nombres si el uso total de CPU cae por debajo del 25 % en este ejemplo. Los decrementos se realizan de 16 a 8, de 8 a 4, de 4 a 2 y de 2 a 1.

  7. Establezca el número mínimo, máximo y predeterminado de unidades de mensajería.

    Regla predeterminada basada en una métrica

  8. Seleccione Guardar en la barra de herramientas para guardar la configuración de escalado automático.

Escalado a un número específico de unidades de mensajería

Siga estos pasos para configurar la regla con el fin de escalar el espacio de nombres para usar un número específico de unidades de mensajería. De nuevo, se aplica la condición predeterminada cuando no coincide ninguna de las otras condiciones de escalado.

  1. En la página Configuración de la escalabilidad automática, seleccione Escalabilidad automática personalizada para la opción Choose how to scale your resource (Elija cómo escalar el recurso).

  2. En la sección Valor predeterminado de la página, especifique un nombre para la condición predeterminada.

  3. Seleccione Scale to specific messaging units (Escalar a un número específico de unidades de mensajería) para Modo de escala.

  4. En Unidades de mensajería, seleccione el número predeterminado de unidades de mensajería.

    Valor predeterminado: escalar a un número específico de unidades de mensajería

Escalado automático personalizado: condiciones adicionales

En la sección anterior se muestra cómo agregar una condición predeterminada a la configuración de escalado automático. En esta sección se muestra cómo agregar más condiciones a la configuración de escalado automático. Para estas condiciones adicionales no predeterminadas, puede establecer una programación basada en días específicos de la semana o en un intervalo de fechas.

Escalado basado en una métrica

  1. En la página Configuración de la escalabilidad automática, seleccione Escalabilidad automática personalizada para la opción Choose how to scale your resource (Elija cómo escalar el recurso).

  2. Seleccione Agregar una condición de escala en el bloque Valor predeterminado.

    Personalizado: agregar un vínculo de condición de escala

  3. Especifique un nombre para la condición.

  4. Confirme que la opción Escalado basado en una métrica está seleccionada.

  5. Seleccione + Agregar una regla para agregar una regla a fin de aumentar las unidades de mensajería cuando el uso total de CPU supere el 75 %. Siga los pasos de la sección sobre la condición predeterminada.

  6. Establezca el número mínimo, máximo y predeterminado de unidades de mensajería.

  7. También puede establecer una programación en una condición personalizada (pero no en la condición predeterminada). Puede especificar las fechas de inicio y finalización de la condición, o seleccionar días específicos (lunes, martes, etc.) de una semana.

    1. Si selecciona Especifique las fechas de inicio y finalización, seleccione la Zona horaria, la Fecha y hora de inicio y la Fecha y hora de finalización (como se muestra en la siguiente imagen) para que la condición esté en vigor.

      Valores mínimo, máximo y predeterminado para el número de unidades de mensajería

    2. Si selecciona Repetir en días específicos, seleccione los días de la semana, la zona horaria, la hora de inicio y la hora de finalización en que debe aplicarse la condición.

      Repetir en días específicos

Escalado a un número específico de unidades de mensajería

  1. En la página Configuración de la escalabilidad automática, seleccione Escalabilidad automática personalizada para la opción Choose how to scale your resource (Elija cómo escalar el recurso).

  2. Seleccione Agregar una condición de escala en el bloque Valor predeterminado.

    Personalizado: agregar un vínculo de condición de escala

  3. Especifique un nombre para la condición.

  4. Seleccione la opción Scale to specific messaging units (Escalar a un número específico de unidades de mensajería) para Modo de escala.

  5. Seleccione el número de unidades de mensajería en la lista desplegable.

  6. Para la programación, especifique las fechas de inicio y finalización de la condición, o seleccione días específicos (lunes, martes, etc.) de una semana y las horas.

    1. Si selecciona Especifique las fechas de inicio y finalización, seleccione la Zona horaria, la Fecha y hora de inicio y la Fecha y hora de finalización para que la condición esté en vigor.

    Escalar a un número específico de unidades de mensajería: fechas de inicio y finalización

    1. Si selecciona Repetir en días específicos, seleccione los días de la semana, la zona horaria, la hora de inicio y la hora de finalización en que debe aplicarse la condición.

    Escalar a un número específico de unidades de mensajería: repetir días específicas

    Para más información sobre cómo funciona la configuración del escalado automático, especialmente cómo se elige un perfil o condición y se evalúan varias reglas, consulte Información acerca de la configuración de escalado automático.

    Nota

    • Las métricas que revise para tomar decisiones sobre el escalado automático pueden haber sido creadas de 5 a 10 minutos antes. Cuando se trabaja con cargas de trabajo con picos, se recomienda tener una duración más corta para escalar verticalmente y más larga para reducir verticalmente (> 10 minutos) y asegurarse de que hay suficientes unidades de mensajería a fin de procesar las cargas de trabajo con picos.

    • Si surgen errores debido a la falta de capacidad (no hay unidades de mensajería disponibles), genere una incidencia de soporte técnico con nosotros.

Historial de ejecuciones

Cambie a la pestaña Historial de ejecución de la página Escalar para ver un gráfico que traza el número de unidades de mensajería según lo observado por el motor de escalado automático. Si el gráfico está vacío, significa que no se ha configurado la escalabilidad automática o que se ha configurado pero se ha deshabilitado, o que está en un periodo de recuperación.

Captura de pantalla que muestra **Historial de ejecución** en la página **Escalado**.

Notificaciones

Cambie a la pestaña Notificar de la página Escalar para:

  • Habilitar el envío de correos electrónicos de notificación a los administradores, coadministradores y administradores adicionales.

  • Habilitar el envío de correos electrónicos de notificación a puntos de conexión HTTP o HTTPS expuestos por webhooks.

    Captura de pantalla que muestra la pestaña **Notificar** de la página **Escalar**.

Configuración con una plantilla de Resource Manager

Puede usar la siguiente plantilla de Resource Manager de ejemplo para crear un espacio de nombres de Service Bus con una cola y para configurar las opciones de escalado automático para el espacio de nombres. En este ejemplo, se especifican dos condiciones de escala.

  • Condición de escala predeterminada: aumente las unidades de mensajería cuando el uso medio de CPU supere el 75 % y disminuya las unidades de mensajería cuando el uso medio de CPU sea inferior al 25 %.
  • Asigne dos unidades de mensajería al espacio de nombres los fines de semana.

Plantilla

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

También puede generar un ejemplo de JSON para un recurso de configuración de escalabilidad automática desde Azure Portal. Después de configurar las opciones de escalabilidad automática en Azure Portal, seleccione JSON en la barra de comandos de la página Escalar.

Imagen que muestra la selección del botón JSON en la barra de comandos de la página **Escala** del Azure Portal.

A continuación, incluya el JSON en la sección resources de una plantilla de Resource Manager como se muestra en el ejemplo anterior.

Consideraciones adicionales

Cuando se usa la opción de Escalado automático personalizado con la condición o el perfil Predeterminado, las unidades de mensajería aumentan (1 -> 2 -> 4 -> 8 -> 16) o disminuyen (16 -> 8 -> 4 -> 2 -> 1) gradualmente.

Al crear condiciones adicionales, es posible que las unidades de mensajería no aumenten ni disminuya gradualmente. Supongamos que tiene dos perfiles definidos como se muestra en el ejemplo siguiente. A las 06:00 UTC, las unidades de mensajería se establecerán en 16 y, a las 21:00 UTC, se reducirán a 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]
				}
			}
		}
	]
}

Se recomienda crear reglas para que las unidades de mensajería aumenten o disminuyan gradualmente.

Pasos siguientes

Para obtener información acerca de las unidades de mensajería, consulte la mensajería Prémium