美文网首页@IT·互联网程序员java高级开发群
深入理解分布式系统中的缓存架构(下)

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

作者: Java技术剑 | 来源:发表于2018-07-14 19:35 被阅读257次

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

    1 分层缓存架构设计

    2 缓存带来的复杂度问题

    常见的问题主要包括

    数据一致性

    缓存穿透

    缓存雪崩

    缓存高可用

    缓存热点 下面逐一介绍分析这些问题以及相应的解决方案。

    数据一致性

    因为缓存属于持久化数据的一个副本,因此不可避免的会出现数据不一致问题。导致脏读或读不到数据的情况。数据不一致,一般是因为网络不稳定或节点故障导致

    问题出现的常见3个场景以及解决方案:

    缓存穿透

    缓存一般是Key,value方式存在,当某一个Key不存在时会查询数据库,假如这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力。

    主要解决方案

    对结果为空的数据也进行缓存,当此key有数据后,清理缓存

    一定不存在的key,采用布隆过滤器,建立一个大的Bitmap中,查询时通过该bitmap过滤

    缓存雪崩

    缓存高可用

    缓存是否高可用,需要根据实际的场景而定,并不是所有业务都要求缓存高可用,需要结合具体业务,具体情况进行方案设计,例如临界点是是否对后端的数据库造成影响。

    主要解决方案

    分布式:实现数据的海量缓存

    复制:实现缓存数据节点的高可用

    缓存热点

    一些特别热点的数据,高并发访问同一份缓存数据,导致缓存服务器压力过大。

    解决:复制多份缓存副本,把请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力

    3 业界案例

    案例主要参考新浪微博陈波的技术分享

    技术挑战

    Feed缓存架构图

    架构特点

    新浪微博把SSD应用在分布式缓存场景中,将传统的Redis/MC + Mysql方式,扩展为 Redis/MC + SSD Cache + Mysql方式,SSD Cache作为L2缓存使用,第一降低了MC/Redis成本过高,容量小的问题,也解决了穿透DB带来的数据库访问压力

    欢迎工作一到五年的Java工程师朋友们加入Java架构开发:744677563

    本群提供免费的学习指导 架构资料 以及免费的解答

    不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

    主要在数据架构、性能、储存成本、服务化等不同方面进行了优化增强

    相关文章

      网友评论

        本文标题:深入理解分布式系统中的缓存架构(下)

        本文链接:https://www.haomeiwen.com/subject/ocoypftx.html