通過緩衝可以將後端返回的應答緩衝在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,專享執行個體請參考執行個體規格說明。