Comprendere come Azure Resource Manager limita le richieste

Questo articolo descrive come Azure Resource Manager limita le richieste. Mostra come tenere traccia del numero di richieste rimanenti prima del raggiungimento del limite e come intervenire quando si raggiunge il limite.

La limitazione avviene su due livelli. Azure Resource Manager limita le richieste per la sottoscrizione e il tenant. Se la richiesta è sotto i limiti per la sottoscrizione e il tenant, Resource Manager instrada la richiesta al provider di risorse. Il provider di risorse applica limiti personalizzati alle relative operazioni.

L’immagine seguente illustra come viene applicata la limitazione delle richieste quando la richiesta passa dall’utente ad Azure Resource Manager e al provider di risorse. L'immagine mostra che le richieste vengono inizialmente limitate in base all’ID entità e a ogni istanza di Azure Resource Manager nell'area dell'utente che invia la richiesta. Le richieste vengono limitate su base oraria. Quando la richiesta viene inoltrata al provider di risorse, le richieste vengono limitate in base all’area della risorsa anziché in base a ogni istanza di Azure Resource Manager nell'area dell'utente. Le richieste del provider di risorse vengono limitate anche in base all’ID utente principale e su base oraria.

Il diagramma seguente illustra come viene applicata la limitazione delle richieste quando la richiesta passa dall'utente ad Azure Resource Manager e al provider di risorse.

Limiti di sottoscrizione e tenant

Ogni operazione a livello di sottoscrizione e a livello di tenant è soggetta a limiti della limitazione delle richieste. Le richieste relative alla sottoscrizione sono quelle che comportano il passaggio dell'ID sottoscrizione, ad esempio il recupero dei gruppi di risorse, nella sottoscrizione. Ad esempio, l'invio di una richiesta a https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 è un’operazione a livello di sottoscrizione. Le richieste relative al tenant non includono l'ID sottoscrizione, ad esempio il recupero delle posizioni di Azure valide. Ad esempio, l'invio di una richiesta a https://management.azure.com/tenants?api-version=2022-01-01 è un’operazione a livello di tenant.

I limiti predefiniti all'ora vengono visualizzati nella tabella seguente.

Ambito Gestione operativa Limite
Subscription reads 12000
Abbonamento deletes 15000
Abbonamento writes 1200
Tenant reads 12000
Tenant writes 1200

L'ambito di questi limiti è l'entità di sicurezza (utente o applicazione) che effettua le richieste e l'ID sottoscrizione o l'ID tenant. Se le richieste provengono da più di un'entità di sicurezza, il limite per la sottoscrizione o il tenant è superiore a 12.000 e 1.200 richieste per ora.

Questi limiti si applicano a ogni istanza di Azure Resource Manager. Sono presenti più istanze in ogni area di Azure e Azure Resource Manager viene distribuito a tutte le aree di Azure, Quindi, in pratica, i limiti sono superiori a tali limiti. Le richieste di un utente vengono in genere gestite da istanze diverse di Azure Resource Manager.

Le richieste rimanenti vengono restituite nei valori dell'intestazione della risposta.

Migrazione all'algoritmo di limitazione delle richieste a livello di area e bucket di token

A partire dal 2024, Microsoft eseguirà la migrazione delle sottoscrizioni di Azure a una nuova architettura di limitazione delle richieste. A seguito di questa modifica, verranno implementati nuovi limiti per la limitazione delle richieste. I nuovi limiti di limitazione delle richieste vengono applicati in base all’area anziché in base a ogni istanza di Azure Resource Manager. La nuova architettura usa un algoritmo del bucket di token per gestire la limitazione delle richieste API.

Il bucket di token rappresenta il numero massimo di richieste che è possibile inviare per ogni secondo. Quando si raggiunge il numero massimo di richieste, la frequenza di riempimento determina la velocità con cui i token diventano disponibili nel bucket.

Questi limiti aggiornati semplificano l'aggiornamento e la gestione della quota.

I nuovi limiti sono:

Ambito Gestione operativa Dimensioni del bucket Frequenza di riempimento al secondo
Abbonamento reads 250 25
Abbonamento deletes 200 10
Abbonamento writes 200 10
Tenant reads 250 25
Tenant deletes 200 10
Tenant writes 200 10

I limiti della sottoscrizione si applicano per sottoscrizione, per entità servizio e per tipo di operazione. Esistono anche limiti della sottoscrizione globali equivalenti a 15 volte i limiti delle singole entità servizio per ogni tipo di operazione. I limiti globali si applicano a tutte le entità servizio. Le richieste verranno limitate se vengono superati i limiti globali, dell'entità servizio o dei tenant specifici.

I limiti possono essere inferiori per i clienti con sottoscrizione gratuita o di valutazione.

