Compreender como o Azure Resource Manager limita os pedidos
Este artigo descreve como o Azure Resource Manager limita as solicitações. Ele mostra como controlar o número de solicitações que permanecem antes de atingir o limite e como responder quando você atinge o limite.
A limitação ocorre em dois níveis. O Azure Resource Manager limita os pedidos para a subscrição e o inquilino. Se o pedido estiver abaixo dos limites de limitação da subscrição e do inquilino, o Resource Manager direcionará o pedido para o fornecedor de recursos. O fornecedor de recursos aplicará os limites da limitação personalizados às operações.
A imagem a seguir mostra como a limitação é aplicada quando uma solicitação passa do usuário para o Azure Resource Manager e o provedor de recursos. A imagem mostra que as solicitações são inicialmente limitadas por ID principal 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 principal e por hora.
Limites de subscrição e inquilino
Todas as operações de nível de assinatura e de locatário estão sujeitas a limites de limitação. As solicitações de assinatura são aquelas que envolvem a passagem de sua ID de assinatura, como a recuperação dos grupos de recursos em sua assinatura. Por exemplo, enviar uma solicitação para é uma operação no https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01
nível de assinatura. As solicitações de locatário não incluem sua ID de assinatura, como a recuperação de locais válidos do Azure. Por exemplo, enviar uma solicitação para é uma operação no https://management.azure.com/tenants?api-version=2022-01-01
nível do locatário.
Os limites predefinidos de limitação por hora são apresentados na seguinte tabela.
Âmbito | Operações | Limite |
---|---|---|
Subscrição | leituras | 12000 |
Subscrição | eliminações | 15000 |
Subscrição | escritas | 1200 |
Inquilino | leituras | 12000 |
Inquilino | escritas | 1200 |
Estes limites estão circunscritos ao principal de segurança (utilizador ou aplicação) que faz os pedidos e o ID de subscrição ou ID de inquilino. Se os seus pedidos forem provenientes de mais de um principal de segurança, o limite da subscrição ou do inquilino é superior a 12 000 e 1200 por hora.
Esses limites se aplicam a cada instância do Azure Resource Manager. Há várias instâncias em cada região do Azure e o Azure Resource Manager é implantado em todas as regiões do Azure. Assim, na prática, os limites são superiores a 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 de cabeçalho de resposta.
Migrando para limitação regional e 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 mudança, você experimentará novos limites de limitação. Os novos limites de limitação são aplicados por região e não por instância do Azure Resource Manager. A nova arquitetura usa um algoritmo de bucket de token para gerenciar a limitação de 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 de sua cota.
Os novos limites são os seguintes:
Âmbito | Operações | Tamanho da caçamba | Taxa de recarga por segundo |
---|---|---|---|
Subscrição | leituras | 250 | 25 |
Subscrição | eliminações | 200 | 10 |
Subscrição | escritas | 200 | 10 |
Inquilino | leituras | 250 | 25 |
Inquilino | eliminações | 200 | 10 |
Inquilino | escritas | 200 | 10 |
Os limites de subscrição aplicam-se por subscrição, por entidade de serviço e por tipo de operação. Há também limites de assinatura global que são equivalentes a 15 vezes os limites de entidade de serviço individual para cada tipo de operação. Os limites globais aplicam-se a todas as entidades de serviço. As solicitações serão limitadas se os limites globais, da entidade de serviço ou do locatário 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 ficam disponíveis.
Como posso saber se a minha subscrição utiliza a nova experiência de limitação?
Depois que sua assinatura for migrada para a nova experiência de limitação, o cabeçalho de resposta mostrará as solicitações restantes por minuto em vez de por hora. Além disso, seu Retry-After
valor mostra um minuto ou menos, em vez de cinco minutos. Para obter mais informações, consulte Código de erro.
Por que a limitação está mudando para 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 é que a nova experiência de limitação afeta os meus limites?
Pode enviar mais pedidos. As solicitações de gravação aumentam em 30 vezes. As solicitações de exclusão aumentam em 2,4 vezes. As solicitações de leitura aumentam 7,5 vezes.
Posso impedir que a minha subscrição migre para a nova experiência de limitação?
Não, todas as subscrições acabarão por ser migradas.
Limites do provedor de recursos
Os fornecedores de recursos aplicam os seus próprios limites de limitação. Dentro de cada assinatura, o provedor de recursos é limitado por região do recurso na solicitação. Como o Gerenciador de Recursos é limitado por instância do Gerenciador de Recursos e há várias instâncias do Gerenciador de Recursos 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 discute os limites de limitação de alguns provedores de recursos amplamente utilizados.
Limitação de armazenamento
Os seguintes limites aplicam-se apenas quando realiza operações de gestão com o Azure Resource Manager no Armazenamento do Microsoft Azure. Os limites aplicam-se por região do recurso na solicitação.
Recurso | Limite |
---|---|
Operações de gestão da conta de armazenamento (leitura) | 800 por 5 minutos |
Operações de gestão da conta de armazenamento (escrita) | 10 por segundo/1200 por hora |
Operações de gestão da conta de armazenamento (lista) | 100 por 5 minutos |
Limitação da rede
O fornecedor de recursos Microsoft.Network aplica os seguintes limites de limitação:
Operação | Limite |
---|---|
escrita/eliminação (PUT) | 1000 por 5 minutos |
leitura (GET) | 10000 por 5 minutos |
Além desses limites gerais, consulte os limites de uso do DNS do Azure.
Limitação de computação
O Microsoft Compute implementa a limitação para fornecer uma experiência ideal para usuários de Máquina Virtual e Conjunto de Dimensionamento de Máquina Virtual. Os Limites de Limitação de Computação fornecem informações abrangentes sobre políticas e limites de limitação para VMs, Conjuntos de Dimensionamento de Máquinas Virtuais e VMs de Conjuntos de Escala.
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 para determinar as solicitações restantes e como responder quando o limite for atingido também se aplicam ao Gráfico de Recursos. No entanto, o Resource Graph define seu próprio limite e taxa de redefinição. Para obter mais informações, consulte Cabeçalhos de limitação do Gráfico de Recursos.
Outros fornecedores de recursos
Para obter informações sobre limitação em outros provedores de recursos, consulte:
Código de erro
Quando você atinge o limite, você recebe o código de status HTTP 429 Muitas solicitações. A resposta inclui um valor Retry-After que especifica o número de segundos que seu aplicativo deve aguardar (ou suspender) antes de enviar a próxima solicitação. Se você enviar uma solicitação antes do valor de repetição expirar, 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 pode ter uma configuração de repetição automática. Para obter mais informações, consulte Diretrizes de repetição para serviços do Azure.
Alguns provedores de recursos retornam 429 para relatar um problema temporário. O problema pode ser uma condição de sobrecarga que não é causada diretamente pelo seu pedido. Ou, pode representar um erro temporário sobre o estado do recurso de destino ou recurso dependente. Por exemplo, o provedor de recursos de rede retorna 429 com o código de erro RetryableErrorDueToAnotherOperation quando o recurso de destino é bloqueado por outra operação. Para determinar se o erro vem da limitação ou de uma condição temporária, exiba os detalhes do erro na resposta.
Pedidos restantes
Você pode determinar o número de solicitações restantes examinando os 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 para esses valores:
Cabeçalho da resposta | Description |
---|---|
x-ms-ratelimit-remaining-subscription-deletes | O escopo da assinatura exclui as exclusões restantes. Esse valor é retornado em operações de exclusão. |
x-ms-ratelimit-remaining-subscription-reads | As leituras com escopo da assinatura permanecem. Esse valor é retornado em operações de leitura. |
x-ms-ratelimit-remaining-subscription-writes | Gravações com escopo de assinatura restantes. Esse valor é retornado em operações de gravação. |
x-ms-ratelimit-remaining-tenant-reads | O escopo do locatário lê o restante |
x-ms-ratelimit-remaining-tenant-writes | O escopo do locatário grava o restante |
x-ms-ratelimit-remaining-subscription-resource-requests | Solicitações de tipo de recurso com escopo de assinatura restantes. Esse 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 coleta de tipo de recurso com escopo de assinatura restantes. Esse 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 (recursos de lista). |
x-ms-ratelimit-remaining-tenant-resource-requests | Solicitações de tipo de recurso com escopo do locatário restantes. Esse cabeçalho só é 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 de o locatário ler ou gravar. |
x-ms-ratelimit-remaining-tenant-resource-entities-read | Solicitações de coleta de tipo de recurso com escopo do locatário restantes. Esse cabeçalho só é 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 retornar cabeçalhos de resposta com informações sobre solicitações restantes. Para obter informações sobre cabeçalhos de resposta retornados pelo provedor de recursos de computação, consulte Cabeçalhos de resposta informativos de taxa de chamada.
Recuperando os valores de cabeçalho
Recuperar esses valores de cabeçalho em seu código ou script não é diferente de recuperar qualquer valor de cabeçalho.
Por exemplo, em C#, você recupera o valor do cabeçalho de um objeto HttpWebResponse chamado response com o seguinte código:
response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)
No PowerShell, você recupera 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 obter um exemplo completo do PowerShell, consulte Verificar limites do Gerenciador de Recursos para uma assinatura.
Se quiser ver as solicitações restantes de depuração, você pode fornecer o parâmetro -Debug em seu 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 seguintes valores:
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 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
Que 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óximos passos
- Para obter mais informações sobre limites e quotas, veja Subscrição do Azure e limites, quotas e restrições do serviço.
- Para saber como lidar com pedidos REST assíncronos, veja Monitorizar operações assíncronas do Azure.