Entender como o Azure Resource Manager limita as solicitações
Este artigo descreve como o Azure Resource Manager limita as solicitações. Ele mostra como acompanhar o número de solicitações que permanecem antes de atingir o limite e como responder quando você atingir o limite.
A limitação ocorre em dois níveis. O Azure Resource Manager limita as solicitações para assinatura e locatário. Se a solicitação estiver dentro dos limites de limitação para assinatura e o locatário, o Resource Manager roteia a solicitação para o provedor de recursos. O provedor de recursos aplica limites de limitação que são ajustados às suas operações.
As imagens a seguir mostram como a limitação é aplicada, uma vez que uma solicitação passa do usuário para o Azure Resource Manager e para o provedor de recursos. A imagem mostra que as solicitações são inicialmente limitadas por ID de entidade de segurança e por instância do Azure Resource Manager na região do usuário que envia a solicitação. As solicitações são limitadas por hora. Quando a solicitação é encaminhada para o provedor de recursos, as solicitações são limitadas por região do recurso, em vez de por instância do Azure Resource Manager na região do usuário. As solicitações do provedor de recursos também são limitadas por ID de usuário da entidade de segurança e por hora.
Limites de assinatura e locatário
Todas as operações em nível de assinatura e de locatário estão sujeitas a limites de limitação. As solicitações de assinatura envolvem a transmissão do seu ID de assinatura, como recuperar os grupos de recursos na sua assinatura. Por exemplo, enviar uma solicitação para https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01
é uma operação no nível da assinatura. As solicitações de inquilino não incluem seu ID de inscrição, como a recuperação de locais válidos do Azure. Por exemplo, enviar uma solicitação para https://management.azure.com/tenants?api-version=2022-01-01
é uma operação no nível do locatário.
Os limites de limitação por hora padrão são mostrados na tabela a seguir.
Escopo | Operations | Limite |
---|---|---|
Subscription | reads | 12000 |
Subscription | deletes | 15000 |
Subscription | writes | 1200 |
Locatário | reads | 12000 |
Locatário | writes | 1200 |
O escopo desses limites são a entidade de segurança (usuário ou aplicativo) que faz as solicitações e a ID da assinatura ou a ID do locatário. Se suas solicitações vierem de mais de uma entidade de segurança, seu limite na assinatura ou no locatário será maior que 12.000 e 1.200 por hora.
Esses limites se aplicam a cada instância do Azure Resource Manager. Há várias instâncias em todas as regiões do Azure e o Azure Resource Manager é implantado em todas as regiões do Azure. Portanto, na prática, os limites são maiores que esses limites. As solicitações de um usuário geralmente são tratadas por instâncias diferentes do Azure Resource Manager.
As solicitações restantes são retornadas nos valores do cabeçalho de resposta.
Migrar para a limitação regional e o algoritmo de bucket de token
A partir de 2024, a Microsoft está migrando assinaturas do Azure para uma nova arquitetura de limitação. Com essa alteração, você experimentará novos valores de limitação. Os novos valores de limitação são aplicados por região em vez de por instância do Azure Resource Manager. A nova arquitetura usa um algoritmo de bucket de token para gerenciar a limitação da API.
O bucket de token representa o número máximo de solicitações que você pode enviar para cada segundo. Quando você atinge o número máximo de solicitações, a taxa de recarga determina a rapidez com que os tokens ficam disponíveis no bucket.
Esses limites atualizados facilitam a atualização e o gerenciamento da cota.
Os novos limites são:
Escopo | Operações | Tamanho do bucket | Taxa de recarga por segundo |
---|---|---|---|
Assinatura | reads | 250 | 25 |
Assinatura | deletes | 200 | 10 |
Assinatura | writes | 200 | 10 |
Locatário | reads | 250 | 25 |
Locatário | deletes | 200 | 10 |
Locatário | writes | 200 | 10 |
Os limites de assinatura se aplicam por assinatura, por entidade de serviço e por tipo de operação. Há também limites de assinatura globais equivalentes a 15 vezes os limites individuais da entidade de serviço para cada tipo de operação. Os limites globais se aplicam a todas as entidades de serviço. As solicitações serão limitadas se os limites globais, de entidade de serviço ou de locatário específicos forem excedidos.
Os limites podem ser menores para clientes gratuitos ou de avaliação.
Por exemplo, suponha que você tenha um tamanho de bucket de 250 tokens para solicitações de leitura e taxa de recarga de 25 tokens por segundo. Se você enviar 250 solicitações de leitura em um segundo, o bucket estará vazio e suas solicitações serão limitadas. A cada segundo, 25 tokens ficam disponíveis até que o bucket atinja sua capacidade máxima de 250 tokens. Você pode usar tokens à medida que eles se tornam disponíveis.
Como fazer para saber se a minha assinatura usa a nova experiência de limitação?
Depois que a sua assinatura é migrada para a nova experiência de limitação, o cabeçalho de resposta mostra as solicitações restantes por minuto em vez de por hora. Além disso, seu valor Retry-After
mostra um minuto ou menos, em vez de cinco minutos. Para obter mais informações, confira Código de erro.
Por que a limitação está mudando para por região em vez de por instância?
Como regiões diferentes têm um número diferente de instâncias do Resource Manager, a limitação por instância causa um desempenho de limitação inconsistente. A limitação por região torna a limitação consistente e previsível.
Como a nova experiência de limitação afeta meus limites?
Você pode enviar mais solicitações. As solicitações de gravação aumentam 30 vezes. As solicitações de exclusão aumentam 2,4 vezes. As solicitações de leitura aumentam 7,5 vezes.
Posso impedir que minha assinatura migre para a nova experiência de limitação?
Não, todas as assinaturas serão eventualmente migradas.
Limites do provedor de recursos
Os provedores de recursos aplicam seus próprios limites de limitação. Em cada assinatura, o provedor de recursos limita por região do recurso na solicitação. Como o Resource Manager limita por instância de Resource Manager e existem várias instâncias dele em cada região, o provedor de recursos pode receber mais solicitações do que os limites padrão na seção anterior.
Esta seção aborda os limites de limitação de alguns provedores de recursos amplamente usados.
Limitação de armazenamento
Os limites a seguir se aplicarão somente quando você executar operações de gerenciamento usando o Azure Resource Manager com o Armazenamento do Azure. Os limites se aplicam por região do recurso na solicitação.
Recurso | Limite |
---|---|
Operações de gerenciamento de conta de armazenamento (leitura) | 800 a cada 5 minutos |
Operações de gerenciamento de conta de armazenamento (gravação) | 10 por segundo/1.200 por hora |
Operações de gerenciamento de conta de armazenamento (lista) | 100 a cada 5 minutos |
Limitação de rede
O provedor de recursos Microsoft.Network aplica os seguintes limites de limitação:
Operação | Limite |
---|---|
gravação / exclusão (PUT) | 1000 a cada 5 minutos |
leitura (GET) | 10000 a cada 5 minutos |
Além desses limites gerais, confira os limites de uso do DNS do Azure.
Limitação da computação
A Computação da Microsoft implementa a limitação para fornecer uma experiência ideal para usuários da Máquina Virtual e do Conjunto de Dimensionamento de Máquinas Virtuais. Os Limites de Limitação de Computação fornecem informações abrangentes sobre políticas de limitação e limites para VM, Conjuntos de Dimensionamento de Máquinas Virtuais e VMs do Conjunto de Dimensionamento.
Limitação do Azure Resource Graph
O Azure Resource Graph limita o número de solicitações para suas operações. As etapas neste artigo mostram como determinar as solicitações restantes e como responder quando o limite é atingido, e também se aplicam ao Resource Graph. No entanto, o Resource Graph define seu próprio limite e sua taxa de redefinição. Para saber mais, veja Cabeçalho de limitação do Resource Graph.
Outros provedores de recursos
Para obter informações sobre a limitação em outros provedores de recursos, veja:
Código do erro
Quando você alcança o limite, recebe o código de status HTTP 429 Excesso de solicitações. A resposta inclui o valor Retry-After, que especifica o número de segundos que o aplicativo deve aguardar (ou ficar suspenso) antes de enviar a próxima solicitação. Se você enviar uma solicitação antes que o valor de repetição seja decorrido, sua solicitação não será processada e um novo valor de repetição será retornado.
Se você estiver usando um SDK do Azure, o SDK poderá ter uma configuração de repetição automática. Para saber mais, veja Diretrizes de repetição para serviços do Azure.
Alguns provedores de recursos retornam o 429 para relatar um problema temporário. O problema pode ser uma condição de sobrecarga que não é causada diretamente pela sua solicitação. Ele também pode representar um erro temporário sobre o estado do recurso de destino ou do recurso dependente. Por exemplo, o provedor de recursos de rede retorna o 429 com o código de erro RetryableErrorDueToAnotherOperation quando o recurso de destino está bloqueado por outra operação. Para determinar se o erro é proveniente da limitação ou de uma condição temporária, exiba os detalhes do erro na resposta.
Solicitações restantes
Você pode determinar o número de solicitações restantes ao examinar cabeçalhos de resposta. As solicitações de leitura retornam um valor no cabeçalho para o número de solicitações de leitura restantes. As solicitações de gravação incluem um valor para o número de solicitações de gravação restantes. A tabela a seguir descreve os cabeçalhos de resposta que você pode examinar em busca desses valores:
Cabeçalho de resposta | Descrição |
---|---|
x-ms-ratelimit-remaining-subscription-deletes | Gravações no escopo da assinatura restantes. Esse valor é retornado em operações de exclusão. |
x-ms-ratelimit-remaining-subscription-reads | Leituras no escopo da assinatura restantes. Esse valor é retornado em operações de leitura. |
x-ms-ratelimit-remaining-subscription-writes | Gravações no escopo da assinatura restantes. Esse valor é retornado em operações de gravação. |
x-ms-ratelimit-remaining-tenant-reads | Leituras no escopo do locatário restantes |
x-ms-ratelimit-remaining-tenant-writes | Gravações no escopo do locatário restantes |
x-ms-ratelimit-remaining-subscription-resource-requests | Solicitações de tipo de recurso no escopo da assinatura restantes. Este valor de cabeçalho só será retornado se um serviço substituir o limite padrão. O Resource Manager adiciona esse valor em vez das leituras ou gravações da assinatura. |
x-ms-ratelimit-remaining-subscription-resource-entities-read | Solicitações de coletas de tipo de recurso no escopo da assinatura restantes. Este valor de cabeçalho só será retornado se um serviço substituir o limite padrão. Esse valor fornece o número de solicitações de coleta restantes (listar recursos). |
x-ms-ratelimit-remaining-tenant-resource-requests | Solicitações de tipo de recurso no escopo do locatário restantes. Este cabeçalho só será adicionado para solicitações no nível do locatário e somente se um serviço substituir o limite padrão. O Resource Manager adiciona esse valor em vez das leituras ou gravações do locatário. |
x-ms-ratelimit-remaining-tenant-resource-entities-read | Solicitações de coletas de tipo de recurso no escopo do locatário restantes. Este cabeçalho só será adicionado para solicitações no nível do locatário e somente se um serviço substituir o limite padrão. |
O provedor de recursos também pode devolver cabeçalhos de resposta com informações sobre as solicitações restantes. Para obter informações sobre cabeçalhos de resposta devolvidos pelo provedor de recursos de computação, veja Cabeçalhos de resposta informativo da taxa de chamada.
Recuperar os valores de cabeçalho
Recuperar esses valores de cabeçalho no seu código ou script não é diferente de recuperar um outro valor de cabeçalho qualquer.
Por exemplo, em C#, recupere o valor de cabeçalho de um objeto HttpWebResponse chamado response com o código a seguir:
response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)
No PowerShell, você recupera o valor de cabeçalho de uma operação 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"]
Para um exemplo completo do PowerShell, consulte Verificar os limites do gerenciador de recursos para uma assinatura.
Se você deseja ver as solicitações restantes de depuração, forneça o parâmetro -Debug no cmdlet do PowerShell.
Get-AzResourceGroup -Debug
Que retorna muitos valores, incluindo o seguinte valor de resposta:
DEBUG: ============================ HTTP RESPONSE ============================
Status Code:
OK
Headers:
Pragma : no-cache
x-ms-ratelimit-remaining-subscription-reads: 11999
Para obter limites de gravação, use uma operação de gravação:
New-AzResourceGroup -Name myresourcegroup -Location westus -Debug
Que retorna muitos valores, incluindo os valores a seguir:
DEBUG: ============================ HTTP RESPONSE ============================
Status Code:
Created
Headers:
Pragma : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199
Na CLI do Azure, você recupera o valor do cabeçalho usando a opção mais detalhada.
az group list --verbose --debug
Que retorna muitos valores, incluindo os valores a seguir:
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'
Para obter limites de gravação, use uma operação de gravação:
az group create -n myresourcegroup --location westus --verbose --debug
Que retorna muitos valores, incluindo os valores a seguir:
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'
Próximas etapas
- Para obter mais informações sobre limites e cotas, confira Assinatura do Azure e limite de serviços, cotas e restrições.
- Para saber mais sobre como lidar com solicitações assíncronas de REST, confira Track asynchronous Azure operations (Rastrear operações assíncronas do Azure).