LLM Gateway Design: Rate Limiting, Caching e Fallback para Múltiplos Providers | Lemon.dev
LLM Gateway Design: Como Evitar o Esgotamento de API com Rate Limiting, Caching e Fallback para Múltiplos Providers
Introdução
Na corrida para integrar modelos de linguagem de grande escala (LLMs) em aplicações reais, um problema recorrente assombra desenvolvedores: o esgotamento de API. A cena é clássica: a aplicação funciona perfeitamente em homologação, mas ao chegar à produção, logs como estes começam a aparecer:
ERROR: Rate limit exceeded for OpenAI API
INFO: Retry attempt 1...
ERROR: Rate limit exceeded again after 2.3s...
Se você já passou por isso, sabe que a solução não está apenas em aumentar o limite do plano — mas em projetar um gateway inteligente capaz de gerenciar tráfego, armazenar respostas em cache e redirecionar requisições para providers alternativos. Este artigo explora o design de um LLM Gateway de três camadas — Rate Limiting, Caching e Fallback — que suporta centenas de requisições por segundo com latência de ~10ms, mesmo sob carga.
O Desafio: Produtividade vs. Limites de API
Em 2026, a adoção de agentes de IA cresceu exponencialmente. Aplicações que antes usavam um único modelo agora orquestram múltiplos providers (OpenAI, Anthropic, Google, Azure, e provedores open‑source via API). Cada provider impõe limites de taxa (RPM, TPM, custos por token) que, quando atingidos, degradam a experiência do usuário e geram retrabalho.
O erro mostrado acima não é apenas um incômodo — ele representa perda de oportunidades, atrasos em fluxos críticos e até indisponibilidade total do serviço. Um gateway bem projetado precisa:
- Limitar o tráfego por chave de API, por usuário e por modelo.
- Armazenar respostas já geradas para evitar chamadas desnecessárias.
- Redirecionar requisições para providers alternativos quando o limite for atingido.
1. Rate Limiting: A Primeira Linha de Defesa
A limitação de taxa (rate limiting) é o mecanismo que protege tanto o seu backend quanto a API do provider de sobrecarga. Em um gateway de 3 camadas, essa funcionalidade opera em três níveis:
| Camada | Escopo | Descrição |
|---|---|---|
| L1 | Por chave de API | Controla quantas requisições uma aplicação cliente pode enviar por minuto. |
| L2 | Por usuário final | Garante que um único usuário não monopolize os tokens do modelo. |
| L3 | Por modelo/provider | Impede que o gateway ultrapasse os limites contratados com cada fornecedor. |
Implementação prática: utilize um token bucket ou sliding window em memória (Redis) para verificar a cada requisição se o limite foi excedido. Se o limite L3 estiver prestes a ser atingido, o gateway pode pré‑rejeitar a chamada com um código HTTP 429 e sugerir um tempo de espera (Retry-After).
Exemplo de configuração (pseudo‑código):
if rate_limiter.is_allowed("openai:gpt-4", user_id):
response = call_openai(prompt)
else:
return 429, {"error": "rate_limit", "retry_after": 5}
2. Caching: Reduzindo Chamadas Repetitivas
Muitas requisições para LLMs são idênticas ou semânticamente equivalentes. Um cache bem projetado pode reduzir em até 60% o tráfego de API, diminuindo custos e latência.
Técnicas essenciais:
- Cache exato: armazena a resposta para um prompt idêntico (hash do texto + parâmetros do modelo).
- Cache semântico (avançado): usa embeddings para detectar perguntas similares e retornar respostas já geradas.
- Cache de embeddings: para tarefas de busca (RAG), o custo de gerar embeddings é alto; armazenar o embedding evita chamadas repetidas ao modelo.
Como evitar dados obsoletos:
- Defina um TTL (time‑to‑live) para cada cache, tipicamente entre 1 hora e 24 horas para dados não sensíveis.
- Em contextos críticos (como dashboards em tempo real), utilize cache‑invalidation baseado em eventos.
Impacto na performance: um gateway otimizado com cache pode segurar 350+ requisições por segundo em apenas 1 vCPU, sem necessidade de tuning, conforme demonstrado em benchmarks recentes.
3. Fallback: O Plano B (e C) para Múltiplos Providers
Quando o rate limiting e o cache não são suficientes, o fallback entra em ação. A ideia é simples: se o provider primário devolver um erro 429 (ou 500, 503), o gateway tenta automaticamente um segundo provider, depois um terceiro, até obter sucesso.
Estratégia de fallback em 3 etapas:
- Primário: OpenAI GPT‑4 (mais rápido e com maior qualidade para respostas complexas).
- Secundário: Anthropic Claude 3.5 (ótimo para segurança e consistência).
- Terciário: Mistral Large via API própria (mais barato e sem limites rígidos em certos planos).
Implementação prática:
providers = [
("openai", "gpt-4"),
("anthropic", "claude-3-5-sonnet"),
("mistral", "mistral-large-latest"),
]
for provider, model in providers:
try:
return call_api(provider, model)
except RateLimitError:
logger.warning(f"Rate limit on {provider}, trying next...")
continue
Atenção: o fallback deve ser transparente para o usuário final. A resposta pode vir de um modelo diferente, mas deve atender ao mesmo requisito de qualidade. Para evitar degradação, o gateway pode aplicar um fallback limitado (tentar no máximo 2 providers antes de falhar).
4. Projeto Completo: Gateway de 3 Camadas com ~10ms de Latência
O diagrama a seguir ilustra o fluxo de uma requisição em um gateway resiliente:
Requisição
→ Camada de Rate Limiting (Redis)
→ se bloqueado: retorna 429
→ se permitido: continua
→ Camada de Cache (memória + Redis)
→ se cache hit: retorna resposta em <5ms
→ se cache miss: continua
→ Camada de Fallback (provedores ordenados)
→ tenta Provider A
→ se falha: tenta Provider B
→ se falha: tenta Provider C
→ se sucesso: armazena resposta no cache e retorna
Benefícios do design:
- Latência de ~10ms mesmo sob carga elevada (350+ RPS).
- Resiliência: se um provider cair, outro assume automaticamente.
- Economia: cache reduz o consumo de tokens pagos em até 60%.
- Escalabilidade: o rate limiting protege tanto o gateway quanto os providers.
Conclusão
Projetar um LLM Gateway que combina rate limiting, caching e fallback para múltiplos providers é a chave para operar agentes de IA em produção sem o temido "Error: Rate limit exceeded". Com as técnicas apresentadas, você pode:
- Prevenir o esgotamento da API com limites granulares.
- Reduzir custos e latência com cache inteligente.
- Garantir disponibilidade contínua com fallback automático.
Em um cenário onde a competição por tokens de LLM é acirrada e a experiência do usuário depende da velocidade e da confiabilidade, um gateway de 3 camadas não é mais um luxo — é uma necessidade técnica. Comece a implementar hoje e evite as dores de cabeça que acompanham o crescimento exponencial dos seus agentes de IA.
Este artigo foi inspirado por discussões em hackathons de agentes resilientes, como o promovido pela TrueFoundry, e por casos reais de desenvolvedores que enfrentaram os limites de API em produção.