瞭解 Azure Resource Manager 如何節流要求

本文說明 Azure Resource Manager 如何節流要求。 它示範如何追蹤在達到限制之前保留的要求數目,以及如何在達到限制時回應。

節流會在兩個層級發生。 Azure Resource Manager 會對訂用帳戶和租用戶的要求進行節流。 如果要求在訂用帳戶和租用戶的節流限制下,Resource Manager 會將要求路由至資源提供者。 資源提供者會套用針對其作業量身訂做的節流限制。

下圖顯示如何套用節流,因為要求會從使用者移至 Azure Resource Manager 和資源提供者。 此影像顯示要求一開始會針對每個主體標識碼和傳送要求之用戶區域中的每個 Azure Resource Manager 實例進行節流處理。 要求會每小時進行節流。 當要求轉送至資源提供者時,要求會針對資源的每個區域進行節流處理,而不是用戶區域中的每個 Azure Resource Manager 實例。 資源提供者要求也會針對每個主體用戶標識碼和每小時進行節流。

此圖顯示當要求從使用者套用至 Azure Resource Manager 和資源提供者時,如何套用節流。

訂用帳戶和租用戶限制

每個訂用帳戶層級和租用戶層級作業都受限於節流限制。 訂用帳戶要求是牽涉到傳遞訂用帳戶標識碼的訂用帳戶要求,例如擷取訂用帳戶中的資源群組。 例如,將要求傳送至 https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 是訂用帳戶層級作業。 租使用者要求不包含您的訂用帳戶標識碼,例如擷取有效的 Azure 位置。 例如,將要求傳送至 https://management.azure.com/tenants?api-version=2022-01-01 是租用戶層級作業。

下表顯示預設的每小時節流限制。

範圍 Operations 限制
訂用帳戶 reads 12000
訂用帳戶 deletes 15000
訂用帳戶 writes 1200
租用戶 reads 12000
租用戶 writes 1200

這些限制會侷限在提出要求的安全性主體 (使用者或應用程式),以及訂用帳戶識別碼或租用戶識別碼。 如果您的要求來自多個安全性主體,則訂用帳戶或租用戶之間的限制會大於每小時 12,000 個和 1,200 個。

這些限制適用於每個 Azure Resource Manager 實例。 每個 Azure 區域中有多個實例,且 Azure Resource Manager 會部署至所有 Azure 區域。 因此,在實務上,限制高於這些限制。 來自使用者的要求通常是由 Azure Resource Manager 的不同實例處理。

其餘要求會在回應標頭值傳回。

遷移至區域節流和令牌貯體演算法

從 2024 年開始,Microsoft 正在將 Azure 訂用帳戶移轉至新的節流架構。 透過這項變更,您將體驗新的節流限制。 新的節流限制會套用每個區域,而不是每個 Azure Resource Manager 實例。 新的架構會使用 令牌貯體演演算法 來管理 API 節流。

令牌貯體代表您可以每秒傳送的要求數目上限。 當您達到要求數目上限時,重新填入率會決定令牌在貯體中的可用速度。

這些更新的限制可讓您更輕鬆地重新整理和管理配額。

新的限制如下:

範圍 Operations 貯體大小 每秒重新填滿率
訂用帳戶 reads 250 25
訂用帳戶 deletes 200 10
訂用帳戶 writes 200 10
租用戶 reads 250 25
租用戶 deletes 200 10
租用戶 writes 200 10

每個訂用帳戶、每個服務主體和每個作業類型都適用訂用帳戶限制。 也有相當於每個作業類型個別服務主體限制 15 倍的全域訂用帳戶限制。 全域限制適用於所有服務主體。 如果超過全域、服務主體或租使用者特定限制,將會節流要求。

免費或試用版客戶的限制可能較小。

例如,假設您有 250 個令牌的貯體大小,以供讀取要求使用,且每秒重新填入速率為 25 個令牌。 如果您在第二個中傳送 250 個讀取要求,貯體是空的,而且您的要求會受到節流。 每秒有 25 個令牌可供使用,直到貯體達到最大容量 250 個令牌為止。 您可以在權杖可供使用時使用令牌。

