Veiledning og innsikt

Rate-Limit-Aware AI API-gatewayer: Shape RPM, TPM, Bursts og Tenant Fairness Before 429s Hit

En praktisk gateway-arkitektur for å forhindre overlappende LLM API 429-er: normaliser leverandørgrenser, estimer tokentrykk før utsendelse, reserver kvote etter leietaker, jevn trafikkramper og gjør struping kontrollerbar.

En 429 fra en LLM-leverandør er ikke bare et signal på nytt. I produksjon er det ofte bevis på at søknaden din allerede har mistet kontrollen over opptak, leietakers rettferdighet, ventetid eller leverandørspesifikk kvoteregnskap.

Den vanlige løsningen – eksponentiell backoff – er nødvendig, men ufullstendig. Backoff reagerer etter at leverandøren avviser trafikk. En satsgrensebevisst AI API-gateway bør forme trafikk før forespørsler forlater systemet ditt: estimer tokentrykk, reserver kvote, isoler leietakere, sett riktig arbeid i kø, avvis feil arbeid og tilpass når leverandørgrensene endres.

Denne artikkelen beskriver en praktisk gateway-kvoteregulator for team som sender produksjonsarbeidsmengder til flere LLM-leverandører gjennom en enhetlig API.

Leserproblemet: 429-er er flerdimensjonale

Mange team behandler takstgrenser som om de var et enkelt antall forespørsler per minutt. Denne antagelsen bryter raskt med LLM APIer.

Fakta fra gjeldende leverandørdokumentasjon:

  • OpenAI dokumenterer at grenser kan håndheves over kortere vinduer enn den annonserte per minuttgrensen, så korte serier kan mislykkes selv når gjennomsnittsminuttet ser trygt ut.
  • Azure OpenAI-kvoten tildeles etter abonnement, region, modell og distribusjonstype i tokens per minutt. Å tilordne TPM til en distribusjon bestemmer også tvungne RPM-grenser, og RPM-til-TPM-forhold varierer etter modell.
  • Azure OpenAI merker seg også at beregninger av rate-limit tokens estimeres når forespørselen mottas og er ikke det samme som endelige faktureringstokentellinger.
  • Antropiske dokumenter skiller grenser for forespørsler per minutt, input-tokens-per-minutt og output-tokens per minutt. Overskridelse av grenser returnerer en 429 med en ny prøv etter-overskrift.
  • Anthropic advarer om at kraftige trafikkøkninger kan treffe akselerasjonsgrensene og anbefaler gradvis opptrapping.
  • For de fleste Claude-modeller teller ikke Anthropic-dokumenter som cache-lest input-tokens mot grensene for input-token-per-minutt, noe som betyr at hurtigbufring kan endre den effektive takhøyden.
  • Satsgrenser for Google Gemini API er knyttet til prosjektbruksnivåer, med høyere nivåer avhengig av faktureringsoppsett, akkumulert forbruk og medgått tid etter betalingsmilepæler.

Den operasjonelle leksjonen er klar: en OpenAI-kompatibel forespørselsform innebærer ikke OpenAI-kompatibel kvoteadferd. En gateway med flere leverandører trenger en intern kvotemodell som er rikere enn «prøv på nytt hvis 429».

Designmål: Gjør adgangskontroll til et gatewayansvar

En gateway som er klar over takstgrenser bør svare på fem spørsmål før du sender en forespørsel:

  1. Hvilken leverandør, modell, distribusjon, region, prosjekt eller arbeidsområde vil motta forespørselen?
  2. Hvor mye kapasitet for forespørsel, input-token, output-token og samtidighetskapasitet kan den forbruke?
  3. Hvilken leietaker, team, API-nøkkel, kunde eller arbeidsbelastningsklasse skal belastes mot delt kapasitet?
  4. Skal forespørselen godtas nå, settes i kø kort, nedgraderes, rutes andre steder eller avvises?
  5. Hvordan bør reservasjonen avstemmes etter at leverandøren returnerer faktisk bruk?

