Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.
Apigee permet de configurer le nombre de requêtes autorisées vers un proxy d'API pour une période spécifique à l'aide d'une règle de quota.
Antimodèle
Une requête de proxy d'API peut être diffusée par un ou plusieurs composants Apigee 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 utilise son propre "dé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 :
L'image ci-dessus montre que :
- 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
etquota_count_mp2
, pour suivre le nombre de requêtes qu'il traite ; - chaque processeur de messages autorise 100 requêtes d'API distinctes, donc 200 requêtes sont traitées au total 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>