如何? 知道我的訂用帳戶是否使用新的節流體驗?

將訂用帳戶移轉至新的節流體驗之後,響應標頭會顯示每分鐘剩餘的要求,而不是每小時。 此外,您的 Retry-After 值會顯示一分鐘或更少,而不是五分鐘。 如需詳細資訊,請參閱 錯誤碼

為什麼節流會變更為每個區域,而不是每個實例?

由於不同區域有不同的 Resource Manager 實例數目,因此每個實例的節流會導致節流效能不一致。 每個區域的節流可讓節流保持一致且可預測。

新的節流體驗如何影響我的限制?

您可以傳送更多要求。 寫入要求增加 30 倍。 刪除要求增加 2.4 倍。 讀取要求增加 7.5 倍。

我是否可以防止訂用帳戶移轉至新的節流體驗?

否,所有訂用帳戶最終都會移轉。

資源提供者限制

資源提供者會套用自己的節流限制。 在每個訂用帳戶內,資源提供者會對要求中資源的每個區域進行節流。 因為 Resource Manager 會依 Resource Manager 實例進行節流,而且每個區域中都有數個 Resource Manager 實例,因此資源提供者可能會收到比上一節中的預設限制更多的要求。

本節討論一些廣泛使用之資源提供者的節流限制。

儲存體節流

只有在使用 Azure Resource Manager 搭配 Azure 儲存體來執行管理作業時,才會套用下列限制。 這些限制按區域套用於要求中的資源。

資源 限制
儲存體帳戶的管理作業 (讀取) 每 5 分鐘 800
儲存體帳戶管理作業 (寫入) 每秒 10 個/每小時 1,200 個
儲存體帳戶的管理作業 (清單) 每 5 分鐘 100

網路節流

Microsoft.Network 資源提供者會套用下列節流限制:

作業 限制
寫入/刪除 (PUT) 每 5 分鐘 1000 個
讀取 (GET) 每 5 分鐘 10000 個

除了這些一般限制之外,下列限制也適用於 DNS 作業:

DNS 區域作業 限制 (每個區域)
建立或更新 每分鐘 40 個
刪除 每分鐘 40 個
Get 每分鐘 1000 個
清單​​ 每分鐘 60 個
依資源群組列示 每分鐘 60 個
更新 每分鐘 40 個
DNS 記錄集作業 限制 (每個區域)
建立或更新 每分鐘 200 個
刪除 每分鐘 200 個
Get 每分鐘 2000 個
依 DNS 區域列出 每分鐘 60 個
依類型列出 每分鐘 60 個
更新 每分鐘 200 個

計算節流

如需計算作業節流限制的相關信息,請參閱 針對 API 節流錯誤進行疑難解答 - 計算

若要檢查虛擬機擴展集內的虛擬機實例,請使用 虛擬機器擴展集 作業。 例如,使用 虛擬機擴展集 VM - 列出 參數來檢查虛擬機實例的電源狀態。 此 API 可減少要求數目。

Azure Resource Graph 節流

Azure Resource Graph 會限制其作業的要求數目。 本文中決定剩餘要求的步驟,以及如何在達到限制時回應也適用於 Resource Graph。 不過,Resource Graph 會設定自己的限制和重設速率。 如需詳細資訊,請參閱 Resource Graph 節流標頭

其他資源提供者

如需其他資源提供者中節流的相關信息,請參閱:

錯誤碼

當您達到限制時,您會收到 HTTP 狀態代碼 429 太多要求。 回應包含 Retry-After 值,指定應用程式在傳送下一個要求之前應該等候的秒數(或睡眠)。 如果您在重試值經過之前傳送要求,則不會處理您的要求,並傳回新的重試值。

如果您使用 Azure SDK,SDK 可能會有自動重試設定。 如需詳細資訊,請參閱 Azure 服務的重試指引。

