¿Cuál es la diferencia entre los interceptores Rate Limit y Spike Arrest?

Tanto Rate Limit como Spike Arrest son opciones para controlar el número de peticiones que aceptará una API determinada (o recurso o operación). Pero la forma en que controlan el tráfico es diferente:

Rate Limit Spike Arrest

Rate Limit funciona en función de los intervalos de tiempo (segundo, minuto, hora, día, mes). Comprueba si el número de llamadas dentro del intervalo configurado está dentro del límite esperado, independientemente del tiempo entre las llamadas. Cuando termina el intervalo, se inicia uno nuevo y también se restablece el recuento de llamadas.

Spike Arrest garantiza una distancia de tiempo mínima entre dos llamadas. Si no se respeta el tiempo entre dos peticiones, no se aceptará la segunda y el código de error HTTP devuelto será 429. Esta operación evita picos de tráfico y protege el servidor, lo que garantiza que el flujo entrante es posible de manejar.

Con esta diferencia en mente, ¿cómo elegir cuándo usar cada uno y cómo configurarlos?

Para garantizar límites generales, Rate Limit es el más adecuado. También se puede utilizar para reducir los picos de tráfico cuando el período de tiempo está en segundos, pero para un tráfico relativamente espaciado. Ahora, si su objetivo es proteger el servidor contra la sobrecarga de llamadas y el tráfico esperado es muy intenso, Spike Arrest permite un mejor control. Estos puntos se entienden mejor después de observar los ejemplos a continuación.

Para configurar los interceptores para llegar al objetivo deseado, es importante comprender la lógica de funcionamiento de cada uno de ellos. Como el Spike Arrest funciona en función del tiempo entre llamadas, configurarlo con un límite de 1 petición por segundo, 60 por minuto o 3600 por hora genera exactamente el mismo comportamiento, dado que el tiempo mínimo entre las llamadas será el mismo. Con Rate Limit, debe prestar una mejor atención a la configuración. Ya que funciona en función de la comprobación del número total de llamadas en un intervalo de tiempo determinado, establecer un límite de 1 petición por segundo es diferente de 60 por minuto, ya que en el primer caso el recuento se renueva cada segundo y en el segundo caso, cada minuto.

Si todavía no se puede distinguir muy bien a un interceptor del otro, los ejemplos siguientes ayudarán a aclarar sus diferencias.

Ejemplos de uso: Spike Arrest

En el primer ejemplo siguiente, estamos mostrando el comportamiento de un interceptor Spike Arrest configurado con un límite de 6 peticiones por minuto. Por lo tanto, el tiempo mínimo entre las peticiones es de 10 segundos. Las llamadas aceptadas se muestran en morado y las llamadas denegadas están en naranja:

spike arrest 6 1m

Analizando el resultado, podemos ver que la única condición que permite responder a todas las llamadas es si se realizan regularmente, espaciadas con el tiempo mínimo.

En el siguiente ejemplo, mostramos el comportamiento de un interceptor Spike Arrest configurado con un límite de 1 petición por segundo (que es equivalente a 60 por minuto). Para el gráfico, estamos considerando 100 peticiones realizadas en un intervalo de 1 minuto (las divisiones representan cada segundo). Las llamadas aceptadas se muestran en morado y las llamadas denegadas están en naranja:

spike arrest 1 1s

En total, se realizaron 45 de las 100 llamadas respetando la distancia horaria entre llamadas, y éstas fueron respondidas con éxito. Observe que los picos de tráfico se impiden y las llamadas se distribuyen uniformemente durante el período de tiempo.

Ejemplos de uso: Rate Limit

En el primer ejemplo siguiente, estamos mostrando el comportamiento de un interceptor Rate Limit configurado con un límite de 1 petición por segundo. Las llamadas aceptadas se muestran en morado y las llamadas denegadas están en naranja:

rate limit 1 1s

Si se realizan más llamadas que el límite establecido dentro del intervalo estipulado, el interceptor siempre aceptará el número de peticiones que están dentro del límite. La misma configuración (límite de 1 petición por segundo) se muestra a continuación, pero ahora el gráfico representa un minuto completo en el que se realizaron 100 peticiones. Las llamadas aceptadas se muestran en morado y las llamadas denegadas están en naranja (y las divisiones representan cada segundo del intervalo):

rate limit 1 1s 100requests

Al garantizar un límite de 1 llamada por segundo, Rate Limit respondió a 55 de las 100 llamadas. Comparando este número con Spike Arrest (con un límite de 1 petición por segundo como se muestra anteriormente), vemos que el Rate Limit aceptó más llamadas. Esto se debe a que se permiten llamadas muy cercanas, siempre y cuando una esté al final de un intervalo y la otra esté al principio del intervalo siguiente.

En el ejemplo siguiente, establecemos un Rate Limit para aceptar 60 peticiones por minuto. Como el recuento de llamadas se reanuda solamente al final del período, el comportamiento es diferente de la configuración anterior (1 petición por segundo). Una vez más, representamos 100 llamadas hechas en 1 minuto. Como era de esperar, el interceptor aceptó 60 peticiones:

rate limit 60 1m

En este último ejemplo, se permiten picos de tráfico, siempre y cuando el número total de llamadas durante el período configurado esté dentro del límite propuesto. Si se supera el límite, la API (o recurso o operación, dependiendo de dónde se insertó el interceptor) no estará disponible hasta que se inicie el nuevo intervalo de tiempo. En el ejemplo anterior, como ocurrió la petición 60a justo antes del segundo 33, la falta de disponibilidad duraría los 27 segundos restantes del intervalo.

Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]