Compartilhar via


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.

Algoritmo de limitação regional e token bucket

A Microsoft migrou as assinaturas do Azure para uma arquitetura de limitação atualizada a partir de 2024. Os limites de limitação agora são aplicados por região em vez de por instância do Azure Resource Manager. Essa nova arquitetura usa um algoritmo de token bucket 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 limites atualizados são:

Escopo Operações Tamanho do bucket Taxa de recarga por segundo
Subscrição leituras 250 vinte e cinco
Subscrição exclusões 200 10
Subscrição gravações 200 10
Locatário leituras 250 vinte e cinco
Locatário exclusões 200 10
Locatário gravações 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 em período 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.

Ler métricas usando a API */providers/microsoft.insights/metrics contribui significativamente para o tráfego geral do Azure Resource Manager e é uma causa comum de eventos de limitação de assinatura. Se você usa muito esta API, recomendamos que você mude para a getBatch API. Você pode consultar vários recursos em uma única solicitação REST, o que melhora o desempenho e reduz a limitação. Para obter mais informações sobre como converter suas operações, veja Como migrar da API de métricas para a API getBatch.

Como posso visualizar minhas solicitações limitadas?

Para exibir suas solicitações limitadas e outras métricas do Resource Manager, consulte Acessar as métricas do Azure Resource Manager.

Por que a limitação é por região e não 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 experiência de limitação atualizada 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.

Limitação de trabalho em segundo plano

Trabalhos em segundo plano no ARM (Azure Resource Manager) são tarefas automatizadas executadas nos bastidores para dar suporte a operações como implantações de recursos, diagnóstico e manutenção do sistema. Esses trabalhos são essenciais para processar solicitações de usuário e garantir a funcionalidade do serviço. Para manter a estabilidade e a confiabilidade da plataforma, a ARM emprega a limitação de tarefas em segundo plano para gerenciar a carga dessas tarefas.

Você pode identificar quando a limitação do trabalho em segundo plano ocorre se você receber a seguinte mensagem de erro:

The request for subscription '{0}' could not be processed due to an excessive volume of traffic. Please try again later.

Os clientes podem enfrentar limitação devido a trabalhos em segundo plano excessivos, que podem ser disparados por operações de alta frequência ou atividades em todo o sistema. Embora os clientes não tenham controle direto sobre a criação ou execução desses trabalhos, a conscientização sobre a limitação potencial é importante.

Limitação para nuvens não públicas

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 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 para a instância do Azure Resource Manager na região também são limitadas por ID de usuário principal e 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.

Observação

Os limites de um provedor de recursos podem ser diferentes dos limites da instância do Azure Resource Manager na região do usuário.

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.

O diagrama que mostra 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.

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 Operações Limite
Subscrição leituras 12.000
Subscrição exclusões 15,000
Subscrição gravações 1.200
Locatário leituras 12.000
Locatário gravações 1.200

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. Instâncias diferentes do Azure Resource Manager geralmente lidam com as solicitações do usuário.

As solicitações restantes são retornadas nos valores do cabeçalho de resposta.

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 aplicam somente quando você executa operações de gerenciamento usando o Azure Resource Manager com o Armazenamento do Microsoft Azure e o Provedor de Recursos de Armazenamento. Os limites se aplicam por assinatura e 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) 1\.000 a cada 5 minutos
leitura (GET) 10.000 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 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 sua solicitação não causou. Ele também pode ser 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 outra operação bloqueia o recurso de destino. 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 restantes no escopo do locatário.
x-ms-ratelimit-remaining-tenant-writes Gravações restantes no escopo do locatário.
x-ms-ratelimit-remaining-subscription-resource-requests Solicitações restantes de tipo de recurso com escopo de assinatura.

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 restantes de tipos de recursos com escopo de assinatura.

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 restantes de tipo de recurso com escopo de locatário.

Este cabeçalho 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, recupere o valor do 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 ver um exemplo completo no PowerShell, acesse o artigo Verificar limites do ARM para uma determinada assinatura.

Para ver as solicitações restantes para depuração, forneça o parâmetro -Debug em seu cmdlet do PowerShell.

Get-AzResourceGroup -Debug

A resposta inclui 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

A resposta inclui muitos valores, incluindo os seguintes valores:

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

Status Code:
Created

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

Na CLI do Azure, use a opção mais detalhada para recuperar o valor do cabeçalho:

az group list --verbose --debug

O comando retorna muitos valores, incluindo os seguintes valores:

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

A operação retorna muitos valores, incluindo os seguintes valores:

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