Kong Proxy Caching代理缓存插件详解

  • 基本描述
属性 描述
限流策略 终止请求限制
插件作用域 服务、路由、消费者、全局
适用协议 http、https
  • 基本参数
参数 描述
name 插件名称、此处为proxy-cache
service_id 绑定的服务Id
route_id 绑定的路由Id
enabled 是否启用该插件,默认是true
consumer_id 绑定的消费者Id
api_id 绑定的API Id,已经废弃
response_code 上游服务可以作为缓存的状态码,默认值为200, 301, 404
request_method 下游服务可以作为缓存的方法,默认为GET, HEAD
content_type 可以作为缓存的 content type
vary_headers 用于生成缓存Key的头部信息,如果不指定,所有头部信息都不作为数据源
vary_query_params 用于生成缓存Key的查询参数,如果不指定,所有查询参数都作为数据源
cache_ttl 缓存的TTL时间,默认是300s
cache_control 是否启用Cache-Control行为,默认是false
storage_ttl 数据在存储引擎中的TTL时间
strategy 缓存策略,可以取 memory 或 redis
memory.dictionary_name 当选用 memory 策略时,用于保存缓存实体的 shared dictionary 的名称,这个 shared dictionary
redis.host redis服务器地址
redis.port redis服务器端口
redis.timeout 连接redis服务器超时时间
redis.password redis服务器密码
redis.database redis数据库
redis.sentinel_master redis哨兵模式master节点地址
redis.sentinel_role redis哨兵模式角色
redis.sentinel_addresses redis哨兵模式哨兵地址
  • 使用详情

在服务上添加插件

curl -X POST http://kong:8001/services/{service}/plugins --data "name=proxy-cache" --data "strategy=memory"

在路由上添加插件

curl -X POST http://kong:8001/routes/{route}/plugins --data "name=proxy-cache" --data "strategy=memory"

在消费者上添加插件

curl -X POST http://kong:8001/apis/{api}/plugins --data "name=proxy-cache" --data "strategy=memory"
  • 缓存策略
模式 描述
memory 内存模式,是一个lua_shared_dict,默认的kong_cache也被Kong的其他插件用于缓存其他数据,使用这种方式比较简单,但不推荐在大规模场景中使用,因为大量使用会对Kong数据缓存操作造成压力
redis 支持redis和redis哨兵模式
  • 缓存Key

Kong基于请求方法、完整的客户端请求(路径和请求参数)和绑定在请求上的API或消费者UUID来生成缓存 Key,所以各个API或消费者之间的缓存都是不同的,目前缓存Key的格式是硬编码的,无法调整,缓存的组成方式如下:

key = md5(UUID | method | request)

其中 method 是通过 ngx.req.get_method() 方法获得的,request 是根据 Nginx $request 变量获得的,Kong会在响应的 X-Cache-Key 头中返回缓存Key值,如上所述,可以预先计算缓存Key

  • 缓存控制
    当启用 cache_control 时,Kong将遵守 Cache-Control 头的使用规范,有一些例外情况:
    不支持缓存重新验证
    类似地,no-cache 排除缓存存在
    不支持根据 Vary 计算二级缓存
  • 缓存状态

Kong通过 X-Cache-Status 头表示缓存行为的状态:

状态 描述
Miss 请求可以缓存,但是缓存中没有数据,数据从代理的服务中获取
Hit 缓存命中,数据从缓存中获取
Refresh 缓存命中,但因为缓存控制行为或者达到了cache_ttl设置的阈值
Bypass 不能使用缓存
  • 存储TTL

       Kong可以在存储引擎中存储数据,存储时间超过 cache_ttl 或 Cache-Control 阈值所限定的时间,这使得Kong在资源过期后,还能维持一份资源的缓存副本,这样客户端在必要时可以使用 max-age 或 max-stale 头请求过期的数据

  • 缓存API
  • 获取缓存实体
GET /proxy-cache/:plugin_id/caches/:cache_id
GET /proxy-cache/:cache_id
  • 删除缓存实体
DELETE /proxy-cache/:plugin_id/caches/:cache_id
DELETE /proxy-cache/:cache_id
  • 清除所有缓存
DELETE /proxy-cache/

你可能感兴趣的:(Kong)