关注△mikechen的互联网架构△,10年+BAT架构经验倾囊相授
大家好,我是 mikechen | 陈睿 。
分布式缓存在分布式架构里面占据了非常核心地位,可以说是分布式的基石,所以需要掌握好分布式缓存,下面我就全面来详解分布式缓存。
分布式缓存
分布式缓存:就是将缓存数据分布在多个节点上,以提高系统的性能、可伸缩性、可用性。
分布式缓存通常采用键值对存储,可以存储各种类型的数据,比如:对象、数据库查询结果、计算结果等等。
分布式缓存里面,我们常用的分布式缓存包括:Redis和Memcached,Redis还会更多。
分布式缓存特点
分布式缓存具有如下4大特性:
1.高性能
这是分布式缓存最大的使用场景,就是提升性能。
比如:通过缓存热点数据,降低数据库、以及其他后端存储的访问频率,提高系统响应速度。
2.动态扩展性
可以轻松添加或移除缓存节点,以应对不断增长的负载。
3.高可用性
高可用性会增强,原因很简单,因为分布式缓存都是多个节点,而且,分布式缓存通常具有数据备份、故障转移机制等功能。
所以,可用更好的确保在节点故障时,仍能提供服务。
4.透明性
用户无需关心缓存的具体实现,可以像使用本地缓存一样,使用分布式缓存。
分布式缓存核心问题
分布式缓存面临比较大的问题,经常会涉及:缓存雪崩、缓存击穿等问题。
1.缓存雪崩
缓存雪崩,就是:大量缓存同时失效,导致大量请求直接访问后端存储,压力骤增,导致系统崩溃。
如下图所示:
缓存雪崩通常发生在缓存中的大量数据在同一时间失效,例如:缓存的过期时间相同,或由于某种原因导致大规模数据同时失效。
一般会经历,如下步骤:
1.缓存失效
缓存中的大量数据同时失效,可能是由于过期时间相同、缓存清理操作或其他原因。
这导致之前缓存的数据不再可用,需要从后端存储重新加载。
2.请求压力增大
由于热点数据需要重新加载,大量的请求同时涌入系统,这些请求直接访问后端存储系统,而不经过缓存。
由于瞬时请求量的激增,后端存储系统可能难以应对,导致性能下降。
3.存储系统压力骤增
大量的请求直接访问后端存储系统,压力骤增,可能导致存储系统的性能下降,甚至宕机。
这就是缓存雪崩的最终步骤,系统可能无法正常提供服务。
2.缓存穿透
缓存穿透是指查询一个不存在的数据,由于缓存没有命中,导致请求直接访问底层存储系统。
如下图所示:
缓存穿透通常由于一些恶意请求或异常查询引起,而这些查询无法在缓存中找到对应的数据。
可用采用,如下措施:
1.缓存空值
在缓存中设置空值,比如:null、或你自己指定的特定标记。
表示查询的键对应的数据不存在,防止相同的查询一直穿透到存储系统。
这种方式,就是会特比浪费内存空间,因为内存还是非常高贵的资源。
2.布隆过滤器
使用布隆过滤器等数据结构,快速判断查询的键是否存在于缓存中,减少对存储系统的访问。
布隆过滤器(Bloom Filter)是一种数据结构,用于判断一个元素是否属于一个集合,它具有高效的插入和查询操作。
这个是,目前使用比较多的方案,成本低,效果好。
3.缓存击穿
缓存击穿问题会导致系统性能下降,响应时间增加,可能引起雪崩效应,进而影响整个系统的可用性。
缓存击穿,通常发生在某个热点数据的缓存失效的瞬间,此时大量请求同时涌入系统。
如下图所示:
此时,无法在缓存中获取数据,直接导致存储系统的压力骤增,数据库压力过大,也会出现同样的问题。
所以,设置合理的缓存过期时间时间,就变得非常的重要了。
4.缓存预热
缓存预热是在系统启动或低峰期时,提前将热点数据加载到缓存中。
比如,大家熟知的阿里双11秒杀,这些热点数据,都会提前放入到缓存。
一般,在系统启动或低峰期,通过手动或自动的方式,将热点数据加载到缓存中。
对于大量数据的情况,可以考虑使用异步加载机制等。
总之,通过提前加载热点数据到缓存中,系统可以更快地响应用户请求,提高系统的稳定性和性能。
分布式缓存应用
分布式缓存广泛用于高并发读取场景,如Web应用、电子商务平台等。
通过缓存热点数据,可以大大提高系统的读取性能,减轻对底层存储系统的负担。
分布式缓存常,还被用于存储用户会话数据,避免在每次请求中都需要查询数据库,也就是分布式Session。
除此之外,在分布式计算场景中,分布式缓存还可以用于存储中间计算结果,提高计算效率。
以上,是分布式缓存详细解析,欢迎评论区留言交流或拓展。
我是 mikechen | 陈睿 ,关注【mikechen的互联网架构】,10年+BAT架构技术倾囊相授。
本文已同步我的技术博客 www.mikechen.cc,更新至我原创的《30W+字大厂架构技术合集》中。