您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
Apigee 可讓您使用配額政策,設定在特定時間內允許傳送至 API Proxy 的要求數。
反模式
API Proxy 要求可由一或多個分散式 Apigee 元件 (稱為「訊息處理器」) 處理。如果設定多個處理 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>