微服务系列:通过Kong网关缓存API结果

2023-11-15 19:55:46 浏览数 (1)

1、 背景

在之前的文章中介绍了API的两个特性:限流鉴权,这篇文章我们聊聊通过Kong给API加缓存。

1、 为什么需要API网关

2、 Kong初探

3、 Kong安装配置

4、 通过Kong提供API服务

5、 通过Kong网关给API限流

6、 通过Kong网关给API加Key鉴权

7、 Kong网关实现API负载均衡

2、为什么需要缓存?

在现代应用程序中,API通常需要处理大量的请求,而这些请求可能包含重复的数据。每次请求都直接到达后端服务器获取数据,这样做会导致一些问题:

性能瓶颈: 大量请求同时涌入可能使后端服务器过载,导致响应变慢。

资源浪费: 重复的请求导致资源浪费,因为相同的响应可以被缓存并在后续请求中重复使用。

网络开销: 频繁地从后端获取相同的数据增加了网络开销,特别是对于移动应用或分布式系统。

为了解决这些问题,引入缓存机制成为一种有效的解决方案。

3、Kong网关的Proxy Cache插件

Kong的Proxy Cache插件通过缓存机制提供了一种性能优化的方式。该插件根据可配置的响应代码、内容类型和请求方法缓存响应,从而加速性能。启用缓存后,后端服务不会因为频繁请求而过载。缓存可以在特定的Kong网关对象上启用,也可以全局启用以应对所有请求。

缓存生存时间(TTL)管理缓存内容的刷新速率,来保证提供给用户的内容都是有效的。TTL为30秒意味着30秒之前的内容被视为过期,并将在后续请求中进行刷新。根据上游服务提供的内容类型,TTL配置应该有所不同:

对于很少更新的静态数据,可以设置较长的TTL。

对于动态数据,应该使用较短的TTL以避免提供过时的数据。

Kong网关遵循RFC-7234第5.2节的缓存控制操作。

4、 Proxy Cache配置实战

4.1 启用全局缓存

代码语言:javascript复制
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"

返回结果如下,说明配置成功

代码语言:javascript复制
HTTP/1.1 201 Created
Date: Wed, 15 Nov 2023 11:45:02 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
X-Kong-Admin-Request-ID: ouXv728H1ov72FIAnukxiOKXIEwBuliJ
Content-Length: 587
X-Kong-Admin-Latency: 33
Server: kong/3.4.1.1-enterprise-edition

4.2 验证

浏览器抓包,可以看到我们的请求已经有X-Cache的响应头

5、总结

本文简单介绍了为什么需要缓存以及通过Kong网关快速给API开启缓存的方法,有什么疑问我们评论区讨论。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