有些資源提供者會傳回 429 回報暫時性問題。 問題可能是您的要求未直接造成的多載條件。 或者,它可能代表目標資源或相依資源狀態的暫時錯誤。 例如,當目標資源被另一個作業鎖定時,網路資源提供者會傳回 429 與 RetryableErrorDueToAnotherOperation 錯誤碼。 若要判斷錯誤是否來自節流或暫時條件,請在回應中檢視錯誤詳細數據。

剩餘的要求

您可以檢查回應標頭來判斷剩餘的要求數目。 讀取要求會傳回標頭中剩餘讀取要求數目的值。 寫入要求包含剩餘寫入要求數目的值。 下表描述您可以檢查這些值的回應標頭:

回應標頭 描述
x-ms-ratelimit-remaining-subscription-deletes 訂用帳戶範圍刪除剩餘。 這個值會在刪除作業時傳回。
x-ms-ratelimit-remaining-subscription-reads 剩餘的訂用帳戶範圍讀取。 這個值會在讀取作業時傳回。
x-ms-ratelimit-remaining-subscription-writes 剩餘的訂用帳戶範圍寫入。 這個值會在寫入作業時傳回。
x-ms-ratelimit-remaining-tenant-reads 剩餘租用戶範圍讀取
x-ms-ratelimit-remaining-tenant-writes 剩餘租用戶範圍的寫入
x-ms-ratelimit-remaining-subscription-resource-requests 剩餘的訂用帳戶範圍資源類型要求。

只有在服務覆寫預設限制時,才會傳回此標頭值。 Resource Manager 會新增此值,而不是訂用帳戶讀取或寫入。
x-ms-ratelimit-remaining-subscription-resource-entities-read 剩餘的訂用帳戶範圍資源類型集合要求。

只有在服務覆寫預設限制時,才會傳回此標頭值。 這個值會提供剩餘集合要求的數目(列出資源)。
x-ms-ratelimit-remaining-tenant-resource-requests 剩餘的租用戶範圍資源類型要求。

只有在服務覆寫預設限制時,才會針對租用戶層級的要求新增此標頭。 Resource Manager 會新增此值,而不是租用戶讀取或寫入。
x-ms-ratelimit-remaining-tenant-resource-entities-read 剩餘的租用戶範圍資源類型集合要求。

只有在服務覆寫預設限制時,才會針對租用戶層級的要求新增此標頭。

資源提供者也可以傳回回應標頭,其中包含剩餘要求的相關信息。 如需計算資源提供者所傳回之回應標頭的相關信息,請參閱 呼叫速率資訊回應標頭

擷取標頭值

在您的程式代碼或腳本中擷取這些標頭值與擷取任何標頭值並無不同。

例如,在 C# 中,您會使用下列程式代碼,從名為 response 的 HttpWebResponse 物件擷取標頭值:

response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)

在 PowerShell,您會從 Invoke-WebRequest 作業擷取標頭值。

$r = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/{guid}/resourcegroups?api-version=2016-09-01 -Method GET -Headers $authHeaders
$r.Headers["x-ms-ratelimit-remaining-subscription-reads"]

如需完整的 PowerShell 範例,請參閱 檢查訂用帳戶的 Resource Manager 限制。

如果您想要查看其餘的偵錯要求,您可以在 PowerShell Cmdlet 上提供 -Debug 參數。

Get-AzResourceGroup -Debug

這會傳回許多值,包括下列回應值:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-reads: 11999

若要取得寫入限制,請使用寫入作業:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

這會傳回許多值,包括下列值:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
Created

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199

Azure CLI 中,您會使用更詳細的選項來擷取標頭值。

az group list --verbose --debug

這會傳回許多值,包括下列值:

msrest.http_logger : Response status: 200
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Content-Encoding': 'gzip'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'Vary': 'Accept-Encoding'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-reads': '11998'

若要取得寫入限制,請使用寫入作業:

az group create -n myresourcegroup --location westus --verbose --debug

這會傳回許多值,包括下列值:

msrest.http_logger : Response status: 201
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Length': '163'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-writes': '1199'

下一步