Birlik 8 / 11

Tezlik chegaralari va barqaror xatolarni boshqarish

Daromadlar:

  • Tezlik chegaralarini (RPM/ITPM/OTPM) va 429 xatoliklarni sharhlay oladi
  • Eksponensial orqaga qaytishni amalga oshiradi va qayta urinib ko'rishdan keyin qayta urinib ko'radi
  • Umumiy HTTP xato kodlarini to'g'ri tasniflaydi va boshqaradi (400/401/429/500/529)

Ishlab chiqarish muhitida hech qanday API har doim mukammal javob bermaydi. Ba'zan siz so'rovlarni juda tez yuborasiz va chegaraga borasiz; ba'zan server vaqtincha band bo'ladi; Ba'zan sizning so'rovingiz boshidan noto'g'ri. Qattiq integratsiyani havaskor tashabbusdan ajratib turadigan narsa shundaki, u bu vaziyatlarni bashoratli va avtomatik tarzda hal qiladi. Ushbu bo'limda siz tezlik chegaralari (RPM/ITPM/OTPM), 429 xato, eksponensial orqaga qaytish bilan qayta urinib ko'rish va umumiy HTTP xato kodlarining to'g'ri tasnifi haqida bilib olasiz. Maqsad: foydalanuvchi hech qachon sezmaydigan darajada mustahkam oqim yaratish.

Tezlik chegaralari nima?

Provayder ma'lum bir vaqt oralig'ida kommutator qancha ishni bajarishi mumkinligini cheklaydi. Bu himoya; Bu infratuzilmani ham, sizni ham to'satdan portlashlardan himoya qiladi. Cheklovlarning uchta keng tarqalgan turi mavjud:

  • RPM (Requests Per Minute): Daqiqada so'rovlar soni.
  • ITPM (Input Tokens Per Minute): Bir daqiqada qayta ishlanishi mumkin bo'lgan kirish tokeni.
  • OTPM (Output Tokens Per Minute): Bir daqiqada ishlab chiqarilishi mumkin bo'lgan chiqish tokeni.

Agar siz ushbu chegaralardan birortasini oshib ketsangiz, provayder so'rovni rad etadi va 429 xato kodini qaytaradi. Limitlar odatda hisob darajangizga (darajasiga) qarab farqlanadi va vaqt o'tishi bilan oshirilishi mumkin.

Maslahat: Siz chegaraga yaqinlashayotganingizni javob sarlavhalaridan kuzatishingiz mumkin. Aksariyat provayderlar sizning qolgan kvotangizni x-ratelimit-remaining-* kabi sarlavhalar bilan bildiradi. Ushbu qiymatlarni kuzatib borish va olddagi tirbandlikni kamaytirish 429 ni olmasdan muammoning oldini olishning eng etuk usulidir.

429 va eksponensial orqaga qaytish

429 (stavka chegarasi) - bu vaqtinchalik va qayta urinib ko'rish mumkin bo'lgan xato. To'g'ri javob so'rovni biroz kutish va qayta urinib ko'rishdir. Ammo doimiy kutish etarli emas; Agar hamma bir vaqtning o'zida yana urinib ko'rsa, chegara yana erishiladi. Yechim eksponentsial orqaga qaytishdir: har bir muvaffaqiyatsiz urinishda kutish vaqtini eksponent ravishda oshirish.

# Eksponensial orqaga qaytish mantiqiy sinovi 1 → 429 → 1 soniya kuting sinov 2 → 429 → 2 soniya kuting 3 → 429 → 4 soniya kuting sinov 4 → 429 → 8 soniya kuting (+ kichik tasodifiy "jitter")... taslim bo'ling va ko'pi bilan N sinovdan keyin hisobot bering

Bunga bir oz tasodifiylik (jitter) qo'shilishi, bir vaqtning o'zida qayta urinishda so'rovlarning to'qnashuvini oldini oladi. Bundan tashqari, 429-javobda ko'pincha "qayta urinishdan keyin" sarlavhasi mavjud: "ko'p soniyalarda qayta urinib ko'ring". Bu nomni hurmat qilish ko'r-ko'rona kutishdan ko'ra to'g'riroqdir.