Si supponga, ad esempio, di avere una dimensione del bucket di 250 token per le richieste di lettura e una frequenza di riempimento di 25 token al secondo. Se si inviano 250 richieste di lettura in un secondo, il bucket è vuoto e le richieste vengono limitate. Ogni secondo, diventano disponibili 25 token diventano fino a quando il bucket raggiunge la capacità massima di 250 token. È possibile usare i token non appena diventano disponibili.

In che modo è possibile sapere se la sottoscrizione usa la nuova esperienza di limitazione delle richieste?

Dopo la migrazione della sottoscrizione alla nuova esperienza di limitazione delle richieste, l'intestazione della risposta mostra le richieste rimanenti al minuto anziché all'ora. Inoltre, il valore Retry-After mostra un minuto o meno anziché cinque minuti. Per altre informazioni, vedere Codice di errore.

Perché la limitazione delle richieste è stata modificata in limitazione per area anziché per istanza?

La limitazione per istanza causa prestazioni incoerenti della limitazione delle richieste perché in aree diverse è disponibile numero diverso di istanze di Resource Manager. La limitazione delle richieste per area rende la limitazione delle richieste coerente e prevedibile.

In che modo la nuova esperienza di limitazione delle richieste influisce sui limiti?

È possibile inviare più richieste. Le richieste di scrittura sono state aumentate di 30 volte. Le richieste di eliminazione sono state aumentate di 2,4 volte. Le richieste di lettura sono state aumentate di 7,5 volte.

È possibile impedire la migrazione della sottoscrizione alla nuova esperienza di limitazione delle richieste?

No, verrà eseguita la migrazione di tutte le sottoscrizioni.

Limiti del provider delle risorse

I provider di risorse applicano i propri limiti di limitazione. All'interno di ogni sottoscrizione, il provider di risorse specifica una limitazione delle richieste per ogni area della risorsa nella richiesta. Poiché la limitazione delle richieste di Resource Manager si basa su ogni istanza di Resource Manager e in ogni area sono presenti diverse istanze di Resource Manager, il provider di risorse potrebbe ricevere più richieste rispetto ai limiti predefiniti indicati nella sezione precedente.

Questa sezione illustra i limiti della limitazione delle richieste di alcuni provider di risorse ampiamente usati.

Limitazione del servizio di archiviazione

I limiti seguenti si applicano solo quando si eseguono operazioni di gestione usando Azure Resource Manager con Archiviazione di Azure. I limiti si applicano per area della risorsa nella richiesta.

Conto risorse Limite
Operazioni di gestione account di archiviazione (lettura) 800 per 5 minuti
Operazioni di gestione account di archiviazione (scrittura) 10 al secondo / 1200 all'ora
Operazioni di gestione account di archiviazione (elenco) 100 per 5 minuti

Limitazione della larghezza di banda della rete

Il provider di risorse Microsoft.Network applica i limiti seguenti:

Operazione Limite
scrittura/eliminazione (PUT) 1.000 ogni 5 minuti
lettura (GET) 10.000 ogni 5 minuti

Oltre a questi limiti generali, vedere i limiti di utilizzo per DNS di Azure.

Limitazione delle richieste di calcolo

Microsoft Compute implementa la limitazione delle richieste per offrire un'esperienza ottimale agli utenti di macchine virtuali e set di scalabilità di macchine virtuali. I limiti della limitazione delle richieste di calcolo forniscono informazioni complete sui criteri di limitazione e sui limiti per macchine virtuali, set di scalabilità di macchine virtuali e macchine virtuali del set di scalabilità.

Limitazione delle richieste di Azure Resource Graph

Azure Resource Graph limita il numero di richieste per le relative operazioni. La procedura per determinare le richieste rimanenti e come intervenire quando viene raggiunto il limite, descritta in questo articolo, si applica anche a Resource Graph. Tuttavia, Resource Graph imposta il proprio limite e la propria frequenza di reimpostazione. Per altre informazioni, vedere Intestazioni della limitazione delle richieste di Resource Graph.

Altri provider di risorse

Per informazioni sulla limitazione delle richieste in altri provider di risorse, vedere:

Codice errore

Quando si raggiunge il limite, viene visualizzato il codice di stato HTTP 429 Too many requests (429 Troppe richieste). La risposta include un valore Retry-After, che specifica il numero di secondi di attesa o sospensione dell'applicazione prima dell’invio della richiesta successiva. Se si invia una richiesta prima che sia trascorso il valore per la ripetizione del tentativo, la richiesta non viene elaborata e viene restituito un nuovo valore per la ripetizione del tentativo.

Se si usa Azure SDK, l'SDK potrebbe avere una configurazione per la ripetizione automatica dei tentativi. Per altre informazioni, vedere Linee guida per la ripetizione dei tentativi per i servizi Azure.

