您正在查看 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_mp1
和quota_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>