Freigeben über


Aufrufrate nach Schlüssel begrenzen

GILT FÜR: Developer | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

Die rate-limit-by-key-Richtlinie verhindert API-Nutzungsspitzen auf Schlüsselbasis, indem sie die Aufrufrate auf eine angegebene Anzahl pro angegebenem Zeitraum beschränkt. Der Schlüssel kann einen beliebigen Zeichenfolgenwert aufweisen und wird in der Regel über einen Richtlinienausdruck angegeben. Optional kann eine inkrementelle Bedingung hinzugefügt werden, um anzugeben, welche Anforderungen für den Grenzwert gezählt werden sollen. Wenn diese Aufrufrate überschritten wird, empfängt der Aufrufer einen 429 Too Many Requests-Antwortstatuscode.

Informationen zu den Unterschieden zwischen Ratenbegrenzungen und Kontingenten finden Sie unter Ratenbegrenzungen und Kontingente.

Achtung

Aufgrund der verteilten Art der Drosselungsarchitektur ist die Zinsbegrenzung nie vollständig genau. Der Unterschied zwischen der konfigurierten Anzahl zulässiger Anforderungen und der tatsächlichen Zahl variiert je nach Anforderungsvolumen und -rate, Back-End-Latenz und anderen Faktoren.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Das Portal unterstützt Sie bei der Konfiguration dieser Richtlinie durch einen formularbasierten, angeleiteten Editor. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   retry-after-header-name="custom header name, replaces default 'Retry-After'" 
                   retry-after-variable-name="policy expression variable name"
                   remaining-calls-header-name="header name"  
                   remaining-calls-variable-name="policy expression variable name"
                   total-calls-header-name="header name"/> 

Attribute

Attribut BESCHREIBUNG Erforderlich Standard
Aufrufe Die maximale Gesamtanzahl von Aufrufen, die für den Schlüsselwert während des Zeitintervalls zulässig sind, der in renewal-period angegeben ist. Richtlinienausdrücke sind zulässig. Ja
Gegentaste Der Schlüssel, der für die Ratenbegrenzungsrichtlinie verwendet werden soll. Für jeden Schlüsselwert wird ein einzelner Indikator für alle Bereiche verwendet, in denen die Richtlinie konfiguriert ist. Richtlinienausdrücke sind zulässig. Ja
Inkrement-Bedingung Dieser boolesche Ausdruck gibt an, ob die Anforderung auf die Ratenbegrenzung angerechnet werden soll (true). Richtlinienausdrücke sind zulässig, verschieben jedoch die Bewertung und die Aktionen zur Erhöhung des Zählers an das Ende der ausgehenden Pipeline. Nein
Inkrementierungsanzahl Die Zahl, um die der Zähler pro Anforderung erhöht wird. Richtlinienausdrücke sind zulässig, verschieben jedoch die Bewertung und die Erhöhung des Zählers an das Ende der ausgehenden Pipeline. Nein 1
Verlängerungszeitraum Die Länge des gleitenden Fensters in Sekunden, in der die Anzahl zulässiger Anforderungen den in calls angegebenen Wert nicht überschreiten darf. Maximal zulässiger Wert: 300 Sekunden. Richtlinienausdrücke sind zulässig. Ja
Retry-after-header-name Der Name eines benutzerdefinierten Antwortheaders, dessen Wert das empfohlene Wiederholungsintervall in Sekunden ist, nachdem die angegebene Anrufrate für den Schlüsselwert überschritten wurde. Richtlinienausdrücke sind nicht zulässig. Nein Retry-After
retry-after-variable-name Der Name einer Richtlinienausdrucksvariablen, die das empfohlene Wiederholungsintervall in Sekunden speichert, nachdem die angegebene Aufrufrate für den Schlüsselwert überschritten wurde. Richtlinienausdrücke sind nicht zulässig. Nein
Restaufrufe-Header-Name Der Name eines Antwortheaders, dessen Wert nach jeder Richtlinienausführung die Anzahl der verbleibenden Aufrufe ist, die für den Schlüsselwert in dem Zeitintervall zulässig sind, der in renewal-period angegeben ist. Richtlinienausdrücke sind nicht zulässig. Nein
Restaufrufe-Variable-Name Der Name einer Richtlinienausdrucksvariablen, in der nach jeder Richtlinienausführung die Anzahl der verbleibenden Aufrufe gespeichert wird, die für den Schlüsselwert in dem Zeitintervall zulässig sind, der in renewal-period angegeben ist. Richtlinienausdrücke sind nicht zulässig. Nein
Total-calls-header-name Der Name eines Antwortheaders, dessen Wert der in calls angegebene Wert ist. Richtlinienausdrücke sind nicht zulässig. Nein

Verwendung

Hinweise zur Verwendung

  • API Management verwendet einen einzelnen Zähler für jeden counter-key-Wert, den Sie in der Richtlinie angeben. Der Zähler wird für alle Bereiche aktualisiert, für die die Richtlinie mit diesem Schlüsselwert konfiguriert ist. Wenn Sie für verschiedene Bereiche separate Zähler konfigurieren möchten (z. B. eine bestimmte API oder ein bestimmtes Produkt), geben Sie für die verschiedenen Bereiche unterschiedliche Schlüsselwerte an. Fügen Sie beispielsweise eine Zeichenfolge an, die den Bereich auf den Wert eines Ausdrucks festlegt.
  • Ratengrenzwerte in einem selbstgehosteten Gateway können so konfiguriert werden, dass sie lokal (zwischen Gatewayinstanzen über Clusterknoten hinweg) synchronisiert werden, z. B. über die Helm-Diagrammbereitstellung für Kubernetes oder mithilfe der Azure-Portal Bereitstellungsvorlagen. Ratengrenzwerte werden jedoch nicht mit anderen in der API Management-Instanz konfigurierten Gateway-Ressourcen synchronisiert, einschließlich des verwalteten Gateways in der Cloud. Weitere Informationen
  • Diese Richtlinie verfolgt Aufrufe unabhängig von jedem Gateway, in dem es angewendet wird, einschließlich Arbeitsbereichsgateways und regionalen Gateways in einer Bereitstellung mit mehreren Regionen. Es aggregiert keine Aufrufdaten über die gesamte Instanz hinweg.
  • Wenn increment-condition Ausdrücke increment-count , Auswertung und Inkrementierung des Satzgrenzwertzählers mithilfe von Ausdrücken definiert oder definiert werden, werden auf das Ende der ausgehenden Pipeline verschoben, um Richtlinienausdrücke basierend auf der Antwort zuzulassen. Der Grenzwertüberschreitungszustand wird in diesem Fall nicht gleichzeitig ausgewertet und wird beim nächsten eingehenden Anruf ausgewertet. Dies führt dazu, dass der 429 Too Many Requests Statuscode einen Anruf später als gewöhnlich zurückgegeben wird.

Beispiel

Im folgenden Beispiel wird die Ratenbegrenzung von 10 Aufrufen pro 60 Sekunden anhand der IP-Adresse des Aufrufers bestimmt. Nach jeder Richtlinienausführung werden die verbleibenden Aufrufe, die in dem Zeitraum für diese aufrufende IP-Adresse zulässig sind, in der Variablen remainingCallsPerIP gespeichert.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

Weitere Informationen und Beispiele zu dieser Richtlinie finden Sie unter Erweiterte Anforderungsbegrenzung mit Azure API Management.

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: