了解分布式系统中的缓存架构(下)
作者 陈彩华文章转载交流请联络 caison@aliyun.com
承接上一篇《了解分布式系统中的缓存架构(上)》,详情了大型分布式系统中缓存的相关理论,常见的缓存组件以及应使用场景,本文主要详情缓存架构设计常见问题以及处理方案,业界案例。
1 分层缓存架构设计
分层缓存架构分层缓存架构请求过程
2 缓存带来的复杂度问题
常见的问题主要包括
- 数据一致性
- 缓存穿透
- 缓存雪崩
- 缓存高可使用
- 缓存热点
下面逐一详情分析这些问题以及相应的处理方案。
数据一致性
由于缓存属于持久化数据的一个副本,因而不可避免的会出现数据不一致问题。导致脏读或者读不到数据的情况。数据不一致,一般是由于网络不稳固或者节点故障导致
问题出现的常见3个场景以及处理方案:
数据一致性问题场景及处理
缓存穿透
缓存一般是Key,value方式存在,当某一个Key不存在时会查询数据库,如果这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。
主要处理方案:
- 对结果为空的数据也进行缓存,当此key有数据后,清除缓存
- 肯定不存在的key,采使用布隆过滤器,建立一个大的Bitmap中,查询时通过该bitmap过滤
缓存雪崩
缓存雪崩
缓存高可使用
缓存能否高可使用,需要根据实际的场景而定,并不是所有业务都要求缓存高可使用,需要结合具体业务,具体情况进行方案设计,例如临界点是能否对后台的数据库造成影响。
主要处理方案:
- 分布式:实现数据的海量缓存
- 复制:实现缓存数据节点的高可使用
缓存热点
少量特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。
处理:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力
3 业界案例
案例主要参考新浪微博陈波的技术分享
技术挑战
技术挑战
Feed缓存架构图
Feed缓存架构
架构特点
新浪微博把SSD应使用在分布式缓存场景中,将传统的Redis/MC + Mysql方式,扩展为 Redis/MC + SSD Cache + Mysql方式,SSD Cache作为L2缓存用,第一降低了MC/Redis成本过高,容量小的问题,也处理了穿透DB带来的数据库访问压力
主要在数据架构、性可以、储存成本、服务化等不同方面进行了优化加强
架构关注点
参考:
从0开始学架构 —— Alibaba 李运华
Java核心技术36讲—— Oracle 杨晓峰
微博Cache架构设计实践 —— 陈波
缓存在大型分布式系统中的最佳应使用 —— 侯忠好
缓存,并发升级的大坑? —— 58沈剑
分布式缓存设计—— crossoverJie
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 了解分布式系统中的缓存架构(下)