Kako implementirati API throttling?

Jan 01, 2026

Ostavi poruku

Hej tamo! Kao dobavljač API-ja, bio sam u igri već neko vrijeme, a jedan od najvažnijih aspekata uspješnog pokretanja API usluge je implementacija prigušivanja API-ja. U ovom postu na blogu, podijelit ću s vama kako efikasno implementirati API prigušivanje.

Šta je API Throttling?

Prvo, hajde da razgovaramo o tome šta je API prigušivanje. Prigušivanje API-ja je tehnika koja se koristi za kontrolu brzine kojom klijenti mogu pristupiti API-ju. Postavlja ograničenja na broj zahtjeva koje klijent može uputiti u određenom vremenskom okviru. Ovo pomaže u sprečavanju zloupotrebe, zaštiti resursa servera i osigurava poštenu upotrebu za sve korisnike.

Zašto je važno prigušivanje API-ja?

Postoji nekoliko razloga zašto je prigušivanje API-ja važno. Za početak, pomaže u sprečavanju napada uskraćivanja usluge (DoS). Zlonamjerni korisnici mogu pokušati preplaviti vaš API zahtjevima za preopterećenje vaših servera i poremetiti vašu uslugu. Prigušivanje ograničava broj zahtjeva koje mogu uputiti, što im otežava izvođenje takvih napada.

Drugo, osigurava da se resursi vašeg servera koriste efikasno. Ako imate veliki broj klijenata koji istovremeno postavljaju prekomjerne zahtjeve, vaši serveri bi mogli biti preopterećeni, što bi dovelo do sporog vremena odgovora ili čak do pada. Prigušivanjem zahtjeva možete upravljati opterećenjem na vašim serverima i održavati vaš API neometano funkcionisanje.

Konačno, promoviše poštenu upotrebu među svim klijentima. Bez prigušenja, neki klijenti bi mogli monopolizirati vaše API resurse, ostavljajući druge sa lošim performansama. Prigušivanje osigurava da svaki klijent dobije pravičan dio raspoloživih resursa.

Kako implementirati prigušivanje API-ja

1. Token Bucket Algoritam

Jedan od najpopularnijih algoritama za prigušivanje API-ja je algoritam token bucket-a. Evo kako to funkcionira:

Zamislite da imate kantu koja može držati određeni broj žetona. Svaki token predstavlja zahtjev koji klijent može uputiti. U redovnim intervalima, novi tokeni se dodaju u korpu do njenog maksimalnog kapaciteta. Kada klijent uputi zahtjev, on mora "potrošiti" token iz kante. Ako nema preostalih tokena u kanti, zahtjev se ili odbija ili stavlja u red dok token ne postane dostupan.

Evo jednostavnog Python - poput pseudokoda za implementaciju algoritma token bucket:

Fenofibrate丨CAS 49562-28-9Hydrocortisone Acetate丨CAS 50-03-3

class TokenBucket: def __init__(self, kapacitet, stopa): self.capacity = kapacitet self.rate = rate self.tokens = kapacitet self.last_update = time.time() def get_tokens(self): sada = time.time() # Izračunajte broj tokena dodatih od posljednjeg ažuriranja new_tokensa = (sada - selfrate) min(self.capacity, self.tokens + new_tokens) self.last_update = sada vrati self.tokens def consume(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False

u ovom kodu,kapacitetje maksimalni broj tokena koje bucket može držati, istopaje stopa po kojoj se novi tokeni dodaju u kantu u sekundi.

2. Algoritam fiksnog prozora

Algoritam fiksnog prozora je još jedan jednostavan način za implementaciju API prigušivanja. Ovim algoritmom vrijeme dijelite na fiksne intervale (npr. svaki minut ili svaki sat). Za svaki interval pratite broj zahtjeva koje je klijent napravio. Ako broj zahtjeva premašuje unaprijed definirano ograničenje unutar tog intervala, naredni zahtjevi se odbijaju.

Evo kako biste to mogli implementirati u Python-u:

import time class FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = prozor self.request_count = 0 self.window_start = time.time() def allow_request(self): sada = time.time() ako sada - self.window_start #reset the self.window: 0 self.window. self.window_start = sada ako self.request_count < self.limit: self.request_count += 1 return True return False

