<EbeneX/>
Web DevOps · Updated 18. Februar 2026

Rate Limiting

Definition

Eine Technik zur Begrenzung der Anzahl von API-Anfragen pro Zeiteinheit – schützt vor Überlastung, Missbrauch und hilft bei der Kostenkontrolle.

Fortgeschritten 2 Min. Lesezeit EN: Rate Limiting

Einfach erklärt

Rate Limiting ist ein unverzichtbarer Schutzmechanismus für APIs: Es begrenzt, wie viele Anfragen ein Client in einem definierten Zeitraum senden darf. Ohne Rate Limiting kann ein einzelner Nutzer oder ein fehlerhafter Client eine API mit Anfragen überfluten und sie für alle anderen unbrauchbar machen. Für KI-APIs ist Rate Limiting besonders wichtig, weil Inferenz rechenintensiv ist – jede Anfrage kostet echte Ressourcen und Geld.

Rate Limiting begrenzt, wie viele Anfragen ein Client in einem bestimmten Zeitraum an eine API senden darf. Es schützt Server vor Überlastung, verhindert Missbrauch und stellt sicher, dass alle Nutzer fair Zugang haben. Für KI-APIs wie OpenAI oder Anthropic ist Rate Limiting besonders wichtig, weil Inferenz rechenintensiv ist und Kosten pro Token entstehen.

Rate Limiting begrenzt, wie viele Anfragen ein Nutzer in einem Zeitraum machen darf. Überschreitet er das Limit, werden weitere Anfragen abgelehnt.

Warum ist das wichtig für LLM-APIs?

Ohne Rate Limiting:
User macht 10.000 Anfragen in 1 Minute
-> Kosten: $500
-> Server überlastet
-> Andere User können nicht mehr zugreifen

Mit Rate Limiting:
User macht 60 Anfragen, dann: "429 Too Many Requests"
-> Kosten kontrolliert
-> Server stabil
-> Fair für alle User

Technischer Deep Dive

Algorithmen

AlgorithmusBeschreibungVorteil
Token BucketTokens werden kontinuierlich aufgefülltErlaubt Bursts
Sliding WindowZählt Requests in gleitendem FensterPräzise
Fixed WindowZählt pro fester ZeiteinheitEinfach
Leaky BucketKonstante AbflussrateGlättet Traffic

Token Bucket Beispiel

import time
import redis

class RateLimiter:
    def __init__(self, redis_client, max_tokens=60, refill_rate=1):
        self.redis = redis_client
        self.max_tokens = max_tokens
        self.refill_rate = refill_rate  # Tokens pro Sekunde
    
    def is_allowed(self, user_id):
        key = f"rate_limit:{user_id}"
        now = time.time()
        
        # Atomare Operation mit Lua Script
        tokens, last_refill = self.redis.get_tokens(key)
        
        # Tokens auffüllen
        elapsed = now - last_refill
        tokens = min(self.max_tokens, tokens + elapsed * self.refill_rate)
        
        if tokens >= 1:
            self.redis.set_tokens(key, tokens - 1, now)
            return True
        return False

HTTP Response Headers

HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1699876543

Best Practices

  • Mehrere Limits: Pro Sekunde UND pro Tag
  • Graceful Degradation: Warnung vor hartem Limit
  • Transparenz: Limits in Response Headers kommunizieren
  • Unterschiedliche Tiers: Free vs. Paid unterschiedlich limitieren

Rate Limiting ist wie ein Türsteher, der nur eine bestimmte Anzahl Gäste pro Stunde einlässt – egal wie viele draußen warten. Das schützt den Club vor Überfüllung.

Begrenzt Anfragen pro User/IP/API-Key pro Zeiteinheit

Schützt vor DDoS, Missbrauch und unbeabsichtigter Überlastung

Essenziell für LLM-APIs wegen hoher Kosten pro Anfrage

LLM-API-Schutz

Kosten begrenzen durch Max-Requests pro User

DDoS-Schutz

Überlastungsangriffe abwehren

Fair Usage

Ressourcen fair zwischen Nutzern verteilen

Welche Rate Limits sind für LLM-APIs sinnvoll?

Abhängig vom Use Case. Typisch: 10-60 Requests/Minute für Free Tier, 100-1000 für Paid. Zusätzlich Token-Limits pro Tag/Monat für Kostenkontrolle.

Was passiert bei Überschreitung?

HTTP 429 (Too Many Requests) mit Retry-After Header. Gute APIs geben auch an, wann das Limit zurückgesetzt wird und wie viele Requests noch übrig sind.

Wie implementiere ich Rate Limiting?

Am einfachsten über API Gateway oder Reverse Proxy. Für Custom-Lösungen: Token Bucket oder Sliding Window Algorithmus mit Redis als Backend.

Dein persönliches Share-Bild für Instagram – 1080×1080px, bereit zum Posten.