Anti-Pattern: Nicht verteiltes Kontingent konfigurieren

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Apigee Edge bietet die Möglichkeit, die Anzahl der zulässigen Anfragen an einen API-Proxy für einen bestimmten Zeitraum mithilfe der Kontingentrichtlinie zu konfigurieren.

Anti-Pattern

Eine API-Proxy-Anfrage kann von einer oder mehreren verteilten Edge-Komponenten, den sogenannten Nachrichtenprozessoren, verarbeitet werden. Wenn mehrere Message Processor für die Verarbeitung von API-Anfragen konfiguriert sind, wird das Kontingent wahrscheinlich überschritten, da jeder Message Processor seine eigene „Anzahl“ der von ihm verarbeiteten Anfragen behält.

Das soll anhand eines Beispiels erläutert werden. Betrachten Sie die folgende Kontingentrichtlinie für einen API-Proxy:

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

Die obige Konfiguration sollte insgesamt 100 Anfragen pro Stunde zulassen.

In der Praxis geschieht jedoch Folgendes, wenn mehrere Message Processor die API-Anfragen verarbeiten:

Für die obige Abbildung gilt:

  • Die Kontingentrichtlinie ist so konfiguriert, dass 100 Anfragen pro Stunde zulässig sind.
  • Die Anfragen an den API-Proxy werden von zwei Message Processorn verarbeitet.
  • Jeder Message Processor verwaltet eine eigene Kontingentanzahlvariable, quota_count_mp1 und quota_count_mp2, um die Anzahl der verarbeiteten Anfragen zu verfolgen.
  • Jeder Message Processor ermöglicht beispielsweise 100 API-Anfragen separat. So werden insgesamt 200 Anfragen anstelle von 100 Anfragen verarbeitet.

Auswirkungen

Diese Situation macht den Zweck der Kontingentkonfiguration zunichte und kann sich nachteilig auf die Back-End-Server auswirken, die die Anfragen verarbeiten.

Die Back-End-Server können:

  • aufgrund des erwarteten eingehenden Traffics überlastet sein
  • auf neuere API-Anfragen, die zu 503-Fehlern führen, nicht mehr reagieren

Best Practice

Sie können gegebenenfalls in der Kontingentrichtlinie das Element <Distributed> auf true setzen, um sicherzustellen, dass die von allen Message Processorn verarbeiteten API-Anfragen über einen gemeinsamen Zähler verfolgt werden. Das Element <Distributed> kann wie im folgenden Code-Snippet festgelegt werden:

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