<ph type="x-smartling-placeholder"></ph>
Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur
Apigee X-Dokumentation. Weitere Informationen
Die Spike Arrest-Richtlinie schützt mit dem Element <Rate>
vor Verkehrsanstiegen. Dieses Element drosselt die Anzahl der Anfragen, die von einem API-Proxy verarbeitet und an ein Back-End gesendet werden, um Leistungsverzögerungen und Ausfallzeiten zu verhindern.
Element <SpikeArrest>
Definiert die Spike Arrest-Richtlinie.
Standardwert | Siehe Standardrichtlinie Tab unten |
Erforderlich? | Optional |
Typ | Komplexes Objekt |
Übergeordnetes Element | – |
Untergeordnete Elemente |
<Identifier> <MessageWeight> <Rate> (erforderlich)<UseEffectiveCount> |
Syntax
Das <SpikeArrest>
-Element verwendet die folgende Syntax:
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <DisplayName>display_name</DisplayName> <Properties/> <Identifier ref="flow_variable"/> <MessageWeight ref="flow_variable"/> <Rate ref="flow_variable">rate[pm|ps]</Rate> <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Standardrichtlinie
Das folgende Beispiel zeigt die Standardeinstellungen, wenn Sie eine Spike Arrest-Richtlinie zu Ihrem in der Edge-Benutzeroberfläche:
<SpikeArrest async="false" continueOnError="false" enabled="true" name="Spike-Arrest-1"> <DisplayName>Spike Arrest-1</DisplayName> <Properties/> <Identifier ref="request.header.some-header-name"/> <MessageWeight ref="request.header.weight"/> <Rate>30ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Dieses Element hat folgende Attribute, die allen Richtlinien gemeinsam sind:
Attribut | Standard | Erforderlich? | Beschreibung |
---|---|---|---|
name |
– | Erforderlich |
Der interne Name der Richtlinie. Der Wert des Attributs Optional können Sie das Element |
continueOnError |
falsch | Optional | Ist das Element auf "false" gesetzt, wird ein Fehler zurückgegeben, wenn eine Richtlinie fehlschlägt. Dies ist für die meisten Richtlinien das erwartete Verhalten. Ist das Element auf "true" gesetzt, wird die Ausführung des Ablaufs auch nach dem Fehlschlagen einer Richtlinie fortgesetzt. |
enabled |
wahr | Optional | Auf "true" setzen, um die Richtlinie durchzusetzen. Auf "false" setzen, um die Richtlinie zu "deaktivieren". Die Richtlinie wird nicht durchgesetzt, selbst wenn sie mit einem Ablauf verknüpft ist. |
async |
falsch | Eingestellte Funktionen | Dieses Attribut wurde verworfen. |
Beispiele
Die folgenden Beispiele zeigen Möglichkeiten, wie Sie die Spike Arrest-Richtlinie verwenden können:
Beispiel 1
Im folgenden Beispiel wird die Rate auf fünf pro Sekunde festgelegt:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Die Richtlinie glättet die Rate auf eine Anfrage alle 200 Millisekunden (1000/5).
Beispiel 2
Im folgenden Beispiel wird die Rate auf 12 pro Minute festgelegt:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Diese Beispielrichtlinie glättet die Rate auf eine Anfrage alle fünf Sekunden (60/12).
Beispiel 3
Im folgenden Beispiel werden Anfragen auf 12 pro Minute beschränkt (eine Anfrage ist alle fünf Sekunden bzw. 60/12 zulässig):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Darüber hinaus akzeptiert das Element <MessageWeight>
einen benutzerdefinierten Wert (den Header weight
), mit dem die Gewichtungen von Nachrichten für bestimmte Anwendungen oder Clients angepasst werden. Hierdurch kann die Drosselung für Entitäten, die mit dem Element <Identifier>
identifiziert werden, zusätzlich gesteuert werden.
Beispiel 4
Das folgende Beispiel weist Spike Arrest an, nach einem Laufzeitwert zu suchen, der über die Methode
, die als request.header.runtime_rate
-Flussvariable übergeben wird:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
Der Wert der Ablaufvariable muss das Format intpm
oder intps
haben.
Wenn Sie dieses Beispiel ausprobieren möchten, führen Sie eine Anfrage wie diese aus:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
Verweis auf untergeordnetes Element
In diesem Abschnitt werden die untergeordneten Elemente von <SpikeArrest>
beschrieben.
<DisplayName>
Wird zusätzlich zum Attribut name
verwendet, um die Richtlinie im Proxy-Editor der Verwaltungs-UI mit einem anderen, natürlicher klingenden Namen zu versehen.
Das Element <DisplayName>
ist für alle Richtlinien gleich.
Standardwert | – |
Erforderlich/Optional? | Optional. Wenn Sie <DisplayName> weglassen, wird der Wert des Attributs name der Richtlinie verwendet. |
Typ | String |
Übergeordnetes Element | <PolicyElement> |
Untergeordnete Elemente | – |
Das <DisplayName>
-Element verwendet die folgende Syntax:
Syntax
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Beispiel
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Das <DisplayName>
-Element hat keine Attribute oder untergeordneten Elemente.
<Identifier>
Hier können Sie auswählen, wie die Anfragen gruppiert werden sollen, damit die Spike Arrest-Richtlinie basierend auf auf der Kundschaft. Du kannst beispielsweise Anfragen nach Entwickler-ID gruppieren. Anfragen des Entwicklers werden auf ihre eigene Spike Arrest-Rate angerechnet und nicht auf alle Anfragen an die Proxy.
Wird in Verbindung mit dem Element <MessageWeight>
für eine genauere Steuerung der Anfragedrosselung verwendet.
Wenn Sie das Element <Identifier>
leer lassen, wird für alle Anfragen an diesen API-Proxy eine Ratenbegrenzung erzwungen.
Standardwert | – |
Erforderlich? | Optional |
Typ | String |
Übergeordnetes Element |
<SpikeArrest>
|
Untergeordnete Elemente | Ohne |
Syntax
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
Beispiel 1
Im folgenden Beispiel wird die Spike Arrest-Richtlinie pro Entwickler-ID angewendet:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
In der folgenden Tabelle werden die Attribute von <Identifier>
beschrieben:
Attribut | Beschreibung | Standard | Präsenz |
---|---|---|---|
ref |
Ermittelt die Variable, nach der Spike Arrest eingehende Anfragen gruppiert. Sie können jede beliebige Ablaufvariable verwenden, um einen eindeutigen Client anzugeben, wie diejenigen, die mit der VerifyAPIKey-Richtlinie verfügbar sind. Sie können auch benutzerdefinierte Variablen mithilfe der JavaScript-Richtlinie oder der AssignMessage-Richtlinie festlegen. | – | Erforderlich |
Dieses Element wird auch im folgenden Apigee-Communitybeitrag diskutiert: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<MessageWeight>
Gibt die für jede Nachricht definierte Gewichtung an. Die Gewichtung der Nachricht ändert die Auswirkung eines einzelnen Ersuchens zur Berechnung der Spike Arrest-Rate. Die Nachrichtengewichtung kann eine beliebige Ablaufvariable sein, z. B. ein HTTP-Header, Abfrageparameter, Formularparameter oder Inhalt des Nachrichtentexts. Sie können auch benutzerdefinierte Variablen mithilfe der JavaScript-Richtlinie oder der AssignMessage-Richtlinie verwenden.
Wird in Verbindung mit <Identifier>
verwendet, um Anfragen von bestimmten Clients oder Anwendungen drosseln zu können.
Wenn der Spike Arrest <Rate>
beispielsweise 10pm
ist und eine Anwendung Anfragen mit einer Gewichtung von 2
sendet, sind von diesem Client nur fünf Nachrichten pro Minute zulässig, weil jede Anfrage als 2 zählt.
Standardwert | – |
Erforderlich? | Optional |
Typ | Ganzzahl |
Übergeordnetes Element |
<SpikeArrest>
|
Untergeordnete Elemente | Ohne |
Syntax
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <MessageWeight ref="flow_variable"/> </SpikeArrest>
Beispiel 1
Im folgenden Beispiel werden Anfragen auf 12 pro Minute beschränkt (eine Anfrage ist alle fünf Sekunden bzw. 60/12 zulässig):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
In diesem Beispiel akzeptiert <MessageWeight>
einen benutzerdefinierten Wert (den weight
-Header in der Anfrage), der die Nachrichtengewichtung für bestimmte Clients anpasst. Hierdurch kann die Drosselung für Entitäten, die mit dem Element <Identifier>
identifiziert werden, zusätzlich gesteuert werden.
In der folgenden Tabelle werden die Attribute von <MessageWeight>
beschrieben:
Attribut | Beschreibung | Präsenz | Standard |
---|---|---|---|
ref |
Gibt die Ablaufvariable an, die die Nachrichtengewichtung für einen bestimmten Client enthält. Dies kann eine beliebige Ablaufvariable sein, z. B. der HTTP-Abfrageparameter, der Header oder der Nachrichteninhalt. Weitere Informationen finden Sie unter Referenz zu Ablaufvariablen. Sie können auch benutzerdefinierte Variablen mithilfe der JavaScript-Richtlinie oder der AssignMessage-Richtlinie festlegen. | Erforderlich | – |
<Rate>
Gibt die Rate an, mit der die Trafficspitzen (oder Bursts) durch Begrenzung der Anzahl der Anfragen pro Minute oder pro Sekunde eingeschränkt werden. Sie können dieses Element auch zusammen mit <Identifier>
und <MessageWeight>
verwenden, um den Traffic während der Laufzeit reibungslos zu drosseln, indem Sie Werte vom Client akzeptieren.
Standardwert | – |
Erforderlich? | Erforderlich |
Typ | Ganzzahl |
Übergeordnetes Element |
<SpikeArrest>
|
Untergeordnete Elemente | Ohne |
Syntax
Sie können Raten auf eine der folgenden Arten angeben:
- Eine statische Rate, die Sie als Text des Elements
<Rate>
angeben. - Ein variabler Wert, der vom Client übergeben werden kann; Ermitteln Sie den Namen der Ablaufvariablen mithilfe des Attributs
ref
.
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
Gültige Ratenwerte, die entweder als Variablenwert oder im Textkörper des Elements definiert sind, müssen dem folgenden Format entsprechen:
intps
(Anzahl der Anfragen pro Sekunde, in Millisekundenintervalle geglättet)intpm
(Anzahl der Anfragen pro Minute, in Sekundenintervalle geglättet)
Der Wert von int muss eine positive Ganzzahl ungleich Null sein.
Beispiel 1
Im folgenden Beispiel wird die Rate auf fünf Anfragen pro Sekunde festgelegt:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Die Richtlinie glättet die Rate auf eine Anfrage alle 200 Millisekunden (1000/5).
Beispiel 2
Im folgenden Beispiel wird die Rate auf 12 Anfragen pro Minute festgelegt:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Diese Beispielrichtlinie glättet die Rate auf eine Anfrage alle fünf Sekunden (60/12).
In der folgenden Tabelle werden die Attribute von <Rate>
beschrieben:
Attribut | Beschreibung | Präsenz | Standard |
---|---|---|---|
ref |
Kennzeichnet eine Ablaufvariable, die die Rate angibt. Dies kann eine beliebige Ablaufvariable sein, z. B. ein HTTP-Abfrageparameter, Header oder Nachrichtentextinhalt oder ein Wert wie eine KVM. Weitere Informationen finden Sie unter Referenz zu Ablaufvariablen.
Sie können auch benutzerdefinierte Variablen mithilfe der JavaScript-Richtlinie oder der AssignMessage-Richtlinie verwenden. Wenn Sie sowohl Beispiel: <Rate ref="request.header.custom_rate">1pm</Rate> Wenn der Client in diesem Beispiel keinen "custom_rate"-Header übergibt, beträgt die Rate für den API-Proxy für alle Clients eine Anfrage pro Minute. Wenn der Client einen "custom_rate"-Header übergibt, wird die Ratenbegrenzung für alle Clients auf dem Proxy auf 10 Anfragen pro Sekunde geändert, bis eine Anfrage ohne den Header "custom_rate" gesendet wird. Sie können Wenn Sie einen Wert für |
Optional | – |
<UseEffectiveCount>
Verteilt die Spike Arrest-Anzahl auf die Message Processors (MPs) bei Verwendung von Autoscaling Gruppen.
Syntax
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Beispiel 1
Im folgenden Beispiel wird <UseEffectiveCount>
auf „true“ gesetzt:
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Das <UseEffectiveCount>
-Element ist optional. Der Standardwert ist false
Das Element wird in Ihrer Spike Arrest-Richtlinie weggelassen.
Standardwert | False |
Erforderlich? | Optional |
Typ | Boolesch |
Übergeordnetes Element |
<SpikeArrest>
|
Untergeordnete Elemente | – |
In der folgenden Tabelle werden die Attribute des <UseEffectiveCount>
-Elements beschrieben:
Attribut | Beschreibung | Standard | Präsenz |
---|---|---|---|
ref |
Gibt die Variable an, die den Wert von <UseEffectiveCount> enthält. Dies kann eine beliebige Ablaufvariable sein, z. B. der HTTP-Abfrageparameter, der Header oder der Nachrichteninhalt. Weitere Informationen finden Sie unter Referenz zu Ablaufvariablen. Sie können auch benutzerdefinierte Variablen mithilfe der JavaScript-Richtlinie oder der AssignMessage-Richtlinie festlegen. |
– | Optional |
Die Auswirkung von <UseEffectiveCount>
hängt von ihrem Wert ab:
true
: Das Spitzenlimit eines MP ist der<Rate>
geteilt durch die aktuelle Anzahl der MP im selben Pod. Der aggregierte Grenzwert ist der Wert von<Rate>
. Werden Parlamentsmitglieder dynamisch hinzugefügt (oder entfernt), wird ihr jeweiliger Ausschlag Ratenbegrenzungen werden erhöht (oder gesenkt), der aggregierte Grenzwert bleibt jedoch unverändert.false
(dies ist der Standardwert, wenn keine Angabe gemacht wird): Das Spitzenlimit jedes MP beträgt einfach der Wert seiner<Rate>
. Der aggregierte Grenzwert ist die Summe der Raten aller Abgeordneten. Wenn Abgeordnete hinzugefügt (oder entfernt) werden, bleiben ihre individuellen Ratenbegrenzungen für Spitzen gleich, aber der aggregierte Grenzwert wird erhöht (oder verringern).
In der folgenden Tabelle sehen Sie die Auswirkungen von <UseEffectiveCount>
auf das effektive Ratenlimit von
jeder Abgeordnete:
Wert von <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Anzahl der Abgeordneten | 8 | 4 | 2 | 8 | 4 | 2 |
Wert von <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Effektive Rate pro MP | 10 | 10 | 10 | 5 | 10 | 20 |
Gesamtlimit | 80 | 40 | 20 | 40* | 40* | 40* |
* Wie bei <Rate> . |
Beachten Sie in diesem Beispiel Folgendes: Wenn die Anzahl der Abgeordneten von 4 auf 2 verringert wird,
<UseEffectiveCount>
beträgt false
, die effektive Rate pro MP bleibt gleich (bei
10). Wenn <UseEffectiveCount>
jedoch true
ist, geht die effektive Rate pro MP von
10 auf 20, wenn die Anzahl der Parlamentsmitglieder von 4 auf 2 verringert wird.
Ablaufvariablen
Beim Ausführen einer Spike Arrest-Richtlinie wird die folgende Ablaufvariable ausgefüllt:
Variable | Typ | Berechtigung | Beschreibung |
---|---|---|---|
ratelimit.policy_name.failed |
Boolescher Wert | Schreibgeschützt: | Gibt an, ob die Richtlinie fehlgeschlagen ist (true oder false ). |
Weitere Informationen finden Sie unter Referenz zu Ablaufvariablen.
Fehlerreferenz
Dieser Abschnitt beschreibt die zurückgegebenen Fehlercodes und Fehlermeldungen sowie die Fehlervariablen die von Edge festgelegt werden, wenn diese Richtlinie einen Fehler auslöst. Diese Informationen sind wichtig, wenn Sie Fehlerregeln zur Verarbeitung von Fehlern entwickeln. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen und Fehler beheben.
Laufzeitfehler
Diese Fehler können bei Ausführung der Richtlinie auftreten.
Fehlercode | HTTP-Status | Ursache | Korrigieren |
---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate |
500 |
Dieser Fehler tritt auf, wenn der Verweis auf die Variable mit der Preiseinstellung
im Element <Rate> kann nicht in einen Wert innerhalb des Spike Arrest aufgelöst werden
. Dieses Element ist obligatorisch und wird verwendet, um die Spike Arrestrate in
Format intpm oder intps . |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
Dieser Fehler tritt auf, wenn der für das Element <MessageWeight> angegebene Wert über eine Ablaufvariable ungültig ist (ein nicht ganzzahliger Wert). |
build |
policies.ratelimit.SpikeArrestViolation |
429 |
Die Ratenbegrenzung wurde überschritten. <ph type="x-smartling-placeholder"> |
Bereitstellungsfehler
Diese Fehler können auftreten, wenn Sie einen Proxy mit dieser Richtlinie bereitstellen.
Fehlername | Ursache | Korrigieren |
---|---|---|
InvalidAllowedRate |
Wenn die Spike Arrest-Rate im Element <Rate> der Spike Arrest-Richtlinie keine Ganzzahl ist oder die Rate weder ps noch pm als Suffix enthält, schlägt die Bereitstellung des API-Proxys fehl. |
build |
Fehlervariablen
Diese Variablen werden bei Laufzeitfehlern festgelegt. Weitere Informationen finden Sie unter Was Sie über Richtlinienfehler wissen müssen.
Variablen | Wo | Beispiel |
---|---|---|
fault.name="fault_name" |
fault_name ist der Name des Fehlers, der in der obigen Tabelle Laufzeitfehler aufgeführt ist. Der Fehlername ist der letzte Teil des Fehlercodes. | fault.name Matches "SpikeArrestViolation" |
ratelimit.policy_name.failed |
policy_name ist der benutzerdefinierte Name der Richtlinie, die den Fehler ausgelöst hat. | ratelimit.SA-SpikeArrestPolicy.failed = true |
Beispiel für eine Fehlerantwort
Im Folgenden sehen Sie ein Beispiel für eine Fehlerantwort:
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.SpikeArrestViolation" }, "faultstring":"Spike arrest violation. Allowed rate : 10ps" } }
Beispiel für eine Fehlerregel
Unten sehen Sie ein Beispiel für eine Fehlerregel zum Verarbeiten eines SpikeArrestViolation
-Fehlers:
<FaultRules> <FaultRule name="Spike Arrest Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "SpikeArrestViolation") </Condition> </Step> <Condition>ratelimit.Spike-Arrest-1.failed=true</Condition> </FaultRule> </FaultRules>
Der aktuelle HTTP-Statuscode zum Überschreiten eines von einer Kontingent- oder Spike Arrest-Richtlinie festgelegten Ratenlimits
ist 429
(Zu viele Anfragen). Um den HTTP-Statuscode in 500
zu ändern
(Interner Serverfehler)
Property features.isHTTPStatusTooManyRequestEnabled
auf false
mithilfe von
die
Organisationseigenschaften aktualisieren API
Beispiel:
curl -u email:password -X POST -H "Content-type:application/xml" http://api.enterprise.apigee.com/v1/organizations/myorg -d \ "<Organization type="trial" name="MyOrganization"> <Properties> <Property name="features.isHTTPStatusTooManyRequestEnabled">true</Property> . . . </Properties> </Organization>"
Schemas
Jeder Richtlinientyp wird durch ein XML-Schema (.xsd
) definiert. Zu Referenzzwecken sind Richtlinienschemas auf GitHub verfügbar.
Weitere Informationen
- Kontingentrichtlinie: Kontingentrichtlinie zum Beschränken des Traffics auf einzelne Clients
- Ratenbegrenzung für eine Übersicht über Ratenbegrenzungen
- Vergleich Kontingent- und SpikeArrest-Richtlinien
- Übungsbeispiele für API-Proxys