Rate Limiting, Quotas e Throttling
Voltar para Learn
FAACCapítulo 27

Fundamentos e Arquitetura de APIs Corporativas

Rate Limiting, Quotas e Throttling

Como proteger capacidade, distribuir consumo com justiça e comunicar limites em plataformas corporativas de APIs

Edição aprofundada - material de estudo e consulta profissional

Gateway corporativo controlando fluxos, bursts e orçamentos de consumo de APIs

Controle de consumo em múltiplas escalas de tempo

Rate limit, quota, throttling e fairness como controles complementares
Figura de abertura - Frequência, orçamento acumulado e reação operacional são conceitos relacionados, mas distintos.

Pergunta fundamental

Quem pode consumir quanto, em qual janela, com qual custo e qual comportamento ocorre quando o orçamento termina?

Edição aprofundada - material de estudo e consulta profissional

Apresentação do capítulo

Nos capítulos anteriores, o foi estudado como ponto de segurança, roteamento, transformação e observabilidade. Este capítulo aprofunda uma responsabilidade que parece simples, mas se torna complexa quando a plataforma atende milhares de consumidores, múltiplas regiões e com custos diferentes: controlar o consumo sem destruir a experiência legítima de uso.

, quotas e são frequentemente usados como sinônimos. Essa simplificação esconde decisões importantes. controla a frequência em janelas curtas; controla um orçamento acumulado em períodos mais longos ou até durante toda a vida da assinatura; descreve a reação aplicada quando a política identifica excesso, como rejeitar, atrasar, enfileirar, degradar ou redirecionar. Uma arquitetura pode combinar os três mecanismos.

O controle também não deve ser reduzido a requisições por minuto. Uma chamada pode custar muito mais do que outra: gerar relatório, consultar histórico amplo, processar arquivo, executar inferência de IA ou disparar transação de negócio. Limites modernos consideram unidades ponderadas, bytes, , concorrência e custo . A chave de contabilização pode ser assinatura, aplicação, usuário, tenant, , operação ou uma composição desses elementos.

O objetivo é construir um modelo mental preciso para projeto e . O leitor aprenderá algoritmos, semântica , estado distribuído, aplicação em , comportamento de clientes, testes e métricas. Ao final, deverá conseguir explicar não apenas qual número foi configurado, mas por que o limite existe, onde é contabilizado, qual precisão é possível e como o consumidor deve reagir.

Como estudar este capítulo

Para cada política, registre seis elementos: objetivo, chave, unidade de custo, janela, algoritmo e reação ao excesso. A ausência de qualquer um desses elementos torna a configuração ambígua e dificulta testes, comunicação e auditoria.

Objetivos de aprendizagem

  • Diferenciar , , , concorrência, e proteção contra abuso.
  • Explicar , , , e .
  • Definir chaves de contabilização coerentes com identidade, produto, tenant e operação.
  • Modelar custos ponderados por chamada, byte, ou recurso .
  • Compreender limites locais, globais, hierárquicos e distribuídos.
  • Interpretar 429, e cabeçalhos informativos de limite.
  • Projetar com , jitter e idempotência.
  • Aplicar policies em Axway , Azure Management e modernos.
  • Dimensionar limites a partir de capacidade, , e comportamento real.
  • Diagnosticar rejeições inesperadas, , hot keys e contadores divergentes.

Estrutura do capítulo

  • 27.1 Conceitos e objetivos; 27.2 Chaves, unidades e escopos; 27.3 ; 27.4 ; 27.5 ; 27.6 e ; 27.7 Concorrência e ; 27.8 Limites locais e globais; 27.9 Estado distribuído; 27.10 Políticas hierárquicas; 27.11 Semântica ; 27.12 Comportamento do cliente; 27.13 Segurança e abuso; 27.14 Dimensionamento; 27.15 Azure ; 27.16 Axway e Envoy; 27.17 Observabilidade; 27.18 Testes; 27.19 ; estudos de caso, resumo, exercícios e referências.

27.1 Conceitos: , e

é uma política de fluxo. Ela estabelece quantas unidades podem ser consumidas durante uma janela curta, por exemplo 20 requisições por segundo ou 600 unidades por minuto. Seu papel principal é absorver picos, reduzir rajadas destrutivas e preservar capacidade para outros consumidores. A política pode permitir controlado sem abandonar uma taxa média sustentável.

