Antywzór: skonfiguruj limit nieprzydzielony

Wyświetlasz dokumentację Apigee Edge.
Przejdź do dokumentacji Apigee X.
info

Apigee Edge umożliwia skonfigurowanie liczby dozwolonych żądań do serwera proxy interfejsu API w określonym czasie za pomocą zasady dotyczącej limitu.

Antywzorzec

Żądanie do serwera proxy interfejsu API może być obsługiwane przez co najmniej 1 rozproszony komponent Edge o nazwie procesor wiadomości. Jeśli skonfigurowano wiele procesorów komunikatów do obsługi żądań interfejsu API, limit zostanie prawdopodobnie przekroczony, ponieważ każdy procesor komunikatów utrzymuje własną „liczbę” przetwarzanych żądań.

Wyjaśnijmy to na przykładzie. Rozważmy tę zasadę dotyczącą limitu dla serwera proxy interfejsu API:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

Powyższa konfiguracja powinna zezwalać na łącznie 100 żądań na godzinę.

W praktyce jednak, gdy żądania interfejsu API są obsługiwane przez wiele procesorów wiadomości, dzieje się tak:

Na ilustracji powyżej:

  • Zasada dotycząca limitu jest skonfigurowana tak, aby zezwalać na 100 żądań na godzinę.
  • Żądania do serwera proxy interfejsu API są obsługiwane przez 2 procesory wiadomości.
  • Każdy procesor komunikatów utrzymuje własną zmienną liczby limitu, quota_count_mp1 i quota_count_mp2, aby śledzić liczbę przetwarzanych żądań.
  • Dlatego każdy procesor komunikatów będzie oddzielnie zezwalać na 100 żądań interfejsu API. W efekcie przetwarzanych jest łącznie 200 żądań zamiast 100.

Wpływ

Ta sytuacja niweczy cel konfiguracji limitu i może mieć szkodliwy wpływ na serwery backendu, które obsługują żądania.

Serwery backendu mogą:

  • być przeciążone z powodu większego niż oczekiwany ruchu przychodzącego,
  • przestać odpowiadać na nowsze żądania interfejsu API, co prowadzi do błędów 503.

Sprawdzona metoda

Rozważ ustawienie elementu <Distributed> na true w zasadzie dotyczącej limitu, aby mieć pewność, że do śledzenia żądań interfejsu API we wszystkich procesorach wiadomości jest używany wspólny licznik. Element <Distributed> można ustawić tak, jak pokazano w tym fragmencie kodu:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>