Porten blir en kvoteguvernør. Det erstatter ikke leverandørgrenser. Det gjør leverandørgrenser synlige, forutsigbare og rettferdige i ditt eget system.

Bygg en normalisert kvotemodell

Begynn med å definere interne begrensningsdimensjoner som kan representere de store leverandørene uten å tvinge dem inn i en misvisende bøtte.

Anbefalte begrenserdimensjoner

  • RPM: forespørsler per minutt.
  • Ta inn TPM: ledetekst, melding, verktøy og konteksttokens per minutt.
  • Utdata-TPM: fullføringstokener per minutt, reservert separat for strømming og lange generasjoner.
  • Total TPM: nyttig for leverandører eller distribusjoner som eksponerer kombinert tokentrykk.
  • Samtidighet: aktive forespørsler, aktive strømmer eller jobber om bord.
  • Strømmevarighet: strømmer med lang levetid kan oppta tilkoblings- og utdata-token-høyderom selv når RPM er lavt.
  • Leverandørspesifikt omfang: Azure-abonnement/region/distribusjon, Antropisk arbeidsområde/modellklasse, Google-prosjekt/nivå eller OpenAI-organisasjon/prosjekt/modellgruppe.

Ikke skjul leverandørspesifikke dimensjoner. Normaliser dem til et felles skjema, men bevar nok detaljer til å forklare en avvisning senere.

{
  "provider": "provider_a",
  "model_profile": "rask chat",
  "provider_scope": {
    "project": "prod",
    "region": "oss-øst",
    "deployment": "chat-large-01"
  },
  "grenser": {
    "rpm": 1200,
    "input_tpm": 800000,
    "output_tpm": 250 000,
    "samtidighet": 200
  }
}

Dette interne objektet bør konfigureres eksplisitt, ikke utledes fra modellnavn alene. Leverandørdashbord, kontonivåer, regionale distribusjoner og arbeidsområdeinnstillinger kan alle endre den effektive kapasiteten til samme modellfamilie.

Estimer tokentrykk før utsendelse

Taxbegrensning på leverandørsiden skjer ofte før den endelige faktureringsbruken er kjent. Gatewayen din bør gjøre den samme typen konservative estimat før du sender trafikk.

Inndata for forhåndsreisereservasjon

  • Serialisert melding og meldingslengde.
  • Modellspesifikk tokenisering og overhead for roller, verktøy, bilder eller strukturerte utdatainstruksjoner.
  • max_completion_tokens eller tilsvarende utdatatak.
  • Historisk fullføringsgrad for dette endepunktet, leietakeren, modellprofilen og forespørselsklassen.
  • Forventede cache-lese-tokens hvis hurtigbufring er tilgjengelig og målbart.
  • Strømmeflagg og forventet strømmevarighet.

En enkel reservasjonsregel er ofte nok til å starte:

estimated_input_tokens = tokenize(request_messages) + model_overhead
estimated_output_tokens = min(
  max_completion_tokens,
  p95_historical_output_tokens_for_route
)
reserved_total_tokens = estimated_input_tokens + estimated_output_tokens

For ukjente ruter, bruk en konservativ standard. For stabile produksjonsruter, oppdater estimater kontinuerlig fra faktisk bruk.

Reserver, og avstem deretter

Kvotereservasjoner skal ikke bli permanente kostnader. Behandle dem som hold:

  1. Sitat: estimer inngangs- og utgangstrykk.
  2. Reserver: trekk fra de relevante token-bøttene før utsendelse.
  3. Avgjøre: erstatt anslaget med leverandørrapportert bruk når det er tilgjengelig.
  4. Refusjon eller debet: returner ubrukt reservert kapasitet eller belaster overskudd til neste vindu om nødvendig.

Dette er viktigst for lang-kontekst- og strømmingsamtaler. Hvis du kun sjekker inngangs-TPM før utsendelse, kan en strøm starte med suksess og deretter støte på utgangs-token-trykk senere. Ved å reservere utgangshøyde separat reduseres midtstrømsfeil og risiko for stopp.

Bruk hierarkiske token-bøtter for leietakers rettferdighet

