Hagnaður:
- Getur túlkað hraðatakmarkanir (RPM/ITPM/OTPM) og 429 villur
- Innleiðir veldisvísis bakslag og reyndu aftur með rery-after
- Flokkar og meðhöndlar algenga HTTP villukóða á réttan hátt (400/401/429/500/529)
Í framleiðsluumhverfi svarar ekkert API fullkomlega allan tímann. Stundum sendir þú beiðnir of fljótt og kemst á mörkin; stundum er þjónninn upptekinn tímabundið; Stundum er beiðni þín röng frá upphafi. Það sem aðgreinir trausta samþættingu frá áhugamannatilraun er að hún meðhöndlar þessar aðstæður fyrirspárandi og sjálfvirkt. Í þessari einingu muntu læra um hraðatakmarkanir (RPM/ITPM/OTPM), 429 villu, reyna aftur með veldisvísisbroti og rétta flokkun algengra HTTP villukóða. Markmiðið: að byggja upp flæði sem er svo öflugt að notandi mun aldrei taka eftir því.
Hver eru hraðatakmörk?
Þjónustuveitan takmarkar hversu mikla vinnu rofi getur unnið á tilteknu tímabili. Þessi vernd; Það verndar bæði innviðina og þig fyrir skyndilegum kostnaðarsprengingum. Það eru þrjár algengar tegundir af mörkum:
- RPM (Requests Per Minute): Fjöldi beiðna á mínútu.
- ITPM (Input Tokens Per Minute): Inntakstákn sem hægt er að vinna úr á mínútu.
- OTPM (Output Tokens Per Minute): Output token sem hægt er að framleiða á mínútu.
Ef þú ferð yfir eitthvað af þessum mörkum hafnar veitandinn beiðninni og skilar 429 villukóða. Takmörk eru almennt breytileg eftir reikningsstigi (flokki) og gætu aukist með tímanum.
Ábending: Þú getur horft á þegar þú ert að nálgast mörkin í svarhausunum. Flestar veitendur tilkynna um eftirstandandi kvóta með hausum eins og x-ratelimit-remaining-*. Að fylgjast með þessum gildum og stöðva umferðina fyrir framan er þroskaðasta leiðin til að koma í veg fyrir vandamálið án þess að fá 429.
429 og Exponential Retracement
429 (taxtamörk) er tímabundin villa sem hægt er að reyna aftur. Rétta svarið er að bíða eftir beiðninni í smá stund og reyna aftur. En stöðug bið er ekki nóg; Ef allir reyna aftur á sama tíma er takmörkunum náð aftur. Lausnin er veldisvísis bakslag: auka biðtíma veldisvísis með hverri misheppnuðu tilraun.
# veldisvísis bakslagsröktilraun 1 → 429 → bíddu 1 sek prufa 2 → 429 → bíddu 2 sek prufa 3 → 429 → bíddu 4 sek prufa 4 → 429 → bíddu 8 sek (+ smá tilviljunarkennd "jitter")... gefðu upp og tilkynntu eftir í mesta lagi N prufur
Að bæta smá handahófi (jitter) við þetta kemur í veg fyrir að beiðnir rekast á þegar reynt er að reyna aftur á sama tíma. Að auki er 429 svarið oft með „reyna aftur“ fyrirsögn: „reyndu aftur eftir þessar margar sekúndur“. Að virða þennan titil er nákvæmara en að bíða í blindni.
Varúð: Þegar þú færð 429 mun "þvinga það með því að senda fleiri beiðnir" gera ástandið verra; Mörkin halda áfram að fyllast og engar beiðnir ganga í gegn. Rétt viðbrögð eru hörfa, ekki hröðun. Góðar fréttir: Flestar opinberar SDK reyna sjálfkrafa aftur 429 og netþjónsvillur með backoff - notaðu þessa hegðun SDK áður en þú setur það upp handvirkt.
Flokkun HTTP villukóða
Ekki eru öll mistök eins. Mikilvægur greinarmunur: er hægt að reyna það aftur eða er það spurning um beiðni/auðkenni?
Kóði
Merking
Er hægt að prófa það aftur?
rétt svar
400
Ógild beiðni (snið/færibreytuvilla)
nei
Leiðrétta beiðnina; ekki senda það sama aftur
401
Auðkenningarvilla (lykill ógildur/vantar)
nei
Lagaðu lykil/titil
403
Engin heimild (enginn aðgangur að gerð/eiginleika)
nei
Athugaðu heimildir/umfang
404
Fannst ekki (rangt auðkenni/endapunktur tegundar)
nei
Rétt auðkenni / heimilisfang líkans
429
Farið yfir hámarkshraða
Já
Retreat + aftur-eftir
500
Netþjónsvilla
Já
Reyndu aftur með hörku
529
Server ofhlaðinn
Já
Reyndu aftur með hörku
Gullna reglan: 429, 500 og 529 eru tímabundnar; Það er reynt aftur með afturköllun. 400, 401, 403, 404 eru beiðni/auðkennisvandamál; Að reyna aftur mun ekki leysa það og það sóar fyrirhöfn. Kóðinn þinn verður að greina á milli þessara tveggja hópa.
Skref fyrir skref: Varanlegt símtal
- Sendu beiðnina. Haltu áfram ef vel tekst til.
- Flokkaðu villukóðann. Er hægt að prófa það aftur?
- Ef það er hægt að reyna: fylgdu aftur-eftir, notaðu veldisvísis bakslag + jitter, reyndu takmarkaðan fjölda sinnum (t.d. 5 max).
- Ef ekki reynt: Lagaðu (snið/lykill) og hættu; Ekki endurtaka sömu rangu beiðnina í lykkjunni.
- Íhugaðu að gefast upp. Ef það tekst enn ekki eftir n tilraunir skaltu sýna notandanum kurteis skilaboð og skrá viðburðinn (rakningareining 11).
# Öflugur kalla gervi-kóða = 0repeat: svar = request_at() if response.success: skilaðu svari ef response.code í [429, 500, 529] og reyndu < 5: wait = retry_after ?? (2^reyna sek + jitter) sofa(bíddu); reyndu += 1; git aftur ef response.code í [400, 401, 403, 404]: save_error(response); skila "beiðni verður að laga" skila "varanleg villa, reyndu síðar"
# Kurteisleg viðbrögð til notandans (þegar endurtekningar eru þrotnar) "Ég er upptekinn núna, ég gat ekki afgreitt beiðni þína. Reyndu aftur fljótlega, eða ég hef vistað beiðni þína, ég mun hafa samband við þig þegar hún er tilbúin."
Veik kvaðning / Sterk hvetja (hér: hönnun villuboða)
# WEAK (birtir óákveðna villu fyrir notanda)"Villa 429: rate_limit_error"
# STERK (notendavænt, hughreystandi, aðgerða-bending) "Það var tímabundin þrengsla í kerfinu. Við höfum móttekið beiðni þína á öruggan hátt og það er verið að reyna hana aftur sjálfkrafa. Ef niðurstaða birtist ekki innan nokkurra sekúndna geturðu endurnýjað síðuna."
Að opinbera hina hráu tæknilegu villu fyrir endanotandanum grefur bæði undan trausti og getur verið öryggisveikleiki. Flokkaðu villur innbyrðis og gefðu notandanum róleg, aðgerðamiðuð skilaboð; skrifaðu bara tæknilega smáatriðin til að skrásetja.
Þrjú Mini Cass
Mál 1 — Bátur hrapaði í umferðarsprengingu. Þjónustuþjónn fékk 429 í aukinni umferð á kosningadegi; Það var engin endurtekning í kóðanum, hver villa endurspeglaðist beint til notandans sem „villa“. Þeir bættu við veldisvísis retracement + rery-after; með sömu umferð, beiðnir liðnar með nokkrum sekúndna seinkun, notandinn sá engar villur.
Tilfelli 2 — Reynir 400 í lykkju. Samþætting var að fá 404 vegna ógilds módelauðkennis, en meðhöndlaði allar villur sem „tímabundnar“ og reyndi aftur í óendanlega lykkju; Stokkurinn bólgnaði og óþarfa álag skapaðist. Þeir bættu við villuflokkun: 404 er talið varanlegt, lykkjan er stöðvuð og auðkenni líkansins er leiðrétt. Lærdómur: ekki reyna allar mistök aftur.
Mál 3 — Stjórna takmörkunum að framan. Gagnaauðgunarstarf var stöðugt í gangi við 429 mörkin. Þeir fylgdu x-ratelimit-eftir hausnum og stöðvuðu umferðina í samræmi við kvótann. Þeir héldu því jöfnum hraða rétt undir mörkunum, án þess að taka neinar 429s; Verkið var gert fyrirsjáanlega og hraðar.
Algeng mistök
- Aukinn hraði í 429: Gerir ástandið verra; Skiptu yfir í hörfa.
- Reynir aftur hverja villu: 400/401/404 er varanlegt; Að reyna aftur er sóun.
- Notkun fastrar bið: Skapar árekstur; Notaðu veldisvísi + jitter.
- Hunsa „endurreyna-eftir“: Það er nákvæmast að fara eftir þeim tíma sem veitandinn tilgreinir.
- Að sýna notandanum hina hráu villu: Eykur trausti, skapar veikleika; Flokkaðu inni.
- Ótakmarkaðar endurtilraunir: Stilltu efri mörk (t.d. 5 endurtilraunir); gefðu síðan upp með þokkabót.
Dýpra: Biðraðir, samtímis og aflrofar
Þolgæði einnar löngunar er fyrsta skrefið; Raunverulegur þroski er að stjórna miklum fjölda beiðna án þess að ná takmörkunum. Þrjú hugtök koma hér við sögu.
Biðröð: Þú setur beiðnir í biðröð til að senda þær á stjórnuðum hraða frekar en strax. Biðröð jafnar út skyndilega umferðarhraða: Jafnvel þótt 1.000 beiðnir berist í einu mun biðröðin losa þær á hraða undir mörkunum. Þannig kemurðu í veg fyrir 429, þá þarftu ekki að hafa áhyggjur af því að laga það.
Samhliða takmörk: Þú takmarkar hversu margar beiðnir eru "í loftinu" á sama tíma. Ótakmarkaðar samhliða beiðnir fylla fljótt RPM og TPM mörk. Sanngjarnt samhliðaþak (t.d. ekki fleiri en 10 samhliða beiðnir) bæði viðheldur takmörkunum og gerir kerfið fyrirsjáanlegt.
Hringrásarrofi: Ef veitandinn heldur áfram að skila 500/529, í stað þess að reyna þrjóskt við hverja beiðni, „slítur þú hringrásina“ í smá stund og bregst fljótt við beiðnina án þess að senda hana nokkru sinni. Eftir bið kveikirðu aftur á hringrásinni og reynir. Þetta mynstur kemur í veg fyrir að kerfið þitt hrynji ef upp kemur tímabundin bilun í þjónustuveitunni.
Saman koma þessir þrír á seiglu á kerfisstigi umfram rökfræði endurreynslu í einu símtali. Í litlum mæli er sjálfvirk tilraun SDK nægjanleg; Eftir því sem umfang stækkar verða biðraðir, samtímis og aflrofar ómissandi. Þau hafa öll sama sameiginlega markmið: að endurspegla tímabundið vandamál fyrir notandann, ekki sem hrun, heldur sem ósýnilega töf upp á nokkrar sekúndur.
Í stuttu máli
429 skilar þegar farið er yfir hraðamörk (RPM/ITPM/OTPM); Þetta er tímabundin villa og verður reynt aftur með því að nota endurtekningu og veldisvísandi afturköllun + jitter. 500 og 529 eru einnig bráðabirgðatölur; 400/401/403/404 er beiðni/auðkennisvandamál og ekki er hægt að leysa það með því að reyna aftur. Öflugt flæði skilur villur í þessa tvo hópa, reynir takmarkaðan fjölda sinnum, fylgist með mörkunum að framan og sýnir róleg skilaboð til notandans.
Umsóknarverkefni
Íhugaðu samþættingu þína. (1) Skráðu villukóðana sem þú gætir rekist á og aðskilið þá í "endurreynanleg / varanleg". (2) Skrifaðu niður veldisfallsáætlanir þínar (upphaflegt hald, stuðull, lok, jitter). (3) Tilgreindu hvernig á að nota reyndu eftir hausinn. (4) Skrifaðu kurteislega skilaboðin sem á að birta notandanum þegar endurtilraunir eru búnar.
gátlisti
- [ ] Ég get útskýrt RPM/ITPM/OTPM takmörk og 429.
- [ ] Ég get beitt rökfræði veldisvísis hörfa + jitter + endurtekninga-eftir.
- [ ] Ég get flokkað villukóða sem endurreynanlega/varanlega.
- [ ] Ég veit að við ættum ekki að reyna öll mistök.
- [ ] Í stað þess að vera óunnin villu get ég sýnt notandanum róleg, aðgerðamiðuð skilaboð.