Egység 8 / 11

Sebességkorlátozások és rugalmas hibakezelés

Nyereség:

  • Képes értelmezni a sebességkorlátozásokat (RPM/ITPM/OTPM) és a 429-es hibákat
  • Exponenciális visszalépést és újrapróbálkozást valósít meg újrapróbálkozás után
  • Helyesen osztályozza és kezeli a gyakori HTTP hibakódokat (400/401/429/500/529)

Éles környezetben egyetlen API sem válaszol folyamatosan tökéletesen. Néha túl gyorsan küldi el a kéréseket, és eléri a korlátot; néha a szerver átmenetileg foglalt; Néha a kérésed kezdettől fogva rossz. A szilárd integrációt az különbözteti meg az amatőr próbálkozásoktól, hogy ezeket a helyzeteket előrejelző módon és automatikusan kezeli. Ebben az egységben megismerheti a sebességkorlátokat (RPM/ITPM/OTPM), a 429-es hibát, az exponenciális visszalépéssel történő újrapróbálkozást és a gyakori HTTP hibakódok megfelelő osztályozását. A cél: olyan robusztus áramlás felépítése, hogy a felhasználó soha nem veszi észre.

Mik azok a sebességkorlátozások?

A szolgáltató korlátozza, hogy egy kapcsoló mennyi munkát végezhet egy adott időtartamon belül. Ez a védelem; Megvédi az infrastruktúrát és Önt is a hirtelen költségrobbanásoktól. A korlátozásoknak három általános típusa van:

  • RPM (Requests Per Minute): Kérések száma percenként.
  • ITPM (Input Tokens Per Minute): Percenként feldolgozható beviteli token.
  • OTPM (Output Tokens Per Minute): Percenként előállítható kimeneti token.

Ha ezen határértékek bármelyikét túllépi, a szolgáltató elutasítja a kérést, és 429-es hibakódot küld vissza. A korlátok általában a fiókszinttől (szinttől) függően változnak, és idővel növekedhetnek.

Tipp: A válaszfejlécekből láthatja, hogy mikor közeledik a határértékhez. A legtöbb szolgáltató a fennmaradó kvótát olyan fejlécekkel jelzi, mint az x-ratelimit-remaining-*. Ezen értékek figyelése és az elöl haladó forgalom lefojtása a legérettebb módja a probléma megelőzésének anélkül, hogy 429-et kapnánk.

429 és exponenciális visszakövetés

A 429 (sebességkorlát) egy ideiglenes és újrapróbálható hiba. A helyes válasz az, hogy vár egy ideig a kérésre, és próbálkozik újra. De az állandó várakozás nem elég; Ha mindenki egyszerre próbálkozik újra, akkor ismét eléri a korlátot. A megoldás az exponenciális visszalépés: a várakozási idő exponenciális növelése minden sikertelen próbálkozással.

# Exponenciális hátrálási logikai próba 1 → 429 → várjon 1 másodpercet próba 2 → 429 → várjon 2 másodpercet próba 3 → 429 → várjon 4 másodpercet próba 4 → 429 → várjon 8 másodpercet (+ kis véletlenszerű "jitter")... add fel, és legfeljebb N próbálkozás után jelentse be

Egy kis véletlenszerűség (jitter) hozzáadása megakadályozza, hogy a kérések ütközzenek, amikor egyidejűleg próbálkoznak újra. Ezenkívül a 429-es válasz gyakran tartalmaz egy "retry-after" fejlécet: "próbáld újra ennyi másodperc múlva". E cím tiszteletben tartása pontosabb, mint vakon várni.

Vigyázat: Ha 429-et kap, "több kérés elküldésével kényszerítve" rontja a helyzetet; A limit továbbra is betelt, és egyetlen kérés sem megy át. A helyes válasz a visszavonulás, nem a gyorsítás. Jó hír: a legtöbb hivatalos SDK automatikusan újrapróbálkozik a 429-es és a szerverhibákkal, visszalépéssel – használja az SDK-t, mielőtt manuálisan telepítené.

HTTP hibakódok osztályozása

Nem minden hiba egyforma. Kritikus megkülönböztetés: újrapróbálható, vagy kérés/identitás probléma?

kód

Jelentése

Megpróbálható újra?

helyes válasz

400

Érvénytelen kérés (formátum-/paraméterhiba)

nem

Javítsa ki a kérést; ne küldje el újra ugyanazt

401

Hitelesítési hiba (a kulcs érvénytelen/hiányzik)

nem

Fix kulcs/cím

403

