Rate Limiting (auf Deutsch: Ratenbegrenzung) begrenzt, wie viele Anfragen ein Client innerhalb einer bestimmten Zeit an einen Dienst stellen darf. Es schützt Server vor Überlastung und Missbrauch und sorgt dafür, dass alle Nutzer fair bedient werden.

Warum ist Rate Limiting wichtig?

Öffentliche Dienste wie Webserver, APIs und Cloud-Anwendungen sind ständig Angriffen und Lastspitzen ausgesetzt. Ohne Begrenzung können wenige Clients die gesamte Kapazität aufbrauchen. Typische Einsatzgründe:

  • Schutz vor Überlastung: Ein abgestürzter Client oder ein DDoS-Angriff darf nicht den ganzen Dienst lahmlegen.
  • Schutz vor Missbrauch: Beim Brute-Force-Angriff auf Logins wird das Passwort systematisch geraten — Rate Limiting bremst solche Versuche aus.
  • Faire Nutzung: Ein einzelner Nutzer kann nicht die gesamte Bandbreite oder Rechenzeit monopolisieren.
  • Kostenkontrolle: In der Cloud kostet jede Anfrage Ressourcen; eine Begrenzung verhindert unerwartete Rechnungen.

Wie funktioniert Rate Limiting?

Der Dienst zählt die Anfragen pro Client (zum Beispiel anhand der IP-Adresse oder eines Kontos) innerhalb eines Zeitfensters. Überschreitet ein Client das Limit, werden weitere Anfragen abgelehnt oder verzögert. Bekannte Algorithmen:

  • Fixed Window: Ein festes Zeitfenster (zum Beispiel 100 Anfragen pro Minute) wird komplett zurückgesetzt.
  • Sliding Window: Das Fenster gleitet mit jeder Anfrage weiter und verteilt Last gleichmäßiger.
  • Token Bucket: Ein Behälter füllt sich mit Tokens; jede Anfrage nimmt ein Token weg. Erlaubt kurze Bursts, begrenzt aber den Durchschnitt.
  • Leaky Bucket: Anfragen werden in konstantem Tempo abgearbeitet, Überschuss wartet in der Warteschlange.

Rate Limiting in der Praxis

Bei HTTP-APIs signalisiert der Statuscode 429 Too Many Requests, dass das Limit erreicht ist. Der Header Retry-After sagt dem Client, wann er es erneut versuchen darf. Clients sollten dieses Signal respektieren und mit Backoff warten.

Ort des Einsatzes: Der Webserver oder ein vorgeschalteter Reverse-Proxy. So begrenzt nginx Anfragen pro IP:

limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
server {
    location /api/ {
        limit_req zone=api burst=20;
    }
}

Container-Proxys wie Traefik bieten dafür eine fertige Middleware, API-Gateways und Load-Balancer haben die Funktion ebenfalls eingebaut. Auch die Firewall oder der Load-Balancer können Anfragenraten drosseln. In Verbindung mit der Authentifizierung schützt Rate Limiting besonders Login- und Registrierungs-Endpunkte.

Passendes Limit finden

Die richtige Grenze hängt vom Dienst ab. Ein API-Gateway mit kurzen, leichten Anfragen verträgt andere Raten als ein Webserver, der ganze Seiten rendert. Zu strenge Limits blockieren echte Nutzer, zu lockere schwächen den Schutz. Messen, beobachten und anpassen ist der Weg.