通過緩衝可以將後端返回的應答緩衝在API Gateway服務層面,有效降低後端的負荷,增加平滑度。
1. 使用方法
僅緩衝GET方法的應答。
不緩衝使用
預設分組次層網域的請求,預設分組次層網域有1000次/天的限制(海外Region及中國香港限制100次/天),僅用於測試場合。可在外掛程式中加入如下的配置來區分不同的緩衝 :
varyByApp:針對不同的App區分緩衝。
varyByParameters:針對不同的參數取值區分緩衝,從綁定的API取同名的參數。
varyByHeaders:針對不同的要求標頭區分緩衝,如
Accept、Accept-Language。
現在使用者在每個Region可以使用的緩衝空間為1M(按使用者區分),使用超期釋放策略,緩衝滿了後不緩衝後續的應答。
網關遵守後端應答中的
Cache-Control頭的約定來處理緩衝,如果後端不返回Cache-Control頭,則預設緩衝,使用外掛程式中配置的duration欄位作為緩衝超期時間。最長允許的超期時間為48小時(172800秒),超過這個時間的配置無效,被視為48小時超期。
網關預設不處理用戶端的
Cache-Control頭,可以通過clientCacheControl來進行配置,mode取值為:off:忽略所有用戶端請求中的Cache-Control頭。all:處理對所有用戶端的請求中的Cache-Control頭。app:僅處理AppId在apps配置列表中的請求的Cache-Control頭。
對於應答的Header,預設情況下網關僅緩衝
Content-Type、Content-Encoding、Content-Language頭,如果您需要更多的Headers,可使用配置中的cacheableHeaders配置添加。
2. 外掛程式配置
可以選擇JSON或者YAML格式的來配置您的外掛程式,兩種格式的schema相同,可以搜尋yaml to json轉換工具來進行配置格式的轉換,YAML格式的模板見下表。
---
varyByApp: false # 是否按照訪問方的AppId來區分緩衝內容, 預設為false
varyByParameters: # 按照不同的參數取值來區分緩衝內容
- userId # 參數名稱,如果後端參數映射為不同的名稱,這裡請填寫映射後的參數名稱
varyByHeaders: # 是否按照不同的請求Header值來區分緩衝內容
- Accept # `Accept`表示按照不同的Accept頭來區分緩衝
clientCacheControl: # 允許用戶端通過`Cache-Control`頭來影響緩衝策略, 預設`off`
mode: "app" # off: 拒絕所有端, all: 允許所有端, apps: 允許appId取值在`apps`列表中的端
apps: # 如果mode配置為`app`, 則允許`AppId`在以下列表中的取值
- 1992323 # 消費者AppId, 注意不是AppKey
- 1239922 # 消費者AppId, 注意不是AppKey
cacheableHeaders: # 允許緩衝的後端Headers, 預設只緩衝`Content-Type`和`Content-Length`
- X-Customer-Token # 允許緩衝的Header名稱
duration: 3600 # 預設超期的秒數 3. 運行規則
當API Gateway命中Cache後,返回的應答中會包含頭
X-Ca-Caching: true。
4. 使用限制
外掛程式中繼資料的大小限制為50KB。
超過128K的應答BODY不會被緩衝。
對於Serverless執行個體來說,每個使用者每個Region的總限制為1M Bytes,專享執行個體請參考執行個體規格說明。