架构设计:浅析分布式系统中的缓存问题

在分布式系统设计中,为了提高系统的响应速度,为了减轻数据库服务器的访问压力,我们经常会对数据进行缓存处理。本文由浅入深,逐步讲解缓存的设计,以及设计中遇到的问题。

初级缓存方案

初级缓存方案如下图所示,之所以如此命名,是因为大多数的系统中都是这样使用缓存的,是一个基础的缓存方案。大致流程如下:
1、业务系统从缓存中查询数据
2、如果查询到数据,则直接使用该数据
3、如果没有查询到数据,则需要业务系统从数据库中查询数据
4、如果查询到数据,则将数据放入缓存中,同时使用该数据
5、如果没有查询到数据,则直接返回空
初级缓存方案

初级缓存方案存在的问题

在访问量比较小的系统中,初级缓存方案是可以满足缓存要求的,但是在大型的分布式系统中,该方案存在问题的,如下:

缓存穿透问题

假设数据库中有 N 个用户U = {U1, U2,…Un},缓存穿透问题描述如下:
1、业务系统第一次从缓存中查询 U1 用户数据,此时缓存没有该数据,接着从数据库查询,查询到该数据,并将数据写入缓存中,业务系统就可以使用该数据。
2、再次查询 U1 用户数据时,直接从缓存中获取。
3、以此类推, {U2,…Un} 的数据查询逻辑类似于 U1。
4、当业务系统要查询 Un+1 的用户数据时,此时缓存中没有该用户数据,于是从查询数据库,数据库中也没有该用户数据,直接返回空。
5、问题来了,如果业务系统反复查询 Un+1 的用户数据,此时大量的请求会穿透缓存,直接进行数据库查询,给数据库带来大量的访问压力,严重时可能会导致数据库系统

猜你喜欢

转载自blog.csdn.net/claram/article/details/90514088