Diqqat: 429-ni olganingizda, "ko'proq so'rov yuborish orqali uni majburlash" vaziyatni yomonlashtiradi; Limit to'ldirilishda davom etmoqda va hech qanday so'rov o'tkazilmaydi. To'g'ri javob tezlashish emas, balki chekinishdir. Yaxshi yangilik: ko'pgina rasmiy SDKlar avtomatik ravishda 429 ni qaytadan urinib ko'radi va server xatolarini orqaga qaytarish - qo'lda o'rnatishdan oldin SDK ning ushbu xatti-harakatlaridan foydalaning.

HTTP xato kodlarini tasniflash

Har bir xato bir xil emas. Muhim farq: qayta urinib ko'rish mumkinmi yoki bu so'rov/identifikatsiya muammosimi?

Kod

Ma'nosi

Uni yana sinab ko'rish mumkinmi?

to'g'ri javob

400

Noto'g'ri so'rov (format/parametr xatosi)

yo'q

So'rovni to'g'rilash; boshqa yubormang

401

Autentifikatsiya xatosi (kalit noto‘g‘ri/yo‘q)

yo'q

Kalit/sarlavhani tuzatish

403

Avtorizatsiya yo'q (modelga/xususiyatga kirish imkoni yo'q)

yo'q

Ruxsatlarni/ko'lamni tekshiring

404

Topilmadi (noto'g'ri model identifikatori/oxirgi nuqta)

yo'q

To'g'ri model ID/manzil

429

Tezlik chegarasidan oshib ketdi

Ha

Orqaga chekinish + keyin qayta urinish

500

Server xatosi

Ha

Orqaga qaytish bilan qayta urinib ko'ring

529

Server haddan tashqari yuklangan

Ha

Orqaga qaytish bilan qayta urinib ko'ring

Oltin qoida: 429, 500 va 529 vaqtinchalik; Olib tashlash bilan yana urinib ko'riladi. 400, 401, 403, 404 - so'rov/identifikatsiya masalalari; Qayta urinish muammoni hal qilmaydi va kuch sarflaydi. Sizning kodingiz ushbu ikki guruhni farqlashi kerak.

Bosqichma-bosqich: Bardoshli qo'ng'iroq

  1. So'rovni yuboring. Muvaffaqiyatli bo'lsa, davom eting.
  2. Xato kodini tasniflang. Uni yana sinab ko'rish mumkinmi?
  3. Agar sinash mumkin bo'lsa: keyin qayta urinib ko'ring, eksponensial orqaga qaytish + jitterni qo'llang, cheklangan miqdordagi marta urinib ko'ring (masalan, maksimal 5).
  4. Agar sinab ko'rilmasa: Tuzatish (format/kalit) va to'xtating; Loopda bir xil noto'g'ri so'rovni takrorlamang.
  5. Taslim bo'lishni o'ylab ko'ring. Agar n ta urinishdan keyin ham muvaffaqiyatsiz bo'lsa, foydalanuvchiga xushmuomalalik bilan xabar ko'rsating va voqeani qayd qiling (kuzatuv bloki 11).

# Sog'lom qo'ng'iroq pseudo-codenene = 0repeat: response = request_at() if answer.success: Agar javob.code [429, 500, 529] da javob qaytaring va < 5 urinib ko'ring: kutib turing = qayta urinib ko'ring ?? (2^ harakat sek + jitter) uyqu (kutish); harakat qilib ko'ring += 1; git yana agar javob.kod [400, 401, 403, 404] da bo'lsa: save_error(response); "so'rov tuzatilishi kerak" qaytish "doimiy xatolik, keyinroq urinib ko'ring"

