多级缓存架构体系介绍
整理自b站:【IT老齐004】为什么架构师对多级缓存架构情有独钟?
1、web应用的客户端缓存
主要是对html中图片、css、js、字体等静态资源进行缓存。
具体:通过在浏览器设置Expires响应头,在设置的时间段内把静态资源以文件形式把图片保存在本地,减少多次请求静态资源带来的带宽损耗。这在高并发的应用中是基础而重要的设置。
2、应用层的静态资源缓存
上面提到的客户端缓存部分,浏览器只负责读取Expires。Expires需要在CDN(内容分发网络)和Nginx进行设置。对于广域的互联网应用,CDN几乎是基础设置。作为静态资源分发的主要技术手段,有效解决带宽集中占用以及数据分发问题。
CDN的核心技术:
将较远服务器的静态资源缓存到就近的服务器,让用户就近访问。
具体:浏览器会通过智能DNS服务提供商提供DNS服务将请求自动转发在就近的CDN服务器(上海CDN节点),上海CDN服务器收到请求后检查资源是否被缓存,若已缓存则返回资源否则回源北京提取到并缓存到上海CDN节点,再由上海CDN节点进行返回。
因此如果全中国过各地都安排了这类CDN节点,就可以有效将北京CDN服务器的请求分摊到其他CDN节点上,从而降低北京机房带宽压力。在互联网应用中,因为CDN涉及多域多节点的组网,前期投入较高,中小公司可以选用阿里云腾讯云租用。
响应头Expires和Cache-control的区别:
- 均为通知浏览器进行文件缓存
- Expires指在这个时间点缓存就到期
- Cache-control指缓存时间有多长。
即:你明天还钱给我Expires,时间是一天Cache-control
CDN适用于广域的,用户分布全国各地,对资源的响应速度及贷款具有较高要求,这种情况可以用CDN进行内容分发。如果是企业级应用,往往用户是分布在指定的办公区域或相对固定的场所,且并发用户量较少,并不需要额外部署CDN这类重量级的解决方案。在我们的架构中往往仅需部署一台nginx服务器,利用nginx自带的静态资源缓存的能力以及压缩的功能就可以胜任绝大多数企业级应用场景。
Nginx缓存管理:
Nginx对Tomcat集群做软负载均衡,提供高可用性。有静态资源缓存和压缩功能(在本地缓存文件),这样请求以后静态资源直接从nginx进行返回。
对nginx.conf中国设置如下,就可以设置静态资源缓存:
nginx把静态资源是保存在本地,分目录的形式:
3、服务层的多级缓存
进程内缓存和进程外缓存
进程内缓存:即数据运行时载入程序开辟的缓存中JAVA框架的运用(hibernate,mybatis一二级缓存,springmvc页面缓存)
开源实现:ehcache,Caffeine
进程外缓存:即为分布式缓存(redis)
常见的加缓存是直接加redis是不严谨的。缓存设置需要按照:先近到远,先快后慢逐级访问。
场景:商品秒杀,若无本地缓存,都保存在redis 每完成一笔交易,局域网会进行若干网络通信,可能存在网络异常不稳定因素,且redis会承担所有节点的压力,当突发流量若超过容载上限redis会崩溃。因此java的应用端也需要设计多级缓存。一般会通过进程内缓存和进程外缓存(分布式缓存)组合分担压力。ehcache(进程内缓存)可以在缓存不存在时去redis进程外缓存进行读取,redis没有再去读取数据库,数据库再对ehcache,redis进行更新。下次再请求相同数据就直接从进程内的本地内存中提取,性能得到显著提升。
引入多级缓存会面临缓存一致性的问题,如何处理?
场景:修改商品价格为80,如何保证缓存也进行更新?
数据如何推送到其他缓存?
处理方法:引入消息队列(MQ)的主动推送功能,对服务实例推送变更实例
即:修改商品价格为80,向MQ发送变更消息,MQ将消息推送到服务实例服务实例将原缓存数据删除,再创建缓存。
什么情况适用多级缓存架构
1、缓存数据稳定。比如邮政编码,地域区号;
2、可能产生高并发场景,12306、股市开盘交易。可以在应用启动时进行预热处理,访问前将热点数据先缓存,减少后端压力;
3、一定程度上允许数据不一致。比如不重要的信息更新处理方式:T+1、ETL日中处理(T+1日间跑批,ETL日中跑批)。
多级缓存架构体系介绍相关推荐
- 亿级流量电商详情页系统实战-25.亿级流量商品详情页的多级缓存架构介绍
1.前言 很多人以为,有了redis缓存,就可以支持对高并发的业务场景了.其实做复杂的缓存,如支撑电商复杂的场景下的高并发的缓存,遇到的问题是非常非常之多,绝对不是说简单的访问一下redis就可以了. ...
- 关于分布式多级缓存架构,也许你一直考虑的太简单了
这篇想聊的话题是:「分布式多级缓存架构的终章」,如何解决大流量.高并发这样的业务场景,取决于你能不能成为这个领域金字塔上层的高手? 能不能把这个问题思考清楚决定了你的成长速度. 很多人在一个行业5年. ...
- 设计高并发架构与系统多级缓存架构如何设计?
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己 ...
- 什么是缓存架构,什么又是后端分布式多级缓存架构,全文解析
缓存,已经是一个老生常谈的技术了,在高并发读的情况下对于读服务来说可谓是抗流量的银弹. 高并发三大利器:缓存.限流.降级. 今天我们就来谈谈缓存.对于缓存,我的理解是让数据更接近于用户,目的是让用户的 ...
- 分布式缓存redis+本地缓存Caffeine:多级缓存架构在行情系统中的应用
多级缓存架构在行情系统中的应用 一 为什么要有多级缓存 二 多级缓存架构 三 代码实现 @PreHeat 注解 CacheAspect 定时任务执行器PreheatTask LocalCacheSer ...
- 多级缓存架构还没听过?分布式多级缓存架构知识大瓶装,25 张图打包拎走
一谈缓存,内心顿时豁然开朗.迫于key-value的形式,总感觉轻风扶面,杨柳依依,一切都尽在我掌握之中.犹如那一眼相中佳人的冲动,脑子里尽是佳人的容颜. 那缓存如果站在网站架构的角度,你知道它的设计 ...
- 亿级流量系统多级缓存架构10 阿里云实战
亿级流量系统多级缓存架构10 阿里云实战 域名购买解析 域名的价值 域名的价值就像商标一样,体现在你注册一个域名之后,别人就不可以再注册这个域名了,域名的稀缺性就产生了.域名可以买卖,一个域名我注册了 ...
- bilibili缓存文件在哪里_面试官:你知道什么是网络缓存吗?了解原理?多级缓存架构知道?
引言 随着一阵阵秋风吹过和一场场秋雨降临,天气早已由热转凉.在这准备步入严寒之际.起早的吒吒辉辉紧紧裹了下被子,鼻子依旧竖立着大鼻涕在那键盘上啪啪啪敲打着.想必大家此刻依旧在清晨甜美的梦乡之中,此刻唯 ...
- kubernete架构体系介绍
我们用docker制作了一个容器镜像,使用docker命令就可以跑起来.但是当容器成千上万时,用docker命令来管理肯定是不够的.而且生产上的自动发布.容器监控.接口鉴权等工作,传统的工具已经不能支 ...
最新文章
- Nat. Commun. | 序列到功能的深度学习框架加速工程核糖调节剂设计和优化
- SIFT中LoG和DoG比较
- python学习详解_深入解析Python小白学习【操作列表】
- mysql 日志还原数据库_通过Mysql-bin日志恢复还原数据
- CentOS搭建FTP服务器
- linux下cpu opencl加速,GPU挑战CPU!详解CUDA+OpenCL威力
- linux 块编辑,vim中的可视块编辑
- blockchain_eth客户端安装 geth使用 批量转账(二)
- 【渝粤题库】国家开放大学2021春2096经济法学题目
- Flutter进度条Flutter圆形进度条Flutter条形进度条Flutter Progress进度条LinearProgressIndicator
- powershell快捷键_关于powershell的知识你知道多少呢
- Nicescroll滚动条插件的用法
- 基于AVR-BootLoader,通过霜蝉远程串口可实现单片机的远程升级
- 关于编程中变量的定义
- LaTeX里插入数学公式
- HihoCoder 1384 Genius ACM
- 关于销售的成本和收入
- Windows11关机键在哪 Win11系统关机键的位置
- 形态学 - 膨胀和腐蚀
- Cause: java.sql.SQLExceptioValue ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestamp