Non l'ho capito per la prima volta quando stavo leggendo l'introduzione da https://www.nginx.com/blog/rate-limiting-nginx/ .
Ora sono sicuro di aver capito e la mia risposta è finora la migliore. :)
Supponiamo che 10r/s
sia impostato, la capacità massima del server è ad es. 10000r/s
Qual è 10r/ms
e al momento esiste solo 1 client.
Quindi ecco la differenza principale tra 10r/s per IP burst=40 nodelay
e 10r/s per IP burst=40
.
Come documentato da https://www.nginx.com/blog/rate-limiting-nginx/ ( consiglio vivamente di leggere prima l'articolo (tranne la sezione Limitazione della frequenza in due fasi )), questo comportamento risolve un problema. Quale?:
Nel nostro esempio, il 20 ° pacchetto nella coda attende 2 secondi per essere inoltrato, a quel punto una risposta potrebbe non essere più utile al client.
Controlla la bozza che ho fatto, la 40th
richiesta riceve risposta 1s
mentre l'altra 40th
riceve risposta a 4s
.
Ciò può sfruttare al meglio le capacità del server: rispedisce le risposte il più rapidamente possibile mantenendo comunque il x r/s
vincolo per un determinato client / IP.
Ma c'è anche un costo qui. Il costo sarà:
Se si dispone di molti clienti in coda sul client per esempio il server ha lasciati A
, B
e C
.
Senza nodelay
, le richieste vengono soddisfatte in un ordine simile a ABCABCABC
.
Con nodelay
, l'ordine è più probabile che sia AAABBBCCC
.
Vorrei riassumere l'articolo https://www.nginx.com/blog/rate-limiting-nginx/ qui.
Soprattutto, la configurazione più importante è x r/s
.
x r/s
solo, le richieste in eccesso vengono immediatamente respinte.
x r/s
+ burst
, le richieste in eccesso vengono messe in coda.
1.
vs 2.
, il costo è che sul lato client, le richieste in coda aumentano le possibilità di richieste successive che avranno avuto la possibilità di essere servite.
Ad esempio, 10r/s burst=20
vs 10r/s
, la 11th
richiesta dovrebbe essere rifiutata immediatamente in quest'ultima condizione, ma ora è in coda e verrà servita. La 11th
richiesta prende la 21th
possibilità della richiesta.
x r/s
+ burst
+ nodelay
, già spiegato.
PS La sezione di limitazione della frequenza in due fasi dell'articolo è molto confusa. Non capisco ma non sembra importare.
Per esempio:
Con questa configurazione in atto, un client che effettua un flusso continuo di richieste a 8 r / s sperimenta il seguente comportamento.
8 r / s? sul serio? Ci sono 17 richieste entro 3 secondi mostrati nell'immagine, 17/3 = 8?