Skip to content
IRC-Coding IRC-Coding
Rate Limiting Throttling API Sicherheit Load Shedding Token Bucket Leaky Bucket

Rate Limiting und Throttling für APIs: Fairness, Schutz und Best Practices

Lerne Rate Limiting und Throttling: Unterschiede, Algorithmen, HTTP-Header, Implementierung und Best Practices für stabile und faire APIs.

S

schutzgeist

2 min read
Rate Limiting und Throttling für APIs: Fairness, Schutz und Best Practices

Rate Limiting und Throttling für APIs

Rate Limiting und Throttling schützen APIs vor Überlastung, Missbrauch und unfairen Nutzungsmustern, indem sie die Anzahl der Anfragen begrenzen.

Kompakte Beschreibung

Rate Limiting und Throttling sind Mechanismen, die die Anzahl der Anfragen an eine API innerhalb eines Zeitraums steuern. Rate Limiting legt fest, wie viele Anfragen ein Client erlaubt sind, und lehnt überschüssige Anfragen ab, meist mit dem Statuscode 429 Too Many Requests. Throttling drosselt die Verarbeitungsrate, um Backend-Systeme bei hoher Last zu entlasten und gleichmäßige Antwortzeiten zu gewährleisten. Beide Verfahren schützen vor Brute-Force-Angriffen, Scraping, unbeabsichtigten Lastspitzen und Denial-of-Service-Angriffen. Implementierungen basieren auf Algorithmen wie Fixed Window, Sliding Window, Token Bucket oder Leaky Bucket. Wichtige Begleitmaßnahmen sind informative HTTP-Header, Retry-After Angaben, differenzierte Limits pro Endpunkt oder Nutzer und Monitoring der Limits.

Wichtige Komponenten

Rate Limiting

Rate Limiting begrenzt die Anzahl der Anfragen eines Clients in einem definierten Zeitfenster. Überschreitet der Client das Limit, wird die Anfrage abgelehnt. Das Limit kann global, pro API, pro Endpunkt, pro Client oder pro Nutzerkonto gelten.

Throttling

Throttling reduziert die Rate, mit der Anfragen verarbeitet werden, ohne sie sofort abzulehnen. Es wird eingesetzt, wenn Backend-Systeme kurzzeitig überlastet sind oder eine gleichmäßige Verarbeitung gewährleistet werden soll. Throttling kann durch Warteschlangen, Backoff oder verlangsamte Verarbeitung umgesetzt werden.

Fixed Window

Der Fixed Window Algorithmus zählt Anfragen in festen Zeitfenstern, beispielsweise jede Minute oder jede Stunde. Er ist einfach zu implementieren, kann aber zu Bursts am Ende und Beginn eines Fensters führen.

Sliding Window

Der Sliding Window Algorithmus betrachtet ein bewegliches Zeitfenster und vermeidet Bursts am Fensterrand. Er ist fairer als Fixed Window, aber etwas komplexer in der Implementierung.

Token Bucket

Der Token Bucket Algorithmus füllt einen Eimer mit Token mit konstanter Rate. Jede Anfrage verbraucht ein Token. Solange Token verfügbar sind, werden Anfragen bearbeitet. Ist der Eimer leer, werden Anfragen abgelehnt oder verzögert. Token Bucket erlaubt kurzzeitige Bursts, begrenzt die Langzeitrate aber stabil.

Leaky Bucket

Der Leaky Bucket Algorithmus stellt Anfragen in einer Warteschlange an und lässt sie mit konstanter Rate ab. Er glättet Traffic-Spitzen besonders stark und verhindert Bursts. Er ist gut für gleichmäßige Verarbeitung, kann aber zu Wartezeiten führen.

HTTP Statuscode 429

Wenn ein Client das Rate Limit überschreitet, antwortet der Server mit 429 Too Many Requests. Der Retry-After Header teilt dem Client mit, wann er die Anfrage wiederholen kann. Das ermöglicht faire Wiederholungsversuche und reduziert die Last.

Limit Header

Informativ Header wie X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset helfen Clients, ihre aktuelle Auslastung zu erkennen und Anfragen zu planen. Sie verbessern die Developer Experience und reduzern unbeabsichtigte Limitüberschreitungen.

Per-User und Per-Endpoint Limits

Globale Limits sind einfach, aber oft zu grob. Besser sind differenzierte Limits pro authentifiziertem Nutzer, pro Client oder pro Endpunkt. Kostenlose Tarife können strengere Limits haben, zahlende Kunden höhere Kontingente.

Load Shedding

Load Shedding ist eine Form des Throttlings, bei der Anfragen bei extremer Last aktiv verworfen werden, um das System stabil zu halten. Priorisierung wichtiger Anfragen und Verzicht auf weniger kritische Operationen helfen, das System am Leben zu erhalten.

Distributed Rate Limiting

In verteilten Systemen muss Rate Limiting über mehrere Instanzen konsistent funktionieren. Dazu werden zentrale Speicher wie Redis oder Datenbanken genutzt. Alternativ können Approximationsverfahren wie Sliding Window Log in Redis eingesetzt werden.

Monitoring und Alerting

