구독으로 호출 속도 제한

적용 대상: 모든 API Management 계층

rate-limit 정책은 호출 속도를 지정된 기간당 지정된 숫자로 제한하여 구독 하나당 최대 API 사용을 차단합니다. 호출 속도를 초과할 경우 호출자는 429 Too Many Requests 응답 상태 코드를 수신합니다.

속도 제한과 할당량 간의 차이를 이해하려면 속도 제한 및 할당량을 참조하세요.

주의

제한 아키텍처의 분산 특성으로 인해 속도 제한은 완전히 정확하지 않습니다. 구성된 요청 수와 허용되는 실제 요청 수의 차이는 요청 볼륨 및 속도, 백 엔드 대기 시간 및 기타 요인에 따라 달라집니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.

정책 문

<rate-limit calls="number" renewal-period="seconds"  retry-after-header-name="custom header name, replaces default 'Retry-After'" 
        retry-after-variable-name="policy expression variable name"
        remaining-calls-header-name="header name"  
        remaining-calls-variable-name="policy expression variable name"
        total-calls-header-name="header name">
    <api name="API name" id="API id" calls="number" renewal-period="seconds" >
        <operation name="operation name" id="operation id" calls="number" renewal-period="seconds" />
    </api>
</rate-limit>

특성

특성 설명 필수 항목 기본값
호출 renewal-period에 지정된 시간 간격 동안 허용된 전체 최대 호출 수입니다. 정책 식은 허용되지 않습니다. 해당 없음
renewal-period 허용되는 요청 수가 calls에 지정된 값을 초과하지 않아야 하는 슬라이딩 윈도우의 길이(초 단위)입니다. 허용되는 최대값: 300초. 정책 식은 허용되지 않습니다. 해당 없음
retry-after-header-name 값이 지정된 호출 속도가 초과된 후 권장되는 재시도 간격(초)인 사용자 지정 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 Retry-After
retry-after-variable-name 지정된 호출 속도를 초과한 후 권장되는 재시도 간격(초)을 저장하는 변수의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음
remaining-calls-header-name 각 정책 실행 후 값이 renewal-period에 지정된 시간 간격에 허용되는 나머지 호출 수인 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음
remaining-calls-variable-name 각 정책 실행 후 renewal-period에 지정된 시간 간격에 허용되는 나머지 호출 수를 저장하는 변수의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음
total-calls-header-name calls에 값이 지정된 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. 아니요 해당 없음

Elements

요소 설명 필수
api 제품 내에서 API에 호출 속도 제한을 적용하려면 해당 요소 중 하나 이상을 추가합니다. 제품 및 API 호출 속도 제한은 독립적으로 적용됩니다. API는 name 또는 id를 통해 참조할 수 있습니다. 두 특성이 모두 제공되면 id는 사용되지만 name은 무시됩니다. 아니요
operation API 내에서 작업에 호출 속도 제한을 적용하려면 해당 요소 중 하나 이상을 추가합니다. 제품, API 및 작업 호출 속도 제한은 독립적으로 적용됩니다. 작업은 name 또는 id를 통해 참조할 수 있습니다. 두 특성이 모두 제공되면 id는 사용되지만 name은 무시됩니다. 아니요

api 특성

attribute 설명 필수 항목 기본값
name 속도 제한을 적용할 API의 이름입니다. name 또는 id를 지정해야 합니다. 해당 없음
id 속도 제한을 적용할 API의 ID입니다. name 또는 id를 지정해야 합니다. 해당 없음
호출 renewal-period에 지정된 시간 간격 동안 허용된 전체 최대 호출 수입니다. 정책 식은 허용되지 않습니다. 해당 없음
renewal-period 허용되는 요청 수가 calls에 지정된 값을 초과하지 않아야 하는 슬라이딩 윈도우의 길이(초 단위)입니다. 허용되는 최대값: 300초. 정책 식은 허용되지 않습니다. 해당 없음

작업 특성

attribute 설명 필수 항목 기본값
name 속도 제한을 적용할 작업의 이름입니다. name 또는 id를 지정해야 합니다. 해당 없음
id 속도 제한을 적용할 작업의 ID입니다. name 또는 id를 지정해야 합니다. 해당 없음
호출 renewal-period에 지정된 시간 간격 동안 허용된 전체 최대 호출 수입니다. 정책 식은 허용되지 않습니다. 해당 없음
renewal-period 허용되는 요청 수가 calls에 지정된 값을 초과하지 않아야 하는 슬라이딩 윈도우의 길이(초 단위)입니다. 허용되는 최대값: 300초. 정책 식은 허용되지 않습니다. 해당 없음

사용

사용법 참고 사항

  • 이 정책은 정책 정의당 한 번만 사용할 수 있습니다.
  • 이 정책은 구독 키를 사용하여 API에 액세스할 때만 적용됩니다.
  • 자체 호스팅 게이트웨이의 속도 제한 수는 예를 들어, Kubernetes용 Helm 차트 배포 또는 Azure Portal 배포 템플릿 사용을 통해 클러스터 노드 전체의 게이트웨이 인스턴스 간에 로컬로 동기화하도록 구성할 수 있습니다. 그러나 속도 제한 수는 클라우드의 관리 게이트웨이를 포함하여 API Management 인스턴스에 구성된 다른 게이트웨이 리소스와 동기화되지 않습니다. 자세한 정보

예시

다음 예제에서 구독당 속도 제한은 90초당 20개 호출입니다. 각 정책 실행 후 해당 기간에 허용되는 나머지 호출은 변수 remainingCallsPerSubscription에 저장됩니다.

<policies>
    <inbound>
        <base />
        <rate-limit calls="20" renewal-period="90" remaining-calls-variable-name="remainingCallsPerSubscription"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.