Automatisches Aktualisieren von Messagingeinheiten eines Azure Service Bus-Namespace

Bei der automatischen Skalierung können Sie jeweils die richtige Menge an Ressourcen ausführen, um die Lasten für Ihre Anwendung zu bewältigen. Sie können Ressourcen hinzufügen, um auf einen Anstieg der Last zu reagieren, und Kosten sparen, indem Sie ungenutzte Ressourcen entfernen. Weitere Informationen zur Funktion „Autoskalierung“ von Azure Monitor finden Sie unter Übersicht über die Autoskalierung in Microsoft Azure.

Service Bus Premium-Messaging bietet Ressourcenisolierung auf CPU- und Arbeitsspeicherebene, sodass die Workloads der einzelnen Kunden isoliert ausgeführt werden. Dieser Ressourcencontainer wird als Messaging-Einheit bezeichnet. Weitere Informationen zu Messagingeinheiten finden Sie unter Service Bus Premium für Messaging.

Wenn Sie die Autoskalierung für Service Bus Premium-Namespaces verwenden, können Sie eine Mindestanzahl und eine maximale Anzahl von Messagingeinheiten angeben. Außerdem können Sie Messagingeinheiten basierend auf einer Reihe von Regeln automatisch hinzufügen oder entfernen.

Mithilfe der Autoskalierung können Sie z. B. die folgenden Skalierungsszenarien für Service Bus-Namespaces implementieren.

  • Erhöhen der Anzahl von Messagingeinheiten für einen Service Bus-Namespace, wenn die CPU-Auslastung des Namespaces 75 % übersteigt.
  • Senken der Anzahl von Messagingeinheiten für einen Service Bus-Namespace, wenn die CPU-Auslastung des Namespaces 25 % unterschreitet.
  • Verwenden einer größeren Anzahl von Messagingeinheiten während der Geschäftszeiten und einer geringeren Anzahl außerhalb der Geschäftszeiten.

In diesem Artikel erfahren Sie, wie Sie einen Service Bus-Namespace automatisch über das Azure-Portal mit einer Azure Resource Manager-Vorlage skalieren (Aktualisieren der Messagingeinheiten).

Wichtig

Dieser Artikel gilt nur für den Premium-Tarif von Azure Service Bus.

Konfigurieren über das Azure-Portal

In diesem Abschnitt erfahren Sie, wie Sie das Microsoft Azure-Portal verwenden, um Autoskalierung von Messagingeinheiten für einen Service Bus-Namespace zu konfigurieren.

Seite mit der Einstellung für die Autoskalierung

Führen Sie zunächst folgende Schritte aus, um zur Seite Einstellungen für die Autoskalierung für Ihren Service Bus-Namespace zu wechseln.

  1. Melden Sie sich beim Azure-Portal an.

  2. Geben Sie in der Suchleiste Service Bus ein, wählen Sie in der Dropdownliste Service Bus aus, und drücken Sie die EINGABETASTE.

  3. Wählen Sie in der Liste der Namespaces Ihren Premium-Namespace aus.

  4. Wechseln Sie zur Seite Skalieren.

    Service Bus-Namespace: Seite „Skalieren“

Manuelles Skalieren

Über diese Einstellung können Sie eine feste Anzahl von Messagingeinheiten für den Namespace festlegen.

  1. Wählen Sie auf der Seite Einstellung für die Autoskalierung die Option Manuelle Skalierung aus (sofern noch nicht geschehen).

  2. Wählen Sie für die Einstellung Messagingeinheiten die Anzahl von Messagingeinheiten aus der Dropdownliste aus.

  3. Wählen Sie auf der Symbolleiste Speichern aus, um die Einstellung zu speichern.

    Manuelles Skalieren von Messagingeinheiten

Benutzerdefinierte Autoskalierung: Standardbedingung

Sie können die Autoskalierung von Messagingeinheiten mithilfe von Bedingungen konfigurieren. Diese Skalierungsbedingung wird ausgeführt, wenn keine der anderen Skalierungsbedingungen zutrifft. Sie können die Standardbedingung über eine der folgenden Methoden festlegen:

  • Skalierung basierend auf einer Metrik (z. B. CPU- oder Speicherauslastung)
  • Skalierung auf eine bestimmte Anzahl von Messagingeinheiten

Bei Verwendung der Standardbedingung kann kein fester Zeitplan festgelegt werden, um die Autoskalierung an bestimmten Tagen oder innerhalb eines Datumsbereichs durchzuführen. Diese Skalierungsbedingung wird ausgeführt, wenn keine der anderen Skalierungsbedingungen mit Zeitplänen zutrifft.

Hinweis

