Anti-Pattern: Nicht verteiltes Kontingent konfigurieren

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

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

Anti-Pattern

Eine API-Proxy-Anfrage kann von einer oder mehreren verteilten Edge-Komponenten namens Nachrichtenprozessoren Wenn mehrere Message Processor für die Bereitstellung der API konfiguriert sind anfragen, wird das Kontingent wahrscheinlich überschritten, da jeder Message Processor „Anzahl“ verarbeitet werden.

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 verhindert den Zweck der Kontingentkonfiguration und kann sich negativ auf die Backend-Server auswirken, die die Anfragen verarbeiten.

Die Backend-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>