架构师 0 期 | 缓存 -- 提升性能大杀器
啥是缓存?
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加速读取速度。
一般来说,数据的使用原则都是二八原则,比如微博,经常被访问的数据一般都是明星发布的微博之类的数据,这些数据会被大量的人访问,而普通人的数据访问量很小,甚至没有。
解决方案就是使用一种更快的存储介质放一小部分经常使用的数据(热点数据),供系统反复使用。以此提升系统性能。
缓存的关键指标
是缓存命中率。 命中率越高,效果越好。
影响命中率的主要指标
缓存键集合大小
缓存可使用内存空间
缓存对象的生存时间
缓存类型
通读缓存(read-through)
代理缓存
反向代理缓存
CDN缓存
旁路缓存(cache-aside)
CDN
缓存为啥能大幅提高性能
使用介质是内存,比磁盘快
可以缓存中间形态,不用再计算
降低数据库、磁盘、网络的负载压力
缓存虽好处多多,使用还得看场景
频繁修改的数据,不适合。 读写比例至少是2:1以上,才有意义。 否则写一次缓存,就对一次不如直接去磁盘读了。
没热点,不适合。 遵循二八定律,内存空间有限,热点集中在一小部分才适合用。
数据不一致、脏读。 一般会设置数据失效时间,超时的数据就需要重新读取。
缓存雪崩。 当缓存大量不可用时,就导致使数据库崩溃,连锁反应,全部崩溃。这种情况甚至不能重启缓存服务器和数据库服务器恢复网站。因为,重启的缓存数据库是空的,请求会直接穿透到达数据库服务器,数据库根本无法承受这种规模的流量,只能等半夜,流量高峰过去,才能恢复。
缓存预热。 热点数据可能需要通过LRU算法一点点淘汰筛选出来的,时间过长,所以提前预热。
缓存穿透。 恶意攻击某个不存在的数据,会直接到数据库。看起来就像穿透一样。数据库压力太大,就崩了。 简单的策略计是将不存在的数据也缓存起来(value值为null),设定一个较短的失效时间。
版权声明: 本文为 InfoQ 作者【刁架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/15c9dd77ccb49ae10d3114b36】。文章转载请联系作者。
评论