Estoy tratando de habilitar la aceleración de API Gateway, pero no funciona como se esperaba.
Configuré la tasa de limitación del método predeterminado en 1 solicitud por segundo y la ráfaga en 1 solicitud.
Luego creé un bucle en mi código para realizar 10 solicitudes simultáneas a mi punto final de API.
for (let i=0; i<10; i++) { axios.get(url); }
El resultado esperado sería:
Pero el resultado real fue el contrario:
Repetí el proceso, pero haciendo 20 request simultáneos y el resultado fue:
En los registros de CloudWatch para este método API, encontré diferentes flujos de registro, cada uno con una diferencia de solo unos pocos milisegundos.
Si configuro Rate en 0 solicitudes por segundo y Burst en 0 solicitudes, la regulación funciona y TODAS las solicitudes se regulan. Pero cuando configuro Rate and Bust en 1, no funciona como se esperaba.
¿Por qué está pasando eso? Necesito limitar mi API a solo 1 solicitud por segundo.
Hay dos formas de aplicar límites a las llamadas a la API:
Cuando necesite aplicar una limitación a nivel de API o nivel de etapa, debe usar planes de uso :
Un plan de uso especifica quién puede acceder a una o más etapas y métodos de API implementados, y también cuánto y qué tan rápido pueden acceder a ellos.
Parece que la limitación de AWS API Gateway no es muy precisa para valores pequeños de tasa/ráfaga.
Me imagino que hay múltiples "instancias" de API Gateway en ejecución, y los valores de tasa y ráfaga son "eventualmente consistentes".
Sin embargo, no encontré ninguna documentación al respecto.
Cuando realicé una solicitud inicial y esperé 500 milisegundos antes de realizar otras 99 solicitudes, los resultados fueron "menos imprecisos".
Ejemplo:
axios.get(url); setTimeout(function(){ console.log("After 500 ms"); for (let i=0; i<99; i++) { axios.get(url); } }, 500);
Resultados:
Sin embargo, es difícil tener resultados consistentes.