Sami smo ograničavali naše vlastite servise
Mythex API dozvoljava 300 zahtjeva u minuti s jedne mrežne adrese. To ograničenje postoji da nas zaštiti od jedne osobe ili skripte koja bombarduje API. U produkciji je počelo odbijati naše vlastite servise, dio našeg edgea koji služi objavljene aplikacije i servis koji pokreće AI agenta, jer svaki od njih dolazi do API-ja sa samo nekoliko adresa. Zahtjevi koji nose naš interni kredencijal sada su izuzeti, a svi ostali su ograničeni tačno kao i prije.
Simptom
API je počeo neke naše interne pozive odgovarati s 429 Too Many Requests. Pogođene su bile tri vrste poziva, a svaka je važna nekome ko koristi Mythex:
- Traženje koja aplikacija živi na prilagođenom domenu. Kada posjetilac otvori objavljenu aplikaciju na njenom vlastitom domenu, naš edge pita API gdje je taj sajt. 429 tu znači posjetioca koji ne može doći do sajta.
- Čuvanje aktivnog turn-a agenta. Dok agent radi, njegov napredak se čuva dok ide, pa odgovor preživi osvježavanje ili prekinutu konekciju. 429 tu znači napredak koji nije sačuvan.
- Provjera pristupa previewu. Preview aplikacije koju gradite je zaštićen, a zaštita pita API. 429 tu znači preview koji se ne otvara.
Nijedan od ovih poziva nije došao od ljudi. Svi su dolazili od nas.
Zašto se to dogodilo
Ograničenje po adresi pravi jednu pretpostavku: jedna adresa je otprilike jedan pozivalac. Za ljude to je dovoljno blizu. Za našu vlastitu infrastrukturu to je jako pogrešno.
- Edge servis koji služi objavljene aplikacije i preview-e dolazi do API-ja s nekoliko zajedničkih odlaznih adresa. Svaki posjetilac svake objavljene aplikacije i svaka provjera previewa dolazi kao da je došao s jedne od tih nekoliko.
- Orkestrator, servis koji pokreće turn-ove agenta, dolazi do API-ja s jedne adrese kontejnera. Svaki aktivni turn, za svakog korisnika, dijeli je.
Tako je budžet namijenjen jednoj osobi bio raspoređen na sav saobraćaj cijelog servisa. Ti servisi su ga zajedno potrošili, a ograničivač je radio ono što mu je rečeno: odbio ih je.
Popravka
Naši vlastiti servisi već dokazuju ko su. Svaki interni poziv nosi interni token, a svaka ruta pod internim dijelom API-ja provjerava taj token prije nego što uradi bilo šta.
Ograničivač sada koristi istu provjeru. Zahtjev čiji se token poklapa s internim nalazi se na listi dozvoljenih i ne broji se u budžetu po adresi. Sve ostalo se broji tačno kao i prije: 300 zahtjeva u minuti po adresi.
Dva detalja su spriječila da ovo postane rupa:
- Pogrešan token ne dobija propusnicu. Lista dozvoljenih poklapa samo pravi interni token. Zahtjev s izmišljenim tokenom se broji i ograničava kao i svaki drugi, a interne rute ga i dalje odbijaju s
401 Unauthorized. - Sam limit se nije promijenio. Nismo podigli broj da bismo napravili mjesta. Podizanje bi sakrilo problem dok se saobraćaj ponovo ne poveća, i oslabilo zaštitu za slučaj zbog kojeg limit postoji.
Podešavanja ograničivača prebacili smo u jednu malu funkciju i napisali testove nad njom. Jedan šalje 20 zahtjeva s internim tokenom ograničivaču podešenom da dozvoli 5, i očekuje da svih 20 uspije. 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 falsifikovanim tokenom i očekuje da budu odbijeni na isti način.
Šta smo iz toga izvukli
- Limiti nose pretpostavke. „Jedna adresa, jedan pozivalac“ ugrađeno je u ograničenje po adresi. Prestaje biti tačno čim se vaši vlastiti servisi nađu iza zajedničkih adresa, a mnogi jesu: load balanceri, edge mreže, kontejneri, kancelarijske mreže.
- Razlikujte vlastiti saobraćaj po identitetu, a ne po adresi. Adrese su način na koji saobraćaj stiže, a ne ko ga je poslao. Već smo imali kredencijal koji dokazuje da je poziv naš; ograničivač ga jednostavno nije gledao.
- Ne rješavajte to podizanjem broja. Veći limit bi na neko vrijeme uklonio 429 greške, zaštitio bi manje i ponovo bi pao kasnije.
- Pogledajte koga ograničavate. 429 koji pogodi vaš vlastiti servis je izvještaj o grešci u vašim limitima, a ne znak da ograničivač radi.
Šta to znači ako gradite na Mythexu
Ništa ne morate mijenjati na svojoj strani. Objavljene aplikacije na prilagođenim domenima, turn-ovi agenta i previewi više ne zavise od toga koliko je ostatak Mythexa zauzet. Saobraćaj vaše aplikacije je stvar vaše aplikacije: limit opisan ovdje je na našem API-ju, a ne na aplikacijama koje objavljujete.
Ako vodite vlastiti backend, ista zamka važi za svaki rate limit koji dodate. Naši vodiči o šta je API i sigurnosnoj listi za aplikacije izrađene uz AI dobro su mjesto za početak. A za još jedan slučaj u kojem nam je sopstvena infrastruktura stajala na putu, pogledajte kako smo došli do nula 502 grešaka pri deployu.