é uma política de orçamento. Ela contabiliza consumo em horizonte maior: chamadas por dia, bytes por mês, transações por ciclo de faturamento ou de IA por assinatura. Uma pode ser renovável, vitalícia ou vinculada a um plano comercial. Diferentemente do , ela não precisa controlar a forma temporal fina do tráfego; um consumidor pode gastar rapidamente uma ainda disponível.

é a ação de contenção. A forma mais comum em é responder 429 Too Many , mas sistemas internos podem enfileirar, atrasar, reduzir qualidade, limitar paralelismo ou encaminhar para capacidade alternativa. A escolha precisa considerar latência, idempotência e custo. Atrasar síncronos por muito tempo costuma apenas transferir pressão para , threads e filas.

Esses controles não substituem capacity planning, , proteção DDoS ou autorização. por , por exemplo, pode reduzir força bruta, mas é frágil diante de compartilhado, botnets ou rotação de origem. Uma defesa robusta combina identidade, comportamento, reputação e limites em camadas.

Tabela 1 - A política deve separar orçamento, velocidade e reação.
ConceitoPergunta respondidaHorizonte típicoReação
Rate limitCom que frequência pode consumir?Segundos ou minutos.429, atraso curto ou shed.
QuotaQuanto pode consumir no total?Horas, dias, meses ou vida útil.Bloqueio até renovação ou upgrade.
ThrottlingO que fazer quando exceder?Imediato e operacional.Rejeitar, enfileirar, degradar ou redirecionar.
Concurrency limitQuantos trabalhos podem ficar em voo?Enquanto duram as operações.Não admitir mais trabalho.

27.2 Chaves, unidades de custo e escopos

A chave identifica o sujeito contabilizado. Limitar apenas por endereço é simples, porém pode penalizar milhares de usuários atrás de um mesmo e permitir evasão por rotação de . Depois da autenticação, chaves como subscription key, client_id, subject, tenant ou certificado costumam representar melhor o consumidor. Em fluxos B2B, uma composição tenant + aplicação + operação oferece isolamento mais preciso.

A unidade de custo define o que o contador representa. O modelo mais simples atribui custo 1 a cada chamada. Em heterogêneas, essa igualdade é enganosa. Uma consulta por ID e uma exportação de milhões de registros não deveriam gastar a mesma unidade. É possível ponderar por operação, tamanho de , linhas processadas, duração estimada, chamadas ou consumidos.

O escopo indica onde a regra vale: global, produto, , operação, região, tenant ou . Regras sobrepostas precisam de semântica explícita. Uma chamada pode passar pelo limite global de proteção, pelo limite do plano comercial e por um limite específico de operação cara. Em geral, a requisição deve ser recusada quando qualquer orçamento obrigatório estiver esgotado.

Tabela 2 - A chave correta depende da fronteira de responsabilidade.
ChaveVantagemRisco / cuidado
IP de origemDisponível antes da autenticação.NAT compartilhado, proxies e evasão por IP.
Subscription keyAlinha consumo ao plano de API.Chave compartilhada por muitos usuários.
client_idIdentifica aplicação OAuth.Não separa usuários da mesma aplicação.
sub / usuárioFairness por usuário final.Exige token validado e identidade estável.
tenant + operaçãoIsolamento corporativo e de custo.Cardinalidade e hot keys.

27.3 counter

O counter divide o tempo em blocos discretos. Uma regra de 100 chamadas por minuto mantém um contador para cada minuto do relógio ou para cada período iniciado em um instante de referência. A implementação é simples: calcular a janela, incrementar atomicamente a chave e comparar com o limite. O estado expira ao fim do período.

A principal limitação é o de fronteira. Um consumidor pode enviar 100 chamadas nos últimos segundos de uma janela e outras 100 imediatamente no início da seguinte. Embora cada janela respeite o limite, a infraestrutura observa 200 chamadas em poucos segundos. Esse comportamento é aceitável em alguns produtos e perigoso em sensíveis a rajadas.

