版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 高并发网站多级缓存设计什么是多级缓存所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。我们应用的整体架构如图1所示:图1 多级缓存方案整体流程如上图所示:1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希可以提升应用Nginx的缓存命中率,相对于轮询,一致性哈希会存在单机热点问题,一种解决办法是热点直接推送到接入层Nginx,一种办法是设置一个阀值,当超过阀值,改为轮询算法。2)接着应用Nginx读取本地缓存(本地缓存可以使用Lua Shared Di
2、ct、Nginx Proxy Cache(磁盘/内存)、Local Redis实现),如果本地缓存命中则直接返回,使用应用Nginx本地缓存可以提升整体的吞吐量,降低后端的压力,尤其应对热点问题非常有效。3)如果Nginx本地缓存没命中,则会读取相应的分布式缓存(如Redis缓存,另外可以考虑使用主从架构来提升性能和吞吐量),如果分布式缓存命中则直接返回相应数据(并回写到Nginx本地缓存)。4)如果分布式缓存也没有命中,则会回源到Tomcat集群,在回源到Tomcat集群时也可以使用轮询和一致性哈希作为负载均衡算法。5)在Tomcat应用中,首先读取本地堆缓存,如果有则直接返回(并会写到主R
3、edis集群),为什么要加一层本地堆缓存将在缓存崩溃与快速修复部分细聊。6)作为可选部分,如果步骤4没有命中可以再尝试一次读主Redis集群操作。目的是防止当从有问题时的流量冲击。7)如果所有缓存都没有命中只能查询DB或相关服务获取相关数据并返回。8)步骤7返回的数据异步写到主Redis集群,此处可能多个Tomcat实例同时写主Redis集群,可能造成数据错乱,如何解决该问题将在更新缓存与原子性部分细聊。应用整体分了三部分缓存:应用Nginx本地缓存、分布式缓存、Tomcat堆缓存,每一层缓存都用来解决相关的问题,如应用Nginx本地缓存用来解决热点缓存问题,分布式缓存用来减少访问回源率、To
4、mcat堆缓存用于防止相关缓存失效/崩溃之后的冲击。虽然就是加缓存,但是怎么加,怎么用细想下来还是有很多问题需要权衡和考量的,接下来部分我们就详细来讨论一些缓存相关的问题。如何缓存数据接下来部将从缓存过期、维度化缓存、增量缓存、大Value缓存、热点缓存几个方面来详细介绍如何缓存数据。1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 16.1. 16.2. 16.3. 16.4. 16.5. 过期与不过期对于缓存的数据我们可以考虑不过期缓存和带过期时间缓存,什么场景应该选择哪种模式需要根据业务和数据量等因素来决定。不过期缓存场景一般思
5、路如图2所示:图2不过期缓存方案使用Cache-Aside模式,首先写数据库,如果成功,则写缓存。这种场景下存在事务成功、缓存写失败但无法回滚事务的情况。另外,不要把写缓存放在事务中,尤其写分布式缓存,因为网络抖动可能导致写缓存响应时间很慢,引起数据库事务阻塞。如果对缓存数据一致性要求不是那么高,数据量也不是很大,则可以考虑定期全量同步缓存。也有提到如下思路:先删缓存,然后执行数据库事务;不过这种操作对于如商品这种查询非常频繁的业务不适用,因为在你删缓存的同时,已经有另一个系统来读缓存了,此时事务还没有提交。当然对于如用户维度的业务是可以考虑的。不过为了更好地解决以上多个事务的问题,可以考虑使
6、用订阅数据库日志的架构,如使用canal订阅mysql的binlog实现缓存同步。对于长尾访问的数据、大多数数据访问频率都很高的场景、缓存空间足够都可以考虑不过期缓存,比如用户、分类、商品、价格、订单等,当缓存满了可以考虑LRU机制驱逐老的缓存数据。1. 过期缓存机制即采用懒加载,一般用于缓存别的系统的数据(无法订阅变更消息、或者成本很高)、缓存空间有限、低频热点缓存等场景;常见步骤是:首先读取缓存如果不命中则查询数据,然后异步写入缓存并过期缓存,设置过期时间,下次读取将命中缓存。热点数据经常使用即在应用系统上缓存比较短的时间。这种缓存可能存在一段时间的数据不一致情况,需要根据场景来决定如何设
7、置过期时间。如库存数据可以在前端应用上缓存几秒钟,短时间的不一致时可以忍受的。2.维度化缓存与增量缓存对于电商系统,一个商品可能拆成如基础属性、图片列表、上下架、规格参数、商品介绍等;如果商品变更了要把这些数据都更新一遍那么整个更新成本很高:接口调用量和带宽;因此最好将数据进行维度化并增量更新(只更新变的部分)。尤其如上下架这种只是一个状态变更,但是每天频繁调用的,维度化后能减少服务很大的压力。图3 维度化缓存方案按照不同维度接收MQ进行更新。3.大Value 缓存要警惕缓存中的大Value,尤其是使用Redis时。遇到这种情况时可以考虑使用多线程实现的缓存,如Memcached,来缓存大Value;或者对Value进行压缩;或者将Value拆分为多个小Value,客户端再进行查询、聚合。4.热点缓存对于那些访问非常频繁的热点缓存,如果每次都去远程缓存系统中获取,可能会因为访问量太大导致远程缓存系统请求过多、负载过高或者带宽过高等问题,最终可能导致缓存响应慢,使客户端请求超时。一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学学期末德育工作总结
- 临床换季关节酸痛高发注意事项
- 美国运动医学会《成人体力活动与超重、肥胖共识声明》解读
- 房地产开发会计 课件 第1-5单元 房地产开发经营主要流程及特征-房地产开发企业开发过程的会计核算
- 2026年隔热服行业分析报告及未来发展趋势报告
- 2.常见的化学仪器与基本实验操作 课件 (共38张) (人教版)
- 2026年冻干机行业分析报告及未来发展趋势报告
- 2026年低温肉制品行业分析报告及未来发展趋势报告
- 亿磁通科技产品解决方案
- 2026年风电叶片涂料行业分析报告及未来发展趋势报告
- 成都湔江投资集团有限公司2026年春季第一批次招聘考试参考题库及答案解析
- 2026年高考物理终极冲刺:专题12 动量守恒定律及其应用(二大题型)原卷版
- 2025江苏扬州市高邮市城市建设投资集团有限公司招聘拟聘用人员笔试历年参考题库附带答案详解
- 易制毒单位内部安全制度
- 2025年运城市人民医院招聘笔试真题
- √高考英语688高频词21天背诵计划-词义-音标-速记
- 2026年社会工作者《法规与政策(中级)》真题及答案解析
- 自来水水质检测与监测工作手册
- 2025年仙桃市选聘大学生村干部168人历年题库附答案解析
- 钢桁架屋面施工方案
- 雨课堂学堂在线学堂云《烹调工艺学(扬大)》单元测试考核答案
评论
0/150
提交评论