Célula Redis limitadora de corriente distribuida
Desde redis 4.0, redis-cell ha sido compatible como módulo de extensión. redis-cell es un módulo de limitación de tráfico basado en el algoritmo token bucket, escrito en Rust, que proporciona limitación de tráfico atómico y permite tráfico en ráfagas, lo que facilita su uso en entornos distribuidos.
El principio del algoritmo del depósito de tokens es definir un depósito que genera tokens a una velocidad determinada. Cada vez que va al depósito para solicitar un token, si no hay suficientes tokens en el depósito, el. la solicitud falla; de lo contrario, la solicitud fue exitosa. Cuando no hay muchas solicitudes, los tokens en el depósito estarán básicamente saturados. En este momento, si el tráfico aumenta, la solicitud no se rechazará de inmediato, por lo que este algoritmo permite un cierto aumento de tráfico.
Estos pasos se pueden implementar utilizando los comandos locales proporcionados por redis. Sin embargo, los datos serán inconsistentes en condiciones de alta concurrencia, por lo que redis-cell atomiza el proceso, lo que resuelve perfectamente el problema en entornos distribuidos. asuntos.
El funcionario proporciona dos métodos: paquete de instalación y compilación del código fuente. La compilación del código fuente y la instalación del entorno Rust son más complicadas. El siguiente es el método de instalación del paquete de instalación. > Después de realizar los pasos anteriores, puede utilizar la función de limitación actual que proporciona.
Este módulo solo proporciona un comando: CL.THROTTLE
CL.THROTTLE test 100 400 60 3
test: redis key
100: Oficialmente llamado max_burst, no lo entiendo del todo. Su valor es la capacidad del depósito de tokens: 1. El depósito de tokens se llenará de forma predeterminada cuando se ejecute por primera vez
400: este y el siguiente parámetro juntos representan el número de accesos permitidos dentro del rango especificado. ventana de tiempo
60: ventana de tiempo especificada en segundos
3: indica el número de tokens para esta solicitud. Si no se escribe, el valor predeterminado es 1
El. El comando anterior significa obtener 3 tokens del depósito de tokens con un valor inicial de 100. La tasa de acceso del depósito de tokens está limitada a 400 veces/60 segundos.
1: Éxito o fracaso, 0: Éxito, 1: Rechazo
2: La capacidad del depósito de tokens, el tamaño es el valor inicial + 1
3: Tokens actualmente disponibles en el depósito de tokens
1: La cantidad de tokens en el depósito de tokens. strong> 4: Si se rechaza la solicitud, este valor indica el tiempo disponible para el reintento (en segundos)
5: Indica cuánto tiempo tarda el depósito de tokens en estar lleno
A continuación se muestra un ejemplo de un depósito de tokens para demostrar esto a un ritmo ligeramente más lento, ejecutando los siguientes comandos en rápida sucesión:
Como puede ver en el comando, cada vez que se recuperan los tokens del Retire 3 tokens del depósito. Cuando no haya suficientes tokens en el depósito de tokens, la solicitud será rechazada.
Debido a motivos comerciales (hay más solicitudes de lo habitual los fines de semana), los servicios de la empresa a menudo han experimentado cortes los fines de semana recientemente. El equipo de extinción de incendios ha estado muy ocupado y ha habido varias avalanchas de servicios relacionadas con ellos. redis. Más tarde, el lado de la arquitectura se adelantó para sugerir que varios grupos empresariales reduzcan su dependencia de otros servicios.
Por un lado, otros servicios no son confiables, por otro lado, algunos negocios principales no se pueden degradar y, a medida que la empresa continúa creciendo, hay demasiados servicios y el costo de solución de problemas es demasiado alto. Por estos motivos, es posible no confiar en otros servicios para resolver problemas dentro del servicio.
Personalmente, si el proyecto no es grande y el costo de mantenimiento no es alto, puede usar redsi-cell directamente. De lo contrario, puede considerar limitar el flujo de cada nodo de servicio mediante un control y una coincidencia detallados. la carga correspondiente. Lo anterior es mi entendimiento personal y es solo como referencia.