é adequado para quotas e orçamentos longos, em que simplicidade e auditabilidade importam mais do que suavidade. Para proteção de curtíssimo prazo, costuma ser combinado com , ou limite de concorrência.

Pseudocódigo conceitual de fixed window
window_id = floor(now_epoch_seconds / window_seconds)
key = "rl:" + consumer_id + ":" + window_id
count = atomic_increment(key)
set_expiry_if_first_increment(key, window_seconds)
allow = count <= limit

27.4 : exato e contador aproximado

A considera o intervalo imediatamente anterior ao instante atual. Na variante de , cada consumo registra um timestamp; antes de decidir, o sistema remove eventos antigos e conta os restantes. A precisão é alta, mas o estado cresce com o tráfego e as operações sobre coleções temporais podem ficar caras.

A variante de contador aproxima a janela usando o contador do período atual e uma fração ponderada do período anterior. Ela reduz memória e custo, mas pode admitir pequena imprecisão. Produtos distribuídos ainda acumulam atraso de propagação e concorrência, portanto a palavra "sliding" não significa exatidão matemática absoluta.

A escolha deve ser orientada pelo risco. Login e operações antifraude podem justificar maior precisão. de leitura de alto volume podem preferir aproximação rápida. O importante é documentar a tolerância a e validar o comportamento sob real.

Tabela 3 - Precisão, custo e burst são trade-offs inseparáveis.
AlgoritmoEstadoPrecisãoComportamento
Sliding logTimestamp por evento.Alta.Janela móvel exata, custo elevado.
Sliding counterContadores de janelas adjacentes.Aproximada.Suaviza fronteiras com pouco estado.
Fixed windowUm contador por período.Exata por bloco, não por intervalo móvel.Pode duplicar burst na fronteira.

27.5

O modela capacidade acumulável. Um balde possui capacidade máxima B e recebe à taxa r. Cada requisição consome c . Se houver saldo, ela passa imediatamente; se não houver, a política aplica . Enquanto o consumidor fica ocioso, se acumulam até B, permitindo uma rajada inicial controlada.

A taxa r governa o consumo médio sustentável, enquanto B define o tolerado. Um bucket com capacidade 20 e reposição de 10 por segundo pode aceitar 20 chamadas instantâneas após ociosidade e, em seguida, sustentar aproximadamente 10 por segundo. Operações caras podem consumir mais de um , transformando o algoritmo em limitador ponderado.

Em implementação distribuída, reposição contínua costuma ser calculada de forma preguiçosa: ao receber uma requisição, o sistema determina quantos deveriam ter sido repostos desde a última atualização, limita ao máximo B e realiza consumo atômico. Relógios, concorrência e particionamento precisam ser tratados cuidadosamente.

Token bucket com capacidade de burst e taxa média sustentável
Figura 1 - O permite limitado sem abandonar a taxa média configurada.
Lógica conceitual de reposição preguiçosa
elapsed = now - last_refill
available = min(B, stored_tokens + elapsed * refill_rate)
if available >= request_cost:
    available -= request_cost
    decision = ALLOW
else:
    decision = THROTTLE

27.6 e

O representa uma fila que drena em taxa aproximadamente constante. As requisições entram no recipiente e saem de forma suavizada. Quando a fila está cheia, novas entradas são rejeitadas. Ao contrário do , cujo objetivo clássico é permitir até a capacidade acumulada, o enfatiza regularidade da saída.

Essa suavização pode ser útil em integração assíncrona, mas em síncronas o enfileiramento precisa ser limitado. Manter esperando ocupa conexões, memória e prazos de . Muitas vezes é melhor rejeitar cedo com informação clara para que o cliente tente novamente de forma controlada.

O Generic Cell Rate Algorithm, ou , representa uma forma matemática de verificar conformidade temporal por meio de um tempo teórico de chegada. Ele é eficiente e aparece em implementações que precisam modelar taxa e tolerância a sem armazenar cada evento. Para o arquiteto, o ponto central é compreender que diferentes algoritmos podem produzir decisões distintas com o mesmo rótulo comercial de "10 por segundo".

27.7 Limite de concorrência, e

