Algoritmos de limitação de taxa
Compare limitadores fixos, deslizantes, de tokens e de concorrência.
Algoritmos de limitação de taxa é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.
Por que limitar a taxa?
Limitação de taxa restringe quantas solicitações um cliente pode fazer em um determinado intervalo. Ela protege sua API contra abusos, clientes descontrolados e picos acidentais de tráfego, além de distribuir a capacidade de forma justa entre os usuários.
// e.g. allow 100 requests per minute per API keyLimitação de taxa integrada
Desde o .NET 7, o ASP.NET Core oferece um middleware de limitação de taxa integrado, de primeira classe, em Microsoft.AspNetCore.RateLimiting, com quatro algoritmos integrados.
// Algorithms: Fixed Window, Sliding Window,
// Token Bucket, ConcurrencyJanela fixa
O algoritmo de janela fixa permite N solicitações por bloco de tempo fixo. Quando o bloco termina, o contador é redefinido para zero.
É simples, mas rajadas na transição entre janelas podem duplicar brevemente a taxa efetiva.
// 10 requests per 60s window
// All 10 used at 0:59, 10 more at 1:00 -> 20 in 2 secondsJanela deslizante
A janela deslizante suaviza o problema das transições dividindo a janela em segmentos e avançando os segmentos expirados, de modo que o limite seja aplicado em qualquer janela contínua.
// 10 requests per 60s, 6 segments of 10s each
// The count slides as each segment expiresBalde de tokens
O balde de tokens armazena um conjunto de tokens. Cada solicitação consome um; os tokens são repostos a uma taxa constante. Isso permite rajadas curtas de até o tamanho do balde, mantendo uma média de longo prazo.
// Bucket = 10 tokens, refill 5 tokens / 10s
// Burst of 10 allowed, then 5 every 10 secondsLimitador de simultaneidade
O limitador de simultaneidade é diferente: ele limita o número de solicitações que estão sendo processadas ao mesmo tempo, e não por unidade de tempo. É ideal para proteger operações dispendiosas.
// At most 5 concurrent requests in flight
// The 6th waits in the queue or is rejectedA fila
Cada limitador pode enfileirar solicitações que excedem o limite, em vez de rejeitá-las imediatamente. QueueLimit define o tamanho da fila e QueueProcessingOrder define a ordem de justiça (as mais antigas ou as mais novas primeiro).
// QueueLimit = 2, OldestFirst
// Over-limit requests wait if a slot exists, else get 503/429Escolhendo um algoritmo
Associe o algoritmo ao objetivo:
- Janela fixa: mais simples, suficiente para muitos casos.
- Janela deslizante: mais suave, evita rajadas nas transições.
- Balde de tokens: permite rajadas controladas.
- Simultaneidade: limita a carga simultânea, não a taxa.
// Bursty clients -> token bucket
// Expensive endpoint -> concurrencyParticionamento
Os limites são aplicados por chave de partição — geralmente o usuário, a chave de API ou o IP — para que um único cliente muito ativo não esgote a cota de todos. Uma única partição compartilhada limitaria todo o tráfego em conjunto.
// Partition by user id, IP, or API key
// Each partition gets its own independent counterO que o cliente vê
Uma solicitação rejeitada retorna HTTP 429 Too Many Requests. Uma API bem comportada também retorna um cabeçalho Retry-After, informando ao cliente quando tentar novamente.
// HTTP/1.1 429 Too Many Requests
// Retry-After: 30Limitação de taxa, controle de fluxo e cotas
São conceitos relacionados: a limitação de taxa restringe a frequência de curto prazo, as cotas restringem totais de longo prazo (por dia ou mês) e o controle de fluxo diminui a velocidade em vez de rejeitar. O middleware se concentra na limitação de taxa.
// rate limit: 100/min quota: 10000/dayVerificação rápida
Teste sua compreensão dos algoritmos.
Recapitulação
Você aprendeu os conceitos de limitação de taxa:
- Quatro algoritmos: janela fixa, janela deslizante, balde de tokens e simultaneidade.
- O balde de tokens permite rajadas; a simultaneidade limita a carga simultânea.
- Os limites são aplicados por chave de partição; as filas suavizam o excesso.
- As solicitações rejeitadas recebem 429 com
Retry-After.
Próximo tópico: configurar o middleware.
Perguntas Frequentes
A aula “Algoritmos de limitação de taxa” é grátis?
Sim — o texto completo de “Algoritmos de limitação de taxa” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.
O que vou aprender em “Algoritmos de limitação de taxa”?
Compare limitadores fixos, deslizantes, de tokens e de concorrência. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Algoritmos de limitação de taxa”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Algoritmos de limitação de taxa
- Configurando o middleware de limitação de taxa
- Fundamentos do cache de saída
- Políticas de cache e invalidação