共用方式為


瞭解 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
取得 Yammer 每分鐘 2000 個
依 DNS 區域列出 每分鐘 60
依類型列出 每分鐘 60
更新 每分鐘 200

計算節流

Microsoft Compute 會實作節流,為虛擬機和虛擬機擴展集使用者提供最佳體驗。 計算節流限制提供 VM、虛擬機器擴展集 和擴展集 VM 節流原則和限制的完整資訊。

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# 中,您可以使用下列程式碼從 HttpWebResponse 物件 (名為 response) 擷取標頭值︰

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 範例,請參閱 Check Resource Manager Limits for a Subscription (檢查訂用帳戶的 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'

下一步