Rate por unidade de tempo não controla diretamente trabalho em voo. Dez chamadas por segundo podem ser seguras se durarem 20 ms e desastrosas se cada uma permanecer 30 segundos. O limite de concorrência protege threads, conexões, pools e filas ao restringir quantas operações podem executar simultaneamente.

é a capacidade de um componente sinalizar que o consumidor deve reduzir o ritmo. Em síncrono, 429, 503 e são sinais comuns. Em e mensageria, o protocolo pode controlar janelas, créditos ou confirmação. é a recusa deliberada de trabalho para preservar a saúde do sistema; deve priorizar operações críticas e rejeitar cedo antes de consumir recursos caros.

Limitadores adaptativos observam latência, filas e erros para ajustar a admissão. Eles podem reagir melhor a capacidade variável, mas exigem estabilidade de controle e métricas confiáveis. Uma política adaptativa mal calibrada oscila, reduz throughput desnecessariamente ou aumenta carga no momento errado.

Tabela 4 - Limitar frequência e limitar concorrência resolvem problemas diferentes.
ControleVariável protegidaQuando usar
Rate limitChegadas por tempo.Burst e fairness de consumo.
Concurrency limitTrabalho simultâneo.Operações lentas, pools e chamadas downstream.
Queue boundItens aguardando.Absorver microbursts com espera limitada.
Load sheddingCapacidade global.Degradação severa e preservação do núcleo.

27.8 Limites locais e globais

Um limite local mantém estado dentro de cada , processo ou conexão. Ele é rápido, resiliente a falhas de rede e adequado para contenção inicial. Entretanto, em um com N instâncias, um limite de 100 por segundo em cada nó pode permitir aproximadamente N vezes esse valor quando o tráfego é distribuído.

Um limite global consulta ou atualiza estado compartilhado. Ele oferece visão consolidada por consumidor, produto ou tenant, mas adiciona latência e dependência de um serviço crítico. O desenho precisa escolher comportamento em falha: preserva disponibilidade e pode exceder o limite; preserva proteção e pode bloquear tráfego legítimo.

Limites locais por instância e limite global compartilhado
Figura 2 - Limites locais são rápidos; limites globais coordenam o conjunto, com custo de consistência e disponibilidade.

Contadores distribuídos enfrentam concorrência, replicação e particionamento. Se cada nó mantém e sincroniza periodicamente, múltiplos nós podem admitir baseados no mesmo saldo. Se toda decisão depende de escrita síncrona em um armazenamento central, a precisão melhora, mas a latência e o risco de gargalo aumentam.

Operações atômicas, scripts executados no servidor de dados, sharding por chave e expiração são técnicas comuns. Hot keys surgem quando muitos compartilham a mesma identidade, como um grande parceiro ou um limite global. Distribuir essa chave sem perder semântica exige particionamento de orçamento, contadores aproximados ou agregação hierárquica.

deve ser tratado como propriedade de projeto. A documentação do produto pode advertir que limites distribuídos não são completamente precisos. A arquitetura precisa definir a tolerância: uma de consulta pode aceitar pequena ultrapassagem; uma financeira ou de licenciamento pode exigir reconciliação posterior e trilha auditável.

Não prometa precisão impossível

Em e regiões distribuídas, "100 chamadas" pode significar uma meta operacional com tolerância. Registre o algoritmo, o ponto de contabilização, a frequência de sincronização e o máximo aceito.

27.10 Políticas hierárquicas e múltiplas janelas

Uma única janela raramente é suficiente. Um consumidor pode respeitar 60 mil chamadas por hora e ainda enviar todas em poucos segundos. Por isso, políticas maduras combinam janelas: 50 por segundo, 1.000 por minuto e 50 mil por dia. Cada uma protege um aspecto diferente: , estabilidade e orçamento.

Limites hierárquicos distribuem capacidade em níveis. Pode existir um orçamento global da plataforma, uma parcela por produto, outra por tenant e uma regra por usuário. Esse desenho evita que um grande consumidor esgote toda a capacidade, mas cria risco de subutilização se reservas forem rígidas. Em sistemas avançados, capacidade ociosa pode ser emprestada com limites máximos e prioridade.

A composição precisa ser explicada ao consumidor. O limite mais próximo de esgotar pode ser mais útil do que publicar dezenas de contadores. Internamente, métricas devem indicar qual regra venceu a decisão, sua chave e seu escopo.

