Antywzór: skonfiguruj limit nieprzydzielony

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Apigee Edge umożliwia skonfigurowanie liczby dozwolonych żądań do serwera proxy interfejsu API przez określony czas przy użyciu zasady limitów.

Antywzór

Żądanie serwera proxy interfejsu API może być obsługiwane przez co najmniej jeden rozproszony komponent Edge nazywany procesorami wiadomości. Jeśli do obsługi żądań do interfejsu API zostało skonfigurowanych kilka procesorów wiadomości, limit prawdopodobnie zostanie przekroczony, ponieważ każdy podmiot przetwarzający wiadomości przechowuje własną „liczbę” żądań, które przetwarza.

Wyjaśnimy to na przykładzie. Rozważ zastosowanie tych zasad limitów 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 pozwalać na maksymalnie 100 żądań na godzinę.

W praktyce jednak, gdy wiele procesorów wiadomości obsługuje żądania do interfejsu API, zachodzą te procesy:

Na ilustracji powyżej:

  • Zasada limitu zezwala na 100 żądań na godzinę.
  • Żądania do serwera proxy interfejsu API są obsługiwane przez dwa procesory wiadomości.
  • Każdy podmiot przetwarzający wiadomości przechowuje własną zmienną liczby limitów (quota_count_mp1 i quota_count_mp2) w celu śledzenia liczby przetwarzanych żądań.
  • Dlatego każdy podmiot przetwarzający wiadomości zezwala na osobne żądania do interfejsu API (100). Efektem jest to, że przetwarzanych jest łącznie 200 żądań, a nie 100.

Wpływ

Taka sytuacja jest niezgodne z przeznaczeniem konfiguracji limitu i może mieć szkodliwy wpływ na serwery backendu, które obsługują żądania.

Serwery backendu mogą:

  • Stres z powodu większego niż oczekiwanego ruchu przychodzącego
  • nie reagować na nowsze żądania do interfejsu API, co prowadzi do błędów 503;

Sprawdzona metoda

Rozważ ustawienie elementu <Distributed> na true w zasadach limitów, aby mieć pewność, że do śledzenia żądań do interfejsu API we wszystkich procesorach wiadomości będzie używany wspólny licznik. Element <Distributed> można ustawić w taki sposób, jak pokazano we fragmencie kodu poniżej:

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