안티패턴: 분산되지 않은 할당량 구성

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

Apigee Edge는 웹 애플리케이션에 대한 API 프록시에 허용되는 요청 수를 할당량 정책을 사용하여 특정 기간 동안).

안티패턴

API 프록시 요청은 하나 이상의 분산된 Edge 구성요소에서 처리할 수 있습니다. 메시지 프로세서. 제공 API를 위해 구성된 메시지 프로세서가 여러 개 있는 경우 각 메시지 프로세서가 자체 "개수" 각 서비스에서 처리하는 요청의 비율을 보여줍니다

예를 들어 설명해 보겠습니다. API 프록시에 다음과 같은 할당량 정책이 있다고 가정합니다.

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

위 구성에서는 시간당 총 100개의 요청을 허용해야 합니다.

하지만 실제로는 여러 메시지 프로세서가 API 요청을 처리할 경우 다음과 같은 결과가 발생합니다.

위 이미지에서

  • 할당량 정책은 시간당 100개의 요청을 허용하도록 구성됩니다.
  • API 프록시에 대한 요청은 두 개의 메시지 프로세서로 처리됩니다.
  • 각 메시지 프로세서는 처리하는 요청 수를 추적하기 위해 자체 할당량 계산 변수 quota_count_mp1quota_count_mp2를 유지합니다.
  • 따라서 각 메시지 프로세서가 100개의 API 요청을 개별적으로 허용합니다. 결국 100개의 요청이 아닌 총 200개의 요청이 처리됩니다.

영향

이러한 상황은 할당량 구성의 목적을 무산시켜 요청을 처리하는 백엔드 서버에 부정적인 영향을 미칠 수 있습니다.

백엔드 서버에 다음과 같은 결과가 발생할 수 있습니다.

  • 수신 트래픽이 예상보다 커서 압박을 받음
  • 최신 API 요청에 응답하지 않아 503 오류 발생

권장사항

할당량 정책에서 <Distributed> 요소를 true로 설정하여 모든 메시지 프로세서에서 API 요청을 추적하는 데 공통 카운터를 사용하는 것이 좋습니다. 아래 코드 스니펫과 같이 <Distributed> 요소를 설정할 수 있습니다.

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