Um den Empfangsdurchsatz zu verbessern, speichert Service Bus einige Nachrichten im Cache. Service Bus schneidet den Cache nur ab, wenn die Arbeitsspeicherauslastung einen bestimmten hohen Schwellenwert (z. B. 90 %) überschreitet. Wenn also eine Entität Nachrichten sendet, diese aber nicht empfängt, werden diese Nachrichten zwischengespeichert, und dies spiegelt sich in einer erhöhten Speicherauslastung wider. Es gibt keine Bedenken, da Service Bus den Cache bei Bedarf abschneidet, was schließlich dazu führt, dass die Speicherauslastung nachlässt. Arbeitsspeicher verursacht kein Problem, es sei denn, es liegen Leistungs- oder andere Probleme mit dem Namespace vor. Es wird empfohlen, die CPU-Auslastungsmetrik für automatische Skalierung mit Service Bus zu verwenden.

Skalierung basierend auf einer Metrik

Im Folgenden sind die Schritte gezeigt, um eine Bedingung hinzuzufügen, mit der die Anzahl von Messagingeinheiten automatisch erhöht wird (aufskalieren), wenn die CPU-Auslastung mehr als 75 % beträgt, bzw. mit der die Anzahl von Messagingeinheiten reduziert wird (abskalieren), wenn die CPU-Auslastung bei weniger als 25 % liegt. Beim Erhöhen werden Inkrementierungsschritte von 1 zu 2, 2 zu 4, 4 zu 8 und 8 zu 16 vorgenommen. Beim Verringern erfolgen die Schritte von 16 zu 8, 8 zu 4, 4 zu 2 und 2 zu 1.

  1. Wählen Sie auf der Seite Einstellung für die Autoskalierung für Auswählen, wie Ihre Ressource skaliert werden soll die Option Benutzerdefinierte Autoskalierung aus.

  2. Geben Sie im Abschnitt Standard der Seite einen Namen für die Standardbedingung an. Wählen Sie das Bleistift-Symbol aus, um den Text zu bearbeiten.

  3. Wählen Sie für Skalierungsmodus die Option Basierend auf einer Metrik skalieren aus.

  4. Wählen Sie + Regel hinzufügen aus.

    Standard: basierend auf einer Metrik skalieren

  5. Führen Sie auf der Seite Skalierungsregel die folgenden Schritte aus:

    1. Wählen Sie in der Dropdownliste Metrikname eine Metrik aus. In diesem Beispiel wird CPU verwendet.

    2. Wählen Sie einen Operator und Schwellenwerte aus. In diesem Beispiel werden für Metrikschwellenwert zum Auslösen von Skalierungsaktion die Operatoren Größer als und 75 verwendet.

    3. Wählen Sie im Abschnitt Aktion einen Vorgang aus. In diesem Beispiel wird Erhöhen verwendet.

    4. Wählen Sie anschließend Hinzufügen aus.

      Standard: aufskalieren, wenn die CPU-Auslastung bei mehr als 75 % liegt

      Hinweis

      In diesem Beispiel erhöht die Funktion zur Autoskalierung die Anzahl von Messagingeinheiten für den Namespace, wenn die CPU-Auslastung insgesamt bei über 75 % liegt. Beim Erhöhen werden Inkrementierungsschritte von 1 zu 2, 2 zu 4, 4 zu 8 und 8 zu 16 vorgenommen.

  6. Wählen Sie erneut + Regel hinzufügen aus, und führen Sie auf der Seite Skalierungsregel die folgenden Schritte aus:

    1. Wählen Sie in der Dropdownliste Metrikname eine Metrik aus. In diesem Beispiel wird CPU verwendet.

    2. Wählen Sie einen Operator und Schwellenwerte aus. In diesem Beispiel werden für Metrikschwellenwert zum Auslösen von Skalierungsaktion die Operatoren Weniger als und 25 verwendet.

    3. Wählen Sie im Abschnitt Aktion einen Vorgang aus. In diesem Beispiel wird Verringern verwendet.

    4. Wählen Sie anschließend Hinzufügen aus.

      Standard: abskalieren, wenn die CPU-Auslastung bei weniger als 25 % liegt

      Hinweis

      In diesem Beispiel verringert die Funktion zur Autoskalierung die Anzahl von Messagingeinheiten für den Namespace, wenn die CPU-Auslastung insgesamt bei weniger als 25 % liegt. Beim Verringern erfolgen die Schritte von 16 zu 8, 8 zu 4, 4 zu 2 und 2 zu 1.

  7. Legen Sie für Minimum, Maximum und Standard die jeweilige Anzahl von Messagingeinheiten fest.

    Standardregel basierend auf einer Metrik

  8. Wählen Sie auf der Symbolleiste Speichern aus, um die Einstellung für die Autoskalierung zu speichern.

Skalierung auf eine bestimmte Anzahl von Messagingeinheiten

Führen Sie die folgenden Schritte aus, um die Regel zur Skalierung des Namespace so zu konfigurieren, dass eine bestimmte Anzahl von Messagingeinheiten verwendet wird. Auch hier wird die Standardbedingung angewendet, wenn keine der anderen Skalierungsbedingungen zutrifft.

  1. Wählen Sie auf der Seite Einstellung für die Autoskalierung für Auswählen, wie Ihre Ressource skaliert werden soll die Option Benutzerdefinierte Autoskalierung aus.

  2. Geben Sie im Abschnitt Standard der Seite einen Namen für die Standardbedingung an.

  3. Wählen Sie für Skalierungsmodus die Option Auf bestimmte Anzahl von Messagingeinheiten skalieren aus.

  4. Wählen Sie für Messagingeinheiten die Anzahl von Standardmessagingeinheiten aus.

    Standard: auf bestimmte Anzahl von Messagingeinheiten skalieren

Benutzerdefinierte Autoskalierung: zusätzliche Bedingungen

Im vorherigen Abschnitt haben Sie erfahren, wie Sie eine Standardbedingung für die Einstellung für die Autoskalierung hinzufügen. In diesem Abschnitt wird gezeigt, wie Sie weitere Bedingungen zur Einstellung für die Autoskalierung hinzufügen. Für diese zusätzlichen Nicht-Standardbedingungen kann ein Zeitplan festgelegt werden, der auf bestimmten Wochentagen oder einem Datumsbereich basiert.

Skalierung basierend auf einer Metrik

  1. Wählen Sie auf der Seite Einstellung für die Autoskalierung für Auswählen, wie Ihre Ressource skaliert werden soll die Option Benutzerdefinierte Autoskalierung aus.

  2. Wählen Sie im Block Standard die Option Skalierungsbedingung hinzufügen aus.

    Benutzerdefiniert: Link zum Hinzufügen einer Skalierungsbedingung

  3. Geben Sie einen Namen für die Bedingung an.

  4. Überprüfen Sie, ob die Option Basierend auf einer Metrik skalieren ausgewählt ist.

  5. Wählen Sie + Regel hinzufügen aus, um die Anzahl von Messagingeinheiten zu erhöhen, wenn die CPU-Auslastung insgesamt bei mehr als 75 % liegt. Führen Sie die im Abschnitt Standardbedingung beschriebenen Schritte aus.

  6. Legen Sie für Minimum, Maximum und Standard die jeweilige Anzahl von Messagingeinheiten fest.

  7. Im Gegensatz zur Standardbedingung kann bei benutzerdefinierten Bedingungen zudem ein Zeitplan festgelegt werden. Dabei können Sie entweder ein Start- und ein Enddatum für die Bedingung oder bestimmte Wochentage (Montag, Dienstag usw.) angeben.

    1. Wenn Sie Start-/Enddatum angeben auswählen, treffen Sie für die zu verwendende Bedingung eine Auswahl für Zeitzone, Startdatum und -uhrzeit sowie Enddatum und -uhrzeit (wie in der folgenden Abbildung gezeigt).

      Mindest-, Höchst- und Standardwerte für die Anzahl von Messagingeinheiten

    2. Bei Auswahl von An bestimmten Tagen wiederholen wählen Sie die Wochentage, die Zeitzone, die Startzeit und die Endzeit für die Bedingung aus.

      An bestimmten Tagen wiederholen

Skalierung auf eine bestimmte Anzahl von Messagingeinheiten

  1. Wählen Sie auf der Seite Einstellung für die Autoskalierung für Auswählen, wie Ihre Ressource skaliert werden soll die Option Benutzerdefinierte Autoskalierung aus.

  2. Wählen Sie im Block Standard die Option Skalierungsbedingung hinzufügen aus.

    Benutzerdefiniert: Link zum Hinzufügen einer Skalierungsbedingung

  3. Geben Sie einen Namen für die Bedingung an.

  4. Wählen Sie für Skalierungsmodus die Option Auf bestimmte Anzahl von Messagingeinheiten skalieren aus.

  5. Wählen Sie die Anzahl von Messagingeinheiten aus der Dropdownliste aus.

  6. Geben Sie für Zeitplan entweder ein Start- und ein Enddatum für die Bedingung oder bestimmte Wochentage (Montag, Dienstag usw.) an.

    1. Wenn Sie Start-/Enddatum angeben auswählen, treffen Sie für die zu verwendende Bedingung eine Auswahl für Zeitzone, Startdatum und -uhrzeit sowie Enddatum und -uhrzeit.

    Auf bestimmte Anzahl von Messagingeinheiten skalieren: Start- und Enddatum

    1. Bei Auswahl von An bestimmten Tagen wiederholen wählen Sie die Wochentage, die Zeitzone, die Startzeit und die Endzeit für die Bedingung aus.

    Auf bestimmte Anzahl von Messagingeinheiten skalieren: an bestimmten Tagen wiederholen

    Weitere Informationen zur Funktionsweise der Einstellungen für die Autoskalierung – insbesondere dazu, wie ein Profil oder eine Bedingung ausgewählt und mehrere Regeln ausgewertet werden – finden Sie unter Grundlegendes zu Einstellungen für die automatische Skalierung.

    Hinweis

    • Die Metriken, die Sie überprüfen, um Entscheidungen zur automatischen Skalierung zu treffen, können fünf bis zehn Minuten alt sein. Bei Workloads mit Lastspitzen empfiehlt es sich, für das Hochskalieren einen kürzeren und für das Herunterskalieren einen längeren Zeitraum (>10 Minuten) zu verwenden, um sicherzustellen, dass für die Verarbeitung von Workloads mit Lastspitzen genügend Messagingeinheiten vorhanden sind.

    • Wenn Fehler aufgrund fehlender Kapazität (keine Messagingeinheiten verfügbar) angezeigt werden, erstellen Sie ein Supportticket.

