Limite de fréquence : sac de jetons ou fenêtre glissante
Photo : Stytch

Limite de fréquence : sac de jetons ou fenêtre glissante

Quatre algorithmes courants, chacun permettant un type d'explosion différent. Un mauvais choix entraîne soit un blocage injustifié, soit un échec de détection.

Toute API publique doit être soumise à une limitation de fréquence. Mais l'expression « 100 requêtes par minute » peut être interprétée de quatre façons différentes au moins, et chacune d'entre elles entraîne un comportement radicalement différent.

Fenêtre fixe

Compter le nombre de requêtes par minute entière ; à chaque nouvelle minute, remettre le compteur à 0. C'est la méthode la plus simple, mais elle présente une faille de limite : un utilisateur envoie 100 requêtes à la 59e seconde et 100 autres à la 61e seconde — soit 200 requêtes en deux secondes, ce qui reste valide.

Fenêtre coulissante

Compte le nombre de requêtes reçues au cours des 60 dernières secondes à partir du moment présent. Il n'y a plus de lacunes, mais le fait de devoir enregistrer l'horodatage de chaque requête consomme de la mémoire. Une solution courante consiste à effectuer une interpolation entre la fenêtre actuelle et la fenêtre précédente.

Portefeuille de jetons

Un sac contenant au maximum N jetons, qui sont réapprovisionnés régulièrement au fil du temps. Chaque requête consomme un jeton ; si le sac est vide, la requête est refusée.

L'avantage, c'est que cela permet un envoi massif contrôlé : l'utilisateur reste silencieux un moment pour remplir son « sac », puis envoie une série de messages rapidement. Avec une véritable API, c'est généralement le comportement souhaité — on envoie souvent par lots plutôt qu'à un rythme régulier.

Fuite

Les requêtes sont mises en file d'attente et traitées à une vitesse fixe. Cela permet de lisser complètement le trafic, ce qui est adapté lorsque les systèmes en aval ne supportent pas les pics de trafic, mais cela ajoute un temps de latence d'attente.

Comment choisir ?

  • API pour les développeurs — portefeuille de jetons, car les fluctuations à court terme sont normales
  • Protection de ce qui est fragile en arrière-plan — seau percé, pour que le débit reste constant
  • Lutte contre les abus et le spam — fenêtre glissante, car il faut des chiffres précis
Quel que soit le choix effectué, un en-tête indique le nombre de tentatives restantes et le moment où le compteur est réinitialisé. L'absence de précision quant à cette limite est à l'origine de boucles de tentatives inutiles.
Chia sẻ

Thảo luận