13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

缓存系统中面临的雪崩/穿透/一致性问题

 There are only two hard things in Computer Science: cache invalidation and naming things.

成都创新互联专业为企业提供牡丹网站建设、牡丹做网站、牡丹网站设计、牡丹网站制作等企业网站建设、网页设计与制作、牡丹企业网站模板建站服务,十余年牡丹做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

计算机科学中有两件难事:缓存失效和命名

– Phil Karlton

From Martin Fowler : TwoHardThings

缓存系统一定程度上极大提升系统并发能力,但同样也增加额外技术考虑因素,下面针对缓存系统设计与使用中面临的常见问题展开。

缓存应用的典型场景

请求->缓存->***缓存则返回数据->无缓存则读取原始数据源

缓存定位 :前置数据加载,避免数据回源,提供高性能、高并发的数据读取能力;只有未***缓存时才进行数据回源,极大减轻原始数据读取的压力

缓存分类 :按缓存系统所处位置不同,分为本地缓存、分布式缓存

本文主要讨论 分布式缓存 系统设计与使用中面临的问题。

缓存雪崩

定义: 缓存雪崩是指缓存系统失效,导致大量请求同时进行数据回源,导致数据源压力骤增而崩溃 。两种情况会导致此问题:1、多个缓存数据同时失效;2、缓存系统崩溃

缓存同时失效

如何避免应考虑: 缓存失效时间离散化

缓存系统故障

缓存系统整体故障,则整个缓存系统不可用,大量回源请求,且由于缓存系统故障无法回写缓存,导致无法快速恢复。

一句老话:为解决一个问题,引入新的解决方案,同时也必然引入新的问题。

这也是缓存系统的引入,在解决高性能、高并发的同时,引入了新的故障点。

考虑此问题,应从事前、事故中、事后不同阶段考虑:

缓存穿透

定义: 缓存穿透是指访问不存在数据,从而绕过缓存,直取数据源(大量数据源读取操作)

解决缓存穿透的思路:

缓存更新与数据一致性

缓存系统数据的更新策略是需要专门开题来说的,建议阅读 左耳朵耗子:缓存更新的套路 系统了解,这里只根据实际经验给出在不同一致性要求下的建议。

一种常见缓存更新策略(此方案有问题):

问题场景:读写并发的场景下先删缓存操作可能导致脏数据入缓存

几种更新缓存的策略:

总体来说,不同方案在不同场景下是有各自优劣的,技术选型、架构设计应根据实际场景取舍,并对选择方案的利弊有足够且深入理解。

一般而言,推荐 Cache Aside Pattern 方案,容忍较小概率的不一致(同时也可以增加锁机制解决此低概率并发问题),简化缓存系统复杂度。


分享名称:缓存系统中面临的雪崩/穿透/一致性问题
网页网址:http://cdbrznjsb.com/article/dpepocs.html

其他资讯

让你的专属顾问为你服务