Anti-Pattern: Nicht verteiltes Kontingent konfigurieren

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

Apigee 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 Apigee-Komponenten, den sogenannten Message Processorn, verarbeitet werden. Wenn mehrere Message Processor für die Bereitstellung von API-Anfragen konfiguriert sind, wird das Kontingent wahrscheinlich überschritten, da jeder Message Processor die eigene „Anzahl“ der verarbeiteten Anfragen erfasst.

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:

TBD

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>