Share via


自動更新 Azure 服務匯流排命名空間的傳訊單位

自動調整可讓您執行適當數量的資源來處理應用程式的負載。 它可讓您新增資源來處理增加的負載,並可藉由移除閒置資源來節省成本。 請參閱 Microsoft Azure 中的自動調整概觀,以深入了解 Azure 監視器的自動調整功能。

服務匯流排進階傳訊提供 CPU 和記憶體層級的資源隔離,讓每個客戶工作負載能隔離執行。 此資源容器稱為「傳訊單位」 。 若要深入了解傳訊單位,請參閱服務匯流排進階傳訊

藉由針對服務匯流排進階命名空間使用自動調整功能,您可以指定訊息單位數目的下限和上限,並根據一組規則自動新增或移除傳訊單位。

例如,您可以使用自動調整功能,針對服務匯流排命名空間實作下列調整案例。

  • 當命名空間的 CPU 使用量高於 75% 時,請增加服務匯流排命名空間的傳訊單位。
  • 當命名空間的 CPU 使用量低於 25% 時,請降低服務匯流排命名空間的傳訊單位。
  • 在上班時間使用更多傳訊單位,而在下班時間使用較少的串流單位。

本文說明您如何利用 Azure 入口網站和 Azure Resource Manager 範本,自動調整服務匯流排命名空間 (更新傳訊單位)。

重要

本文僅適用於 Azure 服務匯流排的 [進階] 層。

使用 Azure 入口網站進行設定

在本節中,您將了解如何使用 Azure 入口網站,為服務匯流排命名空間的傳訊單位設定自動調整。

自動調整設定頁面

首先,請遵循下列步驟,瀏覽至服務匯流排命名空間的 [自動調整設定] 頁面。

  1. 登入 Azure 入口網站

  2. 在搜尋列中,輸入服務匯流排從下拉式清單中選取 [服務匯流排],然後按 ENTER 鍵。

  3. 從命名空間清單中選取您的 [進階命名空間]

  4. 切換至 [調整] 頁面。

    Service Bus Namespace - Scale page

手動縮放

此設定可讓您針對命名空間設定固定數目的傳訊單位。

  1. 在 [自動調整設定] 頁面上,選取 [手動調整],如果尚未選取的話。

  2. 針對 [傳訊單位] 設定,從下拉式清單中選取傳訊單位數目。

  3. 選取工具列上的 [儲存] 來儲存設定。

    Manually scale messaging units

自訂自動調整 - 預設條件

您可以使用條件來設定傳訊單位的自動調整。 不符合其他調整條件時,就會執行此調整條件。 您可以採取下列其中一種方式來設定預設條件:

  • 根據計量進行調整 (例如 CPU 或記憶體使用量)
  • 調整為特定數目的傳訊單位

您無法針對預設條件設定一個排程,以在特定日子或日期範圍上自動調整。 不符合其他具有排程的調整條件時,就會執行此調整條件。

注意

為了改善接收輸送量,服務匯流排會在其快取中保留一些訊息。 僅在記憶體使用量超過特定高閾值 (如 90%) 時,服務匯流排才會減少快取。 因此,如果實體正在傳送訊息,但未接收訊息,則會快取這些訊息,並反映在記憶體使用量增加中。 無需擔心,因為服務匯流排會在需要時減少快取,最終導致記憶體使用量降低。 除非命名空間有效能或任何其他問題,否則記憶體將不會造成任何問題。 建議您使用 CPU 使用量計量,搭配服務匯流排進行自動調整。

根據計量進行調整

下列程序說明如何新增條件,以在 CPU 使用量大於 75% 時自動增加傳訊單位 (擴增),以及在 CPU 使用量小於 25% 時減少傳訊單位 (縮減)。 遞增是從 1 到 2、2 到 4、4 到 8,以及 8 到 16。 同樣地,遞減是從 16 到 8、8 到 4、4 到 2,以及 2 到 1。

  1. 在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]

  2. 在頁面的 [預設] 區段中,指定預設條件的名稱。 選取 [鉛筆] 圖示來編輯文字。

  3. 選取 [根據計量進行調整] 作為 [調整模式]

  4. 選取 [+新增規則]

    Default - scale based on a metric

  5. 在 [調整規則] 頁面上,遵循下列步驟:

    1. 從 [計量名稱] 下拉式清單中選取計量。 在此範例中,其為 CPU

    2. 選取運算子和閾值。 在此範例中,針對 [觸發調整動作的計量閾值],其是 [大於] 和 [75]

    3. 在 [動作] 區段中選取 [作業]。 在此範例中,這會設定為 [增加]

    4. 然後選取 [新增]

      Default - scale out if CPU usage is greater than 75%

      注意

      如果整體 CPU 使用量在此範例中高於 75%,則自動調整功能會增加命名空間的傳訊單位。 遞增是從 1 到 2、2 到 4、4 到 8,以及 8 到 16。

  6. 再次選取 [+ 新增規則],然後在 [調整規則] 頁面上遵循下列步驟:

    1. 從 [計量名稱] 下拉式清單中選取計量。 在此範例中,其為 CPU

    2. 選取運算子和閾值。 在此範例中,針對 [觸發調整動作的計量閾值],其是 [小於] 和 [25]

    3. 在 [動作] 區段中選取 [作業]。 在此範例中,這會設定為 [減少]

    4. 然後選取 [新增]

      Default - scale in if CPU usage is less than 25%

      注意

      如果整體 CPU 使用量在此範例中低於 25%,則自動調整功能會減少命名空間的傳訊單位。 遞減是從 16 到 8、8 到 4、4 到 2,以及 2 到 1。

  7. 設定傳訊單位的最小最大數目,以及預設數目。

    Default rule based on a metric

  8. 選取工具列上的 [儲存] 來儲存自動調整設定。

