Antipattern: configurare una quota non distribuita

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.

Apigee offre la possibilità di configurare il numero di richieste a un proxy API consentite per un periodo di tempo specifico utilizzando i criteri per le quote.

Antipattern

Una richiesta al proxy API può essere fornita da uno o più componenti Apigee distribuiti, chiamati processori di messaggi. Se esistono più processori di messaggi configurati per la fornitura delle richieste API, è probabile che la quota venga superata perché ogni processore di messaggi mantiene un "conteggio" separato delle richieste elaborate.

Spieghiamone il funzionamento con l'aiuto di un esempio. Prendiamo in considerazione il criterio per le quote per un proxy API:

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

La configurazione precedente dovrebbe consentire un totale di 100 richieste all'ora.

In pratica, tuttavia, se più processori di messaggi forniscono le richieste API, si verifica quanto segue:

TBD

Nell'illustrazione in alto:

  • Il criterio per le quote è configurato in modo da consentire 100 richieste all'ora.
  • Le richieste al proxy API vengono fornite da due processori di messaggi.
  • Ciascun processore di messaggi mantiene la propria variabile per il conteggio delle quote, quota_count_mp1 e quota_count_mp2, per tenere traccia del numero di richieste elaborate.
  • Pertanto, ciascun processore di messaggi consentirà separatamente 100 richieste API. L'effetto netto è che viene elaborato un totale di 200 richieste invece di 100 richieste.

Impatto

Questa situazione contrasta la finalità della configurazione della quota e può avere effetti negativi sui server di backend che forniscono le richieste.

I server di backend possono:

  • Essere stressati a causa di un traffico in entrata più elevato del previsto
  • Non rispondere più alle richieste API più recenti che causano errori 503

Best practice

Valuta la possibilità di impostare l'elemento <Distributed> su true nel criterio per le quote per assicurarti che venga utilizzato un contatore comune per tenere traccia delle richieste API in tutti i processori di messaggi. L'elemento <Distributed> può essere impostato come mostrato nello snippet di codice seguente:

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