• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

理解分布式系统中的缓存架构(下)

技术杂谈 勤劳的小蚂蚁 3个月前 (02-07) 79次浏览 已收录 0个评论 扫描二维码

1. 分层缓存架构设计
2. 缓存带来的复杂度问题
数据一致性
缓存穿透
缓存雪崩
缓存高可用
缓存热点
3. 业界案例
技术挑战
Feed缓存架构图
架构特点
参考

承接上一篇《理解分布式系统中的缓存架构(上)》,介绍了大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景,本文主要介绍缓存架构设计常见问题以及解决方案,业界案例。

1. 分层缓存架构设计

img

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带来的数据库访问压力
主要在数据架构、性能、储存成本、服务化等不同方面进行了优化增强
img
架构关注点

参考

从0开始学架构 —— Alibaba 李运华
Java核心技术36讲—— Oracle 杨晓峰
微博Cache架构设计实践 —— 陈波
缓存在大型分布式系统中的最佳应用 —— 侯忠好
缓存,并发更新的大坑? —— 58沈剑
分布式缓存设计—— crossoverJie

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:理解分布式系统中的缓存架构(下)
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00