Nincs jogosultság (nincs hozzáférés a modellhez/funkcióhoz)

nem

Ellenőrizze az engedélyeket/hatókört

404

Nem található (helytelen modellazonosító/végpont)

nem

Helyes modellazonosító/cím

429

Túllépték a sebességhatárt

Igen

Visszavonulás + újrapróbálkozás után

500

Szerver hiba

Igen

Próbálja újra visszavonulással

529

A szerver túlterhelt

Igen

Próbálja újra visszavonulással

Aranyszabály: 429, 500 és 529 ideiglenes; Megpróbálják újra visszavonással. 400, 401, 403, 404 kéréssel/azonossággal kapcsolatos problémák; Az újrapróbálkozás nem oldja meg, és erőfeszítéseket veszít. A kódnak különbséget kell tennie e két csoport között.

Lépésről lépésre: Tartós hívás

  1. Nyújtsa be a kérelmet. Ha sikeres, folytassa.
  2. Osztályozza a hibakódot. Megpróbálható újra?
  3. Ha kipróbálható: kövesse az újrapróbálkozást azután, alkalmazzon exponenciális visszalépést + jittert, próbálkozzon korlátozott számú alkalommal (pl. max. 5).
  4. Ha nem próbálta: Javítás (formátum/kulcs) és leállítás; Ne ismételje meg ugyanazt a hibás kérést a ciklusban.
  5. Fontolja meg a feladást. Ha n próbálkozás után sem sikerül, mutasson udvarias üzenetet a felhasználónak, és naplózza az eseményt (11-es nyomkövetési egység).

# Robusztus hívás pszeudo-codedene = 0ismétlés: válasz = request_at() if response.success: válasz visszaadása, ha a response.code a [429, 500, 529]-ben, és próbálkozzon < 5: wait = újratry_after ?? (2^próbálkozás mp + jitter) alvás(vár); próbálkozzon += 1; git újra, ha a response.code in [400, 401, 403, 404]: save_error(response); return "a kérést javítani kell" return "állandó hiba, próbálkozzon később"

# Udvarias visszajelzés a felhasználónak (amikor az újrapróbálkozások kimerültek) "Jelenleg elfoglalt vagyok, nem tudtam feldolgozni a kérését. Próbálja újra hamarosan, vagy elmentettem a kérését, visszajelzek, ha kész."

Gyenge prompt / Erős prompt (itt: hibaüzenet kialakítása)

# GYENGE (nyers hibát jelenít meg a felhasználó számára)"429-es hiba: rate_limit_error"

# ERŐS (felhasználóbarát, megnyugtató, cselekvésre utaló) "Átmeneti torlódás lépett fel a rendszerben. Kérésedet biztonságban megkaptuk, és automatikusan újra próbálkozunk. Ha pár másodpercen belül nem jelenik meg az eredmény, frissítheted az oldalt."

A nyers technikai hiba felfedése a végfelhasználó számára aláássa a bizalmat, és biztonsági rés is lehet. A hibákat belül kategorizálja, és nyugodt, cselekvésorientált üzenetet ad a felhasználónak; csak írja meg a technikai részleteket a rekordhoz.

Három mini tok

1. eset – Közlekedési robbanás következtében hajó karambolozott. Egy ügyfélszolgálati bot 429 megugrott forgalmat kapott a kampány napján; A kódban nem volt újrapróbálkozás, minden hiba közvetlenül "hibaként" jelent meg a felhasználónak. Hozzáadták az exponenciális visszakövetést + újrapróbálkozás után; azonos forgalom mellett a kérések több másodperces késéssel érkeztek, a felhasználó nem látott hibát.

2. eset – 400 kipróbálása a hurokban. Egy integráció 404-et kapott érvénytelen modellazonosító miatt, de minden hibát "tranziensként" kezelt, és újra próbálkozott egy végtelen ciklusban; A rönk megduzzadt, és szükségtelen terhelés keletkezett. Hozzáadták a hibabesorolást: a 404-et állandónak tekintik, a hurok leáll, és a modellazonosítót javítják. Tanulság: ne próbálj meg újra minden hibát.

3. eset – A limit kezelése elölről. Egy adatdúsítási feladat folyamatosan futott a 429-es korláton. Követették az x-ratelimit-maradék fejlécet, és a kvótának megfelelően lefojtották a forgalmat. Így egyenletes tempót tartottak a határ alatt, anélkül, hogy 429-et vettek volna; A munka kiszámíthatóbban és gyorsabban történt.

