Spring Cloud Gateway intègre une sentinelle pour obtenir un fusible de contrôle de flux

1. Qu'est-ce que la limitation de courant de la passerelle :

        Dans l'architecture de microservice, la couche passerelle peut protéger les services externes pour appeler directement les services internes et jouer un rôle dans l'isolation et la protection des services internes. La limitation du courant de la passerelle, comme son nom l'indique, consiste à limiter le courant des services via la couche passerelle , afin de protéger le rôle principal du service.

        Sentinel a fourni l'adaptation Spring Cloud Gateway depuis la version 1.6.0, qui peut fournir une limitation actuelle dans deux dimensions de ressources :

  • Dimension de route : c'est-à-dire l'entrée de route configurée dans le fichier de configuration et le nom de la ressource est le routeId correspondant. Il s'agit d'une limite actuelle grossière, qui est généralement limitée à un certain microservice.
  • Dimension API personnalisée : les utilisateurs peuvent utiliser l'API fournie par Sentinel pour personnaliser certains groupes d'API. Il s'agit d'une limite actuelle précise, qui peut être adaptée et limitée pour un certain type d'URI, et peut s'étendre sur plusieurs microservices.

2. La passerelle intègre une sentinelle pour limiter le courant de la passerelle :

        Ensuite, nous présenterons comment Spring Cloud Gateway intègre Sentinel. Quant à la façon de construire un projet de passerelle et d'intégrer le registre nacos, nous l'avons déjà présenté dans l'article précédent. Lecteurs intéressés, veuillez lire cet article : Spring Cloud Gateway Service Gateway Deployment Introduction détaillée utiliser

1. Ajoutez des dépendances liées à la sentinelle :

 		<!-- 引入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. Ajoutez la configuration de la console sentinelle au fichier de configuration :

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

3. Démarrez le projet passerelle :

        Pour le projet de passerelle, nous devons ajouter les paramètres de démarrage suivants en fonction des paramètres de démarrage d'origine et marquer l'application en tant que type de passerelle API :

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

4. Accédez à la console sentinelle :

Jusqu'à présent, nous avons intégré Spring Cloud Gateway à Sentinel, et vous pouvez voir que le projet de passerelle est surveillé en entrant dans la console sentinelle.

 

3. Introduction des règles de contrôle de flux de la passerelle Sentinel :

        Après avoir intégré Spring Cloud Gateway et Sentinel, nous présenterons comment effectuer un contrôle de flux de passerelle basé sur la console sentinel-dashboard, comme illustré dans la figure suivante :

 3.1. Règles de contrôle de flux de la passerelle :

Les principaux attributs de la règle de contrôle de flux de passerelle GatewayFlowRule sont les suivants :

① resourceMode : Que la règle concerne la route de la passerelle API (RESOURCE_MODE_ROUTE_ID) ou le groupe d'API (RESOURCE_MODE_CUSTOM_API_NAME) défini par l'utilisateur dans Sentinel, la valeur par défaut est la route.

② ressource : nom de la ressource, qui peut être le nom de la route dans la passerelle ou le nom du groupe d'API défini par l'utilisateur.

③ note : la dimension de l'indicateur de limite actuelle, identique au champ de note de la règle de limite actuelle

④ comptage : seuil de limitation de courant

⑤ intervalSec : Fenêtre de temps statistique, l'unité est la seconde, la valeur par défaut est 1 seconde

⑥ controlBehavior : l'effet de contrôle de la mise en forme du trafic. Actuellement, il prend en charge deux modes : échec rapide et mise en file d'attente uniforme. La valeur par défaut est l'échec rapide.

⑦ rafale : le nombre de demandes supplémentaires autorisées lors du traitement des demandes en rafale.

⑧ maxQueueingTimeoutMs : le temps d'attente le plus long en mode de file d'attente uniforme, en millisecondes, valable uniquement en mode de file d'attente uniforme.

⑨ paramItem : paramètre de configuration de la limitation de courant. S'il n'est pas fourni, cela signifie que le paramètre ne sera pas limité et que la règle de passerelle sera convertie en règle de contrôle de flux normale ; sinon, elle sera convertie en règle de point d'accès. Les champs qu'il contient :

  • parseStrategy : la stratégie d'extraction des paramètres des requêtes prend actuellement en charge quatre modes d'extraction de l'IP source (PARAM_PARSE_STRATEGY_CLIENT_IP), de l'hôte (PARAM_PARSE_STRATEGY_HOST), de l'en-tête arbitraire (PARAM_PARSE_STRATEGY_HEADER) et des paramètres d'URL arbitraires (PARAM_PARSE_STRATEGY_URL_PARAM).
  • fieldName : si la stratégie d'extraction sélectionne le mode d'en-tête ou le mode de paramètre d'URL, vous devez spécifier le nom d'en-tête ou le nom de paramètre d'URL correspondant.
  • pattern : le modèle correspondant de la valeur du paramètre. Seule la valeur de l'attribut de requête correspondant à ce modèle sera incluse dans les statistiques et le contrôle de flux ; s'il est vide, toutes les valeurs de l'attribut de requête seront comptées.
  • matchStrategy : la stratégie de correspondance pour les valeurs de paramètre prend actuellement en charge la correspondance exacte (PARAM_MATCH_STRATEGY_EXACT), la correspondance de sous-chaîne (PARAM_MATCH_STRATEGY_CONTAINS) et la correspondance régulière (PARAM_MATCH_STRATEGY_REGEX).

