Zasada SpikeArrest

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Ikona zatrzymania gwałtownego wzrostu w interfejsie Edge

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 name może zawierać litery, cyfry, spacje, łączniki, podkreślenia i kropki. Ta wartość nie może przekraczać 255 znaków.

Opcjonalnie użyj elementu <DisplayName>, aby oznaczyć zasadę w edytorze proxy interfejsu zarządzania inną nazwą w języku naturalnym.

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 &lt;PolicyElement&gt;
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 ref, jak i treść tego elementu, stosowana jest wartość ref i ma pierwszeństwo, gdy zmienna przepływu jest ustawione w żądaniu. (Odwrotność występuje, gdy zmienna identyfikowana w polu ref nie jest ustawiony w żądaniu).

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ą <Identifier> możesz grupować żądania, aby egzekwować niestandardowe stawki dla do różnych typów klientów.

Jeśli określisz wartość w polu ref, ale nie ustawisz stawki w treści <Rate>, a klient nie przekazuje wartości, wówczas stosowana jest zasada Spike Arrest powoduje zgłoszenie błędu.

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.
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ą).
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.

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