Políticas de contenção em camadas desde a borda até o backend
Figura 3 - Contenção em camadas reduz custo e melhora a precisão da chave usada.

27.11 Semântica : 429, e campos de limite

O status 429 Too Many informa que o cliente enviou solicitações em excesso dentro de um período. A resposta deve ser produzida pelo componente que conhece a política e precisa ser distinguida de 401, 403, 503 e . Um 429 sem identificação da regra, sem correlação e sem orientação de recuperação transforma um mecanismo de proteção em fonte de incidentes.

O campo pode transportar um número de segundos ou uma data . O cliente deve tratá-lo como orientação mínima antes de repetir, considerando relógio, idempotência e orçamento próprio. Quando vários limites se aplicam, a resposta deve refletir a restrição efetiva, não apenas o contador mais fácil de obter.

Cabeçalhos X-RateLimit-* são amplamente usados, mas não possuem semântica universal. Em maio de 2026, o trabalho do sobre campos RateLimit ainda é Internet-Draft e define RateLimit-Policy e RateLimit; portanto, deve ser tratado como especificação em evolução. A adoção precisa ser versionada e testada com clientes, sem apresentar o draft como publicado.

Resposta recomendada ao exceder um limite de curto prazo
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 20
{
  "type": "https://api.empresa.example/problems/rate-limit",
  "title": "Limite de chamadas excedido",
  "status": 429,
  "detail": "Aguarde antes de repetir a operação.",
  "policy": "cliente-leitura-burst",
  "traceId": "7b2f..."
}

27.12 Comportamento correto do cliente

O cliente deve respeitar quando presente e aplicar exponential com jitter para evitar que milhares de instâncias retornem ao mesmo tempo. O precisa ter limite máximo, número de tentativas e orçamento de tempo. infinito converte uma indisponibilidade curta em tempestade prolongada.

Operações não idempotentes exigem cuidado. Se o cliente não sabe se o servidor processou a requisição, repetir pode duplicar efeitos. Idempotency-Key, identificadores de negócio e consulta de estado reduzem esse risco. Para 429 recebido antes do , a operação provavelmente não foi executada, mas essa propriedade deve ser garantida e documentada pelo .

Clientes cooperativos também podem controlar sua própria taxa antes de receber rejeições. Um pode implementar local baseado no contrato publicado. Esse comportamento reduz latência desperdiçada, mas não elimina o enforcement do servidor, porque clientes podem estar desatualizados, mal configurados ou maliciosos.

Backoff exponencial com jitter - pseudocódigo
delay = retry_after if present else min(base * 2**attempt, max_delay)
delay = random_between(delay * 0.5, delay * 1.5)
sleep(delay)
retry_only_if(operation_is_safe_or_idempotent)

27.13 Segurança, abuso e limites por fluxo sensível

é um controle importante contra brute force, credential stuffing, enumeração, scraping e abuso de fluxos de negócio. Contudo, o limite precisa ser específico ao ataque. Login pode combinar , conta e dispositivo; recuperação de senha deve limitar solicitações por identidade e destino; consulta de estoque pode exigir regra por produto e aplicação.

Limites excessivamente previsíveis podem ser usados para descobrir identificadores válidos ou provocar negação de serviço lógica contra uma vítima. Bloquear uma conta depois de poucas tentativas permite que um atacante impeça o acesso legítimo. Mecanismos progressivos, desafios adicionais e sinais de risco costumam ser melhores que bloqueios absolutos.

A contagem deve acontecer cedo o suficiente para proteger recursos, mas depois da validação necessária para obter a chave correta. Uma camada grosseira por pode preceder autenticação; uma camada fina por usuário vem depois da validação do . enormes precisam de limites de conexão e tamanho antes de qualquer parsing caro.

27.14 Dimensionamento de limites

Um número não deve nascer de preferência pessoal. O processo começa pela capacidade sustentável do , de latência, margem de segurança e padrões de . A capacidade útil precisa descontar tráfego interno, , , tarefas batch e falhas parciais. Depois, ela é distribuída por classes de consumidor e operações.

Percentis de tráfego são mais úteis do que médias isoladas. É necessário observar por segundo, concorrência, duração, bytes, taxa de erro e fan-out . Um que gera cinco chamadas internas deve consumir orçamento compatível. Em monetizadas, o plano comercial precisa continuar respeitando a capacidade física.

A implantação deve começar em modo observação ou shadow, registrando decisões sem bloquear. Em seguida, aplica-se enforcement gradual por percentual, ambiente ou consumidor piloto. Alertas precisam distinguir aproximação do limite, rejeição esperada por contrato e anomalia de plataforma.

Tabela 5 - Limites devem derivar de capacidade observada e política de negócio.
EntradaPergunta de projetoEvidência
CapacidadeQuanto o backend sustenta com SLO?Teste de carga e métricas de produção.
BurstQual rajada é tolerável?Token bucket, fila e pool downstream.
FairnessComo dividir entre consumidores?Planos, tenants, prioridades e histórico.
MargemQuanto reservar para falhas e retries?Cenários degradados e capacity model.

27.15 Azure Management

Azure Management oferece políticas por assinatura e por chave. rate-limit e rate-limit-by-key controlam velocidade; e -by-key controlam volume de chamadas e/ou largura de banda. A chave customizada pode ser construída por expressão a partir de , subject do , tenant, operação ou outro atributo confiável.

A implementação varia por tier. A documentação atual informa nos tiers clássicos e nos tiers v2. Ela também adverte que distribuído não é completamente preciso. Em múltiplas regiões, os contadores de são aplicados por regional, enquanto quotas operam de modo global no nível da instância.

A ordem da policy importa. Para usar identidade do como counter-key, o deve ser validado antes. Increment-condition pode contar apenas respostas específicas, mas avaliações no outbound alteram o momento da atualização. Named values e fragments ajudam a padronizar limites, porém chaves iguais em escopos diferentes precisam de parâmetros coerentes.

Exemplo conceitual de policy no Azure Management

<inbound>
  <base />
  <validate-jwt header-name="Authorization" />
  <rate-limit-by-key
      calls="120"
      renewal-period="60"
      counter-key="@(context.Principal?.Identity?.Name ?? context.Request.IpAddress)"
      remaining-calls-header-name="X-Calls-Remaining" />
</inbound>

27.16 Axway , Envoy e modernos

No Axway , o filter pode ser inserido no policy circuit para limitar chamadas a serviços e consumidores. O desenho deve definir a chave a partir do message context e, quando necessário, usar KPS para dados de configuração ou associação com planos. A posição do filtro determina quais custos já foram pagos e quais atributos estão disponíveis.

Em topologias com múltiplas instâncias, é essencial verificar onde o estado do algoritmo reside e como os contadores são compartilhados. Uma policy visualmente idêntica pode ter comportamento diferente se cada aplicar seu próprio contador. e Traffic Monitor devem registrar a chave derivada, a regra e a decisão sem expor credenciais.

Envoy oferece local baseado em e um filtro global que consulta um service por descriptors. Descriptors permitem combinar atributos de rota, origem, método e metadata. O arquiteto deve decidir ou quando o serviço global falha e medir a latência adicional da decisão.

27.17 Observabilidade e indicadores

Contadores de 429 são apenas o começo. A plataforma precisa medir avaliados, permitidos, limitados, não aplicados em shadow, erros do serviço de decisão e . Métricas devem ser segmentadas por policy, operação, produto, região e classe de consumidor, sem criar cardinalidade incontrolável.

A utilização do orçamento é mais informativa que a rejeição final. Percentual de disponíveis, tempo até renovação, concorrência atual e aproximação de permitem alertar antes do impacto. Hot keys, consumidores dominantes e operações caras precisam de painéis específicos.

devem mostrar a decisão do limitador como span ou evento, incluindo política e duração da consulta, mas evitando a chave bruta quando ela contém identidade sensível. de auditoria registram mudanças de configuração, owner, justificativa, rollout e .

Tabela 6 - Métricas devem explicar proteção, fairness e falhas do mecanismo.
MétricaInterpretação
allowed / rate limitedVolume aceito e rejeitado por regra.
remaining ratioProximidade de esgotamento do orçamento.
decision latencyCusto do limitador no caminho crítico.
overshoot estimadoDiferença entre contrato e consumo observado.
hot key concentrationDependência de poucos consumidores ou tenants.
failure mode allowedTráfego liberado por falha do serviço de decisão.

Testes precisam reproduzir padrão temporal, não apenas volume total. Casos mínimos incluem tráfego abaixo do limite, instantâneo, fronteira de janela, múltiplas chaves, múltiplos nós, expiração, mudança de configuração e falha do armazenamento. O relógio usado pelo teste deve ser controlado ou registrado com precisão.

Valide a distribuição dos status e a orientação ao cliente. deve ser coerente com a janela efetiva. Teste se recusados chegam ou não ao , se o contador é incrementado por respostas de erro e se operações com pesos diferentes consomem as unidades esperadas.

Em ambiente autorizado, execute carga progressiva e compare tráfego gerado, aceito e observado no . Um limitador aparentemente correto no pode falhar por automático, múltiplas regiões ou balanceamento desigual. O teste deve incluir correlação ponta a ponta.

Plano de validação temporal
# Exemplo conceitual de cenário de teste
1. enviar 8 req/s por 30 s  -> nenhuma rejeição esperada
2. enviar burst de 30       -> rejeição conforme capacidade do bucket
3. repetir com 4 identidades -> isolamento entre chaves
4. distribuir por 3 gateways -> medir overshoot e escopo do contador
5. derrubar rate-limit service -> validar fail-open/fail-closed

27.19

Quando um consumidor relata 429, primeiro identifique qual componente respondeu. , , ingress, , service mesh e podem ter limites independentes. O corpo, , ID e assinatura visual da resposta ajudam a localizar a origem. Depois, determine a chave efetivamente usada e se ela corresponde à identidade esperada.

Rejeições intermitentes podem resultar de múltiplas janelas, contadores regionais, clock skew, , de configuração ou invisíveis. Um cliente pode enviar uma chamada e uma biblioteca repetir automaticamente, duplicando o consumo. Em /2, várias compartilham uma conexão; limitar por conexão produz semântica muito diferente de limitar por usuário.

Se o limite parece não funcionar, verifique ordem da policy, condição de incremento, escopo, chave vazia, fallback para e consistência entre instâncias. Em sistemas distribuídos, teste cada nó e região. A ausência de 429 não prova ausência de : o mecanismo pode atrasar, enfileirar ou responder com outro status.

Tabela 7 - Troubleshooting começa localizando o enforcement e a chave real.
SintomaHipóteseEvidência
Todos compartilham o mesmo limiteChave vazia ou IP do proxy.Log da counter-key e cadeia X-Forwarded-For confiável.
Limite multiplica pelo número de nósContador local por instância.Teste fixando rota em cada gateway.
429 após poucas chamadasMúltiplas policies ou custo ponderado.Policy ID vencedor e increment-count.
Quota excedida continua aceitandoPropagação/restart ou janela incorreta.Estado do contador e início do período.
Backend sobrecarrega sem 429Limite muito alto ou aplicado tarde.RPS e concorrência antes/depois do gateway.

Caso 1 - bancária de saldo: limite por usuário impede que uma única sessão degrade os demais, enquanto limite por client_id protege o canal. Uma regra global de concorrência protege o core. O recebe custo 1; a exportação de extrato recebe custo maior. O retorna 429 antes de chamar o e inclui .

Caso 2 - Parceiro Open Finance: cada organização possui mensal contratual e de . A chave combina software statement, client_id e instituição. evita que apenas a posse de uma chave permita consumir o orçamento. Métricas separam consumo regulatório, e falhas de negócio.

Caso 3 - Plataforma de IA: a política controla por minuto e processados. Prompts e respostas têm custo variável, portanto o contador é atualizado com consumo real quando disponível. Uma estimativa prévia impede extremos; mensal controla custo comercial; concorrência protege GPUs e .

Resumo do capítulo

controla velocidade, controla orçamento e define a reação ao excesso. A política completa também precisa de chave, unidade, janela, algoritmo, escopo e comportamento de falha.

é simples, suaviza fronteiras, combina taxa média com , regulariza saída e limites de concorrência protegem trabalho em voo. Nenhum algoritmo é universalmente superior.

