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

Apigee X 문서입니다.
Apigee Edge 문서 보기

Apigee에서는 할당량 정책을 사용하여 특정 기간 동안 API 프록시에 허용되는 요청 수를 구성할 수 있습니다.

안티패턴

API 프록시 요청은 메시지 프로세서라는 하나 이상의 분산된 Apigee 구성요소로 처리될 수 있습니다. 여러 메시지 프로세서가 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>