中年|图解 | 什么是缓存系统“三座大山”?


中年|图解 | 什么是缓存系统“三座大山”?
本文插图
无处不在的缓存

缓存在计算机系统是无处不在 , 在CPU层面有L1-L3的Cache , 在Linux中有TLB加速虚拟地址和物理地址的转换 , 在浏览器有本地缓存、手机有本地缓存等 。
中年|图解 | 什么是缓存系统“三座大山”?
本文插图

可见 , 缓存在计算机系统中有非常重要的地位 , 其主要作用是提高响应速度、减少磁盘访问等 , 本文主要讨论在高并发系统中的缓存系统 。
一句话概括缓存系统在高并发系统中的地位的话:如果高并发系统是烤羊肉串 , 那么缓存系统就是那一撮孜然 。
中年|图解 | 什么是缓存系统“三座大山”?
本文插图

高并发系统中的缓存
2.1 缓存系统的作用 缓存系统在高并发系统的作用很大 , 在某种程度上可以说没有缓存系统很难支撑高并发场景 。
基于机械磁盘或SSD的数据库系统 , 一般来说读写的速度远慢于内存 , 因此单纯磁盘介质的数据库无法支撑很高的并发 , 可以简单认为缓存是保护磁盘数据库的重要屏障 。
对于一些基于LSM的存储引擎数据库来说 , 随机写改为顺序写速度提升很大 , 但是随机读仍然是个问题 , 所以缓存系统是很有必要的 。

中年|图解 | 什么是缓存系统“三座大山”?
本文插图
2.2 缓存系统访问流程

实际场景也是读多写少 , 看看请求是如何得到响应的 , 简单看下交互流程:

  • 请求到达之后 , 业务线程首先访问缓存 , 如果缓存命中则返回
  • 如果未命中则继续请求磁盘数据库系统 , 获取数据返回
  • 从磁盘获取数据后将结果回写到缓存系统且增加老化时间 , 为下次请求做准备

中年|图解 | 什么是缓存系统“三座大山”?
本文插图

以上是高并发系统中缓存和磁盘数据库系统、客户端请求之间的交互过程 , 后续的问题分析 , 也是基于此过程展开的 。
缓存系统的三大问题 网络上对于缓存三大问题的文章很多 , 提到的三个问题主要是:
  • 缓存雪崩 Cache Avalanche
  • 缓存穿透 Cache Penetration
  • 缓存击穿 Hotspot Invalid
对于上面的三个名词我一直分不清楚 , 脑海中并没有清晰的区别 。
于是想到去谷歌看看歪果仁是怎么说的 , 然而英文表述就是上面的英文 , 基本上和汉语翻译是一样的 , 所以只能强记 , 太难了 。
中年|图解 | 什么是缓存系统“三座大山”?
本文插图

3.1 缓存雪崩问题 所谓雪崩就是原来有所支撑的冰雪 , 某一瞬间失去依托 , 瞬间涌下来 。

这个场景让我想起了2011年上映的柯南剧场版《沉默的十五分钟》 , 柯南在北泽村水库为了拯救村庄制造的雪崩:
中年|图解 | 什么是缓存系统“三座大山”?
本文插图

可见雪崩确实很可怕 , 回到高并发系统 , 如果缓存系统故障 , 大量的请求无法从缓存完成数据请求 , 就全量汹涌冲向磁盘数据库系统 , 导致数据库被打死 , 整个系统彻底崩溃 。
3.2 缓存雪崩解决方案 造成缓存雪崩的主要原因是缓存系统不够高可用 , 因此提高缓存系统的稳定性和可用性十分必要 , 比如对于使用Redis作为缓存的系统而言可以使用哨兵机制、集群化、持久化等来提高缓存系统的HA 。
除了保证缓存系统的HA之外 , 服务本身也需要支持降级 , 可以借助比如Hystrix来实现服务的熔断、降级、限流来降低出现雪崩时的故障程度 。


推荐阅读