所有分类
  • 所有分类
  • 未分类

Redis–缓存雪崩–含义/原因/解决方案

简介

本文介绍Redis的缓存雪崩,包括:含义、原因、解决方案。

含义

缓存雪崩的英文原意是stampeding herd(奔逃的野牛) ,指的是缓存层宕掉后,流量会像奔逃的野牛一样,打向后端存储。

雪崩的原因

由于缓存层承载着大量请求,有效地保护了存储层,但是如果缓存层由于某些原因不能提供服务,于是所有的请求都会达到存储层,存储层的调用量会暴增,造成存储层也会级联宕机的情况。

流程如图1所示:

解决方案

1. 保证Redis服务高可用

和飞机都有多个引擎一样,如果缓存层设计成高可用的,即使个别节点、 个别机器、 甚至是机房宕掉,依然可以提供服务。

Redis Sentinel和Redis Cluster都实现了高可用。

2. 使用隔离组件为后端限流并降级

无论是缓存层还是存储层都会有出错的概率,可以将它们视同为资源。

作为并发量较大的系统,假如有一个资源不可用,可能会造成线程全部阻塞(hang) 在这个资源上,造成整个系统不可用。 降级机制在高并发系统中是非常普遍的: 比如推荐服务中,如果个性化推荐服务不可用,可以降级补充热点数据,不至于造成前端页面空白一片。

在实际项目中,我们需要对重要的资源(例如Redis、 MySQL、HBase、 外部接口) 都进行隔离,让每种资源都单独运行在自己的线程池中,即使个别资源出现了问题,对其他服务没有影响。 但是线程池如何管理,比如如何关闭资源池、 开启资源池、 资源池阀值管理,这些做起来还是相当复杂的。

这里推荐一个Java依赖隔离工具Hystrix(https://github.com/netflix/hystrix) ,如图2所示。 Hystrix是解决依赖隔离的利器,但是该内容已经超出本文的范围,同时只适用于Java应用,所以这里不会详细介绍。

3. 提前演练

在项目上线前,演练缓存层宕掉后,应用以及后端的负载情况以及可能出现的问题,在此基础上做一些预案设定。 ​

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录