首页 > 编程知识 正文

redis淘汰策略面试题(redis 缓存雪崩)

时间:2023-05-06 16:13:19 阅读:101164 作者:2964

热键问题有两个原因:1。用户消费的数据远大于生产的数据(热货、热点新闻、热点评论、明星直播)。在日常工作生活中,一些突发事件,比如双十一期间一些热门商品的降价促销,当其中一种商品被数万点击观看或购买时,就会形成很大的需求,从而引发热点问题。

热键问题有两个原因:

1.用户消费的数据远大于生产的数据(热卖商品、热点新闻、热点评论、明星直播)。

在日常工作生活中,一些突发事件,比如双十一期间一些热门商品的降价促销,当其中一种商品被数万点击观看或购买时,就会形成很大的需求,从而引发热点问题。

同样,热点新闻、热点评论、明星直播等。被广泛发表和浏览,也会在这些读多写少的典型场景中产生热点问题。

2.请求是分段的,超过了单个服务器的性能限制。

当服务器读取数据进行访问时,数据通常是分段的。在此过程中,将在主机服务器上访问相应的密钥。当访问超过服务器限制时,将导致热键问题。

热点关键问题的危害

1.流量集中,达到物理网卡上限。

2.请求太多,缓存碎片服务被破坏。

3.数据库崩溃,造成业务雪崩。

如前所述,当某个热点Key的请求超过某台主机上的主机网卡上限时,由于流量过于集中,服务器中的其他服务无法进行。

如果热点过于集中,热点Key缓存过多,超出当前缓存容量,会导致缓存碎片服务崩溃。

当缓存服务崩溃时,此时会生成另一个请求,该请求将缓存在后台数据库中。由于DB本身性能较弱,在面对较大的请求时,请求很容易穿透,会进一步导致雪崩现象,严重影响设备的性能。

解决办法

通常的解决方案主要集中在客户端和服务器端的相应转换上。

1.服务器缓存方案

首先,客户端将请求发送到服务器,而服务器是一个多线程服务,因此根据缓存LRU策略,有一个本地缓存空间。

当服务器本身拥塞时,服务器不会进一步向数据库发送请求,而是直接返回。只有当服务器本身未被阻止时,客户端请求才会被发送到数据库,数据才会被重写到缓存中。

此时,缓存的访问和重建完成。

但是,该方案也存在以下问题:

1.缓存故障,多线程缓存问题

2.缓存丢失,缓存构造问题

3.肮脏的阅读问题

2.使用Memcache和Redis方案。

该方案通过在客户端单独部署缓存来解决热键问题。

在使用中,客户端首先访问服务层,然后访问同一主机上的缓存层。

这种解决方案具有近接入、高速、不受带宽限制的优点,但也存在以下问题。

1.内存资源的浪费

2.肮脏的阅读问题

3.使用本地缓存方案。

使用本地缓存存在以下问题:

1.需要提前了解热点。

2.有限的缓存容量

3.不一致性随着时间的推移而增长。

4.缺少热点键

传统热点解决方案存在各种问题,那么如何解决热点问题呢?

4.解决热读取的读写分离方案

架构中每个节点的功能如下:

1.SLB层执行负载平衡。

2.代理层做读写分离自动路由。

3.主人负责写请求。

4.ReadOnly节点负责读取请求。

5.从节点和主节点高度可用。

在实践中,客户端将请求传输到SLB,SLB将其分发到多个代理,并通过代理标识对请求进行分类和发送。

例如,向主模块发送写请求,向发送读请求

ReadOnly 模块。

而模块中的只读节点可以进一步扩充,从而有效解决热点读的问题。

读写分离同时具有可以灵活扩容读热点能力、可以存储大量热点Key、对客户端友好等优点。

5、热点数据解决方案

该方案通过主动发现热点并对其进行存储来解决热点 Key 的问题。

首先 Client 也会访问 SLB,并且通过 SLB 将各种请求分发至 Proxy 中,Proxy 会按照基于路由的方式将请求转发至后端的 Redis 中。

在热点 key 的解决上是采用在服务端增加缓存的方式进行。

具体来说就是在 Proxy 上增加本地缓存,本地缓存采用 LRU 算法来缓存热点数据,后端 db 节点增加热点数据计算模块来返回热点数据。

Proxy 架构的主要有以下优点:

1、Proxy 本地缓存热点,读能力可水平扩展

2、DB 节点定时计算热点数据集合

3、DB 反馈 Proxy 热点数据

4、对客户端完全透明,不需做任何兼容

热点 key 处理

热点数据的读取

在热点 Key 的处理上主要分为写入跟读取两种形式,在数据写入过程当 SLB 收到数据 K1 并将其通过某一个 Proxy 写入一个 Redis,完成数据的写入。

假若经过后端热点模块计算发现 K1 成为热点 key 后, Proxy 会将该热点进行缓存,当下次客户端再进行访问 K1 时,可以不经 Redis。

最后由于 proxy 是可以水平扩充的,因此可以任意增强热点数据的访问能力。

热点数据的发现

对于 db 上热点数据的发现,首先会在一个周期内对 Key 进行请求统计,在达到请求量级后会对热点 Key 进行热点定位,并将所有的热点 Key 放入一个小的 LRU 链表内,在通过 Proxy 请求进行访问时,若 Redis 发现待访点是一个热点,就会进入一个反馈阶段,同时对该数据进行标记。

DB 计算热点时,主要运用的方法和优势有:

1、基于统计阀值的热点统计

2、基于统计周期的热点统计

3、基于版本号实现的无需重置初值统计方法

4、DB 计算同时具有对性能影响极其微小、内存占用极其微小等优点

方案对比

通过上述对比分析可以看出,在解决热点 Key 上较传统方法相比都有较大的提高,无论是基于读写分离方案还是热点数据解决方案,在实际处理环境中都可以做灵活的水平能力扩充、都对客户端透明、都有一定的数据不一致性。

此外读写分离模式可以存储更大量的热点数据,而基于 Proxy 的模式有成本上的优势。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。