Implementieren von Ratenbeschränkungen in Azure API Management

Durch die Verwendung der Ratenbegrenzung können Sie die Anzahl der API-Aufrufe begrenzen, die ein Benutzer oder Dienst in einem bestimmten Zeitraum ausführen kann. Durch die Begrenzung der Raten können Sie eine faire Nutzung sicherstellen und verhindern, dass einzelne Benutzer oder Dienste die API-Ressourcen monopolisieren. Azure API Management bietet eine bequeme Möglichkeit, die Ratenbegrenzung für Ihre APIs zu implementieren.

Gründe für die Verwendung von Azure API Management

Azure API Management ist ein leistungsstarker und vielseitiger Clouddienst, der Organisationen hilft, APIs für externe, Partner und interne Entwickler zu veröffentlichen. Es bietet Tools zum Sichern, Verwalten und Skalieren von API-Aufrufen. Eine der Funktionen ist die Steuerung der Ratenbegrenzung, die nützlich ist, um den Zustand und die Zuverlässigkeit Ihrer APIs aufrechtzuerhalten.

Konfigurieren von Ratenbeschränkungen in Azure API Management

Azure API Management verwendet Richtlinien zum Erzwingen von Ratenbeschränkungen. Sie können diese Richtlinien in verschiedenen Bereichen definieren: global, produkt- oder API-spezifisch. Diese Flexibilität ermöglicht es Ihnen, die Ratelimitierung entsprechend den Anforderungen und Nutzungsmustern Ihrer API anzupassen.

Bevor Sie mit der Implementierung der Zinsbegrenzung beginnen, entscheiden Sie sich für die Zinslimits. Die Limits, die Sie festlegen, hängen von der Kapazität Ihrer API und dem erwarteten Datenverkehr ab. Allgemeine Grenzwerte werden als Anzahl der Anrufe pro Sekunde, Minute oder Stunde festgelegt. Sie können z. B. 1.000 Anrufe pro Minute und Benutzer zulassen.

Verwenden Sie die rate-limit-Richtlinien oder die rate-limit-by-key-Richtlinien, um die Grenzwerte für Ihre API in Azure API Management zu definieren. Die rate-limit Richtlinie legt einen Grenzwert für alle Benutzer fest. Die rate-limit-by-key Richtlinie lässt Grenzwerte pro identifiziertem Schlüssel (z. B. einem Abonnement oder einer Benutzer-ID) zu.

Im Folgenden finden Sie ein Beispiel für eine Richtlinie, die die Aufrufe auf 1.000 pro Minute beschränkt.

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

Wenn Sie die angegebene Anzahl von Aufrufen überschreiten, sendet Azure API Management einen 429 Too Many Requests Statuscode zusammen mit dem retry-after Antwortheader und einer Meldung, die angibt, wann Sie es erneut versuchen können.

HTTP/1.1 429 Too Many Requests
content-type: application/json
retry-after: 60
    
{
  "statusCode": 429,
  "message": "Rate limit is exceeded. Try again in 60 seconds."
}

Verfügbarmachen von Informationen zum Ratenlimit für Antwortheader

Standardmäßig macht Azure API Management keine Informationen zum Zinsgrenzwert für Antwortheader verfügbar. Durch fehlende Kommunikation von Ratenlimits ist es für Apps schwierig, ein Überschreiten des Limits und damit eine Drosselung zu vermeiden. Um Informationen zum Ratenlimit anzuzeigen, erweitern Sie die rate-limit Richtlinie mit den remaining-calls-header-name und total-calls-header-name Eigenschaften.

<policies>
  <inbound>
    <base />
    <rate-limit calls="1000" renewal-period="60" remaining-calls-header-name="ratelimit-remaining" total-calls-header-name="ratelimit-limit" />
  </inbound>
  <backend>
    <base />
  </backend>
  <outbound>
    <base />
  </outbound>
  <on-error>
    <base />
  </on-error>
</policies>

Wenn Sie Ihre API jetzt aufrufen, enthält jede Antwort die Header ratelimit-remaining und ratelimit-limit. Die Header geben an, wie viele weitere Aufrufe die API verarbeiten kann, bevor sie den Grenzwert überschreitet.

Zusammenfassung

Die Implementierung von Ratenbeschränkungen in Azure API Management hilft Ihnen beim Erstellen robuster und skalierbarer APIs. Durch die Verwendung von Ratenbeschränkungen können Sie sicherstellen, dass Ihre API Ihren Benutzern zuverlässig und effizient dient. Der Schlüssel liegt darin, die richtige Balance zu finden. Wenn ein Ratenlimit zu streng ist, können Sie die Benutzerfreundlichkeit beeinträchtigen. Wenn ein Ratenlimit zu nachsichtig ist, riskieren Sie, Ihre API zu überlasten. Mit sorgfältiger Planung und kontinuierlicher Überwachung können Sie dieses Gleichgewicht erreichen und eine gesunde API-Umgebung verwalten.

Testen Sie Ihre Clients

Überprüfen Sie nach der Implementierung der Ratenbeschränkung für Ihre API, ob die Apps, die Ihre API aufrufen, damit umgehen. Wenn ein Client einen durch rate-limit oder rate-limit-by-key festgelegten Grenzwert überschreitet, gibt die API-Verwaltung Retry-After mit einem 429 Too Many Requests-Header zurück. Clients, die dies ignorieren, versuchen es weiterhin erneut und bleiben gedrosselt.

Approach Was Sie finden Was Ihnen fehlt
Warten auf die Produktion Tatsächliches Kundenverhalten Jeder fehlerhafte Client, dessen Benutzer den Grenzwert erreichen
Simulierte API-Verwaltung in den Tests des Clients Ob der Retry-Zweig des Clients ausgeführt wird Ihre tatsächlichen Grenzwerte, Header und der Zeitpunkt des Zurücksetzens sowie der echte HTTP-Stack des Clients
Rufen Sie Ihre API-Verwaltungsinstanz auf, bis sie gedrosselt wird Tatsächliches Verhalten Sie benötigen eine Testinstanz, und Sie können das Limit bei Bedarf nicht erreichen, ohne Aufrufe zu verbrauchen.
Fangen Sie den Datenverkehr des Clients ab und simulieren Sie Ihre Limits Ihr Limit, Zeitfenster und Header auf der echten API-URL und ob der Client so lange wartet, wie von Retry-After angegeben Der Code des Clients in Isolation. Behalten Sie Unit-Tests dafür bei.

Der Dev-Proxy simuliert das von Ihnen konfigurierte Verhalten der Ratenbegrenzung mit dem gleichen Grenzwert, zeitfenstern und Antwortheadern, während die Client-App weiterhin Ihre echte API-URL aufruft. Verwenden Sie RateLimitingPlugin mit rateLimit und resetTimeWindowSeconds, die auf die calls und renewal-period Ihrer Richtlinie festgelegt sind, wobei costPerRequest auf 1 festgelegt ist (standardmäßig ist 2 eingestellt, wodurch Ihr Limit halbiert wird) und headerLimit und headerRemaining auf die Kopfzeilennamen aus Ihrer Richtlinie festgelegt sind. Fügen Sie das RetryAfterPlugin davor ein, damit Dev Proxy Sie informiert, wenn ein Client zu früh erneut aufruft. Details finden Sie unter Simulieren von API-Antworten zur Ratebegrenzung. Zum Installieren von Dev Proxy siehe Einrichten von Dev Proxy.

Nächster Schritt