Unità 8 / 11

Limiti ta' Veloċità u Ġestjoni ta' Żbalji Reżiljenti

Qligħ:

  • Jista 'jinterpreta limiti ta' veloċità (RPM/ITPM/OTPM) u 429 żball
  • Timplimenta backoff esponenzjali u erġa' pprova b'retry-after
  • Jikklassifika u jimmaniġġja b'mod korrett il-kodiċijiet ta' żball HTTP komuni (400/401/429/500/529)

F'ambjent ta 'produzzjoni, l-ebda API ma jirrispondi perfettament il-ħin kollu. Xi drabi tibgħat talbiet malajr wisq u tolqot il-limitu; kultant is-server ikun temporanjament okkupat; Xi drabi t-talba tiegħek hija żbaljata mill-bidu. Dak li jiddistingwi integrazzjoni solida minn tentattiv dilettanti huwa li tittratta dawn is-sitwazzjonijiet b'mod prevedittiv u awtomatikament. F'din l-unità ser titgħallem dwar il-limiti tar-rata (RPM/ITPM/OTPM), żball 429, ipprova mill-ġdid b'backoff esponenzjali, u klassifikazzjoni xierqa ta 'kodiċijiet ta' żball HTTP komuni. L-għan: li jinbena fluss tant robust li utent qatt ma jinduna bih.

X'inhuma l-Limiti tal-Veloċità?

Il-fornitur jillimita kemm xogħol jista' jagħmel swiċċ f'perjodu ta' żmien partikolari. Din il-protezzjoni; Jipproteġi kemm l-infrastruttura kif ukoll lilek minn splużjonijiet f'daqqa tal-ispejjeż. Hemm tliet tipi komuni ta' limiti:

  • RPM (Talbiet Per Minuta): Numru ta' talbiet kull minuta.
  • ITPM (Input Tokens Per Minute): Input token li jista 'jiġi pproċessat kull minuta.
  • OTPM (Output Tokens Per Minute): Token tal-ħruġ li jista 'jiġi prodott kull minuta.

Jekk taqbeż xi wieħed minn dawn il-limiti, il-fornitur jirrifjuta t-talba u jirritorna kodiċi ta 'żball 429. Il-limiti ġeneralment ivarjaw skont il-livell tal-kont tiegħek (il-livell) u jistgħu jiżdiedu maż-żmien.

Tip: Tista' tara meta tkun qed toqrob il-limitu mill-headers tar-rispons. Ħafna mill-fornituri jirrappurtaw il-kwota li fadal tiegħek b'intestaturi bħal x-ratelimit-remaining-*. Il-monitoraġġ ta 'dawn il-valuri u throttle it-traffiku fuq quddiem huwa l-aktar mod matur biex tiġi evitata l-problema mingħajr ma tikseb 429.

429 u Ritraċċament Esponenzjali

429 (limitu tar-rata) huwa żball temporanju u li jista' jerġa' jipprova. It-tweġiba t-tajba hija li tistenna t-talba għal xi żmien u erġa' pprova. Imma stennija kostanti mhix biżżejjed; Jekk kulħadd jerġa' jipprova fl-istess ħin, il-limitu jerġa' jintlaħaq. Is-soluzzjoni hija backoff esponenzjali: iżid il-ħin ta 'stennija b'mod esponenzjali ma' kull tentattiv fallut.

# Prova loġika ta' backoff esponenzjali 1 → 429 → stenna 1 sek prova 2 → 429 → stenna 2 sek prova 3 → 429 → stenna 4 sek prova 4 → 429 → stenna 8 sek (+ "jitter" żgħir bl-addoċċ)... ċeda u jirrapporta wara l-aktar N provi

Iż-żieda ta 'ftit każwali (jitter) ma' dan tevita li t-talbiet jaħbtu meta jippruvaw jerġgħu jippruvaw fl-istess ħin. Barra minn hekk, ir-rispons 429 ħafna drabi jġorr header "erġa 'pprova wara": "erġa' pprova f'dawn il-bosta sekondi". Ir-rispett ta' dan it-titlu huwa aktar preċiż milli stennija bl-addoċċ.

Attenzjoni: Meta tikseb 429, "jisfurzarha billi tibgħat aktar talbiet" se tagħmel is-sitwazzjoni agħar; Il-limitu jkompli jimtela u l-ebda talba ma tgħaddi. Ir-rispons korrett huwa repli, mhux aċċelerazzjoni. Aħbar tajba: il-biċċa l-kbira tal-SDKs uffiċjali jerġgħu jippruvaw awtomatikament 429 u żbalji tas-server b'backoff — uża din l-imġieba tal-SDK qabel tinstallah manwalment.

Il-klassifikazzjoni tal-Kodiċi ta' Żball HTTP

Mhux kull żball huwa l-istess. Distinzjoni kritika: tista' terġa' tiġi ppruvata jew hija kwistjoni ta' talba/identità?

Kodiċi

Tifsira

Jista' jerġa' jiġi ppruvat?

rispons korrett

400

Talba mhux valida (żball fil-format/parametru)

le

Ikkoreġi t-talba; terġax tibgħat l-istess

