高性能架构模式——高性能缓存架构
目录
- 一、引入前提
- 二、缓存架构的设计要点
- 2.1、缓存穿透
- 2.1.1、缓存穿透第一种情况:存储数据不存在
- 2.1.2、缓存穿透第二种情况:缓存数据生成耗费大量时间或者资源
- 2.2、缓存雪崩
- 2.2.1、解决缓存雪崩的第一种方法:更新锁机制
- 2.2.2、解决缓存雪崩的第二种方法:后台更新机制
- 2.3、缓存热点
- 2.3.1、缓存热点的解决方法
- 三、缓存架构的实现方式
本文来源:极客时间vip课程笔记
一、引入前提
-
虽然我们可以通过各种手段来提升存储系统的性能,但在某些复杂的业务场景下,单纯依靠存储系统的性能提升不够的,典型的场景有:
-
经过复杂运算后得出的数据,存储系统无能为力
例如,一个论坛需要在首页展示当前有多少用户同时在线,如果使用 MySQL 来存储当前用户状态,则每次获取这个总数都要“count(*)”大量数据,这样的操作无论怎么优化 MySQL,性能都不会太高。如果要实时展示用户同时在线数,则 MySQL 性能无法支撑。
-
读多写少的数据,存储系统有心无力
例如,一个明星发一条微博,可能几千万人来浏览。如果使用 MySQL 来存储微博,用户写微博只有一条 insert 语句,但每个用户浏览时都要 select 一次,即使有索引,几千万条 select 语句对 MySQL 数据库的压力也会非常大
-
缓存就是为了弥补存储系统在这些复杂业务场景下的不足,其基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。
-
缓存能够带来性能的大幅提升,以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上,其基本的架构是:
-
缓存虽然能够大大减轻存储系统的压力,但同时也给架构引入了更多复杂性。架构设计时如果没有针对缓存的复杂性进行处理,某些场景下甚至会导致整个系统崩溃。
二、缓存架构的设计要点
2.1、缓存穿透
- 缓存穿透