Rate Limiting schützt APIs vor Überlastung, Brute-Force-Angriffen und Missbrauch. Ohne Rate Limiting ist jeder Endpoint verwundbar.
Algorithmen¶
- Fixed Window: Einfach, aber Burst an Fenstergrenzen
- Sliding Window: Präziser, höherer Speicherbedarf
- Token Bucket: Flexibel, erlaubt Bursts
- Leaky Bucket: Konstante Rate
Redis Sliding Window¶
import redis, time r = redis.Redis() def rate_limit(key, limit=100, window=60): now = time.time() pipe = r.pipeline() pipe.zremrangebyscore(key, 0, now - window) pipe.zadd(key, {str(now): now}) pipe.zcard(key) pipe.expire(key, window) _, _, count, _ = pipe.execute() return count <= limit
Express.js¶
const rateLimit = require(‘express-rate-limit’); app.use(‘/api/’, rateLimit({ windowMs: 60 * 1000, max: 100, standardHeaders: true, }));
Wichtigste Erkenntnis¶
Rate Limiting für jede API. Redis für verteilte Umgebungen, Sliding Window für Präzision.