Ẹyọ 8 / 11

Awọn ifilelẹ Iyara ati Iṣakoso Aṣiṣe Resilient

Awọn anfani:

  • Le tumọ awọn opin iyara (RPM/ITPM/OTPM) ati awọn aṣiṣe 429
  • Ṣe imuse ẹhin ipari ki o tun gbiyanju pẹlu atunyẹwo-lẹhin
  • Ṣe ipin ni deede ati mu awọn koodu aṣiṣe HTTP ti o wọpọ (400/401/429/500/529)

Ni agbegbe iṣelọpọ, ko si API ti o dahun ni pipe ni gbogbo igba. Nigba miiran o firanṣẹ awọn ibeere ni yarayara ati lu opin; nigba miiran olupin naa n ṣiṣẹ fun igba diẹ; Nigba miiran ibeere rẹ jẹ aṣiṣe lati ibẹrẹ. Ohun ti o ṣe iyatọ isọpọ to lagbara lati igbiyanju magbowo ni pe o mu awọn ipo wọnyi ni asọtẹlẹ ati laifọwọyi. Ninu ẹyọ yii iwọ yoo kọ ẹkọ nipa awọn opin oṣuwọn (RPM/ITPM/OTPM), aṣiṣe 429, tun gbiyanju pẹlu ifẹhinti ipari, ati isọdi deede ti awọn koodu aṣiṣe HTTP ti o wọpọ. Ibi-afẹde: lati kọ ṣiṣan ti o logan ti olumulo kan kii yoo ṣe akiyesi rẹ.

Kini Awọn idiwọn Iyara?

Olupese ṣe idiwọn iye iṣẹ ti iyipada le ṣe ni akoko ti a fun. Idaabobo yii; O ṣe aabo fun awọn amayederun mejeeji ati iwọ lati awọn bugbamu idiyele lojiji. Awọn oriṣi mẹta ti o wọpọ lo wa:

  • RPM (Awọn ibeere fun Iṣẹju): Nọmba awọn ibeere fun iṣẹju kan.
  • ITPM (Awọn ami igbewọle ni iṣẹju kọọkan): Aami igbewọle ti o le ṣe ni ilọsiwaju fun iṣẹju kan.
  • OTPM (Awọn ami Ijadejade fun Iṣẹju): Aami iṣejade ti o le ṣe ni iṣẹju kan.

Ti o ba kọja eyikeyi ninu awọn opin wọnyi, olupese yoo kọ ibeere naa ati da koodu aṣiṣe 429 pada. Awọn opin gbogbogbo yatọ da lori ipele akọọlẹ rẹ (ipele) ati pe o le pọ si ni akoko pupọ.

Imọran: O le wo nigbati o ba sunmọ opin lati awọn akọle idahun. Pupọ julọ awọn olupese n jabo ipin ipin rẹ ti o ku pẹlu awọn akọle bii x-ratelimit-remaining-*. Abojuto awọn iye wọnyi ati fifa ijabọ ni iwaju jẹ ọna ti o dagba julọ lati ṣe idiwọ iṣoro naa laisi gbigba 429 kan.

429 ati Exponential Retracement

429 (oṣuwọn opin) jẹ igba diẹ ati aṣiṣe atunṣe. Idahun ti o pe ni lati duro fun ibeere naa fun igba diẹ ki o tun gbiyanju lẹẹkansi. Ṣugbọn idaduro igbagbogbo ko to; Ti gbogbo eniyan ba tun gbiyanju ni akoko kanna, opin naa yoo de lẹẹkansi. Ojutu naa jẹ ifẹhinti ipari: jijẹ akoko idaduro ni afikun pẹlu igbiyanju ikuna kọọkan.

# Exponential backoff logic trial 1 → 429 → duro 1 sec trial 2 → 429 → duro 2 sec trial 3 → 429 → duro 4 sec trial 4 → 429 → duro 8 sec (+ kekere ID "jitter")... fi silẹ ki o jabo lẹhin ni julọ awọn idanwo N.

Ṣafikun aileto diẹ (jitter) si eyi ṣe idilọwọ awọn ibeere ikọlu nigba igbiyanju lati tun gbiyanju ni akoko kanna. Ni afikun, idahun 429 nigbagbogbo n gbe akọsori `tun gbiyanju-lẹhin': “gbiyanju lẹẹkansi ni awọn iṣẹju-aaya pupọ yii”. Ibọwọ fun akọle yii jẹ deede diẹ sii ju idaduro afọju.

Išọra: Nigbati o ba gba 429, “fifipa mu u nipa fifiranṣẹ awọn ibeere diẹ sii” yoo jẹ ki ipo naa buru si; Iwọn naa tẹsiwaju lati kun ati pe ko si awọn ibeere ti o kọja. Idahun ti o pe ni ipadasẹhin, kii ṣe isare. Irohin ti o dara: pupọ julọ awọn SDK osise ni aafọwọyi tun gbiyanju 429 ati awọn aṣiṣe olupin pẹlu ipadasẹhin - lo ihuwasi SDK yii ṣaaju fifi sii pẹlu ọwọ.

Pipin awọn koodu aṣiṣe HTTP

Kii ṣe gbogbo aṣiṣe jẹ kanna. Iyatọ to ṣe pataki: ṣe o le tun gbiyanju tabi ṣe ibeere/ọrọ idanimọ bi?

Koodu

Itumo

Njẹ a le gbiyanju lẹẹkansi?

idahun ti o tọ

400

Ibere ti ko wulo (aṣiṣe ọna kika/aṣiṣe paramita)

rara

Ṣe atunṣe ibeere naa; maṣe firanṣẹ kanna lẹẹkansi

401

Aṣiṣe ijẹrisi (bọtini aiṣedeede/sonu)

rara

Fix bọtini/akọle

403

Ko si aṣẹ (ko si iraye si awoṣe/ẹya-ara)

rara

Ṣayẹwo awọn igbanilaaye / dopin

404

Ko ri (ID awoṣe ti ko tọ/ojuami ipari)

rara

Ti o tọ awoṣe ID/adirẹsi

429

Iwọn iyara ti kọja

Bẹẹni

Padasehin + tun gbiyanju-lẹhin

500

Aṣiṣe olupin

Bẹẹni

Gbiyanju lẹẹkansi pẹlu ipadasẹhin

529

Olupin ti kojọpọ

Bẹẹni

Gbiyanju lẹẹkansi pẹlu ipadasẹhin

Ofin goolu: 429, 500 ati 529 jẹ igba diẹ; O tun gbiyanju lẹẹkansi pẹlu yiyọ kuro. 400, 401, 403, 404 jẹ ibeere / awọn ọran idanimọ; Gbiyanju lẹẹkansi kii yoo yanju rẹ, ati pe o padanu akitiyan. Koodu rẹ gbọdọ ṣe iyatọ laarin awọn ẹgbẹ meji wọnyi.

Igbesẹ nipasẹ Igbesẹ: Ipe ti o tọ

  1. Fi ibeere naa silẹ. Ti o ba ṣaṣeyọri, tẹsiwaju.
  2. Sọtọ koodu aṣiṣe. Njẹ a le gbiyanju lẹẹkansi?
  3. Ti o ba ṣee gbiyanju: tẹle atunyẹwo-lẹhin, lo ifẹhinti ipari + jitter, gbiyanju iye igba to lopin (fun apẹẹrẹ 5 max).
  4. Ti ko ba gbiyanju: Fix (kika/bọtini) ati da duro; Maṣe tun ibeere aṣiṣe kanna ṣe ni lupu.
  5. Gbé fífúnni sílẹ̀. Ti ko ba ṣaṣeyọri lẹhin awọn igbiyanju n, ṣafihan ifiranṣẹ towotowo si olumulo ki o wọle si iṣẹlẹ naa (ẹka ipasẹ 11).

# Alagbara ipe pseudo-codedene = 0 tun: idahun = ìbéèrè_at () ti o ba dahun.aseyori: da esi pada ti idahun.code ninu [429, 500, 529] ki o gbiyanju <5: duro = tun gbiyanju_lẹhin ?? (2^gbiyanju iṣẹju-aaya + jitter) orun (duro); gbiyanju += 1; git lẹẹkansi ti o ba ti respond.code ni [400, 401, 403, 404]: save_error (idahun); pada "ìbéèrè gbọdọ wa ni titunse" pada "aṣiṣe yẹ, gbiyanju nigbamii"

# Awọn esi rere si olumulo (nigbati awọn atunwi ba ti rẹ) "Mo n ṣiṣẹ lọwọ ni bayi, Emi ko le ṣe ilana ibeere rẹ. Gbiyanju lẹẹkansi laipẹ, tabi Mo ti fipamọ ibeere rẹ, Emi yoo pada wa si ọdọ rẹ nigbati o ba ṣetan.”

Ilọsiwaju ti ko lagbara / Itọpa ti o lagbara (nibi: apẹrẹ ifiranṣẹ aṣiṣe)

# WEAK (ṣe afihan aṣiṣe aise si olumulo) "Aṣiṣe 429: oṣuwọn_limit_error"

# STRONG (ore-olumulo, ifọkanbalẹ, iyanju iṣe) "Ipaduro igba diẹ wa ninu eto naa. A ti gba ibeere rẹ lailewu ati pe a tun gbiyanju lẹẹkansi laifọwọyi. Ti abajade ko ba han laarin iṣẹju diẹ, o le sọ oju-iwe naa tun.”

Ṣiṣafihan aṣiṣe imọ-ẹrọ aise si olumulo ipari mejeeji ba igbẹkẹle jẹ ati pe o le jẹ ailagbara aabo. Sọtọ awọn aṣiṣe ni inu ati fun olumulo ni idakẹjẹ, ifiranṣẹ ti o da lori iṣe; kan kọ alaye imọ-ẹrọ fun igbasilẹ naa.

Mẹta Mini igba

Ọran 1 - Ọkọ oju omi kọlu ni bugbamu ijabọ. Boti iṣẹ alabara gba 429 ni ijabọ abẹwo ni ọjọ ipolongo; Ko si atunyẹwo ninu koodu naa, gbogbo aṣiṣe ni afihan taara si olumulo bi “aṣiṣe”. Wọn ṣafikun retracement exponential + tun gbiyanju-lẹhin; pẹlu ijabọ kanna, awọn ibeere ti o kọja pẹlu idaduro ti awọn aaya pupọ, olumulo ko rii awọn aṣiṣe eyikeyi.

Ọran 2 - Gbiyanju 400 ni lupu. Ibarapọ kan n gba 404 nitori ID awoṣe invalid, ṣugbọn o nṣe itọju gbogbo awọn aṣiṣe bi “akoko” ati igbiyanju lẹẹkansii ni lupu ailopin; Awọn log di wiwu ati ki o kobojumu fifuye ti a da. Wọn ṣafikun iyasọtọ aṣiṣe: 404 ni a gba pe o yẹ, lupu naa duro ati pe a ṣe atunṣe ID awoṣe. Ẹkọ: maṣe gbiyanju gbogbo aṣiṣe lẹẹkansi.

Ọran 3 - Ṣiṣakoso opin lati iwaju. Iṣẹ imudara data kan nṣiṣẹ nigbagbogbo ni opin 429. Wọn tẹle akọsori ti o ku-x-ratelimit ati ki o fa ijabọ naa ni ibamu si ipin. Nitorinaa wọn tọju iyara ti o duro ni isalẹ opin, laisi mu eyikeyi 429s; Iṣẹ naa ti ṣe diẹ sii ni asọtẹlẹ ati yiyara.

Awọn aṣiṣe ti o wọpọ

  • Iyara ti o pọ si ni 429: Mu ki ipo naa buru si; Yipada si padasehin.
  • Tun gbiyanju kọọkan aṣiṣe: 400/401/404 jẹ yẹ; Igbiyanju lẹẹkansi jẹ agbin.
  • Lilo idaduro ti o wa titi: Ṣẹda ijamba; Lo exponential + jitter.
  • Ikoju 'tun gbiyanju-lẹhin': O jẹ deede julọ lati ni ibamu pẹlu akoko ti olupese ti ṣalaye.
  • Ṣiṣafihan aṣiṣe aise si olumulo: Gbigbọn igbẹkẹle, ṣẹda awọn ailagbara; Sọtọ si inu.
  • Awọn igbiyanju ailopin: Ṣeto opin oke (fun apẹẹrẹ 5 tun gbiyanju); ki o si fun soke gracefully.

Jinle: Queuing, Concurrency, and Circuit Breakers

Ifarada ti ifẹ ẹyọkan jẹ igbesẹ akọkọ; Awọn idagbasoke gidi ni lati ṣakoso nọmba nla ti awọn ibeere laisi kọlu awọn opin. Mẹta agbekale wá sinu play nibi.

Ti isinyi: O fi awọn ibeere sinu isinyi lati firanṣẹ ni iyara iṣakoso kuku ju lẹsẹkẹsẹ. Queuing smoothes jade lojiji ti nwaye ti ijabọ: Paapa ti awọn ibeere 1,000 ba de ni ẹẹkan, isinyi yoo tu wọn silẹ ni iwọn kan ni isalẹ opin. Ni ọna yii o ṣe idiwọ 429, lẹhinna o ko ni lati ṣe aniyan nipa titunṣe.

Iwọn iye owo: O ṣe idinwo iye awọn ibeere ti o wa "ninu afẹfẹ" ni akoko kanna. Awọn ibeere afiwera ailopin ni kiakia kun RPM ati awọn opin TPM. Aja concurrency ti o ni oye (fun apẹẹrẹ ko ju awọn ibeere 10 lọ nigbakanna) mejeeji ṣetọju awọn opin ati jẹ ki eto naa jẹ asọtẹlẹ.

Circuit fifọ: Ti olupese ba n pada si 500/529, dipo ki o gbiyanju gbogbo ibeere, o “fọ Circuit naa” fun igba diẹ ati yarayara kuna ibeere naa laisi fifiranṣẹ lailai. Lẹhin ti a duro, o tan awọn Circuit pada ki o si gbiyanju. Apẹrẹ yii ṣe idilọwọ eto rẹ lati jamba ni iṣẹlẹ ti ikuna olupese fun igba diẹ.

Papọ, awọn mẹtẹẹta wọnyi ṣe agbekalẹ isọdọtun ipele-eto ni ikọja atunwi kannaa ti ipe ẹyọkan. Lori iwọn kekere, SDK's atunkọ aladaaṣe ti to; Bi iwọn ti n dagba, isinyi, concurrency, ati fifọ Circuit di pataki. Gbogbo wọn ni ibi-afẹde ti o wọpọ kanna: lati ṣe afihan iṣoro igba diẹ si olumulo kii ṣe bi jamba, ṣugbọn bi idaduro alaihan ti iṣẹju-aaya diẹ.

Ni akojọpọ

429 pada nigbati awọn opin iyara (RPM/ITPM/OTPM) ti kọja; Eyi jẹ aṣiṣe fun igba diẹ ati pe yoo tun gbiyanju nipa lilo atunyin-lẹhin ati ipadasẹhin alapin + jitter. 500 ati 529 tun jẹ ipese; 400/401/403/404 jẹ ibeere/ọrọ idanimọ ati pe a ko le yanju nipa igbiyanju lẹẹkansi. Ṣiṣan ti o lagbara n ya awọn aṣiṣe lọ si awọn ẹgbẹ meji wọnyi, gbiyanju nọmba to lopin ti awọn akoko, ṣe abojuto opin lati iwaju ati ṣafihan awọn ifiranṣẹ idakẹjẹ si olumulo.

Ohun elo iṣẹ-ṣiṣe

Ṣe akiyesi iṣọpọ rẹ. (1) Ṣe atokọ awọn koodu aṣiṣe ti o le ba pade ki o pin wọn si “atunyẹwo / yẹ”. (2) Kọ ero ifẹhinti apilẹṣẹ rẹ silẹ (idaduro ibẹrẹ, olùsọdipúpọ, fila, jitter). (3) Pato bi o ṣe le lo akọsori atunyin-lẹhin. (4) Kọ ifiranṣẹ rere lati han si olumulo nigbati awọn igbiyanju ba ti rẹ.

akojọ ayẹwo

  • [] Mo le ṣe alaye awọn opin RPM/ITPM/OTPM ati 429.
  • [] Mo ti le lo awọn kannaa ti exponential padasehin + jitter + tun gbiyanju-lẹhin.
  • [] Mo le ṣe lẹtọ awọn koodu aṣiṣe bi atunyan / yẹ.
  • [] Mo mọ pe a ko yẹ ki o gbiyanju gbogbo asise.
  • [] Dipo aṣiṣe aise, Mo le fihan olumulo ni idakẹjẹ, ifiranṣẹ ti o da lori iṣe.