Բլոգ

Մենք սահմանափակում էինք մեր սեփական ծառայությունները

Mythex-ի API-ն թույլ է տալիս րոպեում 300 հարցում մեկ ցանցային հասցեից։ Այդ սահմանաչափը գոյություն ունի, որպեսզի պաշտպանի մեզ մեկ անձից կամ սկրիպտից, որ API-ին հարվածում է։ Արտադրության մեջ այն սկսեց մերժել մեր սեփական ծառայությունները՝ մեր եզրի այն մասը, որը սպասարկում է հրապարակված հավելվածները, և այն ծառայությունը, որը աշխատեցնում է AI agent-ը, քանի որ յուրաքանչյուրը API-ին հասնում է մի քանի հասցեից։ Ներքին բանալին կրող հարցումները այժմ բացառված են, իսկ մնացած բոլորը սահմանափակվում են ճիշտ նույն կերպ, ինչպես առաջ։

Սիմպտոմը

API-ն սկսեց որոշ ներքին զանգեր պատասխանել 429 Too Many Requests-ով։ Հարվածված էին երեք տեսակի զանգեր, և յուրաքանչյուրը կարևոր է ինչ-որ մեկի համար, ով օգտագործում է Mythex-ը․

  • Պարզել, թե որ հավելվածն է սեփական դոմեյնի վրա։ Երբ այցելուն բացում է հրապարակված հավելված իր սեփական դոմեյնով, մեր եզրը հարցնում է API-ին, թե որ կայքն է դա։ 429-ը այնտեղ նշանակում է այցելու, որը չի կարող հասնել կայքին։
  • Աշխատող agent շրջանի պահպանում։ Մինչ agent-ը աշխատում է, նրա առաջընթացը պահվում է քայլ առ քայլ, որպեսզի պատասխանը գոյատևի թարմացումը կամ ընդհատված կապը։ 429-ը այնտեղ նշանակում է առաջընթաց, որը չի պահպանվել։
  • Նախադիտման մուտքի ստուգում։ Ձեր կառուցած հավելվածի նախադիտումը պաշտպանված է, և պաշտպանությունը հարցնում է API-ին։ 429-ը այնտեղ նշանակում է նախադիտում, որը չի բացվում։

Ոչ մեկը չէր API-ին զանգող անձ։ Բոլորը մենք էինք։

Ինչու դա եղավ

Հասցեի վրա հիմնված սահմանաչափը մեկ ենթադրություն ունի․ մեկ հասցեն մոտավորապես մեկ զանգահարող է։ Մարդկանց համար դա բավականին մոտ է։ Մեր սեփական ենթակառուցվածքի համար այն վատ է սխալ․

  • Հրապարակված հավելվածներին և նախադիտումներին սպասարկող եզրային ծառայությունը API-ին հասնում է մի քանի ընդհանուր ելքային հասցեից։ Յուրաքանչյուր հրապարակված հավելվածի յուրաքանչյուր այցելու և յուրաքանչյուր նախադիտման ստուգում գալիս է այդ քիչ հասցեներից մեկից։
  • Orchestrator-ը՝ ծառայությունը, որ աշխատեցնում է agent-ի շրջանները, API-ին հասնում է մեկ կոնտեյների հասցեից։ Յուրաքանչյուր աշխատող շրջան, յուրաքանչյուր օգտվողի համար, կիսում է այն։

Ուստի մեկ անձի համար նախատեսված բյուջեն բաժանվում էր ամբողջ ծառայության բոլոր հարցումների վրա։ Այդ ծառայությունները միասին սպառում էին այն, և սահմանափակիչը արեց այն, ինչ նրան ասված էր․ մերժեց նրանց։

Շտկումը

Մեր սեփական ծառայություններն արդեն ապացուցում են, թե ով են։ Յուրաքանչյուր ներքին զանգ կրում է ներքին նշան, և API-ի ներքին բաժնի յուրաքանչյուր երթուղի ստուգում է այդ նշանը, նախքան որևէ բան անելը։

Սահմանափակիչն այժմ օգտագործում է նույն ստուգումը։ Այն հարցումը, որի նշանը համընկնում է ներքինի հետ, գտնվում է թույլատրելի ցուցակում և չի հաշվվում մեկ հասցեի բյուջեի դեմ։ Մնացած ամեն ինչ հաշվվում է ճիշտ այնպես, ինչպես առաջ․ 300 հարցում րոպեում մեկ հասցեից։