u ovom kodu,limitje maksimalni broj zahtjeva koje klijent može uputiti unutarprozorvremenski okvir.

3. Algoritam kliznog prozora

Algoritam kliznog prozora je naprednija verzija algoritma fiksnog prozora. Umjesto podjele vremena na fiksne intervale, koristi klizni prozor za praćenje zahtjeva. To znači da se prozor kontinuirano pomiče i uzima u obzir zahtjeve upućene u nedavnoj prošlosti.

Da biste implementirali algoritam kliznog prozora, možete koristiti strukturu podataka kao što je kružni bafer za pohranjivanje vremenskih oznaka svakog zahtjeva. Zatim provjerite da li broj zahtjeva unutar kliznog prozora premašuje ograničenje.

iz zbirki import deque import time class SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() def allow_request(self): now = time.time() # Uklonite stare zahtjeve iz dequea dok self.request_timestampres[uredi] self.request_timestampre. self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False

Implementacija prigušivanja u vašem API-ju

Nakon što odaberete algoritam, morate ga integrirati u svoj API. Evo općih koraka:

1. Identifikujte klijenta

Morate imati način da identificirate svakog klijenta koji šalje zahtjeve vašem API-ju. To može biti putem API ključa, korisničkog ID-a ili nekog drugog jedinstvenog identifikatora.

2. Pohranite informacije o gasu

Morat ćete pohraniti informacije o historiji zahtjeva svakog klijenta. To može biti u bazi podataka, keš memoriji (kao Redis) ili strukturi podataka u memoriji. Na primjer, ako koristite algoritam token bucket-a, morat ćete pohraniti broj tokena koje svaki klijent ima u svojoj kanti.

3. Provjerite ograničenja gasa

Prije obrade zahtjeva provjerite da li je klijent prekoračio svoja ograničenja gasa. Ako jesu, vratite odgovarajući odgovor na grešku (npr. statusni kod 429 Previše zahtjeva). Ako nisu, obradite zahtjev na uobičajeni način i ažurirajte informacije o gasu u skladu s tim.

Primjeri prigušivanja API-ja u API-jima iz stvarnog svijeta

Pogledajmo neke primjere iz stvarnog svijeta. Na primjer, Twitter API ima stroga ograničenja prigušenja. Različite vrste krajnjih tačaka imaju različite granice brzine. Na primjer, API za pretraživanje ima ograničenje od 450 zahtjeva po 15-minutnom prozoru za standardne korisnike.

Drugi primjer je Google Maps API. Google koristi prigušivanje za upravljanje korištenjem svojih kartografskih usluga. Imaju različite nivoe ograničenja upotrebe na osnovu vrste usluge i plana cijena na kojem se nalazite.

Zaključak

Implementacija prigušivanja API-ja je neophodna za svakog API provajdera. Pomaže u zaštiti vaše usluge od zloupotrebe, upravljanju resursima servera i osigurava pošteno korištenje među svim klijentima. Bilo da odaberete algoritam token bucket-a, algoritam fiksnog prozora ili algoritam kliznog prozora, pobrinite se da ga pravilno integrirate u svoj API.

Ako ste u farmaceutskoj industriji i tražite visokokvalitetne API-je kao što suFenofibrat丨CAS 49562-28-9,Finasterid丨CAS 98319 - 26 - 7, iliHidrokortizon acetat丨CAS 50-03-3, a zainteresirani ste za naše API usluge, voljeli bismo razgovarati s vama o vašim potrebama. Slobodno nam se obratite da započnemo raspravu o vašim zahtjevima za API i kako možemo raditi zajedno.

Reference

  • Leighton, F. Thomson i Satish Rao. "Rutiranje paketa i zakazivanje posla - radnje u O (c log c) paralelnom vremenu." Časopis ACM (JACM) 40.2 (1993): 261 - 289.
  • Nagle, John. "Kontrola zagušenja u IP/TCP mrežama." ACM SIGCOMM Computer Communication Review 14.5 (1984): 11 - 17.
Pošaljite upit
Iznad vaših očekivanja
Od nauke do života uz LEAPChem
kontaktirajte nas