反模式:設定非分散式配額

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

Apigee Edge 可讓您使用配額政策,設定在特定時間內允許傳送至 API Proxy 的要求數量。

反模式

API Proxy 要求可由一或多個稱為「訊息處理器」的分散式 Edge 元件提供。如果設定多個用來處理 API 要求的訊息處理器,則可能會超過配額,因為每個訊息處理器對處理的要求各有自己的「計數」。

讓我們透過範例加以說明。假設將下列配額政策套用至 API Proxy:

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

上述設定應允許每小時共處理 100 個要求。

但實際上,當多個訊息處理器都在處理 API 要求時,將會發生以下情況:

在上圖中:

  • 配額政策設定為每小時允許處理 100 個要求。
  • 向 API Proxy 發出的要求是由兩個訊息處理器進行處理。
  • 每個訊息處理器都會維持各自的配額計數變數 quota_count_mp1quota_count_mp2,以便追蹤自己處理的要求數量。
  • 因此,每個訊息處理器將分別允許處理 100 個 API 要求。如此一來,系統處理的要求總數就是 200 個,而非 100 個。

影響

在這種情況下,設定配額的目的將會失敗,而且也會對處理要求的後端伺服器帶來負面影響。

後端伺服器可能會:

  • 因連入流量高於預期而負荷過重
  • 無法回應較新的 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>