Gyakori hibák

  • Sebesség növelése 429-ben: Tovább rontja a helyzetet; Váltson visszavonulásra.
  • Minden hiba újrapróbálása: 400/401/404 állandó; Újbóli próbálkozás pazarlás.
  • Fix várakozás használata: Ütközést hoz létre; Exponenciális + jitter használata.
  • Az „utána próbálkozás” figyelmen kívül hagyása: A legpontosabb a szolgáltató által megadott idő betartása.
  • A nyers hiba felfedése a felhasználó előtt: Megrendíti a bizalmat, sérülékenységeket hoz létre; Osztályozd belül.
  • Korlátlan újrapróbálkozások: Állítson be felső határt (pl. 5 újrapróbálkozás); majd kecsesen adja fel.

Mélyebb: sorban állás, párhuzamosság és áramkör-megszakítók

Egyetlen vágy kitartása az első lépés; Az igazi érettség az, hogy nagyszámú kérelmet kezeljünk anélkül, hogy átlépnénk a korlátokat. Három fogalom jön itt szóba.

Sor: A kéréseket egy sorba helyezi, hogy szabályozott ütemben küldje el őket, nem pedig azonnal. A sorban állás kisimítja a hirtelen forgalomkitöréseket: Még ha egyszerre 1000 kérés érkezik is, a sor a korlát alatti sebességgel engedi el azokat. Így megakadályozza a 429-et, akkor nem kell aggódnia a javítás miatt.

Egyidejűségi korlát: Korlátozza, hogy egyszerre hány kérés legyen a levegőben. A korlátlan párhuzamos kérések gyorsan kitöltik az RPM- és TPM-korlátokat. Az ésszerű párhuzamossági plafon (pl. legfeljebb 10 egyidejű kérés) egyrészt fenntartja a korlátokat, másrészt kiszámíthatóvá teszi a rendszert.

Áramkör megszakító: Ha a szolgáltató folyamatosan 500/529-et ad vissza, ahelyett, hogy makacsul megpróbálna minden kérést, Ön egy időre "megszakítja az áramkört", és gyorsan meghiúsítja a kérést anélkül, hogy elküldené. Várakozás után kapcsolja vissza az áramkört, és próbálkozzon. Ez a minta megakadályozza a rendszer összeomlását átmeneti szolgáltatói hiba esetén.

Ez a három együtt rendszerszintű rugalmasságot biztosít az egyetlen hívás újrapróbálkozási logikáján túl. Kis léptékben elegendő az SDK automatikus újrapróbálása; A méret növekedésével a sorban állás, a párhuzamosság és a megszakító nélkülözhetetlenné válik. Mindegyiknek ugyanaz a közös célja: egy átmeneti problémát ne összeomlásként, hanem néhány másodperces láthatatlan késleltetésként tükrözze a felhasználó számára.

Összefoglalva

429 a sebességhatárok (RPM/ITPM/OTPM) túllépése esetén tér vissza; Ez egy átmeneti hiba, és újrapróbálkozik az újrapróbálkozás után és az exponenciális visszalépés + jitter használatával. 500 és 529 is ideiglenes; A 400/401/403/404 kérelem/identitásprobléma, és nem oldható meg újrapróbálkozással. Egy robusztus adatfolyam ebbe a két csoportba sorolja a hibákat, korlátozott számú alkalommal próbálkozik, elölről figyeli a határértéket, és nyugodt üzeneteket jelenít meg a felhasználónak.

Pályázati feladat

Fontolja meg az integrációját. (1) Sorolja fel azokat a hibakódokat, amelyekkel találkozhat, és válassza szét őket "újrapróbálható / állandó" kategóriákra. (2) Írja le az exponenciális visszahúzási tervet (kezdeti tartás, együttható, felső határ, jitter). (3) Adja meg az újrapróbálkozás után fejléc használatát. (4) Írja meg az udvarias üzenetet, amely megjelenik a felhasználónak, ha az újrapróbálkozások kimerültek.

ellenőrző lista

  • [ ] Meg tudom magyarázni az RPM/ITPM/OTPM határértékeket és a 429-et.
  • [ ] Alkalmazni tudom az exponenciális visszavonulás + jitter + újrapróbálkozás utáni logikáját.
  • [ ] A hibakódokat újrapróbálható/állandó kategóriába tudom sorolni.
  • [ ] Tudom, hogy nem szabad minden hibát kipróbálnunk.
  • [ ] Nyers hiba helyett nyugodt, cselekvésorientált üzenetet tudok mutatni a felhasználónak.