22 | 分布式缓存如何与本地缓存配合,提高系统性能?
周志明
你好,我是周志明。
今天,我们接着上节课服务端缓存的话题,继续来学习下分布式缓存的实现形式、与本地缓存搭配使用的方法,以及一起来了解下,在实际使用缓存的过程中,可能会存在的各种风险和应对手段。
分布式缓存
首先通过上节课的学习,现在我们已经知道了,服务端缓存可以分为“进程内缓存”和“分布式缓存”两大类。相比缓存数据在进程内存中读写的速度,一旦涉及到了网络访问,那么由网络传输、数据复制、序列化和反序列化等操作所导致的延迟,就要比内存访问高得多。
所以,对于分布式缓存来说,处理与网络有关的操作是影响吞吐量的主要因素,这也是比淘汰策略、扩展功能更重要的关注点。
而这就决定了,尽管也有 Ehcache、Infinispan 这类能同时支持分布式部署和进程内嵌部署的缓存方案,但在通常情况下,进程内缓存和分布式缓存在选型时,会有完全不同的候选对象和考察点。
所以说,我们在决定使用哪种分布式缓存之前,必须先确认好自己的需求是什么。
那么接下来,我们就从两个不同的需求场景出发,看看都可以选择哪些分布式缓存方案。我们先从数据访问的需求场景开始了解吧。
复制式缓存与集中式缓存
从访问的角度来说,如果是频繁更新但很少读取的数据,正常是不会有人把它拿去做缓存的,因为这样做没有收益。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
分布式缓存在提高系统性能方面扮演着关键角色。本文介绍了分布式缓存的实现形式、与本地缓存搭配使用的方法以及可能存在的风险和应对手段。文章首先介绍了复制式缓存与集中式缓存的区别,以及它们各自的代表性产品。复制式缓存支持分布式的进程内缓存,但在大规模集群下可能会出现写入性能问题。而集中式缓存则是目前分布式缓存的主流形式,具有独立的进程空间,能够为异构语言提供服务。此外,文章还探讨了缓存的数据一致性和分布式缓存集群的需求,将分布式缓存分为AP和CP两种类型。最后,文章指出了Redis作为典型的AP式分布式缓存,具有高性能和高可用特点,但不保证强一致性。相比之下,ZooKeeper、Doozerd、Etcd等分布式协调框架虽然能够保证强一致性,但吞吐量有限。此外,文章还介绍了透明多级缓存的概念,以及缓存穿透、缓存击穿和缓存雪崩等风险及相应的解决方法。通过对分布式缓存的实现形式、应用场景和特点的介绍,为读者提供了全面的了解和参考。
该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- zhanyd"能满足需求的前提下,最简单的系统就是最好的系统”。 这句话的隐藏前提是,我们的选择空间要足够大。 不管是CDN,负载均衡,客户端缓存,服务端缓存,还是分布式缓存,都给我们提供了大量的选择余地,可以根据自己系统的实际情况,灵活地选择最适合的方案。 这句话的另一种理解是:没有最好的方案,只有最合适的方案。 PS:在“复制式缓存”小节中的“此时,缓存的总容量就相当于是传统复制模式的一倍”,其中的“一倍”是不是笔误写错了,应该是“一半”?
作者回复: 占用空间是原来的一半,所以容量是原来的一倍
2021-01-06211 - Jialin采用 Cache Aside 模式典型的出错场景,就是如果某个数据是从未被缓存过的,请求会直接流到真实数据源中,如果数据源中的写操作发生在查询请求之后,结果回填到缓存之前,也会出现缓存中回填的内容与数据库的实际数据一致的情况。 这里应该是数据不一致的情况
作者回复: 感谢指正,请编辑看到更新一下。
2021-01-061 - 恒仁先写数据源,然后失效(而不是更新)掉缓存,这个不是一个事务,如果写数据源成功,但是失效调缓存失败,还得做事务补偿操作吧
作者回复: 一般缓存失效失败,它的读取也很难成功。如果出现了,可以根据实际需要来决定后续处理。失效缓存抛出了异常,让数据源的修改回滚、或者让缓存做best-effort的失效都是可以考虑的。
2021-01-074 - Jxin1.简单一语双关。 2.第一关,满足需求的前提下,系统的复杂度应该追求最低。这是一种mvp的思路。 3.第二关,系统复杂的时候依旧要追求系统的简单。这时候讲究的就是复杂性的隔离。在引入复杂性是必然的前提下,如何把复杂性隔离封装好就是实现系统系统简单的关键手段。毕竟一篮子带壳的鸡蛋绝对比一篮子打烂的蛋液简单明了。而透明化可以认为是复杂性隔离的最好体现。2021-01-0610
- shark之前看redis专栏说到的缓存污染是缓存到了长久不会使用的数据,老师这里缓存污染的意思又是脏数据的意思,到底什么才是缓存污染2021-06-1314
- 何磊对于采用布隆过滤器解决穿透问题,布隆过滤器的存储也需要集中式的缓存存储。这就带来一个问题需要对存储器中的值进行hash拆分,避免存到一个key中发生热点问题。2021-03-242
- Skysper还有一种场景在于 如果写入主库,查询走从库 如果缓存写数据源后失效 依然可能会因为主从不一致出现缓存数据不一致2021-02-0422
- tt“透明多级分流系统”的含义就是“复杂性的多级分流”: 处在越靠前的系统就应该越简单,如果满足需要了,请求就不会往后流转,那此时就等价于一个简单系统。 反之,越靠后的系统其复杂性就会提升,同时不同层级间的同步也是复杂性的一部分。2021-01-062
- geek对调用方友好的系统,是好系统。2022-02-261
- 褐言量大&更新频率快的话,是不是可以进程内缓存改成本地的堆外缓存2021-06-301
收起评论