Je n'ai pas compris cela lors de la première lecture de l'introduction de https://www.nginx.com/blog/rate-limiting-nginx/ .
Maintenant, je suis sûr de comprendre et ma réponse est jusqu'à présent la meilleure. :)
Supposons que: 10r/s
est défini, la capacité maximale du serveur est par exemple 10000r/s
ce qui est 10r/ms
et il n'y a qu'un seul client pour le moment.
Voici donc la principale différence entre 10r/s per IP burst=40 nodelay
et 10r/s per IP burst=40
.
Comme le https://www.nginx.com/blog/rate-limiting-nginx/ l'a documenté ( je recommande fortement de lire l'article en premier (sauf la section de limitation de débit en deux étapes )), ce comportement résout un problème. Laquelle?:
Dans notre exemple, le 20e paquet dans la file d'attente attend 2 secondes pour être transféré, auquel cas une réponse à celui-ci pourrait ne plus être utile au client.
Vérifiez le brouillon que j'ai fait, la 40th
demande obtient une réponse pendant 1s
que l'autre 40th
obtient une réponse à 4s
.
Cela peut faire le meilleur usage de la capacité du serveur: renvoie des réponses aussi rapidement que possible tout en conservant la x r/s
contrainte à un client / IP donné.
Mais il y a aussi un coût ici. Le coût sera:
Si plusieurs clients font la queue sur le serveur, disons client A
, B
et C
.
Sans nodelay
, les demandes sont servies dans un ordre similaire à ABCABCABC
.
Avec nodelay
, l'ordre est plus susceptible d'être AAABBBCCC
.
Je voudrais résumer l'article https://www.nginx.com/blog/rate-limiting-nginx/ ici.
Surtout, la configuration la plus importante est x r/s
.
x r/s
seulement, les demandes excédentaires sont rejetées immédiatement.
x r/s
+ burst
, les demandes en excès sont mises en file d'attente.
1.
vs 2.
, le coût est que du côté client, les requêtes en file d'attente saisissent les chances de demandes ultérieures qui auront eu la chance d'être servies.
Par exemple, 10r/s burst=20
vs 10r/s
, la 11th
demande est censée être rejetée immédiatement dans cette dernière condition, mais maintenant elle est mise en file d'attente et sera traitée. La 11th
demande prend 21th
sa chance.
x r/s
+ burst
+ nodelay
, déjà expliqué.
PS La section de limitation de débit en deux étapes de l'article est très déroutante. Je ne comprends pas, mais cela ne semble pas avoir d'importance.
Par exemple:
Avec cette configuration en place, un client qui effectue un flux continu de demandes à 8 tr / s rencontre le comportement suivant.
8 r / s? sérieusement? Il y a 17 demandes dans les 3 secondes affichées dans l'image, 17/3 = 8?