Introducción
Sentinel
Se 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 yDubbo / Spring Cloud
tiene mejor soporte para marcos de trabajo de igual a igual. -
La consola (
Dashboard
) se basa enSpring Boot
el desarrollo y se puede ejecutar directamente después del empaquetado sinTomcat
contenedores de aplicaciones adicionales.
Con la popularidad de los microservicios, la estabilidad entre servicios y servicios se ha vuelto cada vez más importante. Sentinel
Tomando 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:
El uso de Sentinel para la protección de recursos se divide principalmente en varios pasos:
-
Definir recursos
-
Definir reglas
-
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 ErrorEntryFreeException
se 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.xxx
ver 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, block
solicitudes bloqueadas, s
representa el número de solicitudes ejecutadas con éxito, e
representa excepciones definidas por el usuario y rt
representa 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 来源意图
.