Udostępnij za pośrednictwem


Szybki start: ustawianie limitów szybkości żądań

Uwaga

Plany Basic, Standardi Enterprise weszły w okres wycofywania 17 marca 2025 r. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.

Plan dotyczący zużycia standardowego oraz dedykowany plan zostały wycofane 30 września 2024 r., z całkowitym zamknięciem do końca marca 2025 r. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.

Ten artykuł dotyczy: ❎ Podstawowa/Standardowa ✅ Enterprise

Ten przewodnik szybkiego startu pokazuje, jak ustawić limity żądań za pomocą Spring Cloud Gateway w planie Azure Spring Apps Enterprise.

Ograniczanie szybkości umożliwia uniknięcie problemów, które pojawiają się wraz ze wzrostem ruchu. Po ustawieniu limitów szybkości żądań aplikacja może odrzucać nadmierne żądania. Ta konfiguracja pomaga zminimalizować błędy ograniczania przepustowości i dokładniej przewidywać przepływność.

Wymagania wstępne

Ustawianie limitów szybkości żądań

Usługa Spring Cloud Gateway zawiera filtry tras z wersji open source i kilka innych filtrów tras. Jednym z tych filtrów jest RateLimit: filtr Ograniczanie żądań użytkowników. Filtr RateLimit ogranicza liczbę żądań dozwolonych na trasę w przedziale czasu.

Podczas definiowania trasy można dodać filtr RateLimit, dołączając go do listy filtrów dla trasy. Filtr akceptuje cztery opcje:

  • Liczba żądań akceptowanych w oknie.
  • Czas trwania okna. Ta wartość jest domyślnie wyrażona w milisekundach, ale można określić sufiks s, mlub h wskazać, że wartość jest wyrażona w sekundach, minutach lub godzinach.
  • (Opcjonalnie) Klucz partycji użytkownika. Można również zastosować ograniczanie szybkości na użytkownika. To znaczy, że różni użytkownicy mogą mieć przyznaną własną przepustowość na podstawie identyfikatora znalezionego w żądaniu. Określ, czy klucz znajduje się w oświadczeniu JWT, czy nagłówku HTTP z claim lub header składnią.
  • (Opcjonalnie) Limit szybkości można ograniczyć według adresów IP, ale nie w połączeniu z ograniczaniem szybkości na użytkownika.

Poniższy przykład ogranicza wszystkich użytkowników do dwóch żądań co pięć sekund do /products trasy:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

Jeśli chcesz uwidocznić trasę dla różnych zestawów użytkowników, każdy z nich zidentyfikowany przez własny client_id nagłówek HTTP, użyj następującej definicji trasy:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

Po przekroczeniu limitu odpowiedzi kończą się niepowodzeniem ze stanem 429 Too Many Requests .

Użyj następującego polecenia, aby zastosować RateLimit filtr do /products trasy:

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

Użyj następujących poleceń, aby pobrać adres URL dla trasy /products w usłudze Spring Cloud Gateway.

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

Wykonaj kilka żądań do adresu URL w /products ciągu pięciu sekund, aby zobaczyć, że żądania kończą się niepowodzeniem ze stanem 429 Too Many Requests.

Czyszczenie zasobów

Jeśli planujesz kontynuować pracę z kolejnymi przewodnikami szybkiego startu i samouczkami, możesz pozostawić te zasoby bez zmian. Gdy grupa zasobów nie będzie już potrzebna, usuń grupę zasobów, która usuwa zasoby w grupie zasobów. Aby usunąć grupę zasobów przy użyciu interfejsu wiersza polecenia platformy Azure, użyj następujących poleceń:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Następne kroki

Przejdź do dowolnego z następujących opcjonalnych przewodników Szybki start: