Control de flujo centinela

Artículo anterior: Centro de configuración de Nacos

Introducción centinela ( introducción oficial )

Sentinel es un componente de control de flujo, disyuntor y degradación para microservicios nativos de la nube. Reemplace Hystrix para abordar los problemas: avalancha de servicio, degradación del servicio, disyuntor de servicio, limitación de corriente de servicio

Histrix:

Consumidor de servicios -> Llame al proveedor de servicios
Introduzca Hystrix en la persona que llama -> Cree un proyecto de panel separado -> Turbine
1) Cree su propio panel de plataforma de monitoreo
2) No se proporciona ninguna interfaz de interfaz de usuario para la configuración, como el disyuntor del servicio y la degradación del servicio (y estaba escribiendo código que invadió nuestro entorno de programa fuente)
Sentinel:

1) Componentes de consola/panel de control implementables de forma independiente.
2) Reducir el desarrollo de código y completar el control detallado (microservicios de entrega) a través de la configuración de la interfaz de usuario.

Sentinel tiene las siguientes características:

Escenarios de aplicación enriquecidos : Sentinel se ha hecho cargo de los escenarios centrales de la promoción de tráfico Double Eleven de Alibaba en los últimos 10 años, como las ventas flash (es decir, el tráfico en ráfagas se controla dentro del rango que la capacidad del sistema puede soportar), la reducción de picos de mensajes y llenado de valles, y disyuntor en tiempo real para usuarios aguas abajo, aplicaciones no disponibles, etc.

Monitoreo completo en tiempo real : Sentinel también proporciona funciones de monitoreo en tiempo real. Puede ver los datos de segundo nivel de una sola máquina conectada a la aplicación en la consola, e incluso el estado de operación resumido de un clúster de menos de 500 máquinas.

Amplio ecosistema de código abierto : Sentinel proporciona módulos de integración listos para usar con otros marcos/bibliotecas de código abierto, como la integración con Spring Cloud, Dubbo y gRPC. Solo necesita introducir las dependencias correspondientes y realizar una configuración simple para conectarse rápidamente a Sentinel.

Puntos de extensión SPI completos : Sentinel proporciona puntos de extensión SPI completos y fáciles de usar. Puede personalizar rápidamente la lógica implementando puntos de extensión. Por ejemplo, gestión de reglas personalizadas, fuentes de datos adaptadas, etc.

Características principales de Sentinel : Ecosistema de código abierto de
Insertar descripción de la imagen aquí
Sentinel :
Insertar descripción de la imagen aquí

Despliegue centinela

Dirección de descarga: https://github.com/alibaba/Sentinel/releases Usamos v1.8.0
para iniciar: java -jar sentinel-dashboard-1.8.0.jar y
nombre de usuario/contraseña: sentinel/sentinel
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Transformación del servicio

  • servicio al consumidorlagou-service-autodeliver-8094-sentinel
  1. confiar
<dependencies>
    <!--sentinel 核⼼环境 依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
<!--    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>-->
</dependencies>
  1. Configuración
server:
  port: 8094

spring:
  application:
    name: m-service-autodeliver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
    sentinel:
      transport:
        dashboard: 127.0.0.1:8888
        port: 8719
#针对的被调⽤⽅微服务名称,不加就是全局⽣效
m-service-autodeliver:
  ribbon:
    #请求连接超时时间
    ConnectTimeout: 2000
    #请求处理超时时间
    ReadTimeout: 5000
    #对所有操作都进⾏重试
    OkToRetryOnAllOperations: true
    ####根据如上配置,当访问到故障请求的时候,它会再尝试访问⼀次当前实例(次数由MaxAutoRetries配置),
    ####如果不⾏,就换⼀个实例进⾏访问,如果还不⾏,再换⼀次实例访问(更换次数由MaxAutoRetriesNextServer配置),
    ####如果依然不⾏,返回失败信息。
    MaxAutoRetries: 0 #对当前选中实例重试次数,不包括第⼀次调⽤
    MaxAutoRetriesNextServer: 0 #切换实例的重试次数
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #负载策略调整

# 暴露健康接⼝的细节
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

#负载策略调整
logging:
  level:
  # Feign⽇志只会对⽇志级别为debug的做出响应
    com.w.edu.service.ResumeServiceFeignClientFallback: debug
  1. grupo de nacos
    Insertar descripción de la imagen aquí

  2. Acceda a la interfaz http: http://localhost:8094/autodeliver/checkState/1545132 varias veces para observar la consola Sentinel
    Insertar descripción de la imagen aquí

Conceptos clave de centinela

Reglas de control de flujo: enlaces de puntos de clúster, reglas de control de flujo

