Qu'est-ce que le rate limiting ?
Le rate limiting (limitation de debit) est un mécanisme de contrôle qui restreint le nombre de requêtes qu'un client peut envoyer à un serveur dans un intervalle de temps donne. C'est une mesure de protection essentielle pour les API et les applications web, utilisee pour prévenir les abus, protéger contre les attaques par force brute et DDoS, et garantir une qualité de service equitable entre les utilisateurs.
Algorithmes de rate limiting
Fixed Window : un compteur par fenetre de temps fixe (ex: 100 requêtes par minute). Simple mais permet des bursts aux frontieres de fenetre (200 requêtes en 2 secondes a cheval sur deux fenetres). Sliding Window : combine les compteurs de la fenetre actuelle et précédente avec une ponderation. Plus précis que le fixed window. Token Bucket : un seau se remplit de tokens à un rythme constant. Chaque requête consomme un token. Autorise les bursts (seau plein) tout en limitant le debit moyen. Leaky Bucket : les requêtes entrent dans un seau qui fuit a debit constant. Lisse le trafic, pas de burst.
Implémentation technique
Le stockage des compteurs utilise généralement Redis (rapide, distribue, opérations atomiques avec INCR et EXPIRE). L'implémentation se fait dans un middleware (Express, Flask, ASP.NET) ou au niveau du reverse proxy (Nginx limit_req, Traefik). Les headers HTTP standards communiquent les limites : X-RateLimit-Limit (quota total), X-RateLimit-Remaining (requêtes restantes), X-RateLimit-Reset (timestamp de reinitialisation), Retry-After (délai avant de retenter). Le code HTTP 429 Too Many Requests signale le depassement.
Stratégies avancees
Rate limiting par couche : limites différentes au niveau IP, par utilisateur authentifie, et par API key. Limites differenciees : plus de requêtes pour les comptes premium que pour les comptes gratuits. Rate limiting adaptatif : ajuster les limites en fonction de la charge du serveur. Distributed rate limiting : synchroniser les compteurs entre plusieurs instances de l'application via Redis ou un service dédié.
Rate limiting vs throttling vs DDoS protection
Le rate limiting refuse les requêtes excessives (429). Le throttling ralentit les requêtes au lieu de les refuser (mise en file d'attente). La protection DDoS opère à un niveau différent : filtrage du trafic au niveau réseau/CDN (Cloudflare, AWS Shield) avant qu'il n'atteigne l'application. Les trois sont complémentaires : DDoS protection en première ligne, rate limiting au niveau applicatif, throttling pour les degradations gracieuses.