Förstå hur Azure Resource Manager begränsar begäranden
Den här artikeln beskriver hur Azure Resource Manager begränsar begäranden. Den visar hur du spårar antalet begäranden som återstår innan du når gränsen och hur du svarar när du når gränsen.
Begränsning sker på två nivåer. Azure Resource Manager begränsar begäranden för prenumerationen och klientorganisationen. Om begäran är under gränsvärdena för prenumerationen och klientorganisationen dirigerar Resource Manager begäran till resursprovidern. Resursprovidern tillämpar gränsvärden som är skräddarsydda för dess åtgärder.
Följande bild visar hur begränsning tillämpas när en begäran går från användaren till Azure Resource Manager och resursprovidern. Bilden visar att begäranden till en början begränsas per huvudnamns-ID och per Azure Resource Manager-instans i regionen där användaren skickar begäran. Begäranden begränsas per timme. När begäran vidarebefordras till resursprovidern begränsas begäranden per region för resursen i stället för per Azure Resource Manager-instans i användarens region. Resursproviderns begäranden begränsas också per huvudkontots användar-ID och per timme.
Prenumerations- och klientbegränsningar
Varje åtgärd på prenumerationsnivå och klientnivå omfattas av begränsningsgränser. Prenumerationsbegäranden är sådana som innebär att du skickar ditt prenumerations-ID, till exempel att hämta resursgrupperna i din prenumeration. Att till exempel skicka en begäran till https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01
är en åtgärd på prenumerationsnivå. Klientbegäranden inkluderar inte ditt prenumerations-ID, till exempel att hämta giltiga Azure-platser. Att till exempel skicka en begäran till https://management.azure.com/tenants?api-version=2022-01-01
är en åtgärd på klientorganisationsnivå.
I följande tabell visas standardgränser per timme.
Omfång | Operations | Gräns |
---|---|---|
Prenumeration | läsningar | 12000 |
Prenumeration | borttagningar | 15000 |
Prenumeration | skrivningar | 1200 |
Klientorganisation | läsningar | 12000 |
Klientorganisation | skrivningar | 1200 |
De här gränserna gäller det säkerhetsobjekt (användare eller program) som skickar förfrågningarna och prenumerationens eller klientorganisationens ID. Om dina förfrågningar kommer från fler än ett säkerhetsobjekt är begränsningen för prenumerationen eller klientorganisationen högre än 12 000 respektive 1 200 per timme.
Dessa gränser gäller för varje Azure Resource Manager-instans. Det finns flera instanser i varje Azure-region och Azure Resource Manager distribueras till alla Azure-regioner. Så i praktiken är gränserna högre än dessa gränser. Begäranden från en användare hanteras vanligtvis av olika instanser av Azure Resource Manager.
Återstående begäranden returneras i svarshuvudvärdena.
Migrera till regional begränsning och token bucket-algoritm
Från och med 2024 migrerar Microsoft Azure-prenumerationer till en ny begränsningsarkitektur. Med den här ändringen får du nya begränsningar. De nya begränsningsgränserna tillämpas per region i stället för per instans av Azure Resource Manager. Den nya arkitekturen använder en token bucket-algoritm för att hantera API-begränsning.
Token-bucketen representerar det maximala antalet begäranden som du kan skicka för varje sekund. När du når det maximala antalet begäranden avgör påfyllningsfrekvensen hur snabbt token blir tillgängliga i bucketen.
Dessa uppdaterade gränser gör det enklare för dig att uppdatera och hantera din kvot.
De nya gränserna är:
Omfång | Operations | Bucketstorlek | Påfyllningshastighet per sekund |
---|---|---|---|
Prenumeration | läsningar | 250 | 25 |
Prenumeration | borttagningar | 200 | 10 |
Prenumeration | skrivningar | 200 | 10 |
Klientorganisation | läsningar | 250 | 25 |
Klientorganisation | borttagningar | 200 | 10 |
Klientorganisation | skrivningar | 200 | 10 |
Prenumerationsgränserna gäller per prenumeration, per tjänstens huvudnamn och per åtgärdstyp. Det finns också globala prenumerationsgränser som motsvarar 15 gånger de enskilda gränserna för tjänstens huvudnamn för varje åtgärdstyp. De globala gränserna gäller för alla tjänsthuvudnamn. Begäranden begränsas om de globala gränserna, tjänstens huvudnamn eller klientorganisationsspecifika gränser överskrids.
Gränserna kan vara mindre för kostnadsfria kunder eller utvärderingskunder.
Anta till exempel att du har en bucketstorlek på 250 token för läsbegäranden och påfyllningshastighet på 25 token per sekund. Om du skickar 250 läsbegäranden på en sekund är bucketen tom och dina begäranden begränsas. Varje sekund blir 25 token tillgängliga tills bucketen når sin maximala kapacitet på 250 token. Du kan använda token när de blir tillgängliga.
Att läsa mått med hjälp av API:et */providers/microsoft.insights/metrics
bidrar avsevärt till den övergripande Azure Resource Manager-trafiken och är en vanlig orsak till prenumerationsbegränsningshändelser. Om du använder det här API:et kraftigt rekommenderar vi att du växlar till API:et getBatch
. Du kan köra frågor mot flera resurser i en enda REST-begäran, vilket förbättrar prestandan och minskar begränsningen. Mer information om hur du konverterar dina åtgärder finns i Migrera från mått-API:et till getBatch-API:et.
Hur gör jag för att veta om min prenumeration använder den nya begränsningsupplevelsen?
När prenumerationen har migrerats till den nya begränsningsmiljön visar svarshuvudet återstående begäranden per minut i stället för per timme. Dessutom visar värdet Retry-After
en minut eller mindre, i stället för fem minuter. Mer information finns i Felkod.
Varför ändras begränsningen till per region i stället för per instans?
Eftersom olika regioner har ett annat antal Resource Manager-instanser orsakar begränsning per instans inkonsekventa begränsningsprestanda. Begränsning per region gör begränsningen konsekvent och förutsägbar.
Hur påverkar den nya begränsningsupplevelsen mina gränser?
Du kan skicka fler begäranden. Skrivbegäranden ökar med 30 gånger. Borttagningsbegäranden ökar med 2,4 gånger. Läsbegäranden ökar med 7,5 gånger.
Kan jag förhindra att min prenumeration migreras till den nya begränsningsmiljön?
Nej, alla prenumerationer migreras så småningom.
Begränsningar för resursprovider
Resursprovidrar tillämpar sina egna begränsningar. I varje prenumeration begränsar resursprovidern resursens region i begäran. Eftersom Resource Manager begränsar efter instans av Resource Manager och det finns flera instanser av Resource Manager i varje region kan resursprovidern ta emot fler begäranden än standardgränserna i föregående avsnitt.
I det här avsnittet beskrivs begränsningarna för vissa resursprovidrar som används ofta.
Lagringsbegränsning
Följande begränsningar gäller endast när du utför hanteringsåtgärder med Azure Resource Manager med Azure Storage. Gränserna gäller per region för resursen i begäran.
Resurs | Gräns |
---|---|
Hanteringsåtgärder för lagringskonto (läsning) | 800 per 5 minuter |
Hanteringsåtgärder för lagringskonto (skrivning) | 10 per sekund / 1 200 per timme |
Hanteringsåtgärder för lagringskonto (lista) | 100 per 5 minuter |
Nätverksbegränsning
Microsoft.Network-resursprovidern tillämpar följande begränsningar:
Åtgärd | Gräns |
---|---|
skrivning/borttagning (PUT) | 1 000 per 5 minuter |
läsning (GET) | 1 0000 per 5 minuter |
Utöver dessa allmänna gränser kan du läsa användningsgränserna för Azure DNS.
Beräkningsbegränsning
Microsoft Compute implementerar begränsning för att ge en optimal upplevelse för användare av vm- och vm-skalningsuppsättningar. Begränsningar för beräkning innehåller omfattande information om begränsningsprinciper och begränsningar för virtuella datorer, VM-skalningsuppsättningar och virtuella skalningsuppsättningar.
Azure Resource Graph-begränsning
Azure Resource Graph begränsar antalet begäranden till dess åtgärder. Stegen i den här artikeln för att fastställa återstående begäranden och hur du svarar när gränsen nås gäller även för Resource Graph. Resource Graph anger dock sin egen gräns och återställningshastighet. Mer information finns i Resource Graph-begränsningshuvuden.
Andra resursprovidrar
Information om begränsning i andra resursprovidrar finns i:
Felkod
När du når gränsen får du HTTP-statuskoden 429 För många begäranden. Svaret innehåller värdet Försök efter igen, som anger hur många sekunder programmet ska vänta (eller vila) innan nästa begäran skickas. Om du skickar en begäran innan återförsöksvärdet förflutit bearbetas inte din begäran och ett nytt återförsöksvärde returneras.
Om du använder en Azure SDK kan SDK:et ha en konfiguration för automatiskt återförsök. Mer information finns i Vägledning för återförsök för Azure-tjänster.
Vissa resursprovidrar returnerar 429 för att rapportera ett tillfälligt problem. Problemet kan vara ett överlagringsvillkor som inte direkt orsakas av din begäran. Eller så kan det innebära ett tillfälligt fel om målresursens eller den beroende resursens tillstånd. Nätverksresursprovidern returnerar till exempel 429 med felkoden RetryableErrorDueToAnotherOperation när målresursen låses av en annan åtgärd. Om du vill ta reda på om felet kommer från begränsning eller ett tillfälligt villkor kan du visa felinformationen i svaret.
Återstående begäranden
Du kan fastställa antalet återstående begäranden genom att undersöka svarshuvuden. Läsbegäranden returnerar ett värde i rubriken för antalet återstående läsbegäranden. Skrivbegäranden innehåller ett värde för antalet återstående skrivbegäranden. I följande tabell beskrivs de svarshuvuden som du kan undersöka för dessa värden:
Svarsrubrik | beskrivning |
---|---|
x-ms-ratelimit-remaining-subscription-deletes | Återstående borttagna prenumerationsomfång. Det här värdet returneras vid borttagningsåtgärder. |
x-ms-ratelimit-remaining-subscription-reads | Återstående läsningar med prenumerationsomfång. Det här värdet returneras vid läsåtgärder. |
x-ms-ratelimit-remaining-subscription-writes | Återstående skrivningar med prenumerationsomfång. Det här värdet returneras vid skrivåtgärder. |
x-ms-ratelimit-remaining-tenant-reads | Återstående läsningar med klientomfattning |
x-ms-ratelimit-remaining-tenant-writes | Återstående skrivningar med klientomfattning |
x-ms-ratelimit-remaining-subscription-resource-requests | Begäranden av prenumerationsomfångsbegränsad resurstyp finns kvar. Det här rubrikvärdet returneras endast om en tjänst åsidosätter standardgränsen. Resource Manager lägger till det här värdet i stället för prenumerationens läsningar eller skrivningar. |
x-ms-ratelimit-remaining-subscription-resource-entities-read | Begäranden om resurstypssamling som är begränsade till prenumerationen finns kvar. Det här rubrikvärdet returneras endast om en tjänst åsidosätter standardgränsen. Det här värdet innehåller antalet återstående samlingsbegäranden (listresurser). |
x-ms-ratelimit-remaining-tenant-resource-requests | Kvarstående begäranden av resurstyp med klientomfattning. Det här huvudet läggs bara till för begäranden på klientorganisationsnivå och endast om en tjänst åsidosätter standardgränsen. Resource Manager lägger till det här värdet i stället för klientorganisationens läsningar eller skrivningar. |
x-ms-ratelimit-remaining-tenant-resource-entities-read | Kvarstående begäranden om resurstypsinsamling för klientorganisation. Det här huvudet läggs bara till för begäranden på klientorganisationsnivå och endast om en tjänst åsidosätter standardgränsen. |
Resursprovidern kan också returnera svarshuvuden med information om återstående begäranden. Information om svarshuvuden som returneras av beräkningsresursprovidern finns i Meddelandehuvuden för samtalsfrekvensinformation.
Hämtar huvudvärdena
Att hämta dessa rubrikvärden i koden eller skriptet skiljer sig inte från att hämta ett huvudvärde.
I C# hämtar du till exempel rubrikvärdet från ett HttpWebResponse-objekt med namnet response med följande kod:
response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)
I PowerShell hämtar du rubrikvärdet från en Invoke-WebRequest-åtgärd.
$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"]
Ett fullständigt PowerShell-exempel finns i Kontrollera Resource Manager-gränser för en prenumeration.
Om du vill se återstående begäranden om felsökning kan du ange parametern -Debug på din PowerShell-cmdlet .
Get-AzResourceGroup -Debug
Vilket returnerar många värden, inklusive följande svarsvärde:
DEBUG: ============================ HTTP RESPONSE ============================
Status Code:
OK
Headers:
Pragma : no-cache
x-ms-ratelimit-remaining-subscription-reads: 11999
Använd en skrivåtgärd för att hämta skrivgränser:
New-AzResourceGroup -Name myresourcegroup -Location westus -Debug
Vilket returnerar många värden, inklusive följande värden:
DEBUG: ============================ HTTP RESPONSE ============================
Status Code:
Created
Headers:
Pragma : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199
I Azure CLI hämtar du rubrikvärdet med hjälp av det mer utförliga alternativet.
az group list --verbose --debug
Vilket returnerar många värden, inklusive följande värden:
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'
Använd en skrivåtgärd för att hämta skrivgränser:
az group create -n myresourcegroup --location westus --verbose --debug
Vilket returnerar många värden, inklusive följande värden:
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'
Nästa steg
- Mer information om gränser och kvoter finns i avsnittet om begränsningar och kvoter för Azure-prenumerationer och -tjänster.
- Mer information om hur du hanterar asynkrona REST-förfrågningar finns i Spåra asynkrona Azure-åtgärder.