自動更新 Azure 服務匯流排命名空間的傳訊單位
自動調整可讓您執行適當數量的資源來處理應用程式的負載。 它可讓您新增資源來處理增加的負載,並可藉由移除閒置資源來節省成本。 請參閱 Microsoft Azure 中的自動調整概觀,以深入了解 Azure 監視器的自動調整功能。
服務匯流排進階傳訊提供 CPU 和記憶體層級的資源隔離,讓每個客戶工作負載能隔離執行。 此資源容器稱為「傳訊單位」 。 若要深入了解傳訊單位,請參閱服務匯流排進階傳訊。
藉由針對服務匯流排進階命名空間使用自動調整功能,您可以指定訊息單位數目的下限和上限,並根據一組規則自動新增或移除傳訊單位。
例如,您可以使用自動調整功能,針對服務匯流排命名空間實作下列調整案例。
- 當命名空間的 CPU 使用量高於 75% 時,請增加服務匯流排命名空間的傳訊單位。
- 當命名空間的 CPU 使用量低於 25% 時,請降低服務匯流排命名空間的傳訊單位。
- 在上班時間使用更多傳訊單位,而在下班時間使用較少的串流單位。
本文說明您如何利用 Azure 入口網站和 Azure Resource Manager 範本,自動調整服務匯流排命名空間 (更新傳訊單位)。
重要
本文僅適用於 Azure 服務匯流排的 [進階] 層。
使用 Azure 入口網站進行設定
在本節中,您將了解如何使用 Azure 入口網站,為服務匯流排命名空間的傳訊單位設定自動調整。
自動調整設定頁面
首先,請遵循下列步驟,瀏覽至服務匯流排命名空間的 [自動調整設定] 頁面。
登入 Azure 入口網站。
在搜尋列中,輸入服務匯流排從下拉式清單中選取 [服務匯流排],然後按 ENTER 鍵。
從命名空間清單中選取您的 [進階命名空間]。
切換至 [調整] 頁面。
手動縮放
此設定可讓您針對命名空間設定固定數目的傳訊單位。
在 [自動調整設定] 頁面上,選取 [手動調整],如果尚未選取的話。
針對 [傳訊單位] 設定,從下拉式清單中選取傳訊單位數目。
選取工具列上的 [儲存] 來儲存設定。
自訂自動調整 - 預設條件
您可以使用條件來設定傳訊單位的自動調整。 不符合其他調整條件時,就會執行此調整條件。 您可以採取下列其中一種方式來設定預設條件:
- 根據計量進行調整 (例如 CPU 或記憶體使用量)
- 調整為特定數目的傳訊單位
您無法針對預設條件設定一個排程,以在特定日子或日期範圍上自動調整。 不符合其他具有排程的調整條件時,就會執行此調整條件。
注意
為了改善接收輸送量,服務匯流排會在其快取中保留一些訊息。 僅在記憶體使用量超過特定高閾值 (如 80%) 時,服務匯流排才會減少快取。 因此,如果實體正在傳送訊息,但未接收訊息,則會快取這些訊息,並反映在記憶體使用量增加中。 通常這表示無需擔心,因為服務匯流排會在需要時減少快取,最終導致記憶體使用量降低。 因此,建議僅在記憶體使用量達到 90% 時擴展。 此外,只要記憶體使用量未低於 90%,建議不要縮小。
根據計量進行調整
下列程序說明如何新增條件,以在 CPU 使用量大於 75% 時自動增加傳訊單位 (擴增),以及在 CPU 使用量小於 25% 時減少傳訊單位 (縮減)。 遞增是從 1 到 2、2 到 4、4 到 8,以及 8 到 16。 同樣地,遞減是從 16 到 8、8 到 4、4 到 2,以及 2 到 1。
在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]。
在頁面的 [預設] 區段中,指定預設條件的名稱。 選取 [鉛筆] 圖示來編輯文字。
選取 [根據計量進行調整] 作為 [調整模式]。
選取 [+新增規則]。
在 [調整規則] 頁面上,遵循下列步驟:
從 [計量名稱] 下拉式清單中選取計量。 在此範例中,其為 CPU。
選取運算子和閾值。 在此範例中,針對 [觸發調整動作的計量閾值],其是 [大於] 和 [75]。
在 [動作] 區段中選取 [作業]。 在此範例中,這會設定為 [增加]。
然後選取 [新增]
注意
如果整體 CPU 使用量在此範例中高於 75%,則自動調整功能會增加命名空間的傳訊單位。 遞增是從 1 到 2、2 到 4、4 到 8,以及 8 到 16。
再次選取 [+ 新增規則],然後在 [調整規則] 頁面上遵循下列步驟:
從 [計量名稱] 下拉式清單中選取計量。 在此範例中,其為 CPU。
選取運算子和閾值。 在此範例中,針對 [觸發調整動作的計量閾值],其是 [小於] 和 [25]。
在 [動作] 區段中選取 [作業]。 在此範例中,這會設定為 [減少]。
然後選取 [新增]
注意
如果整體 CPU 使用量在此範例中低於 25%,則自動調整功能會減少命名空間的傳訊單位。 遞減是從 16 到 8、8 到 4、4 到 2,以及 2 到 1。
設定傳訊單位的最小和最大數目,以及預設數目。
選取工具列上的 [儲存] 來儲存自動調整設定。
調整為特定數目的傳訊單位
請遵循下列步驟來設定規則,以調整命名空間來使用特定數目的傳訊單位。 再次強調,不符合任何其他調整條件時,便會套用此預設條件。
在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]。
在頁面的 [預設] 區段中,指定預設條件的名稱。
針對 [調整模式] 選取 [調整至特定傳訊單位]。
針對 [傳訊單位],選取預設傳訊單位的數目。
自訂自動調整 - 其他條件
上一節說明如何新增自動調整設定的預設條件。 本節示範如何新增更多自動調整設定的條件。 針對這些其他非預設條件,您可以根據特定星期幾或日期範圍來設定排程。
根據計量進行調整
在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]。
選取 [預設] 區塊底下的 [新增調整條件]。
指定條件的名稱。
確認已選取 [根據計量進行調整] 選項。
選取 [+ 新增規則] 來新增規則,以在整體 CPU 使用量高於 75% 時增加傳訊單位。 請遵循來自預設條件一節的步驟。
設定傳訊單位的最小和最大數目,以及預設數目。
您也可以在自訂條件上設定排程 (但不能在預設條件上設定)。 您可以指定條件的開始和結束日期 (或) 選取特定星期幾 (星期一、星期二等)。
如果您選取 [指定開始/結束日期],請選取 [時區]、[開始日期和時間],然後選取 [結束日期和時間] (如下圖所示),以讓條件生效。
如果您選取 [重複特定日期],請選取應該套用條件的星期、時區、開始時間和結束時間。
調整為特定數目的傳訊單位
在 [自動調整設定] 頁面上,針對 [選擇如何調整資源] 選項選取 [自訂自動調整]。
選取 [預設] 區塊底下的 [新增調整條件]。
指定條件的名稱。
針對 [調整模式] 選取 [調整至特定傳訊單位] 選項。
從下拉式清單中選取傳訊單位的數目。
針對 [排程],請指定條件的開始和結束日期 (或) 選取特定星期幾 (星期一、星期二等) 和時間。
- 如果您選取 [指定開始/結束日期],請選取 [時區]、[開始日期和時間],然後選取 [結束日期和時間],以讓條件生效。
- 如果您選取 [重複特定日期],請選取應該套用條件的星期、時區、開始時間和結束時間。
若要深入了解自動調整設定的運作方式,特別是如何挑選設定檔或條件並評估多個規則,請參閱了解自動調整設定。
注意
您檢閱以做出自動調整決策的計量可能為 5-10 分鐘。 當處理尖峰工作負載時,建議您具有更短的擴大持續時間,以及更長的縮小持續時間 (> 10 分鐘),以確保有足夠的傳訊單位來處理尖峰工作負載。
如果您看到由於缺少容量而失敗 (沒有可用的傳訊單位),請向我們提出支援票證。 容量履行會受環境的條件約束所限制,我們會盡最大努力來達成。
執行歷程記錄
切換到 [調整] 頁面上的 [執行歷程記錄] 索引標籤,以查看繪有自動調整引擎觀察到的傳訊單位數目的圖表。 如果圖表空白,表示狀態為:未設定自動調整、已設定自動調整但已停用,或處於冷卻期間。
通知
切換到 [調整] 頁面上的 [通知] 索引標籤,以便:
啟用傳送通知電子郵件給管理員、共同管理員,以及任何其他管理員。
啟用傳送通知電子郵件,傳送至 Webhook 所公開的 HTTP 或 HTTPS 端點。
使用 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]。
然後,在 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]
}
}
}
]
}
建議您建立規則,讓傳訊單位逐漸增加或減少。
下一步
若要深入了解傳訊單位,請參閱進階傳訊