빠른 시작: 요청 속도 제한 설정

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서의 적용 대상:❌ 기본/표준 ✔️ 엔터프라이즈

이 빠른 시작에서는 Azure Spring Apps 엔터프라이즈 플랜에서 Spring Cloud Gateway를 사용하여 요청 속도 제한을 설정하는 방법을 보여줍니다.

속도 제한을 사용하면 트래픽 급증으로 인해 발생하는 문제를 피할 수 있습니다. 요청 속도 제한을 설정하면 애플리케이션에서 과도한 요청을 거부할 수 있습니다. 이 구성은 제한 오류를 최소화하고 처리량을 보다 정확하게 예측하는 데 도움이 됩니다.

필수 조건

요청 속도 제한 설정

Spring Cloud Gateway에는 오픈 소스 버전의 경로 필터와 몇 가지 추가 경로 필터가 포함되어 있습니다. 이러한 필터 중 하나는 RateLimit: 사용자 요청 제한 필터입니다. RateLimit 필터는 일정 기간 동안 경로당 허용되는 요청 수를 제한합니다.

경로를 정의할 때 경로에 대한 필터 목록에 포함하여 RateLimit 필터를 추가할 수 있습니다. 필터는 네 가지 옵션을 허용합니다.

  • 기간 동안 수락된 요청 수입니다.
  • 창의 기간입니다. 이 값은 기본적으로 밀리초 단위이지만 s, m 또는 h 접미사를 지정하여 값이 초, 분 또는 시간 단위임을 나타낼 수 있습니다.
  • (선택 사항) 사용자 파티션 키입니다. 사용자당 속도 제한을 적용할 수도 있습니다. 즉, 다른 사용자는 요청에서 찾은 식별자에 따라 허용되는 자체 처리량을 가질 수 있습니다. claim 또는 header 구문을 사용하여 키가 JWT 클레임 또는 HTTP 헤더에 있는지 여부를 나타냅니다.
  • (선택 사항) IP 주소로 속도를 제한할 수 있지만 사용자당 속도 제한과 함께 사용할 수는 없습니다.

다음 예에서는 /products 경로에 대한 모든 사용자의 요청을 5초마다 두 번으로 제한합니다.

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

각각 고유한 client_id HTTP 헤더로 식별되는 서로 다른 사용자 집합에 대한 경로를 노출하려면 다음 경로 정의를 사용합니다.

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

제한을 초과하면 응답이 429 Too Many Requests 상태로 실패합니다.

다음 명령을 사용하여 RateLimit 필터를 /products 경로에 적용합니다.

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

다음 명령을 사용하여 Spring Cloud Gateway에서 /products 경로의 URL을 검색합니다.

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"

요청이 429 Too Many Requests 상태로 실패하는지 확인하려면 5초 이내에 /products에 대한 URL에 여러 번 요청합니다.

리소스 정리

후속 빠른 시작 및 자습서를 계속 사용하려는 경우 이러한 리소스를 그대로 유지할 수 있습니다. 더 이상 필요 없으면 리소스 그룹을 삭제합니다. 그러면 리소스 그룹의 리소스가 삭제됩니다. Azure CLI를 사용하여 리소스 그룹을 삭제하려면 다음 명령을 사용합니다.

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

다음 단계

다음 중 원하는 빠른 시작을 계속 진행합니다.