本文约4500字,建议阅读时间30~45分钟
背景
随着分布式架构的发展,集群部署成为必不可缺少的一部分,相比以往的单应用部署,复杂业务中衍生出诸多需要解决的问题,例如在分布式系统中,要解决分布式事务,在集群部署中,要解决分布式缓存和分布式锁等问题
缓存
(What)定义
From WiKi
缓存是在计算机上的一个原始数据的复制集,以便于访问
(Why)为什么使用缓存
- 对于用户:提升用户体验,加快访问速度,降低响应时间
- 对于服务:提升系统性能,提高并发数量、吞吐量及资源利用率,减少DB及I/O过程,让DB更多的承担数据落盘工作
(Which)哪些数据适合放入缓存
- 即时性、数据一致性要求不高的
- 访问量大、更新频率不高的数据(读多写少)
(Where)缓存类型
- 客户端缓存:浏览器缓存、页面缓存…
- 网络中缓存:Web代理缓存(Nginx)、边缘缓存(CDN)…
- 服务端缓存:
核心
- 服务器本地缓存:性能最高,位于内存中,对Java程序而言,本地缓存数据直接保存在JVM中,需要考虑缓存数据的大小、JVM的垃圾回收性能消耗,ConcurrentHashMap.class,EhCache, Caffeine。单服务是集群部署的时候,应该考虑是否需要做集群中本地缓存的数据同步
- 分布式缓存:当本地缓存被穿透的时候就会去查询分布式缓存,当在分布式缓存中查询到数据的时候,直接将查询结果放到本地缓存中。对于分布式缓存主要是使用NoSQL数据库来实现,常用的NoSQL数据库有Redis、Memcached、MongoDB等。目前比较流行的Redis来说,支持Slava/Master模式和Cluster
- 数据库缓存:数据库在设计的时候也有缓存操作,更改相关参数开启查询缓存
- 文件缓存:应用在启动时,读取文件写入内存中
分布式环境缓存示意图
喜欢就支持一下吧
相关推荐