401

Żball ta' awtentikazzjoni (ċavetta invalida/nieqsa)

le

Waħħal ċavetta/titolu

403

L-ebda awtorizzazzjoni (l-ebda aċċess għal mudell/karatteristika)

le

Iċċekkja l-permessi/l-ambitu

404

Mhux misjub (ID tal-mudell/endpoint mhux korrett)

le

ID/indirizz tal-mudell korrett

429

Limitu tal-veloċità inqabeż

Iva

Irtir + ipprova mill-ġdid wara

500

Żball tas-server

Iva

Erġa' pprova bl-irtir

529

Server mgħobbi żżejjed

Iva

Erġa' pprova bl-irtir

Regola tad-deheb: 429, 500 u 529 huma temporanji; Jiġi ppruvat mill-ġdid bl-irtirar. 400, 401, 403, 404 huma kwistjonijiet ta' talba/identità; Li terġa 'tipprova mhux se ssolviha, u taħli sforz. Il-kodiċi tiegħek għandu jiddistingwi bejn dawn iż-żewġ gruppi.

Pass pass: Sejħa Durabbli

  1. Ibgħat it-talba. Jekk tirnexxi, kompli.
  2. Ikklassifika l-kodiċi tal-iżball. Jista' jerġa' jiġi ppruvat?
  3. Jekk tista' tiġi ppruvata: segwi retry-after, applika backoff esponenzjali + jitter, ipprova numru limitat ta' drabi (eż. 5 max).
  4. Jekk ma ppruvawx: Waħħal (format/ċavetta) u waqqaf; Tirrepetix l-istess talba żbaljata fil-linja.
  5. Ikkunsidra li ċċedi. Jekk xorta ma rnexxiex wara n tentattivi, uri messaġġ edukat lill-utent u illoggja l-avveniment (tracking unit 11).

# Sejħa robusta pseudo-codedene = 0repeat: response = request_at () if response.success: ritorn rispons jekk response.code fi [429, 500, 529] u pprova < 5: stenna = retry_after ?? (2^pprova sek + jitter) sleep(stenna); ipprova += 1; git għal darb'oħra jekk response.code fi [400, 401, 403, 404]: save_error(rispons); return "it-talba trid tiġi ffissata" return "żball permanenti, ipprova aktar tard"

# Feedback edukat lill-utent (meta l-provi mill-ġdid ikunu eżawriti) "Jien okkupat bħalissa, ma stajtx nipproċessa t-talba tiegħek. Erġa' pprova dalwaqt, jew salvajt it-talba tiegħek, nerġa' nerġa' nerġa' għandkom meta tkun lesta."

Pront dgħajjef / Pront qawwi (hawn: disinn ta’ messaġġ ta’ żball)

# DGĦAJF (turi żball mhux ipproċessat lill-utent) "Żball 429: rate_limit_error"

# STRONG (faċli għall-utent, rassikuranti, li jissuġġerixxi azzjoni) "Kien hemm konġestjoni temporanja fis-sistema. Irċevejna t-talba tiegħek mingħajr periklu u qed terġa' tiġi ppruvata awtomatikament. Jekk riżultat ma jidhirx fi żmien ftit sekondi, tista' taġġorna l-paġna."

Il-kxif tal-iżball tekniku mhux ipproċessat lill-utent aħħari kemm idgħajjef il-fiduċja kif ukoll jista 'jkun vulnerabbiltà tas-sigurtà. Ikkategorizza l-iżbalji internament u agħti lill-utent messaġġ kalm u orjentat lejn l-azzjoni; ikteb biss id-dettall tekniku għar-rekord.

Tliet Każijiet Mini

Każ 1 — Dgħajsa ġġarraf fi splużjoni tat-traffiku. Bot tas-servizz tal-klijent irċieva 429 fi traffiku qawwi fil-jum tal-kampanja; Ma kien hemm l-ebda prova mill-ġdid fil-kodiċi, kull żball kien rifless direttament lill-utent bħala "żball". Huma żiedu retracement esponenzjali + retry-after; bl-istess traffiku, talbiet għaddew b'dewmien ta 'diversi sekondi, l-utent ma ra l-ebda żbalji.

Każ 2 — Nippruvaw 400 fil-linja. Integrazzjoni kienet qed tikseb 404 minħabba ID ta 'mudell invalidu, iżda kienet qed tittratta l-iżbalji kollha bħala "transitorji" u terġa' tipprova f'linja infinita; Il-log sar minfuħ u nħolqot tagħbija bla bżonn. Huma żiedu l-klassifikazzjoni ta 'żball: 404 huwa meqjus permanenti, il-linja titwaqqaf u l-ID tal-mudell hija kkoreġuta. Lezzjoni: terġax tipprova kull żball.

Każ 3 — Ġestjoni tal-limitu minn quddiem. Xogħol ta' arrikkiment tad-dejta kien għaddej kontinwament fil-limitu 429. Huma segwew l-header x-ratelimit-remaining u throttled it-traffiku skont il-kwota. Għalhekk żammew pass stabbli eżatt taħt il-limitu, mingħajr ma ħadu l-ebda 429s; Ix-xogħol sar b'mod aktar prevedibbli u aktar mgħaġġel.

