Qual a diferença entre os interceptors Rate Limit e Spike Arrest?

Ambos Rate Limit e Spike Arrest são opções para controlar a quantidade de requisições que serão aceitas por uma dada API (ou recurso ou operação). Mas eles fazem esse controle de forma distinta:

Rate Limit Spike Arrest

O Rate Limit funciona com base em janelas (intervalos) de tempo (segundo, minuto, hora, dia, mês). Ele verifica se o número de chamadas dentro da janela configurada está dentro do limite esperado, independentemente do tempo entre as chamadas. Quando a janela temporal termina, uma nova começa e a contagem de chamadas é também reiniciada.

O Spike Arrest garante um tempo mínimo entre duas chamadas. Se o tempo entre duas requisições não for respeitado, a segunda requisição não será atendida e o retorno HTTP de erro será o 429. Esse funcionamento evita picos de tráfego e protege o servidor, garantindo um fluxo de entrada que seja possível de tratar.

Tendo essa diferença em mente, como escolher quando usar cada um e como configurá-los?

Para garantir limites gerais, o Rate Limit é o mais indicado. Ele também pode ser usado para reduzir picos de tráfego quando a janela temporal for em segundos, mas para tráfegos relativamente espaçados. Agora, se o seu objetivo é proteger o servidor contra sobrecarga de chamadas e o tráfego esperado for muito intenso, o Spike Arrest permite um controle melhor. Essas questões são melhor observadas nos exemplos abaixo.

Para configurar os interceptors de forma a conseguir o controle desejado, é importante entender bem a lógica de funcionamento de cada um. Como o Spike Arrest trabalha com intervalo entre chamadas, configurá-lo com limite de 1 requisição por segundo, 60 por minuto ou 3600 por hora gera exatamente o mesmo comportamento, dado que o intervalo mínimo será o mesmo. Já com o Rate Limit, é preciso mais cuidado na configuração. Como ele funciona com base na verificação de número total de chamadas em um dado intervalo de tempo, configurar um limite de 1 requisição por segundo é diferente de 60 por minuto, já que no primeiro caso a contagem é renovada a cada segundo e, no segundo caso, a cada minuto.

Se você ainda acha que o funcionamento de cada um é confuso, os exemplos abaixo ajudarão a esclarecer ainda mais as diferenças.

Exemplos de uso: Spike Arrest

No primeiro exemplo abaixo, estamos mostrando o comportamento de um Spike Arrest configurado com limite de 6 requisições por minuto. Portanto, o intervalo mínimo entre requisições é de 10 segundos. Em roxo estão as chamadas atendidas e em laranja as negadas:

spike arrest 6 1m

Analisando o resultado, é possível ver que a única condição que permite que todas as chamadas sejam atendidas é quando são feitas de forma regular, espaçadas com o tempo mínimo.

No próximo exemplo, mostramos o comportamento de um Spike Arrest configurado com limite de 1 requisição por segundo (que é equivalente a 60 por minutos). Para o gráfico, estamos considerando 100 requisições feitas em um intervalo de 1 minuto (as divisões representam cada segundo). Em roxo estão as chamadas atendidas e em laranja as negadas:

spike arrest 1 1s

No total, 45 das 100 chamadas foram feitas respeitando o intervalo entre chamadas, e essas foram atendidas. Perceba que os picos de tráfego são impedidos e as chamadas são bem distribuídas durante o intervalo.

Exemplos de uso: Rate Limit

No primeiro exemplo abaixo, estamos mostrando o comportamento de um Rate Limit configurado com limite de 1 requisição por segundo. Em roxo estão as chamadas atendidas e em laranja as negadas:

rate limit 1 1s

Se forem feitas mais chamadas que o limite estabelecido dentro do intervalo estipulado, o Rate Limit sempre atenderá uma quantidade de requisições que esteja dentro do limite. A mesma configuração (limite de 1 requisição por segundo) é mostrada abaixo, mas agora o gráfico representa um minuto de funcionamento do Rate Limit, com 100 requisições feitas. Em roxo estão as chamadas atendidas e em laranja as negadas (e as divisões representam cada segundo do intervalo):

rate limit 1 1s 100requests

Ao garantir um limite de 1 chamada por segundo, o Rate Limit atendeu 55 das 100 chamadas. Comparando esse número com o funcionamento do Spike Arrest com limite de 1 requisição por segundo (ver acima), vemos que o Rate Limit atendeu mais chamadas. Isso acontece porque são permitidas chamadas muito próximas, desde que uma esteja no final de uma janela e a outra esteja no começo da janela seguinte.

No exemplo seguinte, configuramos o Rate Limit para aceitar um limite de 60 requisições por minuto. Como a contagem de chamadas reinicia somente ao fim do período, o funcionamento é diferente da configuração anterior (1 requisição por segundo). Novamente, representamos 100 chamadas durante 1 minuto. Como era de se esperar, o Rate Limit aceitou 60 requisições:

rate limit 60 1m

Nesse último exemplo, os picos de tráfego são permitidos, desde que o total de chamadas ao longo do período configurado esteja dentro do limite proposto. Se o limite for extrapolado, a API (ou recurso ou operação, a depender de onde o interceptor foi inserido) ficará indisponível até que a nova janela temporal seja iniciada. No exemplo acima, como a 60a requisição aconteceu logo antes do segundo 33, essa indisponibilidade seria de 27 segundos.

Thanks for your feedback!
EDIT
How useful was this article to you?