Kong 代理缓存

2024-02-03 00:04
文章标签 代理 缓存 kong

本文主要是介绍Kong 代理缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kong实现性能的方式之一是通过缓存。代理缓存插件通过根据可配置的响应代码、内容类型和请求方法缓存响应来加快性能。当启用缓存时,上游服务不会因为重复的请求而陷入困境,因为Kong网关会代表它们使用缓存结果进行响应。可以在特定的Kong网关对象上启用缓存,也可以全局为所有请求启用缓存。

缓存生存时间(TTL)

TTL(Time To Live)管理缓存内容的刷新率,这对确保客户端不会受到过时内容的影响至关重要。30秒的TTL意味着超过30秒的内容将被视为过期,并将在后续请求中刷新。根据上游服务提供的内容类型,应该根据不同设置TTL 配置。

  • 稀少更新的静态数据可以设置较长的TTL。
  • 动态数据应该使用较短的TTL 以避免提供过时数据。

Kong网关遵循RFC-7234第5.2节关于缓存控制操作的规范。有关TTL 配置的详细信息,请参阅规范和代理缓存插件参数参考。

先决条件 

这一章节是“开始使用Kong”系列的一部分。为了获得最佳体验,建议您从头开始按照该系列进行学习。

从介绍“获取Kong”开始,其中包括先决条件列表和在本地运行Kong网关的说明。

指南的第二步“服务和路由”包括安装一个在整个系列中都会用到的模拟服务的说明。

如果您尚未完成这些步骤,请在继续之前完成它们。

全局代理缓存

全局安装插件意味着每个代理请求到Kong网关都有可能被缓存。

1. 启用代理缓存 

代理缓存插件默认安装在Kong网关上,并可以通过向Admin API的plugins对象发送POST请求来启用:

curl -i -X POST http://localhost:8001/plugins \--data "name=proxy-cache" \--data "config.request_method=GET" \--data "config.response_code=200" \--data "config.content_type=application/json; charset=utf-8" \--data "config.cache_ttl=30" \--data "config.strategy=memory"

如果配置成功,您将收到201响应代码。

这个Admin API请求为所有产生响应代码为200和响应Content-Type头等于application/json; charset=utf-8的GET请求配置了一个代理缓存插件。cache_ttl 指示插件在30秒后刷新值。

最终选项config.strategy=memory指定了用于缓存响应的后端数据存储。有关strategy的更多信息可以在代理缓存插件的参数参考中找到。

 2. 验证

您可以通过发送GET请求并检查返回的头信息来验证代理缓存插件是否正在运行。在本指南的第二步中,服务和路由中,您设置了一个/mock路由和服务,可以帮助您看到代理缓存的实际效果。

首先,对/mock路由进行初始请求。代理缓存插件返回以X-Cache为前缀的状态信息头部,因此请使用grep来过滤这些信息:

curl -i -s -XGET http://localhost:8000/mock/anything | grep X-Cache

在初始请求中,不应该有缓存的响应,头部会通过X-Cache-Status: Miss来指示这一点。

X-Cache-Key: c9e1d4c8e5fd8209a5969eb3b0e85bc6
X-Cache-Status: Miss

在初始请求后的30秒内,重复发送相同的请求命令,头部会显示缓存命中(cache Hit)的信息。

X-Cache-Key: c9e1d4c8e5fd8209a5969eb3b0e85bc6
X-Cache-Status: Hit

X-Cache-Status头部可以返回以下缓存结果:

STATE(状态)DESCRIPTION(描述)
Miss请求可以在缓存中得到满足,但是缓存中未找到该资源的条目,请求被代理到上游。
Hit请求已经在缓存中得到满足并从缓存中提供。
Refresh该资源在缓存中被找到,但由于Cache-Control行为或达到设置的硬编码cache_ttl阈值而无法满足请求。
Bypass基于插件配置,请求无法从缓存中满足。

服务级别代理缓存

代理缓存插件可以针对特定服务进行启用。请求与上面相同,但请求发送到服务URL:

curl -X POST http://localhost:8001/services/example_service/plugins \--data "name=proxy-cache" \--data "config.request_method=GET" \--data "config.response_code=200" \--data "config.content_type=application/json; charset=utf-8" \--data "config.cache_ttl=30" \--data "config.strategy=memory"

 路由级别代理缓存

