Faida:
- Inaweza kutafsiri vikomo vya kasi (RPM/ITPM/OTPM) na hitilafu 429
- Hutekeleza urejesho wa kielelezo na ujaribu tena kwa kujaribu tena
- Huainisha na kushughulikia kwa usahihi misimbo ya kawaida ya hitilafu ya HTTP (400/401/429/500/529)
Katika mazingira ya uzalishaji, hakuna API inayojibu kikamilifu wakati wote. Wakati mwingine hutuma maombi haraka sana na kugonga kikomo; wakati mwingine seva ni busy kwa muda; Wakati mwingine ombi lako sio sahihi tangu mwanzo. Kinachotofautisha muunganisho thabiti kutoka kwa jaribio la amateur ni kwamba hushughulikia hali hizi kwa kutabiri na kiotomatiki. Katika kitengo hiki utajifunza kuhusu vikomo vya viwango (RPM/ITPM/OTPM), hitilafu 429, jaribu tena ukiwa na matokeo ya ziada, na uainishaji sahihi wa misimbo ya kawaida ya hitilafu ya HTTP. Kusudi: kuunda mtiririko ambao ni thabiti sana kwamba mtumiaji hatawahi kuuona.
Vikomo vya Kasi ni nini?
Mtoa huduma anaweka mipaka ya kazi ngapi swichi inaweza kufanya katika kipindi fulani cha muda. Ulinzi huu; Inalinda miundombinu na wewe kutokana na milipuko ya ghafla ya gharama. Kuna aina tatu za kawaida za mipaka:
- RPM (Maombi kwa Dakika): Idadi ya maombi kwa dakika.
- ITPM (Tokeni za Kuingiza kwa Kila Dakika): Tokeni ya ingizo ambayo inaweza kuchakatwa kwa dakika.
- OTPM (Tokeni za Pato kwa Dakika): Tokeni ya toe inayoweza kutolewa kwa dakika.
Ukizidi kikomo chochote kati ya hivi, mtoa huduma anakataa ombi na kurejesha msimbo wa hitilafu 429. Vikomo kwa ujumla hutofautiana kulingana na kiwango cha akaunti yako (awamu) na vinaweza kuongezeka kwa muda.
Kidokezo: Unaweza kutazama unapokaribia kikomo kutoka kwa vichwa vya majibu. Watoa huduma wengi huripoti mgao wako uliosalia kwa vichwa kama vile x-ratelimit-baking-*. Kufuatilia maadili haya na kutuliza trafiki mbele ndiyo njia ya watu wazima zaidi ya kuzuia shida bila kupata 429.
429 na Ufuatiliaji wa Kielelezo
429 (kikomo cha kiwango) ni hitilafu ya muda na inayoweza kujaribiwa tena. Jibu sahihi ni kusubiri ombi kwa muda na ujaribu tena. Lakini kusubiri mara kwa mara haitoshi; Ikiwa kila mtu atajaribu tena kwa wakati mmoja, kikomo kitafikiwa tena. Suluhisho ni urejesho wa kielelezo: kuongeza muda wa kusubiri kwa kasi kwa kila jaribio lisilofanikiwa.
# Majaribio ya mantiki ya ziada 1 → 429 → subiri jaribio la sekunde 2 → 429 → subiri jaribio la sekunde 3 → 429 → subiri jaribio la sekunde 4 → 429 → subiri sekunde 8 (+ "jita") ndogo... kata tamaa na uripoti baada ya majaribio mengi ya N
Kuongeza nasibu kidogo (jitter) kwa hili huzuia maombi kugongana wakati wa kujaribu kujaribu tena kwa wakati mmoja. Zaidi ya hayo, jibu la 429 mara nyingi hubeba kichwa cha `jaribu-baada`: "jaribu tena katika sekunde hizi nyingi". Kuheshimu kichwa hiki ni sahihi zaidi kuliko kungoja bila upofu.
Tahadhari: Unapopata 429, "kulazimisha kwa kutuma maombi zaidi" kutafanya hali kuwa mbaya zaidi; Kikomo kinaendelea kujazwa na hakuna maombi yanayopitia. Jibu sahihi ni kurudi nyuma, sio kuongeza kasi. Habari njema: SDK nyingi rasmi hujaribu tena 429 kiotomatiki na hitilafu za seva kwa kuzima — tumia tabia hii ya SDK kabla ya kuisakinisha wewe mwenyewe.
Kuainisha Misimbo ya Hitilafu ya HTTP
Sio kila kosa ni sawa. Tofauti muhimu: inaweza kujaribiwa tena au ni suala la ombi/kitambulisho?
Kanuni
Maana
Je, inaweza kujaribiwa tena?
jibu sahihi
400
Ombi batili (hitilafu ya umbizo/kigezo)
hapana
Sahihisha ombi; usitume sawa tena
401
Hitilafu ya uthibitishaji (ufunguo ni batili/haupo)
hapana
Rekebisha ufunguo/kichwa
403
Hakuna idhini (hakuna ufikiaji wa mfano / kipengele)
hapana
Angalia ruhusa / upeo
404
Haijapatikana (kitambulisho kisicho sahihi cha mfano/mwisho)
hapana
Kitambulisho/anwani ya muundo sahihi
429
Kikomo cha kasi kimepitwa
Ndiyo
Rudisha + jaribu tena baada ya hapo
500
Hitilafu ya seva
Ndiyo
Jaribu tena kwa kurudi nyuma
529
Seva imejaa kupita kiasi
Ndiyo
Jaribu tena kwa kurudi nyuma
Kanuni ya dhahabu: 429, 500 na 529 ni ya muda; Inajaribiwa tena kwa kujiondoa. 400, 401, 403, 404 ni masuala ya ombi/kitambulisho; Kujaribu tena hakutatatua, na kutapoteza juhudi. Msimbo wako lazima utofautishe kati ya vikundi hivi viwili.
Hatua kwa Hatua: Simu ya Kudumu
- Peana ombi. Ikifanikiwa, endelea.
- Bainisha msimbo wa hitilafu. Je, inaweza kujaribiwa tena?
- Ikiwezekana: fuata kujaribu tena, tumia kielelezo cha kurudi nyuma + jitter, jaribu idadi ndogo ya nyakati (k.m. 5 max).
- Ikiwa haijajaribiwa: Rekebisha (umbizo/ufunguo) na usimamishe; Usirudia ombi sawa la makosa katika kitanzi.
- Fikiria kukata tamaa. Ikiwa bado haujafaulu baada ya majaribio ya n, onyesha ujumbe wa heshima kwa mtumiaji na uandikishe tukio (kitengo cha 11).
# Simu kali pseudo-codedene = 0repeat: response = request_at() if response.success: rudisha jibu ikiwa response.code katika [429, 500, 529] na ujaribu < 5: wait = jaribu tena_after ?? (2^try sec + jitter) sleep(subiri); jaribu += 1; git tena ikiwa response.code katika [400, 401, 403, 404]: save_error(response); rudisha "ombi lazima lirekebishwe" rudisha "kosa la kudumu, jaribu baadaye"
# Maoni ya adabu kwa mtumiaji (majaribio yanapokwisha) "Nina shughuli nyingi kwa sasa, sijaweza kushughulikia ombi lako. Jaribu tena hivi karibuni, au nimehifadhi ombi lako, nitarudi kwako likiwa tayari."
Agizo dhaifu / Ushauri thabiti (hapa: muundo wa ujumbe wa makosa)
# DHAIFU (inaonyesha kosa mbichi kwa mtumiaji)"Kosa 429: kosa_la_kikomo_"
# STRONG (inafaa kwa mtumiaji, ya kuhakikishia, inayopendekeza hatua) "Kulikuwa na msongamano wa muda katika mfumo. Tumepokea ombi lako kwa usalama na linajaribiwa tena kiotomatiki. Ikiwa matokeo hayataonekana ndani ya sekunde chache, unaweza kuonyesha upya ukurasa."
Kufichua hitilafu ghafi ya kiufundi kwa mtumiaji wa mwisho kunadhoofisha uaminifu na kunaweza kuwa hatarini kwa usalama. Panga makosa ndani na umpe mtumiaji ujumbe tulivu, unaozingatia hatua; andika tu maelezo ya kiufundi kwa rekodi.
Kesi Tatu Ndogo
Kesi ya 1 - Boti ilianguka katika mlipuko wa trafiki. Boti ya huduma kwa wateja ilipokea 429 katika trafiki ya kuongezeka siku ya kampeni; Hakukuwa na kujaribu tena katika msimbo, kila hitilafu ilionekana moja kwa moja kwa mtumiaji kama "kosa". Waliongeza urejeleaji wa kielelezo + jaribu tena; na trafiki sawa, maombi yaliyopitishwa kwa kuchelewa kwa sekunde kadhaa, mtumiaji hakuona makosa yoyote.
Kesi ya 2 - Kujaribu 400 kwenye kitanzi. Muunganisho ulikuwa unapata 404 kwa sababu ya kitambulisho batili cha modeli, lakini ulikuwa unashughulikia makosa yote kama "ya muda mfupi" na kujaribu tena kwa kitanzi kisicho na kikomo; Logi ilivimba na mzigo usio wa lazima uliundwa. Waliongeza uainishaji wa makosa: 404 inachukuliwa kuwa ya kudumu, kitanzi kimesimamishwa na kitambulisho cha mfano kinasahihishwa. Somo: usijaribu kila kosa tena.
Kesi ya 3 - Kusimamia kikomo kutoka mbele. Kazi ya uboreshaji wa data ilikuwa ikiendelea kila mara kwa kiwango cha 429. Walifuata kichwa kilichosalia cha x-ratelimit na kusukuma trafiki kulingana na kiasi. Kwa hiyo walishika mwendo wa kasi chini ya kikomo, bila kuchukua 429s yoyote; Kazi ilifanyika kwa kutabirika zaidi na kwa kasi zaidi.
Makosa ya kawaida
- Kuongeza kasi katika 429: Hufanya hali kuwa mbaya zaidi; Badili urudi nyuma.
- Kujaribu tena kila kosa: 400/401/404 ni ya kudumu; Kujaribu tena ni upotevu.
- Kutumia kusubiri kwa kudumu: Huunda mgongano; Tumia kielelezo + jitter.
- Kupuuza 'kujaribu tena': Ni sahihi zaidi kutii muda uliobainishwa na mtoa huduma.
- Kufichua kosa mbichi kwa mtumiaji: Hutikisa uaminifu, huleta udhaifu; Kuainisha ndani.
- Majaribio yasiyo na kikomo: Weka kikomo cha juu (k.m. majaribio 5 tena); kisha ukate tamaa kwa neema.
Kina zaidi: Kupanga foleni, Concurrency, na Vivunja Mzunguko
Uvumilivu wa tamaa moja ni hatua ya kwanza; Ukomavu wa kweli ni kusimamia idadi kubwa ya maombi bila kuvuka mipaka. Dhana tatu zinatumika hapa.
Foleni: Unaweka maombi kwenye foleni ili kuyatuma kwa kasi inayodhibitiwa badala ya mara moja. Kupanga foleni kunapunguza mlipuko wa ghafla wa trafiki: Hata maombi 1,000 yakifika mara moja, foleni itawatoa kwa kiwango kilicho chini ya kikomo. Kwa njia hii unazuia 429, basi sio lazima kuwa na wasiwasi juu ya kuirekebisha.
Ukomo wa sarafu: Unaweka kikomo cha maombi mangapi "yako hewani" kwa wakati mmoja. Maombi sawia yasiyo na kikomo hujaza haraka kikomo cha RPM na TPM. Kiwango cha kuridhisha cha upatanishi (k.m. si zaidi ya maombi 10 ya wakati mmoja) zote hudumisha vikomo na hufanya mfumo kutabirika.
Kivunja mzunguko: Ikiwa mtoa huduma ataendelea kurudisha 500/529, badala ya kujaribu kila ombi kwa bidii, "unavunja mzunguko" kwa muda na kushindwa ombi haraka bila kulituma. Baada ya kusubiri, unawasha tena mzunguko na ujaribu. Mchoro huu huzuia mfumo wako kutoka kwa hitilafu katika tukio la kushindwa kwa mtoa huduma kwa muda.
Kwa pamoja, hizi tatu huanzisha uthabiti wa kiwango cha mfumo zaidi ya mantiki ya kujaribu tena simu moja. Kwa kiwango kidogo, jaribio la kiotomatiki la SDK linatosha; Kadiri kiwango kinavyokua, kupanga foleni, kukubaliana, na kivunja mzunguko huwa muhimu sana. Zote zina lengo moja la kawaida: kuakisi tatizo la muda kwa mtumiaji si kama ajali, lakini kama ucheleweshaji usioonekana wa sekunde chache.
Kwa muhtasari
429 inarudi wakati viwango vya kasi (RPM/ITPM/OTPM) vimepitwa; Hili ni kosa la muda na litajaribiwa tena kwa kutumia jaribio la kujaribu tena na kielelezo cha nyuma + jitter. 500 na 529 pia ni za muda; 400/401/403/404 ni suala la ombi/kitambulisho na haliwezi kutatuliwa kwa kujaribu tena. Mtiririko thabiti hutenganisha makosa katika vikundi hivi viwili, hujaribu idadi ndogo ya nyakati, hufuatilia kikomo kutoka mbele na huonyesha ujumbe wa utulivu kwa mtumiaji.
Jukumu la maombi
Zingatia ujumuishaji wako. (1) Orodhesha misimbo ya makosa ambayo unaweza kukutana nayo na uitenganishe kuwa "inayoweza kujaribu tena / ya kudumu". (2) Andika mpango wako wa kurudisha nyuma kielelezo (kushikilia kwa mara ya kwanza, mgawo, kofia, jita). (3) Bainisha jinsi ya kutumia kichwa cha kujaribu tena. (4) Andika ujumbe wa heshima utakaoonyeshwa kwa mtumiaji wakati majaribio yamekamilika.
orodha ya ukaguzi
- [ ] Ninaweza kueleza vikomo vya RPM/ITPM/OTPM na 429.
- [ ] Ninaweza kutumia mantiki ya kurudi nyuma kwa kielelezo + jitter + jaribu tena baada ya hapo.
- [ ] Ninaweza kuainisha misimbo ya makosa kama inayoweza kujaribu tena/ya kudumu.
- [ ] Ninajua kwamba hatupaswi kujaribu kila kosa.
- [ ] Badala ya hitilafu ghafi, ninaweza kumwonyesha mtumiaji ujumbe tulivu, wenye mwelekeo wa kutenda.