En enkelt global begrenser beskytter leverandørkontoen, men beskytter ikke leietakere mot hverandre. Én batchjobb med lang kontekst kan konsumere delt TPM og føre til at interaktive forespørsler fra andre team mislykkes.

Bruk hierarkiske token-bøtter:

organisasjon
  └── leietaker
      └── lag
          └── api_key
              └── modell_profil
                  └── provider_deployment

En forespørsel må sendes til hver relevante bøtte. Dette lar deg håndheve flere retningslinjer samtidig:

  • Organisasjonen kan ikke overskride leverandørkapasiteten.
  • En leietaker kan ikke konsumere mer enn den avtalte andelen.
  • En API-nøkkel kan ikke overskride den tiltenkte miljø- eller programgrensen.
  • En batchmodellprofil kan ikke sulte ut en interaktiv modellprofil.
  • En leverandørdistribusjon kan ikke overbelastes selv om en annen distribusjon har ledig kvote.

Riktig deling versus utnyttelse

Anbefaling: bruk vektet rettferdig deling med kontrollert burst-lån.

Strenge per-tenant caps er enkle å forklare, men kan strande ubrukt kapasitet. Burst-lån forbedrer utnyttelsen ved å la en leietaker midlertidig bruke ledig kvote fra en delt pool. Avveiningen er kompleksitet: dashbord må vise hva som ble garantert, hva som ble lånt og når lånet ble tilbakekalt.

En praktisk regel:

  • Gi hver leietaker en garantert grunnlinje.
  • Tillat serielån fra ubrukt delt kapasitet.
  • Ta tilbake lånt kapasitet når høyere prioritet eller garantert trafikk vises.
  • La aldri lånt trafikk lage 429-er på leverandørnivå for garantert trafikk.

Skill trafikkklasser før de kjemper

Ikke alle forespørsler fortjener samme køadferd. Sett trafikk inn i modellprofiler med separate køer og kvotepooler.

Trafikkklasse Typisk policy Hvorfor Interaktiv chat Kort kø, lavt latensbudsjett, rask feil eller kompatibel reserve Brukere merker haleforsinkelse raskt Agentiske arbeidsflyter Moderat kø, verktøybevisste budsjetter, utgangsrom Flertrinnsanrop kan forsterke tokentrykket Batchjobber Lengre kø, planlagt utjevning, lavere prioritet Vanligvis ventetidtolerant og token tung EvalerDedikert kvote, pause under hendelser Kan lage plutselige kunstige pigger Bakgrunnsoppsummering Sett i kø eller utsett, strengt TPM-tak Nyttig, men sjelden presserende

Kø forbedrer suksessraten, men øker haleforsinkelsen. En gateway bør gjøre denne avveiningen eksplisitt. For eksempel kan en interaktiv forespørsel vente opptil 300 millisekunder på kvoten, og deretter falle tilbake eller mislykkes. En nattlig batchjobb kan vente i 20 minutter og fortsatt anses som vellykket.

Normaliser 429s til ett enkelt feilskjema

Selv med god adgangskontroll vil leverandør 429s fortsatt forekomme. Grensene kan endres, leverandøranslagene kan avvike fra dine, og trafikken kan komme i skarpere støt enn forventet.

Normaliser hver 429 leverandør til et gateway-feilobjekt:

{
  "feil": {
    "type": "rate_limited",
    "limiter": "output_tpm",
    "provider": "provider_a",
    "model_profile": "rask chat",
    "provider_model": "model-x",
    "retry_after_ms": 2400,
    "tenant_id": "tenant_123",
    "api_key_id": "key_456",
    "request_class": "interaktiv",
    "estimated_input_tokens": 4200,
    "estimated_output_tokens": 800,
    "gateway_decision": "admitted_then_provider_rejected",
    "fallback_allowed": usant,
    "trace_id": "trace_abc"
  }
}

Nøkkelfeltet er gateway_decision. En 429 etter at gatewayen innrømmet forespørselen er forskjellig fra en forespørsel gatewayen avviste lokalt før utsendelse. Den første indikerer et begrenserkalibreringsproblem. Den andre indikerer forsettlig beskyttelse.