3.2. Gestion des groupes d'API :

Le regroupement d'API consiste à regrouper les interfaces, puis à implémenter différentes politiques de limitation de courant pour les interfaces de différents groupes.

(1) Ajouter un groupe d'API :

Comme indiqué dans la figure ci-dessous, suivez les étapes spécifiées pour accéder à l'interface API personnalisée :

 Il existe trois modes de configuration pour le regroupement d'API : les modes exact, préfixe et normal.

  • Mode exact : fait référence à la limite actuelle lorsque le chemin de l'URL correspond complètement. Par exemple, la chaîne de correspondance est configurée comme /order/1
  • Mode de préfixe : fait référence à la limite actuelle lorsque le préfixe de chemin de l'URL correspond. Par exemple, la chaîne de correspondance est configurée comme /order/*
  • Mode régulier : fait référence à la limite actuelle lorsque le chemin de l'URL est conforme aux règles d'expression régulière. Par exemple, la chaîne de correspondance est configurée comme \/order\/\d*

 (2) Configurez les règles de limitation de courant :

Ensuite, vous devez ajouter des règles de contrôle de flux à ce groupe d'API. Le nom de l'API peut être configuré en sélectionnant différents groupes d'API, comme illustré dans la figure suivante :

Après l'ajout, les règles de limitation actuelles prendront effet pour les API qui correspondent au modèle correspondant.  

Quatrièmement, le principe de la mise en œuvre du contrôle de flux de la passerelle sentinelle :

        Après avoir su utiliser sentinel-dashboard pour contrôler le flux de la passerelle, nous allons introduire le principe de mise en œuvre du contrôle de flux de la passerelle sentinelle.

        Lors du chargement de la règle de contrôle de flux de passerelle (GatewayFlowRule) via GatewayRuleManager, que l'attribut de demande soit limité ou non, la couche inférieure de Sentinel convertit la règle de contrôle de flux de passerelle en une règle de paramètre de point d'accès (ParamFlowRule), qui est stockée dans le GatewayRuleManager, qui est identique à la règle de paramètre de point d'accès normal. Lors de la conversion, Sentinel définira l'index de paramètre (idx) pour la règle de contrôle de flux de la passerelle en fonction de la configuration de l'attribut de demande et le synchronisera avec la règle de paramètre de point d'accès générée.

        Lorsqu'une requête externe entre dans API Gateway, elle passera par le filtre implémenté par Sentinel, dans lequel "la correspondance de groupement route/API -> analyse d'attribut de requête et assemblage de paramètres" sera effectuée à son tour. Sentinel analysera les attributs de la requête en fonction des règles de contrôle de flux de la passerelle configurées et assemblera le tableau de paramètres en fonction de l'ordre d'index des paramètres, puis le transmettra à SphU.entry(res, args). Le module Sentinel API Gateway Adapter Common ajoute un GatewayFlowSlot à la chaîne de slots, qui est spécialement utilisé pour vérifier les règles de passerelle. GatewayFlowSlot extraira les règles de paramètre de point d'accès générées à partir de GatewayRuleManager et vérifiera les règles de manière séquentielle en fonction des paramètres entrants. Si une règle ne cible pas l'attribut de requête, une constante prédéfinie sera placée à la dernière position du paramètre pour obtenir l'effet d'un contrôle de flux ordinaire.

 

5. Le service est-il sûr lorsque la passerelle est limitée ?

Si la limite actuelle a été établie au niveau de la passerelle, le service qui se cache derrière est-il sûr ? La réponse est non. Dans l'architecture de microservice, un service indépendant est souvent appelé par plusieurs parties, comme le montre la figure suivante :

        Le service de marchandise n'est pas seulement appelé par la couche passerelle, mais également appelé par le service de commande interne. À ce stade, si le trafic n'est limité qu'au niveau de la couche passerelle, une fois qu'un grand nombre de demandes de services de commande, comme un grand promotion, le service de base sera instantanément vaincu si le trafic n'est pas limité. . Par conséquent, il est nécessaire de limiter le courant pour les services dont vous êtes responsable en fonction du scénario d'entreprise de l'entreprise. La solution la plus courante est : limitation du courant du cluster au niveau de la passerelle + limitation du courant d'une seule machine pour les services internes , afin d'assurer qu'il ne sera pas submergé par le trafic.

6. Personnalisez le message d'exception de contrôle de flux :

        Les informations de retour d'exception par défaut du contrôle de flux de passerelle ne sont pas assez humaines et renvoient directement : "Bloquer ......", ce qui est définitivement inacceptable, alors comment personnaliser les informations d'exception de contrôle de flux de configuration ? En fait, sentinel a implémenté pour nous le contenu de retour des exceptions de contrôle de flux personnalisé. Ajoutez simplement la configuration suivante au fichier de configuration :

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

La configuration du mode dans la configuration ci-dessus est réponse. Une fois le courant limité, une chaîne JSON sera renvoyée.

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

La configuration de la redirection est la suivante :

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

Une fois le courant limité, il passera directement à : http://www.baidu.com

Article de référence :

 Spring Cloud Gateway intègre la limite actuelle de la passerelle Ali Sentinel au combat réel !

Limite de courant de la passerelle · alibaba/Sentinel Wiki · GitHub

Sentinel Gateway Nacos Gateway Current Limiting Three Musketeers - Cloud + Communauté - Tencent Cloud

Je suppose que tu aimes

Origine blog.csdn.net/a745233700/article/details/122917160
conseillé
Classement