Limites de taxas e de utilização

Serviços de DevOps do Azure

Os Serviços de DevOps do Azure usam multilocação para reduzir custos e melhorar o desempenho. Esse design deixa os usuários vulneráveis a problemas de desempenho e até mesmo interrupções quando outros usuários de seus recursos compartilhados têm picos em seu consumo. Portanto, o Azure DevOps limita os recursos que os indivíduos podem consumir e a quantidade de solicitações que eles podem fazer a determinados comandos. Quando esses limites são excedidos, solicitações futuras podem ser atrasadas ou bloqueadas.

Para obter mais informações, consulte Limites do Git e Práticas recomendadas para evitar atingir limites de taxa.

Limite de consumo global

Atualmente, o Azure DevOps tem um limite de consumo global, que atrasa as solicitações de usuários individuais além de um limite quando os recursos compartilhados correm o risco de serem sobrecarregados. Esse limite é focado exclusivamente em evitar interrupções quando os recursos compartilhados estão perto de serem sobrecarregados. Os usuários individuais normalmente só recebem solicitações atrasadas quando ocorre um dos seguintes incidentes:

  • Um dos seus recursos comuns corre o risco de ficar sobrecarregado
  • Seu uso pessoal excede 200 vezes o consumo de um usuário típico dentro de uma janela (deslizante) de cinco minutos

O montante do atraso depende do nível sustentado de consumo do utilizador. Os atrasos variam de alguns milissegundos por solicitação até 30 segundos. Quando o consumo chega a zero ou o recurso deixa de estar sobrecarregado, os atrasos param em cinco minutos. Se o consumo permanecer elevado, os atrasos podem continuar indefinidamente para proteger o recurso.

Quando uma solicitação de usuário é atrasada por uma quantidade significativa, esse usuário recebe um e-mail e um banner de aviso na web. Para a conta de serviço de compilação e outras pessoas sem um endereço de e-mail, os membros do grupo Administradores de Coleção de Projetos recebem o e-mail. Para obter mais informações, veja Monitorização da utilização.

Quando as solicitações de um usuário individual são bloqueadas, as respostas com o código HTTP 429 (muitas solicitações) são recebidas, com uma mensagem semelhante à seguinte mensagem:

TF400733: The request has been canceled: Request was blocked due to exceeding usage of resource <resource name> in namespace <namespace ID>.

Unidades de taxa de transferência do Azure DevOps (TSTUs)

Os usuários do Azure DevOps consomem muitos recursos compartilhados e o consumo depende dos seguintes fatores:

  • Carregar um grande número de arquivos para o controle de versão cria uma grande quantidade de carga em bancos de dados e contas de armazenamento
  • Consultas complexas de controle de item de trabalho criam carga de banco de dados com base no número de itens de trabalho pesquisados
  • Cria carga de unidade baixando arquivos do controle de versão, produzindo saída de log
  • Todas as operações consomem CPU e memória em várias partes do serviço

Para acomodar, o consumo de recursos do Azure DevOps é expresso em unidades abstratas chamadas unidades de taxa de transferência do Azure DevOps ou TSTUs. As TSTUs eventualmente incorporam uma mistura dos seguintes itens:

  • DTUs do Banco de Dados SQL do Azure como uma medida de consumo de banco de dados
  • CPU, memória e E/S da camada de aplicativo e do agente de trabalho como uma medida do consumo de computação
  • Largura de banda do Armazenamento do Azure como uma medida do consumo de armazenamento

Por enquanto, as TSTUs estão focadas principalmente nas DTUs do Banco de Dados SQL do Azure, já que os Bancos de Dados SQL do Azure são os recursos compartilhados mais comumente sobrecarregados pelo consumo excessivo. Um único TSTU é a carga média que esperamos que um único usuário normal do Azure DevOps gere a cada cinco minutos. Usuários normais também geram picos de carga. Esses picos são tipicamente 10 ou menos TSTUs por cinco minutos. Menos frequentemente, os picos chegam a 100 TSTUs.

O limite de consumo global é de 200 TSTUs dentro de uma janela deslizante de cinco minutos.

