Mēs ierobežojām paši savus pakalpojumus
Mythex API ļauj 300 pieprasījumus minūtē no vienas tīkla adreses. Šis ierobežojums pastāv, lai aizsargātu API no viena cilvēka vai skripta, kas to bombardē. Ražošanā tas sāka atteikt mūsu pašu pakalpojumus: malas daļu, kas apkalpo publicētas lietotnes, un pakalpojumu, kas darbina AI aģentu, jo katrs no tiem sasniedz API tikai no dažām adresēm. Pieprasījumi, kas nes mūsu iekšējo akreditāciju, tagad ir atbrīvoti, un visi pārējie tiek ierobežoti tieši kā agrāk.
Simptoms
API sāka dažus mūsu pašu iekšējos izsaukumus atbildēt ar 429 Too Many Requests. Tika trāpīti trīs izsaukumu veidi, un katrs no tiem ir svarīgs kādam, kas lieto Mythex:
- Meklējot, kura lietotne atrodas pielāgotā domēnā. Kad apmeklētājs atver publicētu lietotni savā domēnā, mūsu mala jautā API, kur atrodas šī vietne. 429 tur nozīmē apmeklētāju, kas nevar sasniegt vietni.
- Saglabājot darbojošos aģenta gājienu. Kamēr aģents strādā, tā progress tiek saglabāts, kad tas notiek, lai atbilde izdzīvotu atjaunošanu vai pārtrauktu savienojumu. 429 tur nozīmē progresu, kas netika saglabāts.
- Pārbaudot piekļuvi priekšskatījumam. Priekšskatījums lietotnei, ko veido, ir aizsargāts, un vārtiņi jautā API. 429 tur nozīmē priekšskatījumu, kas neatveras.
Neviens no tiem nebija cilvēki, kas izsauca API. Visi bija mēs.
Kāpēc tas notika
Ierobežojums pēc adreses pieņem vienu pieņēmumu: viena adrese ir aptuveni viens izsaucējs. Cilvēkiem tas ir pietiekami tuvu. Mūsu pašu infrastruktūrai tas ir nopietni nepareizi.
- Malas pakalpojums, kas apkalpo publicētas lietotnes un priekšskatījumus, sasniedz API no dažām koplietotām izejošām adresēm. Katrs apmeklētājs katrai publicētai lietotnei un katra priekšskatījuma pārbaude nāk, it kā būtu no vienas no tām dažām.
- Orķestrators, pakalpojums, kas vada aģenta gājienus, sasniedz API no vienas konteinera adreses. Katrs darbojošais gājiens, katram lietotājam, dala to.
Tātad vienam cilvēkam paredzētais budžets tika sadalīts starp visu viena pakalpojuma satiksmi. Šie pakalpojumi to izlietoja kopā, un ierobežotājs darīja to, ko tam lika: atteica tos.
Labojums
Mūsu pašu pakalpojumi jau pierāda, kas tie ir. Katrs iekšējais izsaukums nes iekšējo marķieri, un katrs maršruts API iekšējā sadaļā pārbauda šo marķieri, pirms dara ko citu.
Ierobežotājs tagad izmanto to pašu pārbaudi. Pieprasījums, kura marķieris atbilst iekšējam, ir baltajā sarakstā un netiek skaitīts pret budžetu pēc adreses. Viss pārējais tiek skaitīts tieši kā agrāk: 300 pieprasījumi minūtē uz adresi.
Divas detaļas neļāva tam kļūt par caurumu:
- Nepareizs marķieris nesaņem atļauju. Baltais saraksts atbilst tikai īstajam iekšējam marķierim. Pieprasījums ar izdomātu marķieri tiek skaitīts un ierobežots kā jebkurš cits, un iekšējie maršruti to noraida ar
401 Unauthorized. - Pats ierobežojums nemainījās. Mēs neuzlikām skaitli augstāk, lai radītu vietu. To palielinot, problēma būtu paslēpta līdz brīdim, kad satiksme atkal augs, un tas būtu vājinājis aizsardzību gadījumam, kuram ierobežojums pastāv.
Mēs pārvietojām ierobežotāja iestatījumus vienā mazā funkcijā un uzrakstījām testus pret to. Viens sūta 20 pieprasījumus ar iekšējo marķieri ierobežotājam, kas ļauj 5, un sagaida, ka visi 20 izdosies. Cits sūta parastus pieprasījumus no vienas adreses un sagaida, ka pirmie pieci izdosies, bet pēc tiem tie tiks atteikti. Trešais sūta pieprasījumus ar viltotu marķieri un sagaida, ka tie tiks atteikti tādā pašā veidā.
Ko no tā guvām
- Ierobežojumiem ir pieņēmumi. „Viena adrese, viens izsaucējs“ ir iebūvēts ierobežojumā pēc adreses. Tas beidz būt patiess brīdī, kad tavi pakalpojumi atrodas aiz koplietotām adresēm, un daudzi atrodas: slodzes sadalītāji, malas tīkli, konteineri, biroja tīkli.
- Atšķiri savu satiksmi pēc identitātes, nevis adreses. Adreses ir tas, kā satiksme ierodas, nevis kas to nosūtīja. Mums jau bija akreditācija, kas pierāda, ka izsaukums ir mūsu; ierobežotājs vienkārši to neskatījās.
- Nelabo, paaugstinot skaitli. Lielāks ierobežojums būtu novērsis 429 kļūdas uz laiku, mazāk aizsargājis un atkal neizdevies vēlāk.
- Skaties, kurš tiek ierobežots. 429, kas trāpa tavam pašam pakalpojumam, ir kļūdas ziņojums par tavām robežām, nevis zīme, ka ierobežotājs strādā.
Ko tas nozīmē, ja veido uz Mythex
Nekas nav jāmaina tavā pusē. Publicētas lietotnes pielāgotos domēnos, aģenta gājieni un priekšskatījumi vairs nav atkarīgi no tā, cik aizņemts ir pārējais Mythex. Tavas lietotnes pašas satiksmes nodarbība ir tava lietotnes lieta: šeit aprakstītais ierobežojums attiecas uz mūsu API, nevis uz lietotnēm, ko publicē.
Ja tu uztur savu backend, tā pati lamatas attiecas uz jebkuru ierobežojumu, ko pievieno. Mūsu ceļveži kas ir API un drošības kontrolsaraksts AI veidotām lietotnēm ir labs sākums. Un par citu gadījumu, kad mūsu pašu infrastruktūra traucē pati sev, skat. kā panācām izvietošanu līdz nullei 502 kļūdām.