01
O limite global protege a média e sacrifica o cliente certo
O primeiro limite que qualquer serviço ganha costuma ser global: um teto de requisições por segundo aplicado na borda, sem distinguir quem chamou. Ele é fácil de configurar, aparece pronto em qualquer proxy reverso e tem a propriedade que todo mundo quer no momento do incidente, que é conter a carga imediatamente. O problema é que a contenção não escolhe alvo. Quando o teto é atingido, a rejeição recai sobre quem estava chegando naquele instante, e a probabilidade de alguém ser rejeitado é proporcional ao volume que ele envia. O cliente que manda três chamadas por minuto quase nunca é rejeitado. O cliente que manda duzentas por minuto porque o negócio dele exige isso é rejeitado o tempo todo, junto com o abusivo.
Existe um efeito mais perverso que aparece depois. O limite global cria uma competição entre clientes que nunca se conheceram. A capacidade que sobra para o cliente A depende do comportamento do cliente B, o que significa que a qualidade de serviço percebida por um integrador passa a ser função do que outro integrador fez na mesma janela. Isso é impossível de documentar num contrato, impossível de reproduzir em teste e impossível de explicar no chamado. A pergunta que o cliente faz, com razão, é qual é o limite dele, e sob teto global a resposta honesta é que depende dos outros.
A correção conceitual é tratar o limite como uma alocação de capacidade e não como um freio de emergência. Cada chamador recebe um orçamento próprio, verificável e independente, e o serviço passa a ter uma soma de orçamentos que ele sabe sustentar. Um chamador que ultrapassa o próprio orçamento consome apenas a fatia dele, e o excesso dele nunca chega perto da fatia de ninguém. É a mesma mudança de mentalidade que separa um pool de conexões compartilhado de pools isolados por carga: o isolamento custa um pouco de eficiência média e compra previsibilidade, que é o que um contrato de integração precisa vender.
| Modelo | Quem é penalizado no pico | Previsibilidade para o cliente | Quando ainda faz sentido |
|---|---|---|---|
| Teto global na borda | Quem chegou no instante errado, proporcional ao volume legítimo | Nenhuma: o limite efetivo depende dos outros chamadores | Válvula de último recurso acima dos limites por cliente |
| Limite por endereço de rede | Todos que compartilham saída NAT ou o mesmo provedor de nuvem | Baixa: o mesmo cliente muda de identidade entre chamadas | Tráfego anônimo, antes da autenticação |
| Limite por credencial de cliente | Apenas o chamador que ultrapassou o próprio orçamento | Alta: o número entra no contrato e é reproduzível | Padrão para qualquer API com chamador identificado |
| Limite por credencial e por rota | O chamador, apenas na operação cara que ele abusou | Alta, com granularidade que reflete o custo real | Quando uma rota custa ordens de grandeza mais que as outras |
| Cota por custo estimado | O chamador, proporcional ao trabalho que gerou | Média: exige explicar a unidade de custo ao integrador | Cargas heterogêneas, como busca, relatório e exportação |
A segunda linha da tabela merece um comentário porque ela é a escolha mais comum e a que mais produz chamado. Limitar por endereço de rede parece razoável até o dia em que um cliente corporativo inteiro sai por um único endereço de saída e consome o orçamento de mil funcionários como se fosse um chamador só, ou até o dia em que um integrador roda em funções serverless e aparece com um endereço novo a cada minuto, escapando de qualquer contagem. Endereço de rede é uma identidade útil antes da autenticação e enganosa depois dela.