Em distribuídos, precisão compete com latência e disponibilidade. Limites locais e globais podem ser combinados, e deve ser tratado como propriedade mensurável. Respostas 429 e permitem cooperação do cliente; , jitter e idempotência evitam tempestades de .

como Azure Management e Axway oferecem policies próprias, enquanto como Envoy distinguem limitadores locais e serviços globais. A configuração precisa ser validada com carga temporal, observabilidade e por chave e escopo.

Próximo passo do curso

O Capítulo 28 tratará de Versioning, relacionando evolução de contratos, compatibilidade, coexistência, depreciação e governança do ciclo de vida.

Checklist de projeto

  • O objetivo do limite está documentado: proteção, fairness, segurança, custo ou plano comercial.
  • A chave é estável, confiável e compatível com , e identidade.
  • A unidade de consumo representa o custo real da operação.
  • Janelas curtas e longas foram combinadas quando necessário.
  • O algoritmo e a capacidade de são conhecidos.
  • O escopo local, regional ou global está explícito.
  • / foi decidido para falhas do serviço de contagem.
  • 429, e corpo de erro são coerentes e testáveis.
  • Clientes possuem orientação de , jitter e idempotência.
  • Métricas registram policy, decisão, , hot keys e latência.
  • O rollout passou por shadow mode e enforcement gradual.
  • Testes cobrem fronteira de janela, múltiplos nós e mudanças de configuração.

Exercícios

  • Diferencie , , e limite de concorrência.
  • Explique o de fronteira do .
  • Calcule qualitativamente o comportamento de um com B=20 e r=5/s.
  • Compare sliding e sliding counter.
  • Proponha chaves para login, B2B e multi-tenant.
  • Explique por que um limite local pode multiplicar em um .
  • Defina uma estratégia de / para uma crítica.
  • Escreva uma resposta 429 com e Problem Details.
  • Proponha múltiplas janelas para proteger e mensal.
  • Monte um plano de teste para três e duas regiões.
  • Descreva métricas para detectar hot keys e .
  • Explique quando custo ponderado é superior a contar chamadas.

Glossário

Tabela 8 - Vocabulário essencial do capítulo.
TermoDefinição
BackpressureSinalização para que o produtor reduza a velocidade de envio.
BurstRajada curta acima da taxa média sustentável.
Counter keyIdentificador usado para agrupar e contabilizar consumo.
Fail-closedBloquear quando o serviço de decisão falha.
Fail-openPermitir quando o serviço de decisão falha.
Fixed windowContagem em períodos discretos.
GCRAAlgoritmo temporal para verificar conformidade de taxa e burst.
Hot keyChave com volume desproporcional de atualizações.
Leaky bucketFila drenada em taxa aproximadamente constante.
Load sheddingRecusa deliberada de trabalho para preservar saúde.
OvershootConsumo admitido acima do limite configurado.
QuotaOrçamento acumulado de consumo.
Rate limitControle de frequência de consumo.
Retry-AfterCampo HTTP que orienta quando repetir.
Sliding windowJanela móvel sobre o intervalo anterior ao instante atual.
ThrottlingAção de contenção aplicada ao exceder uma política.
Token bucketAlgoritmo com capacidade máxima e reposição de tokens.

Referências técnicas

  • . 6585 - Additional , incluindo 429 Too Many .
  • . 9110 - Semantics, incluindo .
  • HTTPAPI Working Group. RateLimit fields for - Internet-Draft, work in progress.
  • Microsoft Learn. Azure Management: rate-limit, rate-limit-by-key, e -by-key policies.
  • Microsoft Learn. Advanced with Azure Management.
  • Axway Documentation. filter e policy filter reference.
  • Envoy Documentation. Local e global filters.
  • Security Top 10 - Unrestricted Resource Consumption e proteção de fluxos sensíveis.
  • ITU-T / traffic policing literature. , e .

Nota de atualização

Algoritmos e semântica de produtos gerenciados podem mudar por tier e versão. O draft de campos RateLimit ainda é trabalho em andamento em 2026. Antes de padronizar ou copiar policies, valide a documentação oficial da versão implantada.