Tilpass fra leverandørhoder, men ikke avhengig av dem

Noen leverandører returnerer nyttige overskrifter, for eksempel indikatorer for gjentatt kapasitet eller gjenværende kapasitet. Bruk dem når de er tilgjengelige.

Anbefaling: leverandøroverskrifter bør justere den lokale guvernøren, ikke erstatte den.

Årsaker:

  • Tilgjengelighet for topptekst varierer etter leverandør og endepunkt.
  • Overskrifter kan ikke eksponere alle begrenserdimensjoner.
  • Prøv etterpå forteller deg når du skal prøve igjen, ikke hvilken leietaker som skal få kapasitet neste gang.
  • Tokenanslag på leverandørsiden kan avvike fra faktureringen eller internregnskapet ditt.

En robust implementering oppdaterer lokale bøttepåfyllingshastigheter og nedkjøling basert på overskrifter, samtidig som den håndhever grensene for leietaker, API-nøkkel, trafikkklasse og leverandørdistribusjon inne i gatewayen.

Legg til ramperegulatorer for migreringer og planlagte jobber

Mange hendelser med takstgrense skjer under planlagte endringer: flytting fra en modell til en annen, bytting av leverandører, aktivering av en ny agentarbeidsflyt eller lansering av en planlagt evalueringskjøring.

Anbefaling: behandle trafikkvekst som en kontrollert utrulling.

  • Migrering av funksjonsflagg etter leietaker, rute eller prosentandel av trafikken.
  • Angi veksttak per minutt for nye leverandørdistribusjoner.
  • Varm opp trafikken gradvis over timer i stedet for å bytte all trafikk umiddelbart.
  • Sett utrullingen på pause når 429-hastighet, nedgraderingshastighet, kødybde eller P95-forsinkelse krysser en terskel.
  • Behold en nødrute med en kompatibilitetspolicy, ikke bare en reservemodell.

Prediksjon: Etter hvert som leverandørrutingsmoduser, prioriterte nivåer og kontroller på arbeidsområdenivå blir mer vanlig, vil rampestyring bli en standard gateway-funksjon i stedet for et hendelsesrespons-skript.

Tilbakefall er en politisk beslutning, ikke bare en kapasitetsbeslutning

Når en leverandør returnerer en 429, kan ruting til en annen leverandør være det riktige svaret. Det kan også være utrygt.

Tilbakekomst kan endres:

  • Utdatakvalitet og instruksjoner som følger.
  • Kontekstlengde.
  • Tool-call-atferd.
  • Strukturert utdatapålitelighet.
  • Dataoppbevaring og oppholdsstilling.
  • Kostnad og ventetid.

Kvoteguvernøren bør spørre et kompatibilitetslag om fallback er tillatt for denne forespørselsklassen. Hvis ikke, bør den stå i kø eller mislykkes med et tydelig svar på lokal hastighetsgrense i stedet for å stille endring av semantikk.

Avslør kvoteoversikter som forklarer beslutninger

Et kvotesystem som ingen kan forstå vil bli forbigått. Bygg instrumentbord rundt driftsspørsmål:

  • Hvilke leietakere bruker mest RPM, input TPM og output TPM?
  • Hvilke modellprofiler står i kø, avviser eller faller tilbake?
  • Hvilket leverandøromfang er flaskehalsen: prosjekt, region, distribusjon, arbeidsområde, modellklasse eller kontonivå?
  • Hvor ofte skiller gatewayanslag seg fra leverandørbruk?
  • Hva er fordelingen på nytt etter leverandør og begrensertype?
  • Hvor mye effektiv takhøyde skapes av hurtigbufferlesing?
  • Hvilke trafikkklasser låner sprengt kapasitet?

For produkter rettet mot kunder eller partnere, utsett sikre kontroller:

  • Rategrenser per nøkkel.
  • Brasjegrenser per lag.
  • Daglige tak per kunde.
  • Nødpause for en leietaker eller nøkkel.
  • Varsler for 429-topper, køvekst og unormalt tokentrykk.
  • Partner API-endepunkter for administrasjon av forhandlerkvoter.

Dette gjør hastighetsbegrensning fra en mystisk leverandørfeil til en kontrollerbar del av team-API-styringen.

Implementeringssjekkliste

Fase 1: observere og klassifisere

  • Loggleverandør, modell, distribusjon, region, arbeidsområde, prosjekt, leietaker, API-nøkkel og forespørselsklasse for hver samtale.
  • Fangst leverandør 429s med gjentatt forsøk og rå feilmetadata.
  • Registrer estimerte og faktiske input/output tokens separat.
  • Skill interaktiv, batch-, eval- og bakgrunnstrafikk i telemetri.

Fase 2: lokal adgangskontroll

  • Opprett interne begrenserobjekter for RPM, input TPM, output TPM, total TPM og concurrency.
  • Legg til estimering av preflight-token.
  • Reserver kvote før sending og avstem etter at leverandørbruken kommer.
  • Avvis lokalt når en forespørsel ikke kan passe til leietakeren eller leverandøren.

Fase 3: rettferdighet og køer

  • Legg til hierarkiske verdier fra organisasjon til leverandørimplementering.
  • Tildel garanterte leietakerandeler og kontrollert burst-lån.
  • Opprett separate køer etter trafikkklasse.
  • Angi klassespesifikke maksimale ventetider og reserveregler.

Fase 4: tilpasning og drift

  • Bruk leverandøroverskrifter for å justere nedkjølings- og påfyllingsantakelser.
  • Legg til ramperegulatorer for migreringer og planlagte jobber.
  • Vis kvoteoversikter og varsler.
  • Gjennomgå estimeringsfeil og strandet kvote ukentlig.

Aktiv konklusjon

Hvis gatewayen din bare prøver 429s på nytt, fungerer den etter feilen. En AI API-gateway i produksjonsgrad bør forhindre de fleste feil ved frekvensgrense ved å bestemme hvem som har lov til å sende hva, når og mot hvilken leverandørkvote.

Start med en normalisert begrensermodell, forhåndsbestilling av tokener og køer i trafikkklasse. Legg deretter til hierarkisk leietakerrettferdighet, leverandør-header-tilpasning og ramperegulatorer. Resultatet er ikke bare færre 429s. Det er klarere kapasitetstildeling, mer forutsigbar ventetid, sikrere migreringer og rategrenseadferd som ingeniør-, finans- og kundestøtteteamene dine faktisk kan forklare.

Relatert lesning

FAQ

Ofte stilte spørsmål

Skulle en AI API-gateway prøve leverandør 429 feil?
Yes, but retries should be the last layer, not the main control. Bruk eksponentiell backoff og re-prøv-etter-overskrifter der dette er tilgjengelig, men legg også til adgangskontroll på gateway-siden slik at overbelastet trafikk settes i kø, formes, rutes eller avvises før den oppretter kaskadeleverandør 429s.
Hvorfor spore inn-TPM og ut-TPM separat?
Noen leverandører avslører separate grenser for input-token og output-token, og lange generasjoner kan tømme utgangskapasitet selv når input-kapasitet er tilgjengelig. Separat sporing hjelper til med å forhindre at strømmer starter vellykket og deretter stopper opp eller svikter når utgangs-token-trykket øker.
Er lokal token-estimering nøyaktig nok for hastighetsbegrensning?
Det trenger ikke være perfekt. Den må være konservativ nok til å forhindre overbelastning og kontinuerlig avstemmes mot faktisk leverandørbruk. Altfor konservative estimater kan underbruke kvoten, så produksjonssystemer bør måle estimeringsfeil og refundere ubrukte reservasjoner raskt.
Når bør en gateway-kø i stedet for å mislykkes raskt?
Køforsinkelsestolerant arbeid som batchjobber, evalueringer og bakgrunnsbehandling. For interaktive forespørsler, bruk et kort købudsjett og deretter enten mislykkes klart eller fall tilbake bare hvis erstatningsmodellen tilfredsstiller rutens kompatibilitet, kostnader og policykrav.