Табыстар:
- Жылдамдық шектеулерін (RPM/ITPM/OTPM) және 429 қатесін түсіндіре алады
- Экспоненциалды кері қайтаруды және қайталаудан кейін қайталауды жүзеге асырады
- Жалпы HTTP қате кодтарын дұрыс жіктейді және өңдейді (400/401/429/500/529)
Өндірістік ортада ешбір API барлық уақытта тамаша жауап бермейді. Кейде сіз сұрауларды тым жылдам жібересіз және шектеуге жетесіз; кейде сервер уақытша бос емес; Кейде сіздің өтінішіңіз басынан дұрыс емес. Қатты интеграцияны әуесқой әрекеттен ерекшелендіретін нәрсе - ол бұл жағдайларды болжамды және автоматты түрде өңдейді. Бұл бөлімде жылдамдық шектеулері (RPM/ITPM/OTPM), 429 қатесі, экспоненциалды кері шегініспен әрекетті қайталау және жалпы HTTP қате кодтарының дұрыс жіктелуі туралы біле аласыз. Мақсат: пайдаланушы оны ешқашан байқамайтындай берік ағын құру.
Жылдамдық шектеулері дегеніміз не?
Провайдер коммутатордың берілген уақыт кезеңінде қанша жұмыс жасай алатынын шектейді. Бұл қорғаныс; Ол инфрақұрылымды да, сізді де күтпеген шығындардан қорғайды. Жалпы шектеулердің үш түрі бар:
- RPM (Requests Per Minute): минутына сұраныс саны.
- ITPM (Input Tokens Per Minute): Минутына өңдеуге болатын енгізу таңбалауышы.
- OTPM (Output Tokens Per Minute): минутына шығарылатын шығыс таңбалауышы.
Осы шектеулердің кез келгенінен асып кетсеңіз, провайдер сұрауды қабылдамайды және 429 қате кодын қайтарады. Лимиттер әдетте тіркелгі деңгейіне (деңгейіне) байланысты өзгереді және уақыт өте келе ұлғаюы мүмкін.
Кеңес: Жауап тақырыптарынан шектеуге жақындағаныңызды көре аласыз. Көптеген провайдерлер сіздің қалған квотаны x-ratelimit-remaining-* сияқты тақырыптармен хабарлайды. Бұл мәндерді бақылау және алдыңғы трафикті азайту - 429 алмай-ақ мәселені болдырмаудың ең жетілген әдісі.
429 және Экспоненциалды ретке келтіру
429 (ставка шегі) уақытша және қайталанатын қате. Дұрыс жауап - сұрауды біраз күту және әрекетті қайталау. Бірақ үнемі күту жеткіліксіз; Егер бәрі бір уақытта әрекетті қайталаса, шегіне қайта жетеді. Шешім экспоненциалды кері қайтару болып табылады: әрбір сәтсіз әрекетпен күту уақытын экспоненциалды түрде арттыру.
# Экспоненциалды кері қайтару логикалық сынағы 1 → 429 → 1 секунд күтіңіз сынақ 2 → 429 → 2 секунд күтіңіз 3 → 429 → 4 секунд күтіңіз 4 → 429 → 8 секунд күтіңіз (+ шағын кездейсоқ «дірілдеу»)... бас тартыңыз және ең көп N сынақтан кейін есеп беріңіз
Бұған аздап кездейсоқтық (дірілдеу) қосу бір уақытта қайталау әрекеті кезінде сұраулардың соқтығысуына жол бермейді. Сонымен қатар, 429 жауабында жиі «қайталау-кейін» тақырыбы бар: «осы көп секунд ішінде қайталап көріңіз». Бұл атақты құрметтеу соқыр күткеннен гөрі дәлірек.
Абайлаңыз: 429 нөмірін алған кезде «көбірек сұрау жіберу арқылы оны мәжбүрлеу» жағдайды нашарлатады; Лимит толтыру жалғасуда және ешқандай сұраулар қабылданбайды. Дұрыс жауап - жеделдету емес, шегіну. Жақсы жаңалық: ресми SDK файлдарының көпшілігі автоматты түрде 429-ны қайталайды және сервер қателері кері қайтарылады — SDK-ның бұл әрекетін оны қолмен орнатпас бұрын пайдаланыңыз.
HTTP қате кодтарын жіктеу
Әр қателік бірдей бола бермейді. Сыни айырмашылық: оны қайталауға болады ма, әлде бұл сұрау/сәйкестік мәселесі ме?
Код
Мағынасы
Оны қайталап көруге бола ма?
дұрыс жауап
400
Жарамсыз сұрау (пішім/параметр қатесі)
жоқ
Өтінішті түзету; қайта жібермеңіз
401
Аутентификация қатесі (кілт жарамсыз/жоқ)
жоқ
Кілтті/атауды түзетіңіз
403
Рұқсат жоқ (үлгіге/мүмкіндікке рұқсат жоқ)
жоқ
Рұқсаттарды/ауқымды тексеріңіз
404
Табылмады (дұрыс үлгі идентификаторы/соңғы нүкте)
жоқ
Дұрыс үлгі идентификаторы/мекен-жайы
429
Жылдамдық шегінен асып кетті
Иә
Шегіну + кейін қайталау
500
Сервер қатесі
Иә
Қайталап көріңіз
529
Сервер шамадан тыс жүктелді
Иә
Қайталап көріңіз
Алтын ереже: 429, 500 және 529 уақытша; Қайта алу арқылы әрекеттенеді. 400, 401, 403, 404 сұрау/жеке басын куәландыратын мәселелер; Қайталап көру оны шешпейді және күш жұмсайды. Сіздің кодыңыз осы екі топты ажыратуы керек.
Қадамдық: Тұрақты қоңырау
- Өтінішті жіберіңіз. Сәтті болса, жалғастырыңыз.
- Қате кодын жіктеңіз. Оны қайталап көруге бола ма?
- Әрекет ету мүмкін болса: кейін қайталау әрекетін орындаңыз, экспоненциалды кері қайтару + дірілді қолданыңыз, шектеулі рет қолданып көріңіз (мысалы, максимум 5).
- Егер әрекет жасалмаса: Түзет (пішім/кілт) және тоқтатыңыз; Циклдегі бірдей қате сұрауды қайталамаңыз.
- Бас тартуды қарастырыңыз. Егер n әрекеттен кейін әлі де сәтсіз болса, пайдаланушыға сыпайы хабар көрсетіп, оқиғаны тіркеңіз (бақылау блогы 11).
# Мықты қоңырау псевдокодене = 0қайталау: жауап = request_at() егер answer.success: [429, 500, 529] ішінде жауап.код болса, жауапты қайтарыңыз және < 5 әрекетін орындап көріңіз: күтіңіз = қайталау_кейін ?? (2^ тырысу сек + діріл) ұйқы (күту); көріңіз += 1; git қайтадан егер [400, 401, 403, 404] ішінде жауап.код болса: save_error(жауап); қайтару "сұраныс түзетілуі керек" қайтару "тұрақты қате, кейінірек көріңіз"
# Пайдаланушыға сыпайы пікір (қайталау әрекеттері таусылғанда) "Мен қазір бос емеспін, сұрауыңызды өңдей алмадым. Әрекетті тезірек қайталаңыз, әйтпесе сұрауыңызды сақтадым, ол дайын болған кезде сізге хабарласамын."
Әлсіз шақыру / Күшті шақыру (мұнда: қате туралы хабардың дизайны)
# ӘЛСІЗ (пайдаланушыға өңделмеген қатені көрсетеді)"Қате 429: жылдамдық_шектеу_қатесі"
# КҮШТІ (пайдаланушыға ыңғайлы, тыныштандыратын, әрекетті ұсынатын) "Жүйеде уақытша кептеліс орын алды. Сұрауыңызды қауіпсіз қабылдадық және ол автоматты түрде қайталануда. Нәтиже бірнеше секунд ішінде пайда болмаса, бетті жаңартуға болады."
Түпкі пайдаланушыға өңделмеген техникалық қатені ашу сенімге нұқсан келтіреді және қауіпсіздіктің осалдығы болуы мүмкін. Қателерді ішкі санаттаңыз және пайдаланушыға тыныш, әрекетке бағытталған хабарлама беріңіз; жазбаның техникалық мәліметтерін жазыңыз.
Үш шағын корпус
1-жағдай - Қайық жолдағы жарылыс кезінде апатқа ұшырады. Тұтынушыларға қызмет көрсету боты науқан күні 429 трафикті алды; Кодта қайталау болмады, әрбір қате тікелей пайдаланушыға «қате» ретінде көрсетілді. Олар экспоненциалды ретрейсмент + қайталау-кейін қосты; бірдей трафикпен сұраулар бірнеше секундтық кідіріспен өтті, пайдаланушы ешқандай қателерді көрмеді.
2-жағдай — 400-ді циклде сынап көру. Модель идентификаторының жарамсыздығына байланысты интеграция 404-ке ие болды, бірақ барлық қателерді «өтпелі» ретінде қарастырып, шексіз циклде қайта әрекеттенді; Бөрене ісініп, қажетсіз жүктеме пайда болды. Олар қате классификациясын қосты: 404 тұрақты болып саналады, цикл тоқтатылды және модель идентификаторы түзетілді. Сабақ: әр қатені қайталап көрме.
3-жағдай — шекті алдыңғы жағынан басқару. Деректерді байыту тапсырмасы үнемі 429 шегінде орындалды. Олар x-ratelimit-қалған тақырыпты орындап, квота бойынша трафикті азайтты. Сондықтан олар ешқандай 429 секунд алмай, шектеуден сәл төмен тұрақты қарқынды сақтады; Жұмыс болжамды және тезірек орындалды.
Жалпы қателер
- 429-да жылдамдықты арттыру: Жағдайды нашарлатады; Шегінуге ауысыңыз.
- Әрбір қатені қайталау: 400/401/404 тұрақты; Қайталап көру босқа кетеді.
- Бекітілген күтуді пайдалану: соқтығысу жасайды; Экспоненциалды + діріл пайдаланыңыз.
- «Кейін қайталауды» елемеу: провайдер көрсеткен уақытты сақтау ең дұрысы.
- Пайдаланушыға өңделмеген қатені ашу: Сенімді сілкіндіреді, осалдықтарды тудырады; Ішінде жіктеу.
- Шексіз қайталау: жоғарғы шекті орнату (мысалы, 5 қайталау); содан кейін сыпайы түрде бас тартыңыз.
Тереңірек: кезек, параллельдік және автоматты ажыратқыштар
Жалғыз тілектің шыдамдылығы – алғашқы қадам; Нақты жетілу - бұл шектеулерді бұзбай, көптеген сұрауларды басқару. Бұл жерде үш ұғым пайда болады.
Кезек: Сұрауларды бірден емес, басқарылатын қарқынмен жіберу үшін кезекке қоясыз. Кезекте тұру трафиктің кенеттен пайда болуын тегістейді: 1000 сұрау бірден келсе де, кезек оларды шектен төмен жылдамдықпен босатады. Осылайша сіз 429-ға жол бермейсіз, содан кейін оны түзету туралы алаңдамайсыз.
Сәйкестік шегі: бір уақытта қанша сұраудың «ауада» болуын шектейсіз. Шексіз параллельді сұраулар RPM және TPM шектеулерін жылдам толтырады. Ақылға қонымды параллельдік төбесі (мысалы, бір мезгілде 10 сұраныстан аспауы) шектеулерді сақтайды және жүйені болжамды етеді.
Ажыратқыш: Егер провайдер 500/529 қайтара берсе, әр сұрауды үзбей орындаудың орнына, сіз біраз уақытқа «тізбекті бұзасыз» және сұрауды ешқашан жібермей-ақ тез орындамайсыз. Күтуден кейін тізбекті қайта қосып, көріңіз. Бұл үлгі провайдер уақытша істен шыққан жағдайда жүйеңіздің істен шығуына жол бермейді.
Бұл үшеуі бірге бір қоңыраудың қайталау логикасынан тыс жүйе деңгейіндегі тұрақтылықты орнатады. Шағын масштабта SDK автоматты қайта әрекеті жеткілікті; Масштаб ұлғайған сайын кезек, параллельдік және автоматты ажыратқыш қажет болады. Олардың барлығының ортақ мақсаты бар: пайдаланушыға уақытша мәселені апат ретінде емес, бірнеше секундтық көрінбейтін кідіріс ретінде көрсету.
Қысқаша айтқанда
429 жылдамдық шектеулерінен (RPM/ITPM/OTPM) асып кеткенде қайтарады; Бұл уақытша қате және кейін қайталау және экспоненциалды кері қайтару + дірілдеу арқылы қайталанатын болады. 500 және 529 да уақытша болып табылады; 400/401/403/404 - сұрау/идентификатор мәселесі және оны қайталап көру арқылы шешу мүмкін емес. Күшті ағын қателерді осы екі топқа бөледі, шектеулі рет әрекет етеді, шектеуді алдыңғы жағынан бақылайды және пайдаланушыға тыныш хабарларды көрсетеді.
Қолданбалы тапсырма
Интеграцияңызды қарастырыңыз. (1) Кездесуіңіз мүмкін қате кодтарын тізімдеңіз және оларды «қайталанатын/тұрақты» деп бөліңіз. (2) Экспоненциалды кері тарту жоспарын жазыңыз (бастапқы ұстау, коэффициент, қақпақ, діріл). (3) Қайталаудан кейін тақырыпты пайдалану жолын көрсетіңіз. (4) Қайталау әрекеттері таусылғанда пайдаланушыға көрсетілетін сыпайы хабарды жазыңыз.
бақылау парағы
- [ ] Мен RPM/ITPM/OTPM шектеулерін және 429-ды түсіндіре аламын.
- [ ] Мен экспоненциалды шегініс + діріл + қайталау логикасын қолдана аламын.
- [ ] Қате кодтарын қайталанатын/тұрақты деп жіктей аламын.
- [ ] Біз әр қателікке тырыспауымыз керек екенін білемін.
- [ ] Шикі қатенің орнына мен пайдаланушыға тыныш, әрекетке бағытталған хабарды көрсете аламын.