Blog

Sami smo ograničavali vlastite servise

Mythex API dopušta 300 zahtjeva u minuti s jedne mrežne adrese. To ograničenje postoji da nas zaštiti od jedne osobe ili skripte koja bombardira API. U produkciji je počelo odbijati naše vlastite servise: dio našeg edgea koji poslužuje objavljene aplikacije i servis koji pokreće AI agenta, jer svaki od njih pristupa API-ju s tek nekoliko adresa. Zahtjevi koji nose naš interni token sada su izuzeti, a svi ostali su ograničeni točno kao prije.

Simptom

API je počeo neke od naših internih poziva odgovarati s 429 Too Many Requests. Pogođene su tri vrste poziva, a svaka je važna nekome tko koristi Mythex:

  • Traženje koja aplikacija živi na prilagođenoj domeni. Kad posjetitelj otvori objavljenu aplikaciju na njezinoj vlastitoj domeni, naš edge pita API gdje je ta stranica. 429 tu znači posjetitelja koji ne može doći do stranice.
  • Spremanje izvođenja agenta u tijeku. Dok agent radi, njegov napredak se sprema kako ide, pa odgovor preživi osvježavanje ili prekinutu vezu. 429 tu znači napredak koji nije spremljen.
  • Provjera pristupa pregledu. Pregled aplikacije koju gradite je zaštićen, a zaštita pita API. 429 tu znači pregled koji se ne može otvoriti.

Nijedan od tih poziva nije dolazio od ljudi. Svi su dolazili od nas.

Zašto se to dogodilo

Ograničenje po adresi polazi od jedne pretpostavke: jedna adresa je otprilike jedan pozivatelj. Za ljude je to dovoljno blizu. Za našu vlastitu infrastrukturu to je ozbiljno pogrešno.

  • Edge servis koji poslužuje objavljene aplikacije i preglede prema API-ju izlazi kroz nekoliko zajedničkih izlaznih adresa. Svaki posjetitelj svake objavljene aplikacije i svaka provjera pregleda dolazi kao da je došao s jedne od tih nekoliko.
  • Orkestrator, servis koji pokreće izvođenja agenta, prema API-ju pristupa s jedne adrese kontejnera. Svako izvođenje u tijeku, za svakog korisnika, dijeli tu adresu.

Proračun predviđen za jednu osobu tako se dijelio na sav promet cijelog servisa. Ti servisi su ga zajedno potrošili, a ograničivač je učinio što mu je rečeno: odbio ih je.

Popravak

Naši vlastiti servisi već dokazuju tko su. Svaki interni poziv nosi interni token, a svaka ruta pod internim dijelom API-ja provjerava taj token prije nego što išta učini.

Ograničivač sada koristi istu provjeru. Zahtjev čiji se token podudara s internim nalazi se na popisu dopuštenih i ne broji se u proračunu po adresi. Sve ostalo se broji točno kao prije: 300 zahtjeva u minuti po adresi.

Dva detalja su spriječila da to postane rupa:

  1. Krivi token ne dobiva prolaz. Popis dopuštenih podudara se samo s pravim internim tokenom. Zahtjev s izmišljenim tokenom broji se i ograničava kao i svaki drugi, a interne rute ga i dalje odbijaju s 401 Unauthorized.
  2. Sam limit se nije promijenio. Nismo podigli broj da napravimo mjesta. Podizanje bi sakrilo problem dok promet opet ne naraste, a oslabilo bi zaštitu za slučaj zbog kojeg ograničenje postoji.

Postavke ograničivača premjestili smo u jednu malu funkciju i napisali testove za nju. Jedan šalje 20 zahtjeva s internim tokenom ograničivaču postavljenom na 5 i očekuje da sva 20 uspiju. Drugi šalje obične zahtjeve s jedne adrese i očekuje da prvih pet uspije, a oni nakon toga budu odbijeni. Treći šalje zahtjeve s krivotvorenim tokenom i očekuje da budu odbijeni na isti način.

Što smo iz toga izvukli

  • Ograničenja nose pretpostavke. „Jedna adresa, jedan pozivatelj” ugrađeno je u ograničenje po adresi. Prestaje biti istina čim se vaši vlastiti servisi nađu iza zajedničkih adresa, a mnogi se nalaze: load balanceri, edge mreže, kontejneri, uredske mreže.
  • Svoj promet razlikujte po identitetu, a ne po adresi. Adrese govore kako promet stiže, a ne tko ga je poslao. Već smo imali vjerodajnicu koja dokazuje da je poziv naš; ograničivač je samo nije gledao.
  • Ne rješavajte to podizanjem broja. Veći limit bi na neko vrijeme uklonio 429 greške, zaštitio manje i opet zakazao kasnije.
  • Gledajte koga ograničavate. 429 koji pogodi vlastiti servis je prijava greške o vašim limitima, a ne znak da ograničivač radi.

Što to znači ako gradite na Mythexu

Na vašoj strani ništa ne treba mijenjati. Objavljene aplikacije na prilagođenim domenama, izvođenja agenta i pregledi više ne ovise o tome koliko je ostatak Mythexa zauzet. Promet vaše aplikacije stvar je vaše aplikacije: ograničenje opisano ovdje odnosi se na naš API, a ne na aplikacije koje objavljujete.

Ako vodite vlastiti backend, ista zamka vrijedi za svako ograničenje koje sami dodate. Naši vodiči o tome što je API i sigurnosni kontrolni popis za aplikacije izrađene uz AI dobro su mjesto za početak. A za još jedan slučaj u kojem nam je vlastita infrastruktura smetala, pogledajte kako smo došli do nula 502 grešaka pri deployu.

Mythex · Pricing · Izradite bilo što uz AI · Predlošci za web stranice i aplikacije · Mythex u usporedbi · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी 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 简体中文 繁體中文(香港) 繁體中文(台灣)