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

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

Apigee Edge 能夠為 API Proxy 設定允許的要求數量 「配額政策」達到特定一段時間或特定時間範圍的資料。

反模式

API Proxy 要求可以由一或多個已呼叫的分散式 Edge 元件處理 訊息處理器。如果已設定多個用於提供 API 的訊息處理器 資源要求),可能會超出配額,因為每個訊息處理者保有自己的擁有權 「count」處理要求的某些部分

讓我們透過範例加以說明。假設將下列配額政策套用至 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>