Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Zasady dotyczące zatrzymania szczytu chronią przed wzrostem natężenia ruchu dzięki elementowi <Rate>
. Ten
ogranicza liczbę żądań przetwarzanych przez serwer proxy interfejsu API i wysłanych do backendu,
i chroni przed opóźnieniami w wydajności i przestojami.
<SpikeArrest>
element
Definiuje zasady dotyczące aresztowania gwałtownego wzrostu.
Wartość domyślna | Zobacz kartę Zasady domyślne poniżej |
Wymagany? | Opcjonalnie |
Typ | Skomplikowane obiekt |
Element nadrzędny | nie dotyczy |
Elementy podrzędne |
<Identifier> <MessageWeight> <Rate> (wymagane)<UseEffectiveCount> |
Składnia
Element <SpikeArrest>
ma taką składnię:
<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>
Domyślna zasada
Poniższy przykład pokazuje ustawienia domyślne, gdy dodajesz zasadę zatrzymania gwałtownego wzrostu do w interfejsie Edge:
<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>
Ten element ma te atrybuty, które są wspólne dla wszystkich zasad:
Atrybut | Domyślnie | Wymagany? | Description |
---|---|---|---|
name |
Nie dotyczy | Wymagane |
Wewnętrzna nazwa zasady. Wartość atrybutu Opcjonalnie użyj elementu |
continueOnError |
fałsz | Opcjonalnie | Ustaw wartość „false”, aby wyświetlać błąd, gdy zasada nie działa. To prawidłowy proces w przypadku większości zasad. Ustaw wartość „true”, aby kontynuować wykonywanie przepływu nawet po wystąpieniu błędu. |
enabled |
prawda | Opcjonalnie | Ustaw wartość „true”, aby egzekwować zasadę. Ustaw wartość „false”, aby wyłączyć zasadę. Zasada nie będzie egzekwowana, nawet jeśli pozostanie powiązana z przepływem. |
async |
fałsz | Wycofano | Ten atrybut został wycofany. |
Przykłady
Poniższe przykłady pokazują niektóre sposoby wykorzystania zasady Spike Arrest:
Przykład 1
W tym przykładzie ustawiona jest szybkość wynosząca 5 na sekundę:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Zasada wygładza częstotliwość do 1 żądania dozwolonego co 200 milisekund (1000/5).
Przykład 2
W tym przykładzie stawka wynosi 12 na minutę:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Ta przykładowa zasada wygładza częstotliwość do 1 dozwolonego żądania co 5. sekundy (60/12).
Przykład 3
Ten przykład ogranicza liczbę żądań do 12 na minutę (dozwolone jest 1 żądanie co 5 żądań) sekund lub 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
Dodatkowo element <MessageWeight>
akceptuje wartość niestandardową (parametr
weight
), który dostosowuje wagę wiadomości dla określonych aplikacji lub klientów. Ten
zapewnia dodatkową kontrolę nad ograniczaniem w przypadku jednostek zidentyfikowanych za pomocą
<Identifier>
.
Przykład 4
W tym przykładzie Spike Arrest szuka wartości środowiska wykonawczego ustawionej w parametrze
przekazywane jako zmienna przepływu request.header.runtime_rate
:
<SpikeArrest name="Spike-Arrest-1"> <Rate ref="request.header.runtime_rate" /> </SpikeArrest>
Wartość zmiennej przepływu musi mieć format intpm
lub
intps
Aby wypróbować ten przykład, wykonaj żądanie podobne do tego:
curl http://myorg-myenv.apigee.net/price -H 'runtime_rate:30ps'
Odniesienie do elementu podrzędnego
W tej sekcji opisano elementy podrzędne elementu <SpikeArrest>
.
<DisplayName>
Używaj oprócz atrybutu name
do oznaczania zasady w
edytor serwera proxy w interfejsie zarządzania o innej, bardziej naturalnie brzmiącej nazwie.
Element <DisplayName>
jest wspólny dla wszystkich zasad.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie: Jeśli pominiesz <DisplayName> , wartość pary klucz-wartość
jest używany atrybut name zasady |
Typ | Ciąg znaków |
Element nadrzędny | <PolicyElement> |
Elementy podrzędne | Brak |
Element <DisplayName>
ma taką składnię:
Składnia
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Przykład
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Element <DisplayName>
nie ma atrybutów ani elementów podrzędnych.
<Identifier>
Pozwalają wybrać, jak pogrupować żądania, tak aby można było stosować zasady dotyczące zatrzymania gwałtownego wzrostu na klienta. Na przykład możesz pogrupować żądania według identyfikatora programisty, przy czym każde żądanie Żądania dewelopera będą uwzględniane w jego własnym wskaźniku zatrzymania szczytu, a nie wszystkie serwera proxy.
Aby uzyskać bardziej szczegółowe dane, użyj w połączeniu z elementem <MessageWeight>
kontrolę nad ograniczaniem liczby żądań.
Jeśli pozostawisz element <Identifier>
pusty, dla wszystkich żądań zostanie narzucony jeden limit liczby żądań
do tego serwera proxy interfejsu API.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Ciąg znaków |
Element nadrzędny |
<SpikeArrest>
|
Elementy podrzędne | Brak |
Składnia
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Identifier ref="flow_variable"/> </SpikeArrest>
Przykład 1
Ten przykład dotyczy zastosowania zasady Spike Arrest do identyfikatora dewelopera:
<SpikeArrest name="Spike-Arrest-1"> <Identifier ref="developer.id"/> <Rate>42pm</Rate/> </SpikeArrest>
W poniższej tabeli opisano atrybuty <Identifier>
:
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref |
Identyfikuje zmienną, na podstawie której Spike Arrest grupuje żądania przychodzące. Możesz użyć dowolnej zmiennej przepływu, aby wskazać unikalnego klienta, np. zmiennych dostępnych z parametrem VerifyAPIKey (zasadą VerifyAPIKey). Zmienne niestandardowe możesz też ustawiać za pomocą zasadę JavaScript lub zasadę AssignMessage. | nie dotyczy | Wymagane |
Ten element jest też omówiony w tym poście na karcie Społeczność Apigee: http://community.apigee.com/questions/2807/how-does-the-edge-quota-policy-work-when-no-identi.html.
<MessageWeight>
Określa wagę zdefiniowaną dla każdej wiadomości. Waga wiadomości modyfikuje wpływ pojedynczego żądania dotyczącego obliczenia współczynnika aresztowania gwałtownego wzrostu. Waga wiadomości może być dowolna np. nagłówek HTTP, parametr zapytania, parametr formularza lub treść wiadomości. Możesz też użyć zmiennych niestandardowych, korzystając z zasad dotyczących JavaScriptu lub AssignMessage (zasada AssignMessage).
Użycie w połączeniu z <Identifier>
do dalszego ograniczania żądań przez
określonych klientów lub aplikacji.
Jeśli na przykład zdarzenie Spike Arrest <Rate>
ma wartość 10pm
, a aplikacja przesyła
żądań o wadze 2
, dozwolone jest tylko 5 wiadomości na minutę
tego klienta, bo każde żądanie liczy się jako 2.
Wartość domyślna | nie dotyczy |
Wymagany? | Opcjonalnie |
Typ | Liczba całkowita |
Element nadrzędny |
<SpikeArrest>
|
Elementy podrzędne | Brak |
Składnia
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <MessageWeight ref="flow_variable"/> </SpikeArrest>
Przykład 1
Ten przykład ogranicza liczbę żądań do 12 na minutę (dozwolone jest 1 żądanie co 5 żądań) sekund lub 60/12):
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> <Identifier ref="client_id" /> <MessageWeight ref="request.header.weight" /> </SpikeArrest>
W tym przykładzie <MessageWeight>
akceptuje wartość niestandardową (weight
nagłówek w żądaniu), który dostosowuje wagę wiadomości dla określonych klientów. Ten
zapewnia dodatkową kontrolę nad ograniczaniem w przypadku jednostek zidentyfikowanych za pomocą
<Identifier>
.
W poniższej tabeli opisano atrybuty <MessageWeight>
:
Atrybut | Opis | Obecność | Domyślny |
---|---|---|---|
ref |
Identyfikuje zmienną przepływu zawierającą wagę wiadomości dla konkretnego klienta. Może to być dowolna zmienna przepływu, np. jako parametr zapytania HTTP, nagłówek lub treść wiadomości. Więcej informacji: Odniesienie do zmiennych przepływu. Możesz też skonfigurować zmienne niestandardowe przy użyciu zasad JavaScript lub zasad przypisywania wiadomości. | Wymagane | Nie dotyczy |
<Rate>
Określa częstotliwość ograniczania skoków (lub skoków) ruchu, ustawiając liczbę
dozwolonych żądań na minutę lub na sekundę. Tego elementu możesz też użyć w
konsola z <Identifier>
i <MessageWeight>
do
płynnie ograniczaj ruch w czasie działania, akceptując wartości od klienta.
Wartość domyślna | nie dotyczy |
Wymagany? | Wymagane |
Typ | Liczba całkowita |
Element nadrzędny |
<SpikeArrest>
|
Elementy podrzędne | Brak |
Składnia
Stawki możesz określić na jeden z tych sposobów:
- Stawka statyczna określona jako treść elementu
<Rate>
. - Wartość zmiennej, którą może przekazać klient. określ
nazwa zmiennej przepływu z atrybutem
ref
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Rate ref="flow_variable">rate[pm|ps]</Rate> </SpikeArrest>
Prawidłowe wartości współczynnika (definiowane jako wartość zmiennej lub w treści elementu) muszą zgodny z tym formatem:
intps
(liczba żądań na sekundę, wygładzona do interwałów z milisekund)intpm
(liczba żądań na minutę; wygładzona do interwałów w sekundach)
Wartość int musi być dodatnią liczbą całkowitą inną niż 0.
Przykład 1
W tym przykładzie stawka wynosi 5 żądań na sekundę:
<SpikeArrest name="Spike-Arrest-1"> <Rate>5ps</Rate> </SpikeArrest>
Zasada wygładza częstotliwość do 1 żądania dozwolonego co 200 milisekund (1000/5).
Przykład 2
W tym przykładzie stawka wynosi 12 żądań na minutę:
<SpikeArrest name="Spike-Arrest-1"> <Rate>12pm</Rate> </SpikeArrest>
Ta przykładowa zasada wygładza częstotliwość do 1 dozwolonego żądania co 5. sekundy (60/12).
W poniższej tabeli opisano atrybuty <Rate>
:
Atrybut | Opis | Obecność | Domyślny |
---|---|---|---|
ref |
Identyfikuje zmienną przepływu, która określa szybkość. Może to być dowolny przepływ
np. parametr zapytania HTTP, nagłówek, treść wiadomości lub wartość
np. KVM. Więcej informacji znajdziesz w dokumentacji zmiennych przepływu.
Możesz też używać zmiennych niestandardowych przy użyciu zasad JavaScript lub zasad przypisywania wiadomości. Jeśli zdefiniujesz zarówno Na przykład: <Rate ref="request.header.custom_rate">1pm</Rate> W tym przykładzie, jeśli klient nie przekazuje atrybutu „custom_rate” nagłówek, a potem stawka dla serwera proxy interfejsu API wynosi 1 żądanie na minutę dla wszystkich klientów. Jeśli klient prześle "stawka_własna" nagłówek, limit żądań zmieni się na 10 żądań na sekundę dla wszystkich klientów serwer proxy – do momentu żądania bez parametru „custom_rate” nagłówek. Za pomocą Jeśli określisz wartość w polu |
Opcjonalnie | nie dotyczy |
<UseEffectiveCount>
Rozdziela dane o wysokim wskaźniku retencji między procesorami komunikatów podczas korzystania z autoskalowania grup.
Składnia
<SpikeArrest continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <UseEffectiveCount>[false|true]</UseEffectiveCount> </SpikeArrest>
Przykład 1
W tym przykładzie <UseEffectiveCount>
ma wartość prawda:
<SpikeArrest name='Spike-Arrest-1'> <Rate>40ps</Rate> <UseEffectiveCount>true</UseEffectiveCount> </SpikeArrest>
Element <UseEffectiveCount>
jest opcjonalny. Wartość domyślna to false
.
gdy element jest pomijany w zasadzie Spike Arrest.
Wartość domyślna | Fałsz |
Wymagany? | Opcjonalnie |
Typ | Wartość logiczna |
Element nadrzędny |
<SpikeArrest>
|
Elementy podrzędne | Brak |
W tej tabeli opisano atrybuty elementu <UseEffectiveCount>
:
Atrybut | Opis | Domyślny | Obecność |
---|---|---|---|
ref |
Identyfikuje zmienną, która zawiera wartość <UseEffectiveCount> . Może to być
dowolnej zmiennej przepływu, takiej jak parametr zapytania HTTP, nagłówek czy treść wiadomości. Więcej
Więcej informacji znajdziesz w dokumentacji zmiennych przepływu. Możesz też skonfigurować zmienne niestandardowe
przy użyciu zasad JavaScript lub zasad przypisywania wiadomości. |
nie dotyczy | Opcjonalnie |
Efekt działania funkcji <UseEffectiveCount>
zależy od jego wartości:
true
: limit częstotliwości nagłego zwiększenia limitu to<Rate>
podzielony przez bieżącą liczbę megapikseli w tym samym bloku reklamowym. Limit zbiorczy to wartość z<Rate>
. Gdy członkowie MP są dynamicznie dodawane (lub usuwane), ich poszczególne skoki limity liczby żądań wzrosną (lub zmaleją), ale limit zbiorczy pozostanie bez zmian;false
(jest to wartość domyślna, jeśli zostanie pominięta): limit częstotliwości gwałtownego wzrostu dla każdego MP wynosi po prostu wartość jego<Rate>
. Limit zbiorczy to suma stawek wszystkich spadających elementów. Po dodaniu (lub usunięciu członków) ich indywidualne limity częstotliwości skoków pozostaną takie same, ale łączny limit wzrośnie (lub ).
W tabeli poniżej pokazujemy wpływ funkcji <UseEffectiveCount>
na efektywny limit stawki
każdy megapiksel:
Wartość <UseEffectiveCount> |
||||||
---|---|---|---|---|---|---|
false |
false |
false |
true |
true |
true |
|
Liczba parlamentów | 8 | 4 | 2 | 8 | 4 | 2 |
Wartość <Rate> |
10 | 10 | 10 | 40 | 40 | 40 |
Efektywny współczynnik na MP | 10 | 10 | 10 | 5 | 10 | 20 |
Łączny limit | 80 | 40 | 20 | 40* | 40* | 40* |
* Tak samo jak w przypadku <Rate> . |
Zwróć uwagę, że w tym przykładzie liczba członków MP zmniejszyła się z 4 do 2,
<UseEffectiveCount>
wynosi false
, efektywna stawka na megapiksele pozostaje bez zmian (przy
10) Jeśli jednak <UseEffectiveCount>
wynosi true
, rzeczywista stawka na megapiksele wynosi
Od 10 do 20, gdy liczba MP zmniejszy się z 4 do 2.
Zmienne przepływu
Po wykonaniu tej zasady zapełniana jest ta zmienna przepływu:
Zmienna | Typ | Uprawnienie | Opis |
---|---|---|---|
ratelimit.policy_name.failed |
Wartość logiczna | Tylko do odczytu | Wskazuje, czy działanie zasady zakończyło się niepowodzeniem (true lub
false ). |
Więcej informacji znajdziesz w dokumentacji zmiennych przepływu.
Informacje o błędzie
W tej sekcji opisano zwracane kody błędów i komunikaty o błędach oraz zmienne błędów ustawiane przez Edge, gdy ta zasada wywołuje błąd. Warto o tym wiedzieć, jeśli rozwijasz reguły błędów, aby obsługi błędów. Więcej informacji: Niezbędne informacje o błędach związanych z zasadami i postępowaniu z błędami
Błędy w czasie wykonywania
Te błędy mogą wystąpić podczas wykonywania zasady.
Kod błędu | Stan HTTP | Przyczyna | Napraw |
---|---|---|---|
policies.ratelimit.FailedToResolveSpikeArrestRate |
500 |
Ten błąd występuje, jeśli odwołanie do zmiennej zawierającej ustawienie stawki
w elemencie <Rate> nie można przyjąć wartości w ramach parametru Spike Arrest
. Ten element jest obowiązkowy i służy do określania gwałtownego wzrostu współczynnika zatrzymania w
ma postać intpm lub intps . |
build |
policies.ratelimit.InvalidMessageWeight |
500 |
Ten błąd występuje, jeśli wartość określona dla elementu <MessageWeight> przez
zmienna przepływu jest nieprawidłowa (wartość nie jest liczbą całkowitą). |
build |
policies.ratelimit.SpikeArrestViolation |
429 |
Przekroczono limit żądań. |
Błędy wdrażania
Te błędy mogą wystąpić podczas wdrażania serwera proxy zawierającego tę zasadę.
Nazwa błędu | Przyczyna | Napraw |
---|---|---|
InvalidAllowedRate |
gwałtowny wzrost liczby aresztowań określony w elemencie <Rate> w grze Spike Arest;
Zasada nie jest liczbą całkowitą, a jeśli stopa nie ma sufiksu ps lub pm ,
wdrożenie serwera proxy interfejsu API się nie uda. |
build |
Zmienne błędów
Te zmienne są ustawiane po wystąpieniu błędu działania. Więcej informacji znajdziesz w artykule Podstawowe informacje o błędach związanych z naruszeniem zasad.
Zmienne | Gdzie | Przykład |
---|---|---|
fault.name="fault_name" |
fault_name to nazwa błędu podana w tabeli tabeli Błędy czasu działania powyżej. Nazwa błędu to ostatnia część kodu błędu. | fault.name Matches "SpikeArrestViolation" |
ratelimit.policy_name.failed |
policy_name to określona przez użytkownika nazwa zasady, która spowodowała błąd. | ratelimit.SA-SpikeArrestPolicy.failed = true |
Przykładowa odpowiedź na błąd
Poniżej znajdziesz przykładową odpowiedź na błąd:
{ "fault":{ "detail":{ "errorcode":"policies.ratelimit.SpikeArrestViolation" }, "faultstring":"Spike arrest violation. Allowed rate : 10ps" } }
Przykładowa reguła błędu
Poniżej znajduje się przykładowa reguła błędu obsługi błędu SpikeArrestViolation
:
<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>
bieżący kod stanu HTTP informujący o przekroczeniu limitu częstotliwości ustalonego przez zasadę dotyczącą limitu lub zwiększenia ruchu.
to 429
(zbyt wiele żądań). Aby zmienić kod stanu HTTP na 500
(Wewnętrzny błąd serwera), ustaw wartość
usługę features.isHTTPStatusTooManyRequestEnabled
do usługi false
za pomocą
Zaktualizuj interfejs Organization properties API.
Na przykład:
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>"
Schematy
Każdy typ zasad jest definiowany przez schemat XML (.xsd
). Schematy zasad
są dostępne na GitHubie.
Powiązane artykuły
- Zasady dotyczące limitów: limit zasady ograniczające ruch w przypadku pojedynczych klientów
- Ograniczenie liczby żądań w przypadku ograniczenia liczby żądań podsumowanie
- Porównanie Zasady dotyczące limitów i spikeArrest
- Próbne próbki serwerów proxy interfejsów API