Ausführungsverlauf

Wechseln Sie zur Registerkarte Verlauf ausführen auf der Seite Skalierung, um ein Diagramm anzuzeigen, das die Anzahl der Messagingeinheiten angibt, die vom Autoskalierungsmodul beobachtet werden. Wenn das Diagramm leer ist, bedeutet dies, dass automatische Skalierung nicht konfiguriert wurde. Oder sie wurde konfiguriert, ist aber deaktiviert oder befindet sich in einer Abkühlphase.

Screenshot: „Ausführungsverlauf“ auf der Seite „Skalierung“.

Benachrichtigungen

Wechseln Sie zur Registerkarte Benachrichtigen auf der Seite Skalierung, um Folgendes auszuführen:

  • Aktivieren des Sendens von Benachrichtigungs-E-Mails an Administratoren, Co-Admins und alle zusätzlichen Administratoren.

  • Aktivieren des Sendens von Benachrichtigungs-E-Mails an HTTP- oder HTTPS-Endpunkte, die von Webhooks verfügbar gemacht werden.

    Screenshot: Registerkarte „Benachrichtigen“ auf der Seite „Skalierung“.

Konfigurieren mithilfe einer Resource Manager-Vorlage

Sie können die folgende Resource Manager-Beispielvorlage verwenden, um einen Service Bus-Namespace mit einer Warteschlange zu erstellen und die Einstellungen für automatische Skalierung für den Namespace zu konfigurieren. In diesem Beispiel werden zwei Skalierungsbedingungen angegeben.

  • Standardskalierungsbedingung: Erhöhung der Messagingeinheiten, wenn die durchschnittliche CPU-Auslastung über 75 % liegt, und Verringerung der Messagingeinheiten, wenn die durchschnittliche CPU-Auslastung unter 25 % fällt.
  • Zuweisen von zwei Messagingeinheiten zum Namespace am Wochenende.

Vorlage

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

Sie können auch ein JSON-Beispiel für eine Einstellungsressource für Autoskalierung im Azure-Portal generieren. Nachdem Sie Einstellungen für automatische Skalierung im Azure-Portal konfiguriert haben, wählen Sie JSON auf der Befehlsleiste der Seite Skalierung aus.

Abbildung: Auswahl der JSON-Schaltfläche auf der Befehlsleiste der Seite „Skalierung“ im Azure-Portal.

Fügen Sie den JSON-Code dann im Abschnitt resources einer Resource Manager-Vorlage ein, wie im Beispiel oben gezeigt.

Weitere Überlegungen

Wenn Sie die Option Benutzerdefinierte Autoskalierung mit der Standardbedingung oder dem Standardprofil verwenden, werden die Messagingeinheiten schrittweise erhöht (1 -> 2 -> 4 -> 8 -> 16) oder verringert (16 -> 8 -> 4 -> 2 -> 1).

Wenn Sie zusätzliche Bedingungen erstellen, können die Messagingeinheiten nicht schrittweise erhöht oder verringert. Angenommen, Sie haben zwei Profile definiert, wie im folgenden Beispiel gezeigt. Um 06:00 Uhr UTC werden die Messagingeinheiten auf 16 festgelegt und um 21:00 Uhr UTC werden Sie auf 1 reduziert.

{

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

Es wird empfohlen, Regeln so zu erstellen, dass Messagingeinheiten schrittweise erhöht oder verringert werden.

Nächste Schritte

Weitere Informationen zu Messagingeinheiten finden Sie unter Service Bus Premium- und Standard-Preisstufe für Messaging.