Recomendamos que responda, pelo menos, ao Retry-After cabeçalho. Se você detetar um Retry-After cabeçalho em qualquer resposta, aguarde até que passe algum tempo antes de enviar outra solicitação. Isso ajuda seu aplicativo cliente a enfrentar menos atrasos impostos. Lembre-se de que a resposta é 200, portanto, você não precisa aplicar a lógica de repetição à solicitação.

Se possível, recomendamos ainda que monitorize X-RateLimit-Remaining e X-RateLimit-Limit os cabeçalhos. Isso permite que você se aproxime da rapidez com que está se aproximando do limite de atraso. O seu cliente pode reagir de forma inteligente e distribuir os seus pedidos ao longo do tempo.

Nota

As identidades usadas por ferramentas e aplicativos para integração com o Azure DevOps podem precisar de taxas e limites de uso mais altos além do limite de consumo permitido de tempos em tempos. Pode obter limites adicionais de taxa e utilização atribuindo o nível de acesso Básico+ Planos de Teste às identidades pretendidas que são utilizadas pela sua aplicação. Quando a necessidade de limites de taxa mais elevados tiver sido cumprida, pode voltar ao nível de acesso que a identidade costumava ter. O custo do nível de acesso dos Planos Básico + Teste é cobrado apenas pelo tempo em que é atribuído à identidade.

As identidades que já receberam uma assinatura do Visual Studio Enterprise não podem receber o nível de acesso Básico + Planos de Teste até que sejam removidas.

Pipelines

O limite de taxa é semelhante para o Azure Pipelines. Cada pipeline é tratado como uma entidade individual com seu próprio consumo de recursos rastreado. Mesmo que os agentes de compilação sejam autoalojados, geram carga sob a forma de clonagem e envio de registos.

Aplicamos um limite de 200 TSTU a um pipeline individual numa janela deslizante de 5 minutos. Este limite é igual ao limite de consumo global para os utilizadores. Se um pipeline for atrasado ou bloqueado pelo limite de taxa, uma mensagem será exibida nos logs anexados.

Experiência do cliente API

Quando as solicitações são atrasadas ou bloqueadas, o Azure DevOps retorna cabeçalhos de resposta para ajudar os clientes de API a reagir. Embora não totalmente padronizados, esses cabeçalhos estão amplamente em linha com outros serviços populares.

A tabela a seguir lista os cabeçalhos disponíveis e o que eles significam. Com exceção X-RateLimit-Delaydo , todos esses cabeçalhos são enviados antes que as solicitações comecem a ser atrasadas. Esse design dá aos clientes a oportunidade de diminuir proativamente sua taxa de solicitações.

Nome do cabeçalho

Descrição


Retry-After

O cabeçalho especificado pelo RFC 6585 foi enviado para informar quanto tempo esperar antes de enviar sua próxima solicitação para ficar abaixo do limite de deteção. Unidades: segundos.


X-RateLimit-Resource

Um cabeçalho personalizado que indica o serviço e o tipo de limite que foi atingido. Os tipos de limite e os nomes de serviço podem variar ao longo do tempo e sem aviso. Recomendamos exibir essa cadeia de caracteres para um ser humano, mas não depender dela para computação.


X-RateLimit-Delay

Quanto tempo o pedido atrasou. Unidades: segundos com até três casas decimais (milissegundos).


X-RateLimit-Limit

Número total de TSTU autorizadas antes da imposição de atrasos.


X-RateLimit-Remaining

Número de TSTU restantes antes de serem adiadas. Se as solicitações já estiverem atrasadas ou bloqueadas, será 0.


X-RateLimit-Reset

Tempo em que, se todo o consumo de recursos parasse imediatamente, o uso rastreado retornaria a 0 TSTUs. Expresso em tempo de época Unix.


Acompanhamento de trabalho, processo, limites do projeto &

O Azure DevOps impõe limites para o número de projetos que você pode ter em uma organização e o número de equipes que você pode ter em cada projeto. Também esteja ciente dos limites para itens de trabalho, consultas, listas de pendências, quadros, painéis e muito mais. Para obter mais informações, consulte Controle de trabalho, processos e limites de projeto.

Wiki

Além dos limites usuais do repositório, os wikis definidos para um projeto são limitados a 25 MB por único arquivo.

Ligações de serviço

Não há limites por projeto colocados na criação de conexões de serviço. No entanto, pode haver limites, que são impostos através do Microsoft Entra ID. Para obter informações adicionais, consulte os seguintes artigos: