Antimodèle : configurer un quota non distribué

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Apigee Edge offre la possibilité de configurer le nombre de requêtes autorisées vers un proxy d'API pendant une période donnée à l'aide des Règles de quotas.

Antimodèle

Une requête de proxy d'API peut être diffusée par un ou plusieurs composants Edge distribués appelés processeurs de messages. Si plusieurs processeurs de messages sont configurés pour diffuser les requêtes API, le quota sera probablement dépassé, car chaque processeur de messages conserve son propre "compte" des requêtes qu'il traite.

Par exemple, imaginons que la règle de quota suivante est appliquée à un proxy d'API :

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

La configuration ci-dessus devrait autoriser un total de 100 requêtes par heure.

Cependant, en pratique, lorsque plusieurs processeurs de messages diffusent les requêtes API, voici ce qui se passe :

Dans l'illustration ci-dessus:

  • la règle de quota est configurée pour autoriser 100 requêtes par heure ;
  • les requêtes adressées au proxy d'API sont diffusées par deux processeurs de messages ;
  • chaque processeur de messages utilise sa propre variable de décompte du quota, quota_count_mp1 et quota_count_mp2, pour suivre le nombre de requêtes qu'il traite ;
  • Chaque processeur de messages autorise donc 100 requêtes d'API distinctes. L'effet net est que 200 requêtes au total sont traitées au lieu de 100.

Impact

Cette situation ne respecte pas l'objectif de la configuration du quota, et peut avoir des conséquences indésirables sur les serveurs de backend qui traitent les requêtes.

Les serveurs de backend peuvent :

  • être extrêmement sollicités en raison d'un trafic entrant plus important que prévu ;
  • arrêter de répondre aux requêtes API plus récentes, ce qui génère des erreurs 503.

Bonne pratique

Envisagez de définir l'élément <Distributed> sur true dans la règle de quota pour vous assurer qu'un compteur commun est utilisé pour effectuer le suivi des requêtes API sur l'ensemble des processeurs de messages. Vous pouvez définir l'élément <Distributed> comme montré dans l'extrait de code ci-dessous :

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>