配置响应缓存策略
ROMA Connect支持通过配置响应缓存策略将后端服务(服务端)返回的应答缓存在APIC中,当客户端发送相同的请求时,APIC不用向后端传递请求,直接返回缓存的应答。有效降低后端的负荷,同时减少API调用的延迟。
当使用响应缓存策略时,后端的响应内容会缓存到APIC中,此时APIC不支持缓存数据加密,对于响应中的敏感数据存在安全风险,请谨慎配置策略。
响应缓存策略原理图如下:
约束与限制
- 响应缓存策略仅支持使用GET、HEAD方法的API。
- 超过1M的响应体不会被缓存。
- 用于后端响应内容的缓存大小为128m。
- APIC遵守后端应答中的Cache-Control头的约定来处理缓存,如果后端不返回Cache-Control头,则默认缓存,使用策略中配置的ttl字段作为缓存超期时间。
- APIC默认不处理客户端的Cache-Control头,可以通过策略中的client_cache_control来进行配置。
- Cache-Control拓展缓存指令不是核心HTTP缓存标准文档的一部分,本策略不支持拓展缓存指令。
Cache-control: immutable Cache-control: stale-while-revalidate=<seconds> Cache-control: stale-if-error=<seconds>
- APIC仅支持缓存Content-Type、Content-Encoding、Content-Language头,如需要缓存更多的Headers,请在策略的“允许缓存的后端响应头”参数处添加,但是无法添加APIC增加的系统响应头(x-apig-*,x-request-id等)。
创建响应缓存策略
- 登录ROMA Connect控制台,在“实例”页面单击实例上的“查看控制台”,进入实例控制台。
- 在左侧的导航栏选择“服务集成 APIC > API策略”,在“策略管理”页签下单击“创建策略”。
- 在选择策略类型弹窗中选择“插件策略 > 响应缓存”。
- 在配置策略弹窗中配置插件策略信息。
表1 配置参数说明 信息项
描述
策略名称
填写策略的名称,根据规划自定义。建议您按照一定的命名规则填写策略名称,方便您快速识别和查找。
策略类型
固定为“响应缓存”。
描述
填写策略的描述信息。
策略内容
支持表单模式和脚本模式两种方式,脚本模式配置请参见脚本配置示例。
响应缓存键
配置参数作为响应缓存键,用于区分不同的缓存。
- system_params类型:配置不同的API内置系统参数作为响应缓存键来区分缓存。配置参数请参考配置API后端系统参数。
- parameters类型:配置不同的请求query参数作为响应缓存键来区分缓存。
- headers类型:配置不同的请求头作为响应缓存键来区分缓存。
HTTP参数
根据HTTP响应码和缓存时长来决定是否缓存,以及缓存的有效时间。
如果不配置HTTP参数,那么HTTP响应码默认值为200,取值范围:200-599。缓存时长默认值为300s,取值范围:1s~720000s。
缓存策略模式
APIC通过客户端请求中的Cache-Control请求头来处理缓存,默认拒绝所有客户端带Cache-Control头的请求。
- all:允许所有客户端带Cache-Control头的请求。
- off:拒绝所有客户端带Cache-Control头的请求。
- apps:允许appId(凭据ID)取值在datas列表中的客户端。
允许缓存的后端响应头
对于后端的响应Headers,默认仅支持缓存Content-Type,Content-Encoding,Content-Language头。如果需要缓存更多的Headers,请在“允许缓存的后端响应头”处添加,但是无法添加APIC增加的系统响应头(x-apig-*,x-request-id等)。
- 单击“确定”,完成插件策略的创建。
插件策略创建后,您还需要为API绑定插件策略,才能使插件策略对API生效。
脚本配置示例
{ "cache_key": { "system_params": [ "$context.sourceIp", "$context.requestId" ], "parameters": [ "demo_parameters" ], "headers": [ "demo_header" ] }, "cache_http_status_and_ttl": [ { "http_status": [ 200 ], "ttl": 300 } ], "client_cache_control": { "mode": "apps", "datas": [ "demo_app_id_1,demo_app_id_2" ] }, "cacheable_headers": [ "demo_cacheable_headers_1,demo_cacheable_headers_2" ] }