代理缓存插件可以针对特定路由进行启用。请求与上面相同,但请求发送到路由URL:

curl -X POST http://localhost:8001/routes/example_route/plugins \--data "name=proxy-cache" \--data "config.request_method=GET" \--data "config.response_code=200" \--data "config.content_type=application/json; charset=utf-8" \--data "config.cache_ttl=30" \--data "config.strategy=memory"

 消费者级别代理缓存

在Kong网关中,消费者是定义服务用户的抽象概念。消费者级别代理缓存可用于按消费者缓存响应。

1. 创建消费者 

消费者是通过Admin API中的consumer对象创建的。

curl -X POST http://localhost:8001/consumers/ \--data username=sasha

 2. 为消费者启用缓存

curl -X POST http://localhost:8001/consumers/sasha/plugins \--data "name=proxy-cache" \--data "config.request_method=GET" \--data "config.response_code=200" \--data "config.content_type=application/json; charset=utf-8" \--data "config.cache_ttl=30" \--data "config.strategy=memory"

 管理缓存实体

代理缓存插件支持管理端点来管理缓存实体。管理员可以查看和删除缓存实体,或者通过向Admin API发送请求来清除整个缓存。

要检索缓存实体,请向Admin API的/proxy-cache端点提交一个请求,其中包括已知缓存值的X-Cache-Key值。此请求必须在TTL过期之前提交,否则缓存实体已被清除。

例如,使用上面的响应头信息,将值为c9e1d4c8e5fd8209a5969eb3b0e85bc6的X-Cache-Key传递给Admin API:

curl -i http://localhost:8001/proxy-cache/c9e1d4c8e5fd8209a5969eb3b0e85bc6

带有200 OK的响应将包含缓存实体的全部详细信息。

请参阅Proxy Cache插件文档,获取Proxy Cache特定Admin API端点的完整列表。

这篇关于Kong 代理缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672422

相关文章

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

proxy代理解决vue中跨域问题

vue.config.js module.exports = {...// webpack-dev-server 相关配置devServer: {host: '0.0.0.0',port: port,open: true,proxy: {'/api': {target: `https://vfadmin.insistence.tech/prod-api`,changeOrigin: true,p

防止缓存击穿、缓存穿透和缓存雪崩

使用Redis缓存防止缓存击穿、缓存穿透和缓存雪崩 在高并发系统中,缓存击穿、缓存穿透和缓存雪崩是三种常见的缓存问题。本文将介绍如何使用Redis、分布式锁和布隆过滤器有效解决这些问题,并且会通过Java代码详细说明实现的思路和原因。 1. 背景 缓存穿透:指的是大量请求缓存中不存在且数据库中也不存在的数据,导致大量请求直接打到数据库上,形成数据库压力。 缓存击穿:指的是某个热点数据在

PHP APC缓存函数使用教程

APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”。它为我们提供了缓存和优化PHP的中间代码的框架。 APC的缓存分两部分:系统缓存和用户数据缓存。(Linux APC扩展安装) 系统缓存 它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记。如果未过期,则使用缓存的中间代码运行。默认缓存 3600s(一小时)。但是这样仍会浪费大量C

缓存策略使用总结

缓存是提高系统性能的最简单方法之一。相对而言,数据库(or NoSQL数据库)的速度比较慢,而速度却又是致胜的关键。 如果使用得当,缓存可以减少相应时间、减少数据库负载以及节省成本。本文罗列了几种缓存策略,选择正确的一种会有很大的不同。缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。例如: 系统是写多读少的吗?(例如基于时间的日志)数据是否是只写入一次并被读取多次?(例如用户配

uniapp小程序下载缓存服务器上的图片

1. 使用uni.downloadFile,但是注意下载图片的地址里的域名,需要在微信公众平台里面的downloadFile合法域名进行配置。 export default function downloadAndCacheImage(imageUrl, name) {return new Promise((resolve, reject) => {console.log("imageUrl",

基于canal的Redis缓存双写

canal地址:alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 (github.com)https://github.com/alibaba/canal 1. 准备 1.1 MySQL 查看主机二进制日志 show master status 查看binlog是否开启 show variables like 'log_bin' 授权