Alcuni provider di risorse restituiscono 429 per segnalare un problema temporaneo. Il problema potrebbe essere dovuto a una condizione di overload che non è direttamente causata dalla richiesta. In alternativa, potrebbe trattarsi un errore temporaneo relativo allo stato della risorsa di destinazione o della risorsa dipendente. Ad esempio, il provider di risorse di rete restituisce 429 con il codice di errore RetryableErrorDueToAnotherOperation quando la risorsa di destinazione è bloccata da un'altra operazione. Per determinare se l'errore deriva dalla limitazione delle richieste o da una condizione temporanea, visualizzare i dettagli dell'errore nella risposta.

Richieste rimanenti

È possibile determinare il numero di richieste rimanenti esaminando le intestazioni di risposta. Le richieste di lettura restituiscono un valore nell'intestazione per il numero di richieste di lettura rimanenti. Le richieste di scrittura includono un valore per il numero di richieste di scrittura rimanenti. Nella tabella seguente vengono descritte le intestazioni di risposta che è possibile esaminare per tali valori:

Intestazione di risposta Descrizione
x-ms-ratelimit-remaining-subscription-deletes Eliminazioni con ambito sottoscrizione rimanenti. Questo valore viene restituito nelle operazioni di eliminazione.
x-ms-ratelimit-remaining-subscription-reads Richieste di lettura rimanenti nell'ambito della sottoscrizione. Questo valore viene restituito nelle operazioni di lettura.
x-ms-ratelimit-remaining-subscription-writes Richieste di scrittura rimanenti nell'ambito della sottoscrizione. Questo valore viene restituito nelle operazioni di scrittura.
x-ms-ratelimit-remaining-tenant-reads Richieste di lettura rimanenti nell'ambito del tenant
x-ms-ratelimit-remaining-tenant-writes Richieste di scrittura rimanenti nell'ambito del tenant
x-ms-ratelimit-remaining-subscription-resource-requests Richieste di tipo di risorsa rimanenti nell'ambito della sottoscrizione.

Questo valore dell’intestazione viene restituito solo se un servizio ha superato il limite predefinito. Resource Manager aggiunge questo valore invece delle richieste di lettura o scrittura per la sottoscrizione.
x-ms-ratelimit-remaining-subscription-resource-entities-read Richieste di raccolta di tipo di risorsa rimanenti nell'ambito della sottoscrizione.

Questo valore dell’intestazione viene restituito solo se un servizio ha superato il limite predefinito. Questo valore fornisce il numero di richieste di raccolta rimanenti (elenco di risorse).
x-ms-ratelimit-remaining-tenant-resource-requests Richieste di tipo di risorsa rimanenti nell'ambito del tenant.

Questa intestazione viene aggiunta solo per le richieste a livello di tenant e solo se un servizio ha superato il limite predefinito. Resource Manager aggiunge questo valore invece delle richieste di lettura o scrittura per il tenant.
x-ms-ratelimit-remaining-tenant-resource-entities-read Richieste di raccolta di tipo di risorsa rimanenti nell'ambito del tenant.

Questa intestazione viene aggiunta solo per le richieste a livello di tenant e solo se un servizio ha superato il limite predefinito.

Il provider di risorse può anche restituire intestazioni della risposta con informazioni sulle richieste rimanenti. Per informazioni sulle intestazioni della risposta restituite dal provider di risorse di calcolo, vedere Intestazioni della risposte informativa sulla frequenza delle chiamate.

Recupero dei valori di intestazione

Il recupero di questi valori di intestazione nel codice o nello script non è diverso rispetto al recupero di qualsiasi valore di intestazione.

Ad esempio, in C# viene recuperato il valore di intestazione da un oggetto HttpWebResponse di nome response con il codice seguente:

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

In PowerShell viene recuperato il valore di intestazione da un'operazione 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"]

Per un esempio completo di PowerShell, vedere Check Resource Manager Limits for a Subscription (Controllare i limiti di Resource Manager per una sottoscrizione).

Per visualizzare le richieste rimanenti per il debug, è possibile specificare il parametro -Debug nel cmdlet PowerShell.

Get-AzResourceGroup -Debug

Tale parametro restituisce molti valori, incluso il valore di risposta seguente:

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

Status Code:
OK

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

Per ottenere i limiti di scrittura, usare un'operazione di scrittura:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

Tale opzione restituisce numerosi valori, inclusi i seguenti:

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

Status Code:
Created

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

In Interfaccia della riga di comando di Azure il valore di intestazione viene recuperato tramite l'opzione più dettagliata.

az group list --verbose --debug

Tale opzione restituisce numerosi valori, inclusi i seguenti:

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'

Per ottenere i limiti di scrittura, usare un'operazione di scrittura:

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

Tale opzione restituisce numerosi valori, inclusi i seguenti:

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'

Passaggi successivi