软件缓存架构技术的探讨

摘要

缓存是用于存储数据的硬件或者软件的组成部分,以便后续能更快访问相应的数据,是一种典型的以空间换取时间的技术,适合读多写少的业务场景。缓存中的数据可能是提前计算好的结果、数据的副本等。缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下的热点数据访问性能问题,提供高性能的数据快速访问。实现缓存的解决思路是将数据的写入/读取速度更快的存储设备,将数据缓存到离应用或者用户最近的位置。

关键字

缓存、分布式、高可用

缓存分类

一、CDN

简介

CDN(Content Delivery Network)内容分发 络。其基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或 络中,在用户访问 站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。CDN强调 络在内容发布中的重要性,包括分布式存储、负载均衡、 络请求重定向和内容管理4个要件。

分布式缓存架构图

一般情况下有两层Nginx,第一层负责接入Nginx将请求发给第二层,第二层的Nginx带有本地的缓存,如果缓存命中直接返回,否则再读取分布式缓存。
分布式缓存集群为了保证可用性,一般采取主从架构,通过主从复制来实现数据的同步。缓存的更新可以采取懒加载或者订阅消息进行同步。

缓存带来的系统性问题

缓存穿透

缓存穿透是指缓存没有发挥作用,业务系统虽然去缓存查询数据,但是缓存中没有数据,需要再去数据库中查询,缓存没有起到作用
造成这种现象的原因有以下两种
1.存储数据不存在
原本数据就不在缓存和数据库中,可以在缓存中设置默认值,第二次访问的时候读取缓存就会获取默认值不会穿透到数据库去。
2.缓存数据生成耗费大量的时间或者资源
如果生成缓存需要耗费大量时间,假设访问缓存的时候数据正好失效,而生成需要大量时间,那么就会直接访问数据库去了。
这种情况没有一劳永逸的解决方法,在不同的场景下要根据具体情况作出相应的权衡,比如对将要访问的这一页数据进行缓存,对 络爬虫的情况作出监控以免拖垮系统等。

缓存雪崩

缓存雪崩是指当缓存在同一时间失效所引起的系统性能急剧下降的情况。重新生成又需要几十毫秒的时间,而对于一个高并发的业务系统来说,在这几十毫秒的过程系统可能会接到成千上百个请求,处理这些请求的线程又会集中区更新缓存造成巨大的性能压力,这些请求的压力会直接落到数据库上引起系统的崩溃。

解决缓存雪崩的有以下常用的方法:
1.把缓存的失效时间分散开,比如在原有的失效时间上增加一个一定范围内的随机值。
2.更新锁机制
在缓存失效后,通过加锁或者队列来控制数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,让其他线程等待。
3.后台更新机制
由特定的后台线程来更新缓存,而不是由业务线程来更新缓存,缓存本身的有效期设置为永久,后台线程定时更新缓存。当失效时间设置永久后,还需要设置一定的规则当系统内存不够用的时候删除一些缓存数据。当业务线程发现缓存失效后,通过消息队列发送后台线程更新缓存。除此之外后台更新机制可以用来进行缓存的预热,对一些常用的热点数据系统开启之后直接加载到系统缓存中,不等到用户访问来触发缓存的加载。

缓存热点

突发的热点事件造成流量爆发式增长,大量的热点数据集中访问导致某个缓存资源遇到性能瓶颈,可以考虑增加小容量的一级缓存来专门存储极其热点数据,通过部署多组小容量的一级缓存来应对爆发式的访问量

参考文献

[1]蒋杰,数字通信世界 2018,(08),12-13 DOI:10.3969/J.ISSN.1672-7274.2018.08.006

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年11月11日
下一篇 2018年11月11日

相关推荐