Spring Cloud Gateway integra Sentinel para lograr un fusible de control de flujo

1. ¿Qué es la limitación de corriente de la puerta de enlace?

        En la arquitectura de microservicios, la capa de puerta de enlace puede proteger los servicios externos para llamar directamente a los servicios internos y desempeñar un papel en el aislamiento y la protección de los servicios internos.La limitación actual de puerta de enlace, como su nombre lo indica, es limitar la corriente de los servicios a través de la capa de puerta de enlace , para proteger la función de back-end del servicio.

        Sentinel ha proporcionado la adaptación de Spring Cloud Gateway desde la versión 1.6.0, que puede proporcionar una limitación actual en dos dimensiones de recursos:

  • Dimensión de ruta: es decir, la entrada de ruta configurada en el archivo de configuración y el nombre del recurso es el ID de ruta correspondiente. Este es un límite actual de granularidad gruesa, que generalmente se limita a un determinado microservicio.
  • Dimensión de API personalizada: los usuarios pueden usar la API proporcionada por Sentinel para personalizar algunos grupos de API. Este es un límite actual detallado, que se puede igualar y limitar para un cierto tipo de uri, y puede abarcar múltiples microservicios.

2. Gateway integra Sentinel para lograr la limitación de corriente de la puerta de enlace:

        Luego, presentaremos cómo Spring Cloud Gateway integra Sentinel. En cuanto a cómo crear un proyecto de puerta de enlace e integrar el registro de Nacos, ya lo hemos presentado en el artículo anterior. Los lectores interesados, lean este artículo: Spring Cloud Gateway Service Gateway Deployment Introducción detallada usar

1. Agregue dependencias relacionadas con Sentinel:

 		<!-- 引入sentinel进行服务降级熔断 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
		</dependency>
		<!-- gateway网关整合sentinel进行限流降级 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
		</dependency>

2. Agregue la configuración de la consola Sentinel al archivo de configuración:

# sentinel看板相关配置
spring.cloud.sentinel.eager = true
spring.cloud.sentinel.transport.dashboard = 172.28.190.101:8999

3. Inicie el proyecto de puerta de enlace:

        Para el proyecto de puerta de enlace, debemos agregar los siguientes parámetros de inicio en función de los parámetros de inicio originales y marcar la aplicación como el tipo API Gateway:

# 注:通过 Spring Cloud Alibaba Sentinel 自动接入的 API Gateway 整合则无需此参数
-Dcsp.sentinel.app.type=1

4. Acceda a la consola de Sentinel:

Hasta ahora, hemos integrado Spring Cloud Gateway con Sentinel, y puede ver que el proyecto de puerta de enlace se está monitoreando ingresando a la consola de Sentinel.

 

3. Introducción de las reglas de control de flujo de la puerta de enlace de Sentinel:

        Después de integrar Spring Cloud Gateway y Sentinel, presentaremos cómo realizar el control de flujo de la puerta de enlace en función de la consola del panel de control de Sentinel, como se muestra en la siguiente figura:

 3.1 Reglas de control de flujo de la puerta de enlace:

Los atributos principales de la regla de control de flujo de puerta de enlace GatewayFlowRule son los siguientes:

① resourceMode: ya sea que la regla sea para la ruta de API Gateway (RESOURCE_MODE_ROUTE_ID) o el grupo de API (RESOURCE_MODE_CUSTOM_API_NAME) definido por el usuario en Sentinel, el valor predeterminado es route.

② recurso: nombre del recurso, que puede ser el nombre de la ruta en la puerta de enlace o el nombre del grupo de API definido por el usuario.

③ grado: la dimensión del indicador de límite actual, igual que el campo de grado de la regla de límite actual

④ recuento: umbral de limitación de corriente

⑤ intervaloSec: ventana de tiempo estadístico, la unidad es el segundo, el valor predeterminado es 1 segundo

⑥ controlBehavior: el efecto de control de la configuración del tráfico. Actualmente, admite dos modos: falla rápida y cola uniforme. El valor predeterminado es falla rápida.

⑦ ráfaga: la cantidad de solicitudes adicionales permitidas cuando se trata de solicitudes de ráfaga.

⑧ maxQueueingTimeoutMs: el tiempo de cola más largo en el modo de cola uniforme, en milisegundos, solo válido en el modo de cola uniforme.

⑨ paramItem: parámetro de configuración de limitación de corriente. Si no se proporciona, significa que el parámetro no estará limitado y la regla de puerta de enlace se convertirá en una regla de control de flujo normal; de lo contrario, se convertirá en una regla de punto de acceso. Los campos en él:

  • parseStrategy: la estrategia para extraer parámetros de solicitudes, actualmente admite cuatro modos de extracción de IP de origen (PARAM_PARSE_STRATEGY_CLIENT_IP), host (PARAM_PARSE_STRATEGY_HOST), encabezado arbitrario (PARAM_PARSE_STRATEGY_HEADER) y parámetros de URL arbitrarios (PARAM_PARSE_STRATEGY_URL_PARAM).
  • fieldName: si la estrategia de extracción selecciona el modo de encabezado o el modo de parámetro de URL, debe especificar el nombre del encabezado o el nombre del parámetro de URL correspondiente.
  • patrón: El patrón de coincidencia del valor del parámetro. Solo el valor del atributo de solicitud que coincida con este patrón se incluirá en las estadísticas y el control de flujo; si está vacío, se contarán todos los valores del atributo de solicitud.
  • matchStrategy: la estrategia de coincidencia para valores de parámetros, actualmente admite la coincidencia exacta (PARAM_MATCH_STRATEGY_EXACT), la coincidencia de subcadena (PARAM_MATCH_STRATEGY_CONTAINS) y la coincidencia regular (PARAM_MATCH_STRATEGY_REGEX).

3.2 Gestión de grupos de API:

La agrupación de API es para agrupar interfaces y luego implementar diferentes políticas de limitación actuales para interfaces de diferentes grupos.

(1) Agregar agrupación de API:

Como se muestra en la figura a continuación, siga los pasos especificados para ingresar a la interfaz API personalizada:

 Hay tres modos de configuración para la agrupación de API: modos exacto, prefijo y normal.

  • Modo exacto: se refiere al límite actual cuando la ruta de la URL coincide por completo. Por ejemplo, la cadena de coincidencia está configurada como /order/1
  • Modo de prefijo: se refiere al límite actual cuando coincide el prefijo de ruta de la URL. Por ejemplo, la cadena de coincidencia está configurada como /order/*
  • Modo regular: se refiere al límite actual cuando la ruta de la URL se ajusta a las reglas de expresión regular. Por ejemplo, la cadena de coincidencia está configurada como \/order\/\d*

 (2) Configure las reglas de limitación actuales:

A continuación, debe agregar reglas de control de flujo a este grupo de API. El nombre de la API se puede configurar seleccionando diferentes grupos de API, como se muestra en la siguiente figura:

Después de la adición, las reglas de limitación actuales entrarán en vigor para las API que coincidan con el patrón coincidente.  

En cuarto lugar, el principio de la implementación del control de flujo de la puerta de enlace centinela:

        Después de saber cómo usar sentinel-dashboard para controlar el flujo de la puerta de enlace, presentaremos el principio de implementación del control de flujo de la puerta de enlace centinela.

        Al cargar la regla de control de flujo de puerta de enlace (GatewayFlowRule) a través de GatewayRuleManager, independientemente de si el atributo de solicitud está limitado o no, la capa inferior de Sentinel convertirá la regla de control de flujo de puerta de enlace en una regla de parámetro de punto de acceso (ParamFlowRule), que se almacena en GatewayRuleManager, que es lo mismo que la regla de parámetro de punto de acceso normal. Durante la conversión, Sentinel establecerá el índice de parámetro (idx) para la regla de control de flujo de la puerta de enlace de acuerdo con la configuración del atributo de solicitud y lo sincronizará con la regla de parámetro de punto de acceso generado.

        Cuando una solicitud externa ingresa a API Gateway, pasará por el filtro implementado por Sentinel, en el que se realizará a su vez "coincidencia de agrupación de ruta/API -> análisis de atributos de solicitud y ensamblaje de parámetros". Sentinel analizará los atributos de la solicitud de acuerdo con las reglas de control de flujo de la puerta de enlace configuradas, ensamblará la matriz de parámetros de acuerdo con el orden del índice de parámetros y, finalmente, la pasará a SphU.entry (res, args). El módulo Sentinel API Gateway Adapter Common agrega un GatewayFlowSlot a la cadena de ranuras, que se usa especialmente para verificar las reglas de la puerta de enlace. GatewayFlowSlot extraerá las reglas de parámetros de puntos de acceso generados de GatewayRuleManager y verificará las reglas secuencialmente de acuerdo con los parámetros entrantes. Si una regla no tiene como objetivo el atributo de solicitud, se colocará una constante preestablecida en la última posición del parámetro para lograr el efecto del control de flujo ordinario.

 

5. ¿Es seguro el servicio cuando la puerta de enlace es limitada?

​ Si el límite actual se ha realizado a nivel de puerta de enlace, ¿el servicio que se esconde detrás de él es seguro? La respuesta es No. En la arquitectura de microservicios, varias partes suelen llamar a un servicio independiente, como se muestra en la siguiente figura:

        El servicio de productos básicos no solo es llamado por la capa de puerta de enlace, sino también por el servicio de pedidos internos.En este momento, si el tráfico solo está limitado en la capa de puerta de enlace, una vez que una gran cantidad de solicitudes de servicios de pedidos, como una gran promoción, el servicio de productos básicos será derrotado instantáneamente si el tráfico no está limitado. . Por lo tanto, es necesario limitar la corriente de los servicios de los que es responsable de acuerdo con el escenario comercial de la empresa. La solución más común es: limitación de corriente de clúster a nivel de puerta de enlace + limitación de corriente de una sola máquina para servicios internos , a fin de garantizar que no se verá abrumado por el tráfico.

6. Personalice el mensaje de excepción de control de flujo:

        La información de devolución de excepción predeterminada del control de flujo de la puerta de enlace no es lo suficientemente humana, y devuelve directamente: "Bloquear...", lo cual es definitivamente inaceptable, entonces, ¿cómo personalizamos la información de excepción de control de flujo de configuración? De hecho, sentinel ha implementado el contenido de retorno de las excepciones de control de flujo personalizadas para nosotros. Simplemente agregue la siguiente configuración al archivo de configuración:

spring:
  cloud:
    sentinel:
      #配置限流之后的响应内容
      scg:  
        fallback:
          # 两种模式:一种是response返回文字提示信息,一种是redirect,重定向跳转,需要同时配置redirect(跳转的uri)
          mode: response
          # 响应的状态
          response-status: 426
          # 响应体
          response-body: '{"code": 426,"message": "限流了,稍后重试!"}'

La configuración del modo en la configuración anterior es respuesta. Una vez que se limita la corriente, se devolverá una cadena JSON.

{
    "code": 426,
    "message": "限流了,稍后重试!"
}

La configuración de redirección es la siguiente:

spring:
  cloud:
    sentinel:
      #配置限流之后的响应内容
      scg:
        fallback:
          ## 两种模式,一种是response返回文字提示信息,一种是redirect,重定向跳转,需要同时配置redirect(跳转的uri)
          mode: redirect
          ## 跳转的URL
          redirect: http://www.baidu.com

Una vez que la corriente esté limitada, saltará directamente a: http://www.baidu.com

Artículo de referencia:

 ¡Spring Cloud Gateway integra el límite actual de la puerta de enlace Ali Sentinel en el combate real!

Límite actual de puerta de enlace · alibaba/Sentinel Wiki · GitHub

Sentinel Gateway Nacos Gateway Límite de corriente Tres mosqueteros - Nube + Comunidad - Tencent Cloud

Supongo que te gusta

Origin blog.csdn.net/a745233700/article/details/122917160
Recomendado
Clasificación