0Pricing
C# Academy · Aula

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 key

Limitaçã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, Concurrency

Janela 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 seconds

Janela 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 expires

Balde 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 seconds

Limitador 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 rejected

A 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/429

Escolhendo 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 -> concurrency

Particionamento

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 counter

O 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: 30

Limitaçã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/day

Verificaçã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

  1. Algoritmos de limitação de taxa
  2. Configurando o middleware de limitação de taxa
  3. Fundamentos do cache de saída
  4. Políticas de cache e invalidação
← Voltar para C# Academy