Երկու մանրամասն թույլ չտվեց սա դառնալ անցք․

  1. Սխալ նշանը անցում չի ստանում։ Թույլատրելի ցուցակը համապատասխանում է միայն իրական ներքին նշանին։ Կեղծ նշանով հարցումը հաշվվում և սահմանափակվում է ինչպես ցանկացած այլ, և ներքին երթուղիները այն մերժում են 401 Unauthorized-ով։
  2. Սահմանաչափը ինքը չփոխվեց։ Թիվը չբարձրացրինք, որ տեղ ստեղծենք։ Բարձրացնելը սխալը կթաքցներ, մինչև երթևեկությունը նորից աճեր, և թուլացներ պաշտպանությունը այն դեպքի համար, որի համար գոյություն ունի սահմանաչափը։

Սահմանաչափի կարգավորումները տեղափոխեցինք մեկ փոքր ֆունկցիայի մեջ և գրեցինք թեստեր նրա դեմ։ Մեկը ուղարկում է 20 հարցում ներքին նշանով սահմանաչափի դեմ, որը թույլ է տալիս 5-ը, և սպասում է, որ բոլոր 20-ը հաջողվի։ Մյուսը մեկ հասցեից սովորական հարցումներ է ուղարկում և սպասում, որ առաջին հինգը հաջողվեն, իսկ հետո եկողները մերժվեն։ Երրորդը կեղծ նշանով հարցումներ է ուղարկում և սպասում, որ դրանք նույն կերպ մերժվեն։

Ինչ սովորեցինք

  • Սահմանաչափերը ենթադրություններ են պարունակում։ «Մեկ հասցե, մեկ զանգահարող» ներկառուցված է հասցեի վրա հիմնված սահմանաչափի մեջ։ Այն դադարում է ճիշտ լինել, հենց որ ձեր սեփական ծառայությունները գտնվում են ընդհանուր հասցեների հետևում, և շատերը այդպիսին են՝ load balancer-ներ, եզրային ցանցեր, կոնտեյներներ, գրասենյակային ցանցեր։
  • Տարբերեք ձեր սեփական երթևեկությունը ինքնությամբ, ոչ հասցեով։ Հասցեները այն են, թե ինչպես է երթևեկությունը գալիս, ոչ թե ով է ուղարկել այն։ Արդեն ունեինք նշան, որ ապացուցում է, որ զանգը մերն է․ սահմանափակիչը պարզապես դա չէր նայում։
  • Մի շտկեք թիվը բարձրացնելով։ Ավելի մեծ սահմանաչափը 429-երը կվերացներ որոշ ժամանակով, պաշտպանությունը կթուլացներ, և ավելի ուշ նորից կձախողվեր։
  • Նայեք, թե ով է սահմանափակվում։ 429, որ հասնում է ձեր սեփական ծառայությանը, սխալի հաղորդում է ձեր սահմանաչափերի մասին, ոչ թե նշան, որ սահմանափակիչը աշխատում է։

Ինչ նշանակում է սա, եթե կառուցում եք Mythex-ի վրա

Ձեր կողմից փոխելու ոչինչ չկա։ Հրապարակված հավելվածները սեփական դոմեյններով, agent-ի շրջանները և նախադիտումները այլևս կախված չեն նրանից, թե որքան զբաղված է մնացած Mythex-ը։ Ձեր հավելվածի սեփական երթևեկությունը ձեր հավելվածի գործն է․ այստեղ նկարագրված սահմանաչափը մեր API-ի վրա է, ոչ թե այն հավելվածների, որոնք դուք հրապարակում եք։

Եթե դուք սեփական backend եք աշխատեցնում, նույն թակարդը վերաբերում է ցանկացած սահմանաչափի, որ ավելացնում եք։ Մեր ուղեցույցները՝ ինչ է API-ն և AI-ով կառուցված հավելվածների անվտանգության ստուգաթերթը, լավ սկիզբ են։ Իսկ մեր սեփական ենթակառուցվածքի մեկ այլ դեպքի համար, երբ այն ինքն իրեն խանգարում է, տե՛ս ինչպես հասանք զրո 502 սխալի deploy-ներին։

Mythex · Pricing · Կառուցեք ամեն ինչ AI-ով · Կաղապարներ կայքերի և հավելվածների համար · Mythex-ի համեմատությունները · AI-ով հավելվածների ստեղծման բառարան · Անվճար գործիքներ AI-ով հավելվածներ ստեղծելու համար · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)