Überwache, wie oft Limits ausgelöst werden, welche Clients betroffen sind und ob Spitzen auf Angriffe oder Fehler hinweisen. Alerts bei ungewöhnlichen Mustern ermöglichen eine schnelle Reaktion auf Missbrauch oder Kapazitätsprobleme.

Praxisbeispiel

Ein API-Anbieter begrenzt Anfragen mit einem Token Bucket Algorithmus. Jedem authentifizierten Nutzer stehen 100 Token pro Minute zur Verfügung, mit einem maximalen Burst von 20 Token.

Anfragen:

GET /api/v1/products
Authorization: Bearer USER_TOKEN

Antwort bei Erfolg:

HTTP/1.1 200 OK
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1751300000

Antwort bei Überschreitung:

HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1751300000

{
  "type": "https://api.example.com/problems/rate-limit-exceeded",
  "title": "Rate Limit überschritten",
  "status": 429,
  "detail": "Du hast das Limit von 100 Anfragen pro Minute überschritten."
}

Der Client kann anhand der Header und des Retry-After Werts planen, wann er die nächste Anfrage senden darf.

FAQ: Rate Limiting und Throttling

1. Was ist Rate Limiting?

Rate Limiting begrenzt die Anzahl der Anfragen, die ein Client in einem Zeitraum an eine API senden darf. Überschreitungen werden meist mit 429 Too Many Requests abgelehnt.

2. Was ist Throttling?

Throttling drosselt die Verarbeitungsrate von Anfragen, um Backend-Systeme zu schützen und gleichmäßige Antwortzeiten zu gewährleisten. Anfragen werden nicht sofort abgelehnt, sondern verlangsamt oder in Warteschlangen gestellt.

3. Was ist der Unterschied zwischen Rate Limiting und Throttling?

Rate Limiting lehnt Anfragen ab, wenn ein Limit überschritten wird. Throttling verlangsamt die Verarbeitung, ohne Anfragen direkt abzulehnen. Beide schützen vor Überlastung.

4. Was ist der Token Bucket Algorithmus?

Token Bucket füllt einen Eimer mit Token mit konstanter Rate. Jede Anfrage verbraucht ein Token. Ist der Eimer leer, wird die Anfrage abgelehnt. Der Algorithmus erlaubt kurze Bursts.

5. Was ist der Leaky Bucket Algorithmus?

Leaky Bucket stellt Anfragen in einer Warteschlange und verarbeitet sie mit konstanter Rate. Er glättet Traffic-Spitzen sehr stark, kann aber zu Wartezeiten führen.

6. Was ist Fixed Window?

Fixed Window zählt Anfragen in festen Zeitfenstern. Es ist einfach, kann aber zu Bursts am Ende und Beginn eines Fensters führen.

7. Was ist Sliding Window?

Sliding Window betrachtet ein bewegliches Zeitfenster und ist fairer als Fixed Window. Es vermeidet Bursts am Fensterrand, ist aber etwas komplexer.

8. Was bedeutet HTTP 429?

HTTP 429 Too Many Requests zeigt an, dass der Client das Rate Limit überschritten hat. Der Server kann über Retry-After mitteilen, wann der Client es erneut versuchen darf.

9. Was ist Retry-After?

Retry-After ist ein HTTP-Header, der dem Client mitteilt, wie lange er warten soll, bevor er eine Anfrage wiederholt. Er wird bei 429 und 503 verwendet.

10. Was ist Load Shedding?

Load Shedding verwirft Anfragen bei extremer Last, um das System stabil zu halten. Wichtige Anfragen werden priorisiert, weniger kritische abgelehnt.

11. Wie implementiert man Rate Limiting in verteilten Systemen?

In verteilten Systemen wird ein zentraler Speicher wie Redis genutzt, um Limits über alle Instanzen hinweg konsistent zu verwalten. Algorithmen wie Sliding Window Log oder Token Bucket können in Redis umgesetzt werden.

12. Was sind Per-User Limits?

Per-User Limits gelten pro authentifiziertem Nutzer. Sie sind fairer als globale Limits, weil sie individuelles Verhalten berücksichtigen und Missbrauch isoliert.

13. Was ist ein Burst?

Ein Burst ist eine kurze Flut von Anfragen in sehr kurzer Zeit. Algorithmen wie Token Bucket erlauben gezielt Bursts, solange die Langzeitrate begrenzt bleibt.

14. Sollte Rate Limiting pro Endpunkt unterschiedlich sein?

Ja, unterschiedliche Endpunkte haben unterschiedliche Kosten. Schreiboperationen und datenintensive Abfragen sollten oft strengere Limits haben als einfache Leseoperationen.

15. Warum ist Monitoring für Rate Limiting wichtig?

Monitoring zeigt, wie oft Limits ausgelöst werden, welche Clients betroffen sind und ob Spitzen auf Angriffe oder Fehler hindeuten. So können Limits und Kapazitäten optimiert werden.

Quellen

  1. https://www.rfc-editor.org/rfc/rfc6585
  2. https://www.rfc-editor.org/rfc/rfc9110
  3. https://cloud.google.com/architecture/rate-limiting-strategies-techniques

Buchempfehlungen zur API-Entwicklung

Wenn Du Dich weiter mit Rate Limiting, API-Design und Sicherheit beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:

Keine Bücher für Kategorie "api-development" gefunden.

Zurück zum Blog
Share:

Ähnliche Beiträge