Tous les produits
Search
Centre de documentation

API Gateway:Plug-ins de disjoncteur (pour les instances dédiées uniquement)

Dernière mise à jour :Aug 09, 2026

Les disjoncteurs protègent votre système lorsque les performances du backend se dégradent. Configurez les conditions de déclenchement, les durées d'ouverture et les backends de secours pour les instances dédiées.

Limites

  • Instances dédiées uniquement.

  • Maximum 512 caractères par expression.

  • Taille maximale de la configuration du plug-in : 50 Ko.

1. Présentation

Par défaut, si 1 000 délais d'attente se produisent au niveau d'un backend d'API dans un délai de 30 secondes, le disjoncteur se déclenche et passe à l'état ouvert pendant 90 secondes. Durant cette période, toutes les requêtes renvoient Status=503 avec le code d'erreur X-Ca-Error-Code=D503CB. Au bout de 90 secondes, le disjoncteur passe à l'état semi-ouvert et autorise un petit nombre de requêtes. Si le backend récupère, le disjoncteur se ferme et les requêtes reprennent normalement.

Sur une instance dédiée, le plug-in de disjoncteur vous permet de personnaliser les paramètres suivants du disjoncteur :

  • Condition de déclenchement : le disjoncteur se déclenche lorsque les délais d'attente du backend ou les erreurs spécifiées dépassent un seuil dans une fenêtre temporelle.

  • Fenêtre temporelle d'évaluation des conditions de déclenchement.

  • Durée d'ouverture après le déclenchement du disjoncteur.

  • Backend de secours pour les requêtes lorsque le disjoncteur est ouvert.

2. Configurations

Les configurations des plug-ins de disjoncteur s'appliquent uniquement aux API sur des instances dédiées. Sur les instances serverless, la configuration par défaut du disjoncteur est utilisée même si un plug-in est lié à l'API.

2.1 Configuration des politiques de dégradation basées sur les délais d'attente du backend

Configurez une politique de dégradation basée sur les délais d'attente du backend. Une requête est considérée comme ayant expiré si le backend ne répond pas dans le délai défini par l'API.

timeoutThreshold: 15         # The threshold of the number of occurrences of timeout at the backend.
windowInSeconds: 30          # The time window during which the number of occurrences of timeout at the backend is checked by the circuit breaker to determine whether to trip.
openTimeoutSeconds: 15       # The period of time during which the circuit breaker stays open after it trips.
downgradeBackend:            # The backend to which API requests are directed when the circuit breaker is open.
  type: mock
  statusCode: 418

Champs :

  • timeoutThreshold : nombre de délais d'attente du backend qui déclenche le disjoncteur. Valeur maximale : 5000. Une valeur trop faible entraîne des déclenchements fréquents.

  • windowInSeconds : fenêtre temporelle d'évaluation. Valeurs valides : 10 à 90. Unité : secondes.

  • openTimeoutSeconds : durée pendant laquelle le disjoncteur reste ouvert. Valeurs valides : 15 à 300. Unité : secondes.

  • downgradeBackend : facultatif. Backend de secours utilisé lorsque le disjoncteur est ouvert.

2.2 Configuration d'une politique de dégradation basée sur le temps de réponse du backend

Configurez une politique de dégradation basée sur le temps de réponse du backend, mesuré depuis l'envoi de la requête par la passerelle jusqu'à la réception de la réponse.

errorThreshold: 10         # The threshold of the number of occurrences of long response at the backend.
windowInSeconds: 60          # The time window during which the number of occurrences of long response at the backend is checked by the circuit breaker to determine whether to trip.
openTimeoutSeconds: 120        # The period of time during which the circuit breaker stays open after it trips.
errorCondition: "$LatencyMilliSeconds > 500"     # The conditional expression that is used to determine whether the backend response is counted as a long response. In this example, if the backend response time exceeds 500 ms, the response is considered as a long response.
downgradeBackend:               # The backend to which API requests are directed when the circuit breaker is open.
  type: mock
  statusCode: 403

Champs :

  • errorThreshold : nombre de réponses lentes qui déclenche le disjoncteur.

  • windowInSeconds : fenêtre temporelle d'évaluation. Valeurs valides : 10 à 90. Unité : secondes.

  • openTimeoutSeconds : durée pendant laquelle le disjoncteur reste ouvert. Valeurs valides : 15 à 300. Unité : secondes.

  • errorCondition : expression définissant une réponse lente. Variables disponibles : $LatencyMilliSeconds (millisecondes) et $LatencySeconds (secondes).

  • downgradeBackend : facultatif. Backend de secours utilisé lorsque le disjoncteur est ouvert.

2.3 Configuration d'une politique de dégradation basée sur les erreurs du backend

Configurez une politique de dégradation basée sur les codes d'erreur du backend.

errorCondition: "$StatusCode == 503"  # The conditional expression that specifies the error whose number of occurrences is checked by the circuit breaker to determine whether to trip.
errorThreshold: 1000                  # The threshold of the number of occurrences of the specified error.
windowInSeconds: 30                   # The time window during which the number of occurrences of the specified error at the backend is checked by the circuit breaker to determine whether to trip.
openTimeoutSeconds: 15                # The period of time during which the circuit breaker stays open after it trips.
downgradeBackend:                     # The backend to which API requests are directed when the circuit breaker is open.
  type: "HTTP"
  address: "http://api.foo.com"
  path: "/system-busy.json"
  method: GET
  • errorCondition : expression d'erreur. Variables disponibles : $StatusCode (code de réponse) et $LatencySeconds (latence en secondes).

    • Par exemple, l'expression $StatusCode = 503 or $StatusCode = 504 renvoie la valeur true si le code d'état de la réponse du backend est 503 ou 504.

    • Par exemple, $LatencySeconds > 30 indique que le délai d'attente dépasse 30 secondes.

  • errorThreshold : nombre d'erreurs correspondantes qui déclenche le disjoncteur.

  • windowsInSeconds : fenêtre temporelle d'évaluation. Valeurs valides : 10 à 90. Unité : secondes.

  • openTimeoutSeconds : durée pendant laquelle le disjoncteur reste ouvert. Valeurs valides : 15 à 300. Unité : secondes.

  • downgradeBackend : facultatif. Backend de secours utilisé lorsque le disjoncteur est ouvert.

2.4 Contrôle précis de l'état

API Gateway s'exécute sur plusieurs nœuds de cluster, chacun maintenant son propre état de disjoncteur. Cela peut entraîner une imprécision de l'état entre les nœuds. Pour activer un état de disjoncteur globalement cohérent, ajoutez le useGlobalState champ à la configuration de votre plug-in :

---
timeoutThreshold: 15 # The threshold of the number of occurrences of timeout at the backend.
windowInSeconds: 30 # The time window during which the number of occurrences of timeout at the backend is checked by the circuit breaker to determine whether to trip.
openTimeoutSeconds: 15 # The period of time during which the circuit breaker stays open after it trips.
useGlobalState: true # Accurate status control is enabled.
downgradeBackend: # The backend to which API requests are directed when the circuit breaker is open.
 type: mock
 statusCode: 302
 body: |
 <result>
 <errorCode>I's a teapot</errorCode>
 </result>

La valeur par défaut de useGlobalState est false. La définir sur true permet d'obtenir un état précis au prix d'une légère surcharge de performance, ce qui n'affecte pas les QPS garantis ni le SLA de votre instance.

2.5 Configuration d'une politique de dégradation par pourcentage

Le disjoncteur se déclenche lorsque l'une des quatre conditions suivantes est remplie. Toutes les conditions ont la même priorité.

  • errorThreshold : nombre d'erreurs du backend (correspondant à errorCondition) qui déclenche le disjoncteur.

  • timeoutThreshold : nombre de délais d'attente du backend qui déclenche le disjoncteur.

  • errorThresholdByPercent : seuil de taux d'erreur, évalué par rapport au taux d'erreur de la fenêtre temporelle précédente.

  • timeoutThresholdByPercent : seuil de taux de délai d'attente en pourcentage du total des requêtes dans une fenêtre temporelle.

Exemple :

---
windowInSeconds: 3  # The time window during which the circuit breaker determines whether to trip. Valid values: 10 to 90. Unit: seconds.
openTimeoutSeconds: 3
errorThreshold: 90  # The threshold of the number of occurrences of the specified error.
timeoutThreshold: 90   # The threshold of the number of occurrences of timeout.
errorThresholdByPercent: 20    # The threshold of the percentage of requests in which the specified error occurs to the total number of requests.
timeoutThresholdByPercent: 20   # The threshold of the percentage of requests in which timeout occurs to the total number of requests.
errorCondition: "$StatusCode = 500"   # The error condition.
downgradeBackend:
  type: mock
  statusCode: 418
  body: |
    <result>
      <errorCode>I's a teapot</errorCode>
    </result>
Important
  • Les seuils de pourcentage nécessitent au moins 100 requêtes dans une fenêtre temporelle pour prendre effet.

  • Dans cet exemple, errorThreshold: 90 et timeoutThreshold: 90 provoquent le déclenchement du disjoncteur si les erreurs ou les délais d'attente dépassent 90 dans une fenêtre temporelle.

  • errorThresholdByPercent: 20 et timeoutThresholdByPercent: 20 déclenchent le disjoncteur si la fenêtre temporelle précédente comportait au moins 100 requêtes et si le taux d'erreur ou de délai d'attente dépassait 20 %.

  • Les politiques de délai d'attente basées sur le pourcentage sont prises en charge à partir de la version de juin 2023.

2.6 Limitation des requêtes lors du déclenchement du disjoncteur

Lorsque le disjoncteur se déclenche, une configuration de limitation temporaire s'applique à tout le trafic pendant que le disjoncteur est ouvert ou semi-ouvert :

---
windowInSeconds: 1             # The time window in which the circuit breaker checks the number of occurrences of timeout at the backend.
openTimeoutSeconds: 15          # The period of time during which the circuit breaker stays open after it trips.
errorThreshold: 3
errorCondition: "$LatencyMilliSeconds > 1"
downgradeTrafficLimit:               # The backend to which API requests are directed when the circuit breaker is open.
  limit: 2
  period: MINUTE

3. Configuration du backend de secours

Utilisez downgradeBackend pour spécifier un backend de secours lorsque le disjoncteur est ouvert. La configuration du backend doit correspondre au format de spécification d'API utilisé dans API Gateway (Importer des fichiers Swagger pour créer des API avec les extensions API Gateway). Les types de backend suivants sont pris en charge :

  • Backend HTTP

---
backend:
  type: HTTP
  address: "http://10.10.100.2:8000"
  path: "/users/{userId}"
  method: GET
  timeout: 7000        
  • Backend HTTP (VPC)

---
backend:
  type: HTTP-VPC
  vpcAccessName: vpcAccess1
  path: "/users/{userId}"
  method: GET
  timeout: 10000        
  • Function Compute

---
backend:
  type: FC
  fcRegion: cn-shanghai
  serviceName: fcService
  functionName: fcFunction
  arn: "acs:ram::111111111:role/aliyunapigatewayaccessingfcrole"        
  • MOCK

---
backend:
  type: MOCK
  mockResult: "mock result sample"
  mockStatusCode: 200
  mockHeaders:
    - name: Content-Type
      value: text-plain
    - name: Content-Language
      value: zhCN

4. Codes d'erreur

Code d'erreur

Code d'état HTTP

Message

Description

D503BB

503

Backend circuit breaker busy

L'API est protégée par son disjoncteur.

D503CB

503

Backend circuit breaker open, ${Reason}

Le disjoncteur est ouvert. Vérifiez les performances du backend avant de retester les appels d'API.