# Foydalanuvchiga muloyim fikr-mulohaza (qayta urinishlar tugagach) "Men hozir bandman, so‘rovingizni ko‘rib chiqa olmadim. Tez orada qayta urinib ko‘ring, aks holda so‘rovingizni saqlab qoldim, tayyor bo‘lgach, sizga javob beraman."

Zaif taklif / Kuchli taklif (bu erda: xato xabari dizayni)

# WEAK (foydalanuvchiga xom xatoni ko'rsatadi)"Xato 429: tarif_chegarasi_xatosi"

# KUCHLI (foydalanuvchilar uchun qulay, ishontiruvchi, harakatni taklif qiluvchi) "Tizimda vaqtinchalik tiqilinch yuzaga keldi. So‘rovingizni xavfsiz qabul qildik va u avtomatik ravishda qaytadan urinilmoqda. Agar bir necha soniya ichida natija chiqmasa, sahifani yangilashingiz mumkin."

Xom texnik xatoni oxirgi foydalanuvchiga oshkor qilish ishonchni pasaytiradi va xavfsizlik zaifligi bo'lishi mumkin. Xatolarni ichki toifalarga ajrating va foydalanuvchiga xotirjam, harakatga yo'naltirilgan xabar bering; faqat rekord uchun texnik tafsilotini yozing.

Uchta mini korpus

1-holat - Qayiq portlashda halokatga uchradi. Mijozlarga xizmat ko'rsatish boti aksiya kunida 429 ta traffikni qabul qildi; Kodda qayta urinish yo'q edi, har bir xato to'g'ridan-to'g'ri foydalanuvchiga "xato" sifatida aks ettirildi. Ular eksponensial retracement + qayta urinishdan keyin qo'shdilar; bir xil trafik bilan, so'rovlar bir necha soniya kechikish bilan o'tdi, foydalanuvchi hech qanday xato ko'rmadi.

2-holat - Loopda 400 ni sinab ko'rish. Integrasiya yaroqsiz model identifikatori tufayli 404 ni oldi, lekin barcha xatolarni “o‘tkinchi” deb hisobladi va cheksiz tsiklda qayta urinib ko‘rdi; Jurnal shishib ketdi va keraksiz yuk yaratildi. Ular xato tasnifini qo'shdilar: 404 doimiy hisoblanadi, pastadir to'xtatiladi va model identifikatori tuzatiladi. Dars: har bir xatoga qayta urinmang.

3-holat - chegarani old tomondan boshqarish. Ma'lumotni boyitish ishi doimiy ravishda 429 chegarasida ishlayotgan edi. Ular x-ratelimit-qolgan sarlavhaga ergashdilar va kvota bo'yicha trafikni to'xtatdilar. Shunday qilib, ular 429 soniyani olmasdan, chegaradan biroz pastroqda barqaror sur'atni saqlab qolishdi; Ish yanada bashoratli va tezroq bajarildi.

Umumiy xatolar

  • 429-da tezlikni oshirish: Vaziyatni yomonlashtiradi; Orqaga qaytish.
  • Har bir xatoni qaytadan urinish: 400/401/404 doimiy; Qayta urinish behuda.
  • Ruxsat etilgan kutishdan foydalanish: To'qnashuvni yaratadi; Eksponensial + jitterdan foydalaning.
  • "Qayta urinish" ga e'tibor bermaslik: provayder tomonidan belgilangan vaqtga rioya qilish eng to'g'ri hisoblanadi.
  • Xom xatoni foydalanuvchiga oshkor qilish: ishonchni silkitadi, zaifliklarni yaratadi; Ichkarida tasniflash.
  • Cheksiz takroriy urinishlar: Yuqori chegarani belgilang (masalan, 5 marta urinish); keyin xushmuomalalik bilan taslim bo'ling.

Chuqurroq: navbat, parallellik va o'chirish to'xtatuvchilari

Bitta istakning chidamliligi birinchi qadamdir; Haqiqiy etuklik ko'p sonli so'rovlarni chegaralarga tegmasdan boshqarishdir. Bu erda uchta tushuncha o'ynaydi.

