您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
快取是指將資料暫時儲存在名為快取的儲存空間,以供日後參考。快取資料可帶來顯著的效能優勢,因為:
- 加快資料檢索速度
- 避免重複重新產生資料,縮短處理時間
- 防止 API 要求連線至後端伺服器,進而減少後端伺服器的負擔
- 可更充分運用系統/應用程式資源
- 縮短 API 回應時間
如果我們必須經常存取不常變更的資料,強烈建議使用快取來儲存這類資料。
Apigee 可在執行階段將資料儲存在快取中,以便保留資料並加快擷取速度。快取功能可透過 PopulateCache 政策、LookupCache 政策、InvalidateCache 政策和 ResponseCache 政策提供。
在本節中,我們將探討回應快取政策。Apigee 平台中的「回應快取」政策可讓您快取後端伺服器的回應。如果用戶端應用程式重複向相同的後端資源發出要求,且資源會定期更新,我們就能使用這項政策快取這些回應。回應快取政策有助於傳回快取的回應,因此可避免不必要地將要求轉送至後端伺服器。
回應快取政策:
- 減少傳送至後端的要求數量
- 減少網路頻寬
- 提升 API 效能和回應時間
反模式
根據預設,ResponseCache 政策可讓您快取任何可能狀態碼的 HTTP 回應。也就是說,成功和錯誤回應都可以快取。
以下是採用預設設定的回應快取政策範例:
<!-- /antipatterns/examples/1-1.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServer ResponseCache</DisplayName> <CacheKey> <Key Fragment ref="request.uri" /></CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> </ResponseCache>
在預設設定中,Response Cache 政策會快取錯誤回應。不過,如果沒有仔細考慮負面影響,就不建議快取錯誤回應,因為:
以下將詳細說明這兩種情況。
情境 1:後端/資源暫時發生故障
請注意,後端伺服器故障的原因可能是下列其中之一:
- 暫時性網路故障
- 後端伺服器非常忙碌,暫時無法回應要求
- 要求的後端資源可能已移除/暫時無法使用
- 後端伺服器在一段時間內處理時間過長,導致回應緩慢
在上述所有情況下,失敗可能會持續一段時間,然後我們可能會開始收到成功的回應。如果我們快取錯誤回應,即使後端伺服器的問題已修正,我們仍可能會繼續向使用者傳送錯誤回應。
情境 2:後端/資源故障時間較長或固定
假設我們知道後端故障的時間固定,舉例來說,您知道下列其中一項:
- 特定後端資源將無法使用 1 小時
OR
- 後端伺服器因網站突然發生故障、擴充問題、維護、升級等原因而移除/無法使用 24 小時。
有了這項資訊,我們就能在「回應快取」政策中適當設定快取到期時間,避免錯誤回應長時間保留在快取中。不過,一旦後端伺服器/資源恢復運作,我們就必須修改政策,避免快取錯誤回應。這是因為如果後端伺服器發生暫時性/一次性故障,我們會快取回應,最終導致上述情境 1 中說明的問題。
影響
- 快取錯誤回應可能會導致系統在後端伺服器解決問題後,仍傳送錯誤回應
- 使用者可能會花費大量心力排解問題原因,卻不知道問題是因快取後端伺服器的錯誤回應而起
最佳做法
- 請勿將錯誤回應儲存在回應快取中。請確保
<ExcludeErrorResponse>元素在 ResponseCache 政策中設為true,以免錯誤回應遭到快取,如下列程式碼片段所示。使用這項設定時,系統只會快取預設成功代碼 200 到 205 的回應 (除非成功代碼已修改)。<!-- /antipatterns/examples/1-2.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServerResponseCache</DisplayName> <CacheKey> <KeyFragment ref="request.uri" /> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> <ExcludeErrorResponse>true</ExcludeErrorResponse> </ResponseCache>
- 如有基於特定原因快取錯誤回應的需求,您可以判斷觀察失敗情況的最長/確切時間長度 (如有可能):
- 請適當設定到期時間,確保您不會將錯誤回應快取的時間,超過可看到失敗的時間。
- 使用 ResponseCache 政策快取錯誤回應,但不要使用
<ExcludeErrorResponse>元素。
只有在確定後端伺服器不會短暫/暫時發生故障時,才需要這麼做。
- Apigee 不建議快取後端伺服器的 5xx 回應。