Żbalji komuni

  • Żieda fil-veloċità f'429: Tagħmel is-sitwazzjoni agħar; Aqleb għall-irtirar.
  • Ipprova mill-ġdid kull żball: 400/401/404 huwa permanenti; Li terġa 'tipprova hija ħela.
  • Bl-użu ta 'stennija fissa: Joħloq ħabta; Uża esponenzjali + jitter.
  • Tinjora 'retry-after': Huwa l-aktar preċiż li tikkonforma mal-ħin speċifikat mill-fornitur.
  • Tiżvela l-iżball mhux ipproċessat lill-utent: Tħawwad il-fiduċja, toħloq vulnerabbiltajiet; Ikklassifika ġewwa.
  • Prova mill-ġdid bla limitu: Issettja limitu massimu (eż. 5 tentattivi mill-ġdid); imbagħad ċedi bil-grazzja.

Aktar fil-fond: Queuing, Concurrency, u Circuit Breakers

Ir-reżistenza ta 'xewqa waħda hija l-ewwel pass; Il-maturità reali hija li timmaniġġja numru kbir ta 'talbiet mingħajr ma tolqot il-limiti. Hawnhekk jidħlu tliet kunċetti.

Kju: Tpoġġi t-talbiet fi kju biex tibgħathom b'pass ikkontrollat ​​aktar milli immedjatament. Il-kju jillixxa l-fqigħ f'daqqa ta' traffiku: Anke jekk jaslu 1,000 talba f'daqqa, il-kju se jirrilaxxahom b'rata taħt il-limitu. B'dan il-mod tipprevjeni 429, allura ma jkollokx għalfejn tinkwieta biex tirranġaha.

Limitu tal-konkorrenza: Inti tillimita kemm hemm talbiet "fl-arja" fl-istess ħin. Talbiet paralleli illimitati malajr jimlew il-limiti RPM u TPM. Limitu ta' konkorrenza raġonevoli (eż. mhux aktar minn 10 talbiet konkorrenti) iżżomm il-limiti u jagħmel is-sistema prevedibbli.

Circuit breaker: Jekk il-fornitur ikompli jirritorna 500/529, minflok ma jipprova bil-kbir kull talba, inti "tkisser iċ-ċirkwit" għal xi żmien u malajr tfalli t-talba mingħajr qatt ma tibgħatha. Wara stenna, iddawwar iċ-ċirkwit lura u tipprova. Dan il-mudell jipprevjeni s-sistema tiegħek milli tiġġarraf fil-każ ta' falliment temporanju tal-fornitur.

Flimkien, dawn it-tlieta jistabbilixxu reżiljenza fil-livell tas-sistema lil hinn mill-loġika mill-ġdid ta’ sejħa waħda. Fuq skala żgħira, it-tentattiv mill-ġdid awtomatiku tal-SDK huwa biżżejjed; Hekk kif l-iskala tikber, il-kju, il-konkorrenza u l-interruttur isiru indispensabbli. Kollha għandhom l-istess għan komuni: li jirriflettu problema temporanja lill-utent mhux bħala ħabta, iżda bħala dewmien inviżibbli ta 'ftit sekondi.

Fil-qosor

429 jirritorna meta jinqabżu l-limiti tal-veloċità (RPM/ITPM/OTPM); Dan huwa żball temporanju u se jerġa 'jiġi ppruvat bl-użu ta' retry-after u backoff esponenzjali + jitter. 500 u 529 huma wkoll proviżorji; 400/401/403/404 hija kwistjoni ta' talba/identità u ma tistax tiġi solvuta billi terġa' tipprova. Fluss robust jifred l-iżbalji f'dawn iż-żewġ gruppi, jipprova numru limitat ta 'drabi, jimmonitorja l-limitu minn quddiem u juri messaġġi kalmi lill-utent.

Kompitu ta' applikazzjoni

Ikkunsidra l-integrazzjoni tiegħek. (1) Elenka l-kodiċijiet ta' żball li tista' tiltaqa' magħhom u sseparahom f'"retryable/permanenti". (2) Ikteb il-pjan ta' pullback esponenzjali tiegħek (istiva inizjali, koeffiċjent, limitu, jitter). (3) Speċifika kif tuża l-header retry-after. (4) Ikteb il-messaġġ edukat li għandu jintwera lill-utent meta l-provi mill-ġdid ikunu eżawriti.

lista ta' kontroll

  • [ ] Kapaċi nispjega limiti RPM/ITPM/OTPM u 429.
  • [ ] Kapaċi napplika l-loġika ta' irtir esponenzjali + jitter + ipprova mill-ġdid wara.
  • [ ] Kapaċi nikklassifika kodiċijiet ta' żball bħala li jistgħu jerġgħu jippruvaw/permanenti.
  • [ ] Naf li m'għandniex nippruvaw kull żball.
  • [ ] Minflok żball mhux ipproċessat, nista' nuri lill-utent messaġġ kalm u orjentat lejn l-azzjoni.