Navbat: Siz so'rovlarni darhol emas, balki boshqariladigan tezlikda yuborish uchun navbatga qo'yasiz. Navbatda turish to'satdan tirbandliklarni yumshatadi: bir vaqtning o'zida 1000 ta so'rov kelib tushsa ham, navbat ularni chegaradan past tezlikda chiqaradi. Shunday qilib, siz 429 ni oldini olasiz, keyin uni tuzatish haqida tashvishlanishingiz shart emas.

Parametrlar chegarasi: Siz bir vaqtning o'zida qancha so'rov "havoda" bo'lishini cheklaysiz. Cheksiz parallel so'rovlar RPM va TPM chegaralarini tezda to'ldiradi. O'rtacha bir vaqtning o'zida bir vaqtning o'zida so'rovlar (masalan, 10 dan ortiq bo'lmagan so'rovlar) chegaralarni saqlaydi va tizimni oldindan aytib bo'ladigan qiladi.

O'chirish to'xtatuvchisi: Agar provayder 500/529 ni qaytarishda davom etsa, har bir so'rovni qat'iyat bilan sinab ko'rish o'rniga, siz bir muncha vaqt "sxemani buzasiz" va so'rovni hech qachon jo'natmasdan tezda bajarilmaydi. Biroz kutgandan so'ng, siz kontaktlarning zanglashiga olib kiring va harakat qilib ko'ring. Ushbu naqsh provayder vaqtinchalik ishlamay qolganda tizimingiz ishdan chiqishini oldini oladi.

Bu uchtasi birgalikda bitta qo'ng'iroqning qayta urinish mantig'idan tashqari tizim darajasidagi barqarorlikni o'rnatadilar. Kichik miqyosda SDK ning avtomatik qayta urinishi yetarli; O'lchov o'sishi bilan navbat, parallellik va o'chirgich ajralmas holga keladi. Ularning barchasi bir xil umumiy maqsadga ega: foydalanuvchiga vaqtinchalik muammoni avariya sifatida emas, balki bir necha soniya ko'rinmas kechikish sifatida aks ettirish.

Xulosa

429 tezlik chegaralari (RPM/ITPM/OTPM) oshib ketganda qaytadi; Bu vaqtinchalik xato va u qayta urinishdan keyin va eksponensial orqaga qaytish + jitter yordamida qayta uriniladi. 500 va 529 ham vaqtinchalik; 400/401/403/404 - bu soʻrov/identifikatsiya muammosi va uni qayta urinib hal qilib boʻlmaydi. Kuchli oqim xatolarni ushbu ikki guruhga ajratadi, cheklangan miqdordagi urinib ko'radi, chegarani old tomondan kuzatib boradi va foydalanuvchiga xotirjam xabarlarni ko'rsatadi.

Ilova vazifasi

Integratsiyangizni ko'rib chiqing. (1) Siz duch kelishi mumkin bo'lgan xato kodlarini sanab o'ting va ularni "qayta sinab ko'rish mumkin / doimiy" ga ajrating. (2) Eksponensial orqaga tortish rejangizni yozing (dastlabki ushlab turish, koeffitsient, qopqoq, jitter). (3) Qayta urinishdan keyin sarlavhadan qanday foydalanishni belgilang. (4) Qayta urinishlar tugagach, foydalanuvchiga ko'rsatiladigan muloyim xabarni yozing.

nazorat ro'yxati

  • [ ] Men RPM/ITPM/OTPM chegaralarini va 429 ni tushuntira olaman.
  • [ ] Men eksponensial chekinish + jitter + qayta urinishdan keyin mantiqni qo'llashim mumkin.
  • [ ] Men xato kodlarini qayta uriniladigan/doimiy deb tasniflashim mumkin.
  • [ ] Men har bir xatoni sinab ko'rmasligimiz kerakligini bilaman.
  • [ ] Xom xato oʻrniga men foydalanuvchiga xotirjam, harakatga yoʻnaltirilgan xabarni koʻrsatishim mumkin.