調整為特定數目的傳訊單位

請遵循下列步驟來設定規則,以調整命名空間來使用特定數目的傳訊單位。 再次強調,不符合任何其他調整條件時,便會套用此預設條件。

  1. 在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]

  2. 在頁面的 [預設] 區段中,指定預設條件的名稱

  3. 針對 [調整模式] 選取 [調整至特定傳訊單位]

  4. 針對 [傳訊單位],選取預設傳訊單位的數目。

    Default - scale to specific messaging units

自訂自動調整 - 其他條件

上一節說明如何新增自動調整設定的預設條件。 本節示範如何新增更多自動調整設定的條件。 針對這些其他非預設條件,您可以根據特定星期幾或日期範圍來設定排程。

根據計量進行調整

  1. 在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]

  2. 選取 [預設] 區塊底下的 [新增調整條件]

    Custom - add a scale condition link

  3. 指定條件的名稱

  4. 確認已選取 [根據計量進行調整] 選項。

  5. 選取 [+ 新增規則] 來新增規則,以在整體 CPU 使用量高於 75% 時增加傳訊單位。 請遵循來自預設條件一節的步驟。

  6. 設定傳訊單位的最小最大數目,以及預設數目。

  7. 您也可以在自訂條件上設定排程 (但不能在預設條件上設定)。 您可以指定條件的開始和結束日期 (或) 選取特定星期幾 (星期一、星期二等)。

    1. 如果您選取 [指定開始/結束日期],請選取 [時區]、[開始日期和時間],然後選取 [結束日期和時間] (如下圖所示),以讓條件生效。

      Minimum, maximum, and default values for number of messaging units

    2. 如果您選取 [重複特定日期],請選取應該套用條件的星期、時區、開始時間和結束時間。

      Repeat specific days

調整為特定數目的傳訊單位

  1. 在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]

  2. 選取 [預設] 區塊底下的 [新增調整條件]

    Custom - add a scale condition link

  3. 指定條件的名稱

  4. 針對 [調整模式] 選取 [調整至特定傳訊單位] 選項。

  5. 從下拉式清單中選取傳訊單位的數目。

  6. 針對 [排程],請指定條件的開始和結束日期 (或) 選取特定星期幾 (星期一、星期二等) 和時間。

    1. 如果您選取 [指定開始/結束日期],請選取 [時區]、[開始日期和時間],然後選取 [結束日期和時間],以讓條件生效。

    scale to specific messaging units - start and end dates

    1. 如果您選取 [重複特定日期],請選取應該套用條件的星期、時區、開始時間和結束時間。

    scale to specific messaging units - repeat specific days

    若要深入了解自動調整設定的運作方式,特別是如何挑選設定檔或條件並評估多個規則,請參閱了解自動調整設定

    注意

    • 您檢閱以做出自動調整決策的計量可能為 5-10 分鐘。 當處理尖峰工作負載時,建議您具有更短的擴大持續時間,以及更長的縮小持續時間 (> 10 分鐘),以確保有足夠的傳訊單位來處理尖峰工作負載。

    • 如果您看到由於缺少容量而失敗 (沒有可用的傳訊單位),請向我們提出支援票證。

執行歷程記錄

切換到 [調整] 頁面上的 [執行歷程記錄] 索引標籤,以查看繪有自動調整引擎觀察到的傳訊單位數目的圖表。 如果圖表空白,表示狀態為:未設定自動調整、已設定自動調整但已停用,或處於冷卻期間。

Screenshot showing **Run history** on the **Scale** page.

通知

切換到 [調整] 頁面上的 [通知] 索引標籤,以便:

  • 啟用傳送通知電子郵件給管理員、共同管理員,以及任何其他管理員。

  • 啟用傳送通知電子郵件,傳送至 Webhook 所公開的 HTTP 或 HTTPS 端點。

    Screenshot showing the **Notify** tab of the **Scale** page.

使用 Resource Manager 範本進行設定

您可以使用下列範例 Resource Manager 範本來建立具有佇列的服務匯流排命名空間,並為命名空間設定自動調整。 此範例中指定了兩個調整條件。

  • 預設調整條件:當平均 CPU 使用率超過 75% 時,增加傳訊單位,在平均 CPU 使用率低於 25% 時,則減少傳訊單位。
  • 週末時,將兩個傳訊單位指派給命名空間。

範本

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

您也可以從 Azure 入口網站產生自動調整設定資源的 JSON 範例。 在 Azure 入口網站中設定自動調整設定之後,請在 [調整] 頁面的命令列上選取 [JSON]

Image showing the selection of the JSON button on the command bar of the **Scale** page in the Azure portal.

然後,在 Resource Manager 範本的 resources 區段中包含 JSON,如上述範例所示。

其他考量

當您搭配 [預設] 條件或設定檔使用 [自訂自動調整] 選項時,傳訊單位會逐漸增加 (1 -> 2 -> 4 -> 8 -> 16) 或減少 (16 -> 8 -> 4 -> 2 -> 1)。

當您建立其他條件時,訊息單位可能不會逐漸增加或減少。 假設您已定義兩個設定檔,如下列範例所示。 在 06:00 UTC,傳訊單位設定為 16,在 21:00 UTC,其減少至 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]
				}
			}
		}
	]
}

建議您建立規則,讓傳訊單位逐漸增加或減少。

下一步

若要深入了解傳訊單位,請參閱進階傳訊