No lo entendí la primera vez cuando estaba leyendo la introducción de https://www.nginx.com/blog/rate-limiting-nginx/ .
Ahora estoy seguro de entender y mi respuesta es hasta ahora la mejor. :)
Supongamos: 10r/s
está configurado, la capacidad máxima del servidor es, por ejemplo, 10000r/s
cuál es 10r/ms
y solo hay 1 cliente en este momento.
Así que aquí está la principal diferencia entre 10r/s per IP burst=40 nodelay
y 10r/s per IP burst=40
.
Como se documenta en https://www.nginx.com/blog/rate-limiting-nginx/ ( recomiendo leer primero el artículo (excepto la sección de limitación de velocidad en dos etapas )), este comportamiento soluciona un problema. ¿Cúal?:
En nuestro ejemplo, el paquete número 20 en la cola espera 2 segundos para ser reenviado, momento en el cual una respuesta podría no ser útil para el cliente.
Verifique el borrador que hice, la 40th
solicitud obtiene respuesta en 1s
mientras que el otro 40th
obtiene respuesta en 4s
.
Esto puede hacer el mejor uso de la capacidad del servidor: envía las respuestas lo más rápido posible mientras mantiene la x r/s
restricción a un cliente / IP determinado.
Pero también hay un costo aquí. El costo será:
Si tiene muchos clientes haciendo cola en el servidor, digamos cliente A
, B
y C
.
Sin nodelay
, las solicitudes se atienden en un orden similar a ABCABCABC
.
Con nodelay
, el orden es más probable que sea AAABBBCCC
.
Me gustaría resumir el artículo https://www.nginx.com/blog/rate-limiting-nginx/ aquí.
Sobre todo, la configuración más importante es x r/s
.
x r/s
solo, las solicitudes en exceso se rechazan de inmediato.
x r/s
+ burst
, las solicitudes en exceso se ponen en cola.
1.
vs 2.
, el costo es que en el lado del cliente, las solicitudes en cola aprovechan las posibilidades de solicitudes posteriores que habrán tenido la oportunidad de ser atendidas.
Por ejemplo, 10r/s burst=20
vs 10r/s
, 11th
se supone que la solicitud debe ser rechazada inmediatamente bajo la última condición, pero ahora está en cola y será atendida. La 11th
solicitud aprovecha la 21th
oportunidad de la solicitud.
x r/s
+ burst
+ nodelay
, ya explicado.
PD La sección de limitación de velocidad en dos etapas del artículo es muy confusa. No entiendo, pero eso no parece importar.
Por ejemplo:
Con esta configuración, un cliente que realiza un flujo continuo de solicitudes a 8 r / s experimenta el siguiente comportamiento.
8 r / s? ¿seriamente? Hay 17 solicitudes en 3 segundos que se muestran en la imagen, 17/3 = 8?