Rate Limiting

Es probable que en determinado momento tu API comience a recibir un numero considerable de peticiones/solicitudes, lo ideal es que sean siempre peticiones legitimas, pero es probable que algun dia alguien decida atacar tu API o el trafico aumente demasiado. En estas situaciones seria conveniente aplicar rate limiting.

Que es?

Poniéndonos técnicos es la forma en que podemos definir que limite tienen los usuarios de hacer uso de nuestra API, hay distintos algoritmos para aplicar ese limite, podemos identificar al usuario y aplicarle ese limite en base a su nombre de usuario o direccion IP.

Previene

Agregar rate limiting en nuestras APIs puede prevenir ser victima de:

En cierta forma ayuda a mejorar el rendimiento ya que tenemos limitado la cantidad de peticiones y evitamos que un solo usuario sobre cargue nuestra API

Tipos

Hay distintos algoritmos para implementar rate limiting, en este post hablaremos de los siguientes.

Fixed Window

En este algoritmo lo que hacemos es dividir el tiempo en ventanas de tiempo, definidos por nosotros, y establecer una cantidad maxima de peticiones para cada ventana.

Fixed Window Rate Limiter

Es decir como se muestra en la imagen, dividimos el tiempo en ventanas de 1 minuto y la cantidad valida de peticiones para cada minuto es de 4. Si superamos este numero las peticiones simplemente se rechazaran y podremos realizar una petición hasta la siguiente ventana

Sliding Window

Toma el principio del Fixed Window de divir en ventanas de tiempo, pero dichas vetanas tendran n segmentos que tambien definiremos nosotros.

Como vimos en el caso anterior, si teniamos ventanas de 1 minuto y 4 peticiones por ventana, aqui agregamos una variable mas que es el numero de segmentos, en este ejemplo seran 2 asi que, tenemos segmentos de 30 segundos.

Veamos el sigueinte ejemplo, tenemos ventanas de 1 minuto divididas en 3 segmentos, con un limite de 10 peticiones

Los numeros que se encuentran arriba de cada segmento representan las peticiones disponibles, por ejemplo

  1. En el primer segmento tenemos 10 peticiones disponibles
  2. En el segundo 6 despues de haber realizado 4

y asi…

Lo interesante ocurre cuando se completa una ventana de tiempo y es ahi en donde sucede un ‘reciclaje’ de peticiones, en el cual ‘recuperamos’ las peticiones hechas en el primer segmento de la ventana anterior y como te lo puedes imaginar en la siguiente ventana recuperamos las siguientes y asi de forma consecutiva.

Sliding Window Rate Limiter

Conlusiones

En definitiva es una tecnica de seguridad que siento que la mayoria de APIs deberian implementar, para poder estar protegidos ante ataques DoS, fuerza bruta o web scraping y tambien para tener una mejora de rendimiento evitando que un usuario sobrecargue toda la API.

← Volver al inicio