欢迎来到我们“使用Node.js构建API网关”系列的第四部分。在第一部分,我们介绍了API网关的基本概念,讨论了它的优缺点,并实现了路由组件。在第二部分,我们通过认证和授权保护您的API。在第三部分,我们介绍了不同的限速策略及其如何保护您的底层服务。您可以在下面找到之前的文章:
使用 Node.js 构建 API 网关:第一部分 — 概述与路由...medium.com 使用Node.js构建API网关:安全性、认证和授权 — 保护您的微服务medium.com 构建API网关:第3部分 — 有效限速保护您的APImedium.com在这一部分,我将探讨你可以实现在你的API网关上的各种缓存技术,以提升性能,减少延迟,并减轻后端服务的负担。从分布式缓存、HTTP缓存头到更高级策略,如去重请求和边缘CDN缓存,我将介绍一些实用的缓存策略,以确保你的API网关既高效又具备良好的扩展性。
将缓存存储在本地内存中的好处包括:
- 更快的数据获取:内存缓存提供了近乎即时的数据检索,减少了延迟并提高了响应时间。
- 减少外部依赖:通过本地存储缓存,您的系统不再依赖外部服务,从而减少了潜在的故障源。
- 降低网络开销:由于数据直接存储在服务器上,无需网络通信,非常适合需要高速和低延迟的应用。
- 简单性:实现内存缓存简单且易于与大多数应用程序集成,而无需构建复杂的基础设施。
但这里也有一些不足之处:
- 有限的可扩展性:本地内存缓存受限于服务器的内存容量,因此随着系统扩展和数据增长,其效果会减弱;
- 无数据持久化:如果服务器宕机或重启,内存缓存中的数据就会丢失,可能导致冷启动并增加后端服务的负载;
- 缺乏分布性:本地缓存不能在多个服务器之间共享数据,不适合需要一致共享缓存数据的分布式系统;
- 数据重复:随着服务数量的增加,缓存数据的副本也会增多,可能导致效率低下。
一如既往,决定权仍然在你这里,你应该仔细权衡一下利弊。如果你在寻找快速简便的解决方案,内存缓存可能更适合你的需求。然而,如果你更看重可扩展性、容错性及其他因素,我建议你可以考虑一下分布式缓存解决方案,比如 Redis 或 Memcached。
你也可以通过在同一个数据库中的一个专门用于存储缓存数据的单独表中缓存长时间运行的查询结果来实现缓存策略。如果使用的是SQL数据库并且需要避免反复执行昂贵的查询,这种方法效果很好。通过存储预先计算的结果,你可以大幅减少查询时间,同时保持现有数据库架构的一致性。
你可能会想,“为什么处处都使用缓存呢?既然缓存能带来显著的性能提升。”原因是虽然缓存可以提升性能,但它也引入了必须小心对待的新问题,例如:
- 缓存失效:保持缓存中的数据新鲜是一项挑战。如果缓存的数据过时,会导致结果不一致。
- 数据一致性:当涉及多个系统或服务时,确保这些系统或服务之间的缓存数据保持一致可能很困难。
- 内存管理:缓存会消耗内存资源,不当的内存管理可能导致资源过度消耗,进而影响整个系统的性能。
- 复杂性:在分布式环境中实施缓存策略,会增加系统的架构复杂性,同时也会使调试变得更加困难。
- 冷启动:当缓存未命中或重启后,系统可能会出现性能下降,直到缓存重建,这会使得初始响应时间变慢。
- 缓存过期:确定缓存数据的合适过期时间需要仔细调整,以平衡性能与数据的新鲜度。
虽然缓存能提供巨大的性能提升,但理解和解决这些挑战以确保它能更好地满足应用程序的需求是很重要的。
想象你正在构建一个处理实时交易的金融系统,例如银行转账或股票交易。在这种情况下,随意使用缓存可能会引发严重问题。例如,如果交易数据或账户余额被缓存起来且没有立即更新,用户可能会看到过时的信息,导致余额显示错误或交易失败。这种不一致情况可能导致严重的后果,比如失去信任、财务错误或违规问题。
在这种类型的系统中,一致性比性能更重要,确保数据一直准确和最新是首要任务。如果缓存被使用,必须非常小心,通常涉及像严格缓存过期这样的方法,或者完全绕过缓存进行关键操作,以避免提供任何过时或不正确的数据。
另外,我们还应该讨论一下不同的缓存策略:服务器端和客户端,
- 服务器端缓存 — 在托管应用程序或API的服务器上进行的缓存。服务器存储频繁被多个客户端请求的数据,以减少处理时间和减轻后端压力。工作原理:当请求进来时,服务器首先检查其缓存中是否已经有该请求的存储响应。如果有,它会发送缓存响应而无需访问数据库或进行大量计算。如果没有,服务器会处理请求,生成响应,并将其存储在缓存中以供将来请求使用。常见示例:缓存数据库查询结果、存储渲染的HTML页面或API响应。
- 客户端缓存 — 在客户端(通常是Web浏览器或应用程序)上发生的缓存。客户端会将请求的数据存储在本地缓存中,例如浏览器缓存或本地存储。工作原理:客户端在初次请求并接收数据后,将其响应存储在其本地缓存中。后续对相同数据的请求将从客户端的缓存中提供,而不是再次从服务器获取数据。常见示例:在浏览器中缓存图片、CSS文件、JavaScript文件或API响应。
它们都旨在提高性能和减少延迟,但它们在请求-响应周期的不同阶段工作。服务器端缓存通过最小化服务器上的重复处理,减轻了后端服务的负担,而客户端缓存减少了客户端获取未更改数据时的网络请求。
此外,你可能还听说过内容分发网络(CDN,内容分发网络),这是另一种常见的缓存策略。CDN 是一个分布在全球不同地理位置的服务器网络,这些服务器缓存并分发内容,使内容更接近最终用户的位置。通过存储静态资产(如图片、CSS、JavaScript 甚至包括 API 响应)的副本,CDNs 减少了数据传输的距离,缩短了传输时间,加快了加载时间并减少了延迟。这不仅加快了内容交付速度,尤其是对于距离原始服务器较远的用户,并帮助主服务器减轻负载,从而提高整体的扩展性和性能。
在 API 网关层,实现服务器端的分布式缓存需要更多的努力,因为它涉及到特定的代码更改,以处理跨多个服务器的缓存逻辑和存储。这种方法可以显著提升频繁访问资源的性能。另一方面,客户端缓存更容易实现,因为底层服务只需简单传递诸如 Cache-Control
、Expires
或 ETag
等 HTTP 标头,在浏览器中管理缓存规则,使客户端可以存储并重用响应。CDN 通常用于补充这两种策略,在边缘位置缓存静态资产和 API 响应,从而减轻 API 网关和后端服务的负担,并在全球范围内提升用户体验。
那么让我们使用 Redis 采用服务器端缓存功能!
如果你喜欢它,就别忘了给项目仓库点个星哦!
共同学习,写下你的评论
评论加载中...
作者其他优质文章
相关文章推荐
阅读免费教程
-
Hibernate 入门教程29个小节 6350 93
-
HTTP 入门教程28个小节 37672 645
-
后端通用面试教程41个小节 30279 342
100积分直接送
付费专栏免费学
大额优惠券免费领
举报
相关内容推荐
游戏站seo招聘无锡外包seo服务优化seo排名费用杭州seo品牌推广泰州快排seoseo吸星大法seo开头的英文抖音seo计费桓台seo优化公司seo工作自评无锡seo优化平台重庆企业seo费用抖音SEO收费陈枫seo走了seo优化制作教程郑州seo快速排名乳山短视频seo微信seo顺序来源seo计费系统py文件对seoseo原创文章好吗seo自然流量技巧通州360seo快速seo投放费用seo优化快速排行天乐seo博客灵溪seo优化哈尔滨seo外包平台seo文章更新内容seo的严谨定义宜昌seo收费标准SEO监控室外拍照hyein seo專櫃seo软件坦下拉专业seo公司软件福州seo 网站推广seo有什么课程盐城快排seoseo博客分享引流SEO要学文章从化seo优化网站seo做app推广哪里培训seo好哪个seo系统最好dz如何完善seo广告seo推广公司河源seo优化推广重庆专业seo优化seo布局啥意思seo整体战略步骤泰州网站seo优化搜索优化seo学习清除cookie与seo福清厦门seo推广长春seo优化排名武汉seo优化流程绍兴seo推广优惠SEO优化站卖装修公司做seo博客优化网站seoseo网络培训方案SEO优化服务介绍SEO教研文案短句兰州扬帆起航seoseo官网模板茂名新站seo建议seo定制费用范围重庆seo优化教程seo排名如何优化seo建什么网站淘宝seo免费学习seo网络推广收集seo优化好坏判断赣州整站seo推广seo从精通到seo流量上不去合肥搜狗seo优化上海seo招聘条件seo怎么写好标题佛山seo整站优化seo进阶之链接seo营销优化公司seo蜘蛛优化陷阱阜阳seo选哪家芜湖南陵seo黑帽seo 目录seo如何打造品牌吉林谷歌seo外包seo设计是什么提升seo自然排名雀巢企业seo策略白银seo网络推广SEO入门玄关布置南昌seo推广推荐天津seo优化技巧北仑seo报价SEO学习视频动漫美容seo软文推广秦志强 seoSEO联盟名字创意商务seo是什么湖北seo网络推广云南seo优化计划seo推广工具公司阜新抖音seorobots.txt seoseo渠道商Google SEO 小黑屋seo关于我们广东seo公司定制阳泉上门seo优化广州网络seo代理seo 做外链seo优化好坏判断日照快照seo推广seo长尾外推SEO帝国女孩发型南宁新站优化seoseo外包商推荐seo需要cms吗成都seo怎么优化手淘seo优化快速seo投放费用西安搜狗seo优化班克seo系统SEO北京游玩文案seo优化常识大全临海seo排名稳定上海企业seo排名seo运营主管招聘无锡搜索seo优化seo经验论坛中国美女seoseo京东商城优化seo搜索排名解析白帽seo招聘seo好的例子seo检测优化网站南昌新建seo优化厦门seo公司网站凯里网络seo推广瑶海区seo招聘淘宝线下seo培训seo 生态圈贵州seo网络培训黄圃seo推广淘宝seo教程xiazaiB站Seo工具盘锦seo优化品牌seo提词怎么练网优seo前景汕头seo计费管理无锡seo服务价格郑州seo优化团队吴中seo产品推广seo博客 无名小站SEO北京拍照姿势河西快照seo优化如何测试seo网站dz论坛seo技术丰县seo优化推广站群seo工具黄石港区seo优化seo哪家好麒麟seo优化教程银行网站seo营销合作seo优化公司福建seo管理平台息心seo博客seo增长流量seo的推广手段威海seo外包报价泰州seo结构优化SEO查询社保自己广东seo优化方法seo后期优化方案武汉seo优化指南seo论文官网江门问答seo推广东莞seo优化排行淳安seo推广服务建站前seo工作河南黑帽seoseo男团成员耀眼seo排名迅速下降seo网页标题优化秒收录源码seo黄浦seo网站优化永泰正规seo推广南京外贸建站SEO西二旗seoseo思维等内容有名seo外包策略seo 网站物理结构江门问答seo推广赋能矩阵seo雅安seo推广报价武汉seo刘恺seo有培训机构seo资料怎么填