빠른 시작: 요청 속도 제한 설정
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 기본/표준 ✅ 엔터프라이즈에 ❎ 적용됩니다.
이 빠른 시작에서는 Azure Spring Apps 엔터프라이즈 플랜에서 Spring Cloud Gateway를 사용하여 요청 속도 제한을 설정하는 방법을 보여줍니다.
속도 제한을 사용하면 트래픽 급증으로 인해 발생하는 문제를 피할 수 있습니다. 요청 속도 제한을 설정하면 애플리케이션에서 과도한 요청을 거부할 수 있습니다. 이 구성은 제한 오류를 최소화하고 처리량을 보다 정확하게 예측하는 데 도움이 됩니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Azure Marketplace 엔터프라이즈 플랜의 요구 사항 섹션을 이해하고 이행합니다.
- Azure CLI 버전 2.45.0 이상.
- Git
- jq
- Azure Spring Apps Enterprise 계획 확장입니다. 다음 명령을 사용하여 이전 버전을 제거하고 최신 엔터프라이즈 플랜 확장을 설치합니다. 이전에
spring-cloud
확장을 설치한 경우 구성 및 버전 불일치를 방지하기 위해 이 확장을 제거합니다.az extension add --upgrade --name spring az extension remove --name spring-cloud
- 엔터프라이즈 플랜을 사용하여 Azure Spring Apps에 앱 빌드 및 배포하는 단계를 완료합니다.
요청 속도 제한 설정
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 ..."
다음 단계
다음 중 원하는 빠른 시작을 계속 진행합니다.