Hallo! Als API-Anbieter bin ich schon seit einiger Zeit dabei und einer der wichtigsten Aspekte beim Betrieb eines erfolgreichen API-Dienstes ist die Implementierung der API-Drosselung. In diesem Blogbeitrag werde ich mit Ihnen teilen, wie Sie die API-Drosselung effektiv implementieren.
Was ist API-Drosselung?
Lassen Sie uns zunächst darüber sprechen, was API-Drosselung ist. API-Drosselung ist eine Technik zur Steuerung der Rate, mit der Clients auf eine API zugreifen können. Es begrenzt die Anzahl der Anfragen, die ein Kunde innerhalb eines bestimmten Zeitraums stellen kann. Dies trägt dazu bei, Missbrauch zu verhindern, Serverressourcen zu schützen und eine faire Nutzung für alle Benutzer sicherzustellen.
Warum ist API-Drosselung wichtig?
Es gibt mehrere Gründe, warum eine API-Drosselung wichtig ist. Erstens trägt es dazu bei, Denial-of-Service-Angriffe (DoS) zu verhindern. Böswillige Benutzer könnten versuchen, Ihre API mit Anfragen zu überfluten, um Ihre Server zu überlasten und Ihren Dienst zu stören. Durch die Drosselung wird die Anzahl der möglichen Anfragen begrenzt, wodurch es für sie schwieriger wird, solche Angriffe durchzuführen.
Zweitens stellt es sicher, dass Ihre Serverressourcen effizient genutzt werden. Wenn viele Clients gleichzeitig übermäßig viele Anfragen stellen, könnten Ihre Server überlastet werden, was zu langsamen Antwortzeiten oder sogar Abstürzen führen kann. Durch die Drosselung von Anfragen können Sie die Auslastung Ihrer Server verwalten und dafür sorgen, dass Ihre API reibungslos läuft.
Schließlich fördert es eine faire Nutzung zwischen allen Kunden. Ohne Drosselung könnten einige Clients Ihre API-Ressourcen monopolisieren, während andere eine schlechte Leistung erleiden. Durch die Drosselung wird sichergestellt, dass jeder Client einen angemessenen Anteil der verfügbaren Ressourcen erhält.
So implementieren Sie die API-Drosselung
1. Token-Bucket-Algorithmus
Einer der beliebtesten Algorithmen zur API-Drosselung ist der Token-Bucket-Algorithmus. So funktioniert es:
Stellen Sie sich vor, Sie haben einen Eimer, der eine bestimmte Anzahl an Token aufnehmen kann. Jeder Token stellt eine Anfrage dar, die ein Client stellen kann. In regelmäßigen Abständen werden dem Bucket bis zur maximalen Kapazität neue Token hinzugefügt. Wenn ein Client eine Anfrage stellt, muss er einen Token aus dem Bucket „ausgeben“. Wenn keine Token mehr im Bucket vorhanden sind, wird die Anfrage entweder abgelehnt oder in die Warteschlange gestellt, bis ein Token verfügbar wird.
Hier ist ein einfacher Python-ähnlicher Pseudocode zur Implementierung des Token-Bucket-Algorithmus:


class TokenBucket: def __init__(self, Capacity, Rate): self.capacity = Capacity self.rate = Rate self.tokens = Capacity self.last_update = time.time() def get_tokens(self): now = time.time() # Berechnen Sie die Anzahl der seit dem letzten Update hinzugefügten Token new_tokens = (now - self.last_update) * self.rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_update = jetzt return self.tokens def verbrauchen(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False
In diesem CodeKapazitätist die maximale Anzahl an Token, die der Bucket aufnehmen kann, undRateist die Rate, mit der pro Sekunde neue Token zum Bucket hinzugefügt werden.
2. Fester Fensteralgorithmus
Der Fixed-Window-Algorithmus ist eine weitere einfache Möglichkeit, die API-Drosselung zu implementieren. Mit diesem Algorithmus teilen Sie die Zeit in feste Intervalle ein (z. B. jede Minute oder jede Stunde). Für jedes Intervall verfolgen Sie die Anzahl der Anfragen, die ein Kunde gestellt hat. Wenn die Anzahl der Anfragen innerhalb dieses Intervalls einen vordefinierten Grenzwert überschreitet, werden nachfolgende Anfragen abgelehnt.
So können Sie es in Python implementieren:
Importzeitklasse FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_count = 0 self.window_start = time.time() defallow_request(self): now = time.time() if now - self.window_start > self.window: # Fenster zurücksetzen self.request_count = 0 self.window_start = now if self.request_count < self.limit: self.request_count += 1 return True return False
In diesem CodeLimitist die maximale Anzahl von Anfragen, die ein Client innerhalb des Clients stellen kannFensterZeitrahmen.
3. Schiebefenster-Algorithmus
Der Schiebefensteralgorithmus ist eine fortgeschrittenere Version des Festfensteralgorithmus. Anstatt die Zeit in feste Intervalle zu unterteilen, nutzt es ein Schiebefenster, um Anfragen zu verfolgen. Das bedeutet, dass sich das Fenster kontinuierlich bewegt und die in der jüngeren Vergangenheit gestellten Anfragen berücksichtigt.
Um den Sliding-Window-Algorithmus zu implementieren, können Sie eine Datenstruktur wie einen Ringpuffer verwenden, um die Zeitstempel jeder Anfrage zu speichern. Anschließend prüfen Sie, ob die Anzahl der Anfragen innerhalb des Schiebefensters das Limit überschreitet.
aus Sammlungen import deque import time class SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() defallow_request(self): now = time.time() # Alte Anfragen aus der Deque entfernen while self.request_timestamps and now - self.request_timestamps[0] > self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False
Drosselung in Ihrer API implementieren
Sobald Sie einen Algorithmus ausgewählt haben, müssen Sie ihn in Ihre API integrieren. Hier sind die allgemeinen Schritte:
1. Identifizieren Sie den Kunden
Sie müssen über eine Möglichkeit verfügen, jeden Client zu identifizieren, der Anfragen an Ihre API stellt. Dies kann über einen API-Schlüssel, eine Benutzer-ID oder eine andere eindeutige Kennung erfolgen.
2. Drosselungsinformationen speichern
Sie müssen Informationen über den Anfrageverlauf jedes Kunden speichern. Dies kann in einer Datenbank, einem Cache (wie Redis) oder einer speicherinternen Datenstruktur erfolgen. Wenn Sie beispielsweise den Token-Bucket-Algorithmus verwenden, müssen Sie die Anzahl der Token speichern, die jeder Client in seinem Bucket hat.
3. Überprüfen Sie die Drosselgrenzen
Überprüfen Sie vor der Bearbeitung einer Anfrage, ob der Client seine Drosselungsgrenzen überschritten hat. Wenn dies der Fall ist, geben Sie eine entsprechende Fehlerantwort zurück (z. B. den Statuscode 429 Too Many Requests). Ist dies nicht der Fall, verarbeiten Sie die Anfrage wie gewohnt und aktualisieren Sie die Drosselungsinformationen entsprechend.
Beispiele für API-Drosselung in realen APIs
Werfen wir einen Blick auf einige Beispiele aus der Praxis. Beispielsweise gelten für die Twitter-API strenge Drosselungsgrenzen. Verschiedene Arten von Endpunkten haben unterschiedliche Ratenlimits. Die Such-API hat beispielsweise ein Limit von 450 Anfragen pro 15-Minuten-Fenster für Standardbenutzer.
Ein weiteres Beispiel ist die Google Maps API. Google nutzt die Drosselung, um die Nutzung seiner Kartendienste zu verwalten. Abhängig von der Art des Dienstes und dem Preisplan, den Sie nutzen, gibt es unterschiedliche Stufen von Nutzungsbeschränkungen.
Abschluss
Die Implementierung der API-Drosselung ist für jeden API-Anbieter unerlässlich. Es trägt dazu bei, Ihren Dienst vor Missbrauch zu schützen, Serverressourcen zu verwalten und eine faire Nutzung aller Clients sicherzustellen. Unabhängig davon, ob Sie sich für den Token-Bucket-Algorithmus, den Fixed-Window-Algorithmus oder den Sliding-Window-Algorithmus entscheiden, achten Sie darauf, ihn richtig in Ihre API zu integrieren.
Wenn Sie in der Pharmaindustrie tätig sind und nach hochwertigen APIs wie … suchenFenofibrat丨CAS 49562-28-9,Finasterid丨CAS 98319 - 26 - 7, oderHydrocortisonacetat丨CAS 50-03-3und Sie an unseren API-Diensten interessiert sind, würden wir uns freuen, mit Ihnen über Ihre Bedürfnisse zu sprechen. Kontaktieren Sie uns gerne, um ein Gespräch über Ihre API-Anforderungen und die Art und Weise, wie wir zusammenarbeiten können, zu beginnen.
Referenzen
- Leighton, F. Thomson und Satish Rao. „Paketrouting und Job-Shop-Scheduling in O (c log c) paralleler Zeit.“ Journal of the ACM (JACM) 40.2 (1993): 261 - 289.
- Nagle, John. „Überlastungskontrolle in IP/TCP-Internetnetzwerken.“ ACM SIGCOMM Computer Communication Review 14.5 (1984): 11 - 17.
