Limitación de corriente y tres algoritmos comunes
Tres algoritmos para la limitación de corriente
blogs.com/forezp/p/10140316.html
Problemas a resolver mediante la limitación de corriente
Escenarios típicos de aplicación de limitación de corriente:
¿Cómo limitar la corriente?
Las pasarelas generales tienen esta función. gateway, nginx, zuul, etc.
Limitación actual: solo se permiten N solicitudes dentro de un período de tiempo determinado.
Desde una perspectiva amigable con la computadora, se espera que las solicitudes se puedan distribuir uniformemente en una unidad de tiempo. Este efecto se puede lograr mediante el uso del algoritmo de embudo.
Sin embargo, el algoritmo de embudo tiene un inconveniente, es decir, si las solicitudes son rápidas primero y luego lentas, entonces las solicitudes pico solo se pueden poner en cola y esperar a que se consuman. De hecho, las computadoras tienen ciertas capacidades de procesamiento de alta concurrencia, siempre que no siempre estén en alta concurrencia. Por lo tanto, el algoritmo que es un compromiso entre la limitación de contracorriente y la limitación de corriente de vulnerabilidad y la limitación de corriente de token se ha convertido en el algoritmo más común en la actualidad.
(Redis se puede implementar junto con la solución de caducidad)
La primera solicitud comienza a contar. Por ejemplo, si se realizan 100 solicitudes en 1 segundo, se denegará el acceso. El conteo comenzará nuevamente después de 1 segundo.
Ventajas:
Desventajas: los picos a corto plazo que son demasiado altos no son amigables para el servidor. El servidor espera distribuir las solicitudes lo más uniformemente posible para que se puedan aprovechar al máximo los recursos del ordenador.
La velocidad de consumo es constante, que es la más amigable para el servidor.
En términos de implementación del algoritmo, puede preparar una cola para guardar solicitudes y utilizar un grupo de subprocesos (ScheduledExecutorService) para obtener solicitudes de la cola con regularidad y ejecutarlas. Se pueden obtener varias ejecuciones simultáneas al mismo tiempo. .
Parámetros: velocidad de consumo, capacidad del depósito (descartar si se excede, lo que puede evitar memoria excesiva y demasiadas tareas en espera)
Ventajas:
Desventajas: p>
El algoritmo de depósito de tokens es uno de los algoritmos de limitación actuales más comunes. Se describe aproximadamente de la siguiente manera:
1) Todas las solicitudes deben obtener un token disponible antes de que se procese el procesamiento. /p>
2) De acuerdo con el tamaño del límite actual, establezca una determinada tasa para agregar tokens al depósito
3) Establezca el límite máximo de tokens para el depósito cuando Cuando el depósito esté lleno; , el token recién agregado se descartará o rechazará;
4) Después de que llegue la solicitud, primero debe obtener el token en el depósito de tokens y luego puede realizar otra lógica comercial con el token. la lógica empresarial, elimine el token directamente;
5) El depósito de tokens tiene un límite mínimo. Cuando los tokens en el depósito alcanzan el límite mínimo, el token no se eliminará después de que se procese la solicitud. para garantizar una limitación de corriente suficiente;
Este algoritmo puede garantizar que el sistema tenga una cierta capacidad de concurrencia alta. Por ejemplo, si la capacidad actual del depósito de tokens es 100, se consumirán 100 solicitudes directamente al principio. Se garantiza que el servidor no estará inactivo debido a una breve ráfaga, porque el depósito de tokens continuará produciendo tokens.
Tiene una cierta capacidad de concurrencia sin perder completamente el control. Es un algoritmo de limitación de corriente controlable que combina concurrencia y control de flujo. Es un algoritmo de contador (cierta capacidad de procesamiento concurrente) y un algoritmo de compromiso. para streaming (los tokens se seguirán generando después del pico).