modo directo

  • Tipo de QPS : (Número de solicitudes por segundo) Limita el flujo cuando el QPS que llama al recurso alcanza el umbral
    Insertar descripción de la imagen aquí
    Insertar descripción de la imagen aquí
  1. Si la nueva regla de control de flujo
    Insertar descripción de la imagen aquí
    está agrupada : si está agrupada Limitación actual
    Modo de control de flujo :
    Directo : cuando la llamada de recurso alcanza la condición de limitación actual, el flujo se limita directamente
    Asociación : cuando la llamada de recurso asociada alcanza el umbral, la El flujo es limitado.
    Enlace propio : Sólo se registra el enlace especificado.
    Efecto del control del flujo :
    Fallo rápido : Fallo directo, generando una excepción.
    Calentamiento : Según el valor del factor de carga en frío (predeterminado 3), a partir del Umbral/factor de carga en frío, después del tiempo de calentamiento, se
    alcanza el umbral QPS establecido.
    Cola y espera : cola a una velocidad uniforme para permitir que las solicitudes pasen a una velocidad uniforme. El tipo de umbral debe establecerse en QPS, de lo contrario ser inválido.

  2. Múltiples accesos en 1 segundo, falla rápida
    Insertar descripción de la imagen aquí

  • Número de subprocesos: cuando el número de subprocesos que llaman recursos alcanza el umbral, la corriente es limitada.
    Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

  1. Múltiples accesos en 1 segundo, falla rápida
    Insertar descripción de la imagen aquí

modo de asociación

Cuando la llamada al recurso asociado alcanza el umbral, se limita a sí misma. Por ejemplo, la interfaz de registro de usuario necesita llamar a la interfaz de verificación de la tarjeta de identificación (a menudo la interfaz de verificación de la tarjeta de identificación). Si la solicitud de la interfaz de verificación de la tarjeta de identificación alcanza el umbral, utilice el asociación para llamar a la interfaz de registro de usuario realizar limitación actual

@RestController
@RequestMapping("/user")
public class UserController {
    
    
    /**
     * ⽤户注册接⼝
     * @return
     */
    @GetMapping("/register")
    public String register() {
    
    
        System.out.println("Register success!");
        return "Register success!";
    }
    /**
     * 验证注册身份证接⼝(需要调⽤公安户籍资源)
     * @return
     */
    @GetMapping("/validateID")
    public String findResumeOpenState() {
    
    
        System.out.println("validateID");
        return "ValidateID success!";
    }
}
  1. Crear reglas limitantes actuales
    Insertar descripción de la imagen aquí

  2. Múltiples accesos en 1 segundo, solicitudes intensivas a la interfaz de verificación /user/validateID, encontraremos que la interfaz /user/register también está restringida.
    Insertar descripción de la imagen aquí

modo de enlace

Enlace se refiere al enlace de solicitud (cadena de llamadas)

En modo de enlace, se controla el tráfico de la entrada del enlace de llamada donde se encuentra el recurso. El recurso de entrada debe configurarse en la regla, es decir, el nombre de contexto de la entrada del enlace de llamada.

En la siguiente figura se muestra un árbol de llamadas típico: (Proporcionado por Alibaba Cloud)
Insertar descripción de la imagen aquí
En la figura anterior, las solicitudes de los portales Entrance1se Entrance2 llaman al recurso Nodo A. Sentinel permite
la limitación del flujo de recursos basándose únicamente en la información estadística de un determinado portal de llamadas. Por ejemplo, en el modo de enlace, configure el recurso de entrada en para Entrance1indicar que solo
Entrance1las llamadas de la entrada se registrarán en las estadísticas limitantes actuales del NodoA, independientemente de Entrance2 las llamadas entrantes.

Insertar descripción de la imagen aquí

efecto de control de flujo

Fallo rápido : fallo directo, generando una excepción
Calentamiento : De acuerdo con el valor del factor de carga en frío (predeterminado 3), a partir del umbral/factor de carga en frío, después del tiempo de calentamiento, se alcanza el umbral QPS establecido. esperando: haga cola a una velocidad uniforme para que las solicitudes sean
uniformes . Pasado, el tipo de umbral debe establecerse en QPS; de lo contrario, no será válido

Fallar rapido

Falla directamente y lanza una excepción
Insertar descripción de la imagen aquí

Calentamiento

A través del modo Warm Up (modo de precalentamiento), el tráfico que pasa aumenta lentamente y, después del tiempo de calentamiento establecido, alcanza el valor establecido de la tasa de procesamiento de solicitudes del sistema.
El modo de calentamiento comenzará desde 1/3 del umbral de QPS establecido y aumentará lentamente hasta el valor de configuración de QPS de forma predeterminada.
Insertar descripción de la imagen aquí

Esperando en la fila

En el modo de cola y espera , el intervalo de tiempo entre solicitudes está estrictamente controlado, es decir, las solicitudes se pasan a una velocidad uniforme y algunas solicitudes pueden ponerse en cola y esperar, generalmente se usa en escenarios como corte de picos. y llenado de valles de colas de mensajes. Es necesario establecer un tiempo de espera específico. Cuando el tiempo de espera calculado exceda el tiempo de espera, la solicitud será rechazada.

Cuando llega mucho tráfico, las solicitudes no se rechazan directamente, sino que se ponen en cola y se pasan (procesan) una por una a una velocidad constante. Si las solicitudes pueden esperar, se procesarán. Si no pueden esperar (tiempo de espera > tiempo de espera), serán rechazados.
![[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-9aNig8vD-1684245570404)(h](https://img-blog. csdnimg.cn/7b33aa6ec9ba428fba582e0b07a59dec.png)
Insertar descripción de la imagen aquí
efecto de cola
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/u014535922/article/details/130650802
Recomendado
Clasificación