Pular para o conteúdo

Arquitetura de software · Confiabilidade e segurança · 5 min de leitura

Rate limiting: limitar requisições

Limitar quantas requisições cada cliente pode fazer protege a API de abusos e de picos que derrubariam todo mundo.

Cliente → LimitadorLimitador → API: tem fichatem fichaLimitador → 429 Too Many: balde vazioCliente — chave de APIClientechave de APILimitador — balde de fichasLimitadorbalde de fichasAPIAPI429 Too Many — Retry-After429 Too ManyRetry-After

Arraste para o lado para ver o diagrama inteiro.

Cada cliente tem um balde com capacidade máxima (rajada) que se recarrega com o tempo (taxa média).

Algoritmos

  • Token bucket: permite rajadas curtas e controla a média.
  • Janela fixa: simples, mas permite o dobro na virada da janela.
  • Janela deslizante: mais justa, um pouco mais cara.

Na prática

  • Limite por chave de API, usuário ou IP, guardando os contadores num armazenamento compartilhado (como Redis) quando há vários servidores.
  • Responda 429 com Retry-After para o cliente esperar o tempo certo.
  • Limites diferentes por plano e por rota (login merece limite mais baixo).

Em resumo

Referências

Continue aprendendo

Todos os temas de arquitetura de software →