Não entendi isso na primeira vez em que estava lendo a introdução em https://www.nginx.com/blog/rate-limiting-nginx/ .
Agora tenho certeza de que entendo e minha resposta é até agora a melhor. :)
Suponha: 10r/s
está definido, a capacidade máxima do servidor é, por exemplo, 10000r/s
qual é 10r/ms
e existe apenas 1 cliente no momento.
Então, aqui está a principal diferença entre 10r/s per IP burst=40 nodelay
e 10r/s per IP burst=40
.
Como o https://www.nginx.com/blog/rate-limiting-nginx/ documentou ( eu recomendo a leitura do artigo primeiro (exceto a seção Limitação de taxa em dois estágios )), esse comportamento corrige um problema. Qual?:
Em nosso exemplo, o vigésimo pacote na fila aguarda 2 segundos para ser encaminhado; nesse momento, uma resposta a ele pode não ser mais útil para o cliente.
Verifique o rascunho que fiz, a 40th
solicitação obtém resposta às 1s
enquanto a outra 40th
obtém resposta às 4s
.
Isso pode fazer o melhor uso possível da capacidade do servidor: envia respostas o mais rápido possível, mantendo a x r/s
restrição a um determinado cliente / IP.
Mas também há custo aqui. O custo será:
Se você tem muitos clientes na fila do servidor, digamos cliente A
, B
e C
.
Sem nodelay
, os pedidos são atendidos em uma ordem semelhante a ABCABCABC
.
Com nodelay
, é mais provável que o pedido seja AAABBBCCC
.
Gostaria de resumir o artigo https://www.nginx.com/blog/rate-limiting-nginx/ aqui.
Acima de tudo, a configuração mais importante é x r/s
.
x r/s
somente solicitações em excesso são rejeitadas imediatamente.
x r/s
+ burst
, pedidos em excesso estão na fila.
1.
vs 2.
, o custo é que, no lado do cliente, as solicitações na fila aproveitam as chances de solicitações posteriores que terão a chance de serem atendidas.
Por exemplo, 10r/s burst=20
vs 10r/s
, a 11th
solicitação deve ser rejeitada imediatamente sob a última condição, mas agora está na fila e será atendida. A 11th
solicitação aproveita a 21th
chance da solicitação.
x r/s
+ burst
+ nodelay
, já explicado.
PS A seção Limitação da taxa em dois estágios do artigo é muito confusa. Eu não entendo, mas isso não parece importar.
Por exemplo:
Com essa configuração, um cliente que faz um fluxo contínuo de solicitações a 8 r / s apresenta o seguinte comportamento.
8 r / s? seriamente? Há 17 pedidos dentro de 3 segundos mostrados na imagem, 17/3 = 8?