概述
由于缓存不可用,导致大量请求访问后端服务,可能 mysql 扛不住高并发而打死, 像滚雪球一样,影响越来越大,最后导致整个网站崩溃不可用。
缓存雪崩场景
缓存雪崩这种场景是缓存架构中非常重要的一个环节,因此,通过缓存雪崩的解决方案来避免缓存雪崩造成整个系统崩溃,带来巨大的经济损失:
1、redis集群彻底崩溃
2、缓存服务大量对redis的请求block住,占用资源
3、缓存服务大量的请求打到源头服务去查询mysql,直接打死mysql
4、源头服务因为mysql被打死也崩溃,对源服务的请求也block住,占用资源
5、缓存服务大量的资源全部耗费在访问redis和源服务无果,最后自己被拖死,无法提供服务
6、nginx无法访问缓存服务,redis和源服务,只能基于本地缓存提供服务,但是缓存过期后,没有数据提供
7、网站崩溃
缓存雪崩的经验和教训
某电商双十一出现缓存雪崩,由于服务本身的bug导致整个缓存的集群彻底崩溃了,把整个集群给弄挂了,虽然也是部署了主备方式双机房的,但是最后还是死了:
- 电商大量的,几乎所有的应用都是基于那个缓存集群去开发的。
- 各种服务的线程资源全部被耗尽,然后用在了访问那个缓存集群时的等待、超时和报错上了。
- 导致各种服务就没有资源对外提供服务。
- 各种降级措施也没做好,直接就是整体系统的全盘崩溃。
- 导致网站就没法对外出售商品咯,导致了很大数额的经济的损失。最后体现在股市上就是市值大量贬值。
缓存高可用架构设计
缓存高可用架构设计需要考虑高并发场景下的各种问题,通过需要结合业务,怎么去设计整套缓存架构的?
因此,做系统架构设计的时候,考虑一下各种高并发场景下可能出现的问题:
- 数据不一致
- 热点缓存
- 重建并发冲突
- redis高可用性
- 缓存雪崩
- 缓存穿透
- 缓存失效
总之,架构设计做好一些,稳定性也做好一些。设计的系统能够承载各种各样的故障,才能在真正发生故障的时候减少损失。