Tratar 429 sem tempestade de retries
Guia de produção: Tratar 429 sem tempestade de retries. Inclui artefato determinístico, limites de falha, controles de rollout e fontes verificadas.

Guia de produção: Tratar 429 sem tempestade de retries. Inclui artefato determinístico, limites de falha, controles de rollout e fontes verificadas.
Decisão primeiro
Tratar 429 sem tempestade de retries é um contrato explícito de produção, não uma mudança isolada. Defina sucesso, falha terminal e rollback antes de mover tráfego; o artefato separa evidência de suposição.
Comece por classification, prove retry_after com um caso determinístico e transforme terminal em gate de release.
Artefato reutilizável
Uma linha só passa quando a evidência vem da mesma requisição, janela de teste ou versão de configuração.
| Checkpoint | Evidência | Condição de aprovação |
|---|---|---|
classification |
429_source:_application,gateway,provider,or_shared_pool |
O registro une uma requisição lógica e uma tentativa. |
retry_after |
delta-seconds_or_HTTP-date_parsed_against_a_monotonic_deadline |
O valor é preservado e comparado exatamente na fronteira do protocolo. |
jitter |
bounded_random_delay_after_server_guidance |
O limite é explícito e falha de modo fechado. |
attempts |
one_end-to-end_attempt_budget_shared_by_every_layer |
O limite é explícito e falha de modo fechado. |
concurrency |
admission_reduced_before_retry_volume_grows |
O limite é explícito e falha de modo fechado. |
terminal |
final_429_returned_with_request_ID_and_no_hidden_retries |
Owner, fonte, data e limitação ficam registrados. |
Exemplo resolvido
O exemplo é sintético e determinístico. Use valores revisados do seu workload; nunca inclua segredos ou dados de clientes.
attempt_budget = 3
for attempt in 1..attempt_budget:
result = call_once()
if result.status != 429: return result
if request.deadline_expired(): break
delay = parse_retry_after(result.headers) ?? bounded_backoff(attempt)
reduce_admission_concurrency()
wait(min(delay + full_jitter(), request.remaining_time))
return terminal_429_without_another_retry()
Procedimento de implementação
- Congele requisição, resposta, configuração e baseline observável.
- Execute um caso positivo determinístico e preserve o resultado completo.
- Execute o caso negativo ou limite correspondente.
- Una tentativas por um request ID lógico e registre tempo, estado final e uso sem conteúdo sensível.
- Faça rollout em coorte limitada com critérios de parada.
- Releia estado durável e comportamento público; reverta se uma invariante falhar.
Modos de falha
Estas falhas invalidam o resultado mesmo quando o HTTP externo parece correto:
- Retries sem orçamento amplificam a carga.
- O cancelamento não chega à fila nem ao upstream e continua consumindo capacidade.
- Uma resposta de texto é tratada como prova de compatibilidade completa.
- Prompts, chaves ou argumentos sensíveis entram na telemetria.
Limite do Modelflare
Modelflare centraliza routing compatível com OpenAI, chaves, grupos, uso e falhas, mas uma rota configurada não prova capacidades opcionais. Verifique modelo e canal pelo protocolo nativo, preserve zeros explícitos e use a liquidação durável como verdade de billing.
Use o guia principal para a decisão mais ampla e a documentação para a configuração atual.
Checklist de publicação
- Responder primeiro à pergunta principal.
- Definir owner para cada campo, estado, métrica e fórmula.
- Usar apenas identificadores sintéticos.
- Preservar estrutura, código, limites e avisos em todos os idiomas.
- Revalidar contratos, suporte e preços em T-1; mover a data se algo mudar.
- Antes do horário, excluir de API pública, rotas e sitemap.
Fontes e data de verificação
Fontes verificadas em 2026-08-07; elas não provam uma rota não testada.