Notas de lectura de Spring Cloud Alibaba _6: límite de corriente de servicio y degradación de fusibles

Límite de corriente de servicio y degradación de fusibles

Límite de corriente de servicio

1. Función

Proteja la estabilidad del sistema limitando la cantidad de accesos concurrentes o limitando la cantidad de solicitudes permitidas para ser procesadas dentro de una ventana de tiempo, y brinde servicios estables y confiables para la mayoría de los usuarios al perder la disponibilidad de algunos usuarios.

Dos, implementación común
  • Agregue un módulo de limitación de corriente a la capa Nginx para limitar la velocidad de acceso promedio
    • Limite el número de conexiones simultáneas a la misma dirección IP: módulo limit_conn_zone
# 指令定义一个 zone,该 zone 存储会话的状态
limit_conn_zone $binary_remote_addr zone=test:10m;
server {
    
    
    listen       80;
    server_name  localhost;

    location / {
    
    
        # 该指令用于为一个会话设定最大并发连接数。如果并发请求超过这个限制,那么将返回预定错误
        # 此配置示例中,没有显式配置 limit_conn_status 、limit_conn_log_level ,如果没有配置,则启用它们的默认值。
    	limit_conn test 1;
        root   html;
        index  index.html index.htm;
    }
  • Limite el número de visitas de la misma IP durante un período de tiempo determinado: módulo limit_request
# 指令定义一个 zone,生成一个 10M ,名字为 addr 的内存区域,用来存储访问的频次信息
# rate=1r/s,表示允许相同标识的客户端的访问频次,这里限制的是每秒1次
limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;
server {
    
    
    listen       80;
    server_name  localhost;

    location / {
    
    
        # 设置一个大小为5的缓冲区,当有大量请求过来时,
        # 超过访问频次限制 rate=1r/s 的请求可以先放到这个缓冲区内等待,但是这个缓冲区只有5个位置,超过这个缓冲区的请求直接报503并返回。
        # 关于 nodelay
        # 如果设置,会在瞬间提供处理(rate+burst)个请求的能力,请求超时(rat+burst)的时候直接返回503,永远不存在请求需要等待的情况
        # 如果没有设置,则所有请求会依次等待排队;
    	limit_req zone_addr burst=5 nodelay;
        root   html;
        index  index.html index.htm;
    }
  • Limite el tráfico basado en IP a través de limit_rate
server {
    
    
    listen       80;
    server_name  localhost;

    location / {
    
    
        # 当前请求下载流量到达3m时,触发限速
        limit_rate_after 3m;
        # 用于指定向客户端一个连接传输数据的速度,速度的单位是每秒传输的字节数
    	limit_rate 512k;
        root   html;
        index  index.html index.htm;
    }
  • Configure el grupo de conexiones de la base de datos y el tamaño del grupo de subprocesos para limitar la simultaneidad total

  • La clase de herramienta RateLimiter proporcionada por el kit de herramientas de Guava restringe la velocidad de acceso a la interfaz : esta clase de herramienta implementa la restricción de flujo según el algoritmo del depósito de tokens. Al RateLimiter.create(1);crear un limitador de flujo, el parámetro representa el número de tokens generados por segundo. Por limiter.acquire(i);la adquisición de fichas de una manera bloqueante.
    El tryAcquire(int permits, long timeout, TimeUnit unit);token también se puede obtener configurando el tiempo de espera de espera. Si el tiempo de espera es 0, significa no bloqueo y regresa inmediatamente si no se obtiene.

  • El objetivo de la configuración del tráfico en el protocolo de comunicación TCP es ajustar la velocidad media de transmisión de datos para evitar que los aumentos repentinos de tráfico provoquen la congestión de la red y la pérdida de paquetes.

3. Algoritmos de limitación de corriente de uso común
Algoritmo de contador

Inserte la descripción de la imagen aquí

  • Descripción: Acumule el número de visitas en el período especificado. Cuando el número de visitas alcance el umbral establecido, se activará la estrategia de limitación actual y el número de visitas se borrará cuando se ingrese el próximo período de tiempo.
  • Aplicación: limite el número de veces que el mismo usuario activa el envío de SMS en un minuto.
  • Problema: problema crítico, el número de visitas rápidas alcanza el umbral en el límite del período de tiempo (el momento en que se restablece el número de visitas).
Algoritmo de ventana deslizante (control de flujo)

Inserte la descripción de la imagen aquí

  • Descripción: para resolver el problema crítico causado por el algoritmo del contador, se introduce el concepto de ventana deslizante, se dividen múltiples ventanas de tiempo pequeñas en ventanas de tiempo fijas, el número de visitas se controla en cada ventana de tiempo pequeña y luego en la ventana se mueve hacia adelante de acuerdo con el tiempo Y elimina la pequeña ventana de tiempo vencida. Al final, solo es necesario contar la suma de todas las visitas de ventana de tiempo pequeño dentro del rango de la ventana deslizante.
  • Aplicación: Sentinel utiliza un algoritmo de ventana deslizante para lograr la limitación de corriente. Su esencia es reducir el intervalo de tiempo y evitar problemas de límites tanto como sea posible.
Algoritmo de limitación de corriente del depósito de tokens

Inserte la descripción de la imagen aquí

  • Nota: El sistema colocará tokens en un contenedor de tokens de capacidad fija a una velocidad constante y los descartará cuando el contenedor de tokens esté lleno. Para cada solicitud, la ejecución debe obtener un token del depósito de tokens. Si no se obtiene el token, se activa la política de limitación actual.
  • Escenas:
    • La velocidad de la solicitud es mayor que la velocidad de generación de tokens, los tokens en el depósito de tokens se consumirán rápidamente y las solicitudes posteriores entrarán en el estado límite actual
    • La velocidad de la solicitud es igual a la velocidad de generación del token y la ejecución de la solicitud se encuentra en un estado estable
    • La velocidad de la solicitud es menor que la velocidad de generación del token, la simultaneidad del sistema no es alta, las solicitudes se pueden procesar normalmente y también puede hacer frente a la escena de nuevas solicitudes repentinas
Algoritmo limitador de corriente del cucharón con fugas

Inserte la descripción de la imagen aquí

  • Descripción: este algoritmo controla principalmente la velocidad de inyección de datos en la red y suaviza el tráfico de ráfagas en la red. La eficiencia y la velocidad del flujo de agua son constantes, sin importar qué tan rápido sea el flujo de agua. La mayoría de los middleware de mensajes adoptan la idea de limitar la corriente del depósito con fugas. No importa qué tan grande sea la solicitud del productor, la capacidad de procesamiento de mensajes depende del consumidor.
  • Escenas:
    • La velocidad de la solicitud es mayor que el caudal de las gotas de agua, es decir, los datos de la solicitud exceden el límite que puede procesar el servicio actual y se activará la estrategia de límite actual.
    • La velocidad de la solicitud es menor o igual a la velocidad de salida de las gotas de agua, es decir, la capacidad de procesamiento del servidor cumple exactamente con los requisitos de la solicitud del cliente y la solicitud se ejecuta con normalidad.

Fusión y degradación de servicios

  • Fusible:
    • En la arquitectura de microservicio, debido a la granularidad más fina del servicio, el enlace de solicitud será más largo. En un escenario de alta concurrencia, una vez que un servicio en el enlace no está disponible, es probable que las solicitudes se acumulen y causen un efecto de avalancha. Para evitar la ocurrencia de la situación anterior, es necesario aislar temporalmente la interfaz defectuosa y cortar la conexión con la interfaz externa, es decir, activar un fusible. Después de eso, la solicitud del llamador del servicio fallará directamente para un período de tiempo hasta que el servicio de destino vuelva a la normalidad.
  • Indicadores de degradación:
    • Tiempo de respuesta promedio: el tiempo de respuesta promedio de la interfaz de servicio excede el umbral, y la solicitud de servicio dentro de una ventana de tiempo fija se apagará automáticamente después de eso.
    • Proporción de excepciones: si la proporción del número total de excepciones devueltas por la interfaz de servicio excede el umbral, la interfaz de servicio se degradará automáticamente y las solicitudes posteriores en una ventana de tiempo fija regresarán automáticamente
    • El número de excepciones: similar al índice de excepciones, cuando el número de excepciones devueltas por la interfaz de servicio supera el umbral, se activa el fusible de servicio.

Supongo que te gusta

Origin blog.csdn.net/Nerver_77/article/details/108403161
Recomendado
Clasificación