Introducción y uso de Sentinel

Introducción

SentinelSe puede dividir simplemente en la biblioteca principal de Sentinel y el Panel de control. La biblioteca principal no depende de Dashboard, pero puede lograr los mejores resultados cuando se combina con Dashboard.

  • La biblioteca principal ( Java 客户端) no depende de ningún marco/biblioteca, puede ejecutarse en todos los entornos de ejecución de Java y Dubbo / Spring Cloudtiene mejor soporte para marcos de trabajo de igual a igual.

  • La consola ( Dashboard) se basa en Spring Bootel desarrollo y se puede ejecutar directamente después del empaquetado sin Tomcatcontenedores de aplicaciones adicionales.

Con la popularidad de los microservicios, la estabilidad entre servicios y servicios se ha vuelto cada vez más importante. SentinelTomando el tráfico como punto de entrada, protege la estabilidad de los servicios desde múltiples dimensiones, como el control del tráfico, la degradación de los disyuntores y la protección de la carga del sistema.

Características principales de Sentinel:

imagen

El uso de Sentinel para la protección de recursos se divide principalmente en varios pasos:

  1. Definir recursos

  2. Definir reglas

  3. comprobar el efecto

Defina primero los recursos que pueden necesitar protección y luego configure las reglas. También se puede entender que mientras tengamos recursos, podemos definir de manera flexible varias reglas de control de flujo en cualquier momento. Al codificar, solo necesita considerar si el código necesita protección y, si es necesario, definirlo como un recurso.

Definir recursos

Sentinel admite las siguientes formas de definir recursos:

  • Definir recursos lanzando excepciones

  • Definir recursos devolviendo un valor booleano

  • Definir recursos usando anotaciones

  • El método de llamada asincrónica define recursos

A continuación se describe cómo definir recursos lanzando excepciones. Para conocer otras formas de definir recursos, consulte la documentación oficial.

Definir recursos de una manera que genere excepciones.

Se lanzará cuando el recurso sea limitado BlockException. En este momento, se pueden detectar excepciones y se puede realizar el procesamiento lógico después de la limitación actual. El código de muestra es el siguiente:

public static void main(String[] args) {
    initFlowRules();
    while (true) {
        Entry entry = null;
        try {
            entry = SphU.entry("hello");
            /*您的业务逻辑 - 开始*/
            System.out.println("hello");
            /*您的业务逻辑 - 结束*/
        } catch (BlockException e1) {
                /*流控逻辑处理 - 开始*/
            System.out.println("block!");
                /*流控逻辑处理 - 结束*/
        } finally {
           if (entry != null) {
               entry.exit();
           }
        }
    }
}

Nota: SphU.entry(xxx) Debe emparejarse con entry.exit()el método para que coincida con la llamada; de lo contrario, se registrará una excepción en la cadena de llamadas y ErrorEntryFreeExceptionse generará una excepción.

Definir reglas

Sentinel admite las siguientes reglas:

  • reglas de control de flujo

  • reglas de degradación del disyuntor

  • Reglas de protección del sistema

  • Reglas de control de acceso a la fuente

  • Reglas de parámetros de punto de acceso

Las reglas de control de flujo se describen a continuación y se pueden encontrar otras reglas en documentos oficiales.

Atributos importantes:

Campo ilustrar Valores predeterminados
recurso Nombre del recurso, el nombre del recurso es el objetivo de la regla de limitación actual  
contar umbral límite actual  
calificación Tipo de umbral límite actual, QPS o modo de número de hilo modo QPS
límite de aplicación El origen de la llamada objetivo del control de flujo predeterminado significa que no se distingue el origen de la llamada.
estrategia Estrategia de limitación actual de la relación de llamada: directo, enlace, asociación Basado en el recurso en sí (directamente)
controlarcomportamiento Efecto de control de flujo (rechazo directo/espera en cola/modo de inicio lento), no admite limitación de corriente por relación de llamada Rechazar directamente

Definir reglas de control de tráfico a través del código.

Después de comprender la definición de las reglas anteriores, podemos FlowRuleManager.loadRules()definir reglas de control de flujo de forma codificada llamando a métodos, como por ejemplo:

private static void initFlowQpsRule() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule1 = new FlowRule();
    rule1.setResource("hello");
    // Set limit qps to 20
    rule1.setCount(20);
    rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule1.setLimitApp("default");
    rules.add(rule1);
    FlowRuleManager.loadRules(rules);
}

comprobar el efecto

Después de ejecutar, podemos ~/logs/csp/${appName}-metrics.log.xxxver el siguiente resultado en el registro:

|--timestamp--|----date time------|-resource-| p |block|s |e|rt|1621928504000|2021-05-25 15:41:44| hello   |20 |0    |20|0|0|1621928504000|2021-05-25 15:41:45| hello   |20 |5579 |20|0|728|1621928504000|2021-05-25 15:41:46| hello   |20 |15698|20|0|0|1621928504000|2021-05-25 15:41:47| hello   |20 |19262|20|0|0|1621928504000|2021-05-25 15:41:48| hello   |20 |19502|20|0|0|1621928504000|2021-05-25 15:41:49| hello   |20 |18386|20|0|0

Entre ellos p, representa solicitudes aprobadas, blocksolicitudes bloqueadas, srepresenta el número de solicitudes ejecutadas con éxito, erepresenta excepciones definidas por el usuario y rtrepresenta el tiempo de respuesta promedio.

otro

El editor ha creado recientemente un nuevo proyecto IT技术交流群, que se limita a intercambios técnicos; los grandes jefes de todas las posiciones son bienvenidos a unirse al grupo, y la discusión y el aprendizaje del enlace circular se mejorarán integralmente; los problemas encontrados en el trabajo se discutirán y resolverán juntos. , ayuda mutua y progreso mutuo; escanee el código QR a continuación para agregar Editor, indique 来源意图.

imagen

Supongo que te gusta

Origin blog.csdn.net/AnOrdinaryLife/article/details/117287876
Recomendado
Clasificación