美文网首页
你的系统是怎样支持高并发的?-多级缓存架构

你的系统是怎样支持高并发的?-多级缓存架构

作者: 一生一火花_2826 | 来源:发表于2019-04-14 16:59 被阅读0次

    目录

    ① 多级缓存使用场景

    ② 多级缓存读写逻辑

    ③缓存预热

    ④ 总结

    1 多级缓存使用场景

    多级缓存适合用在对数据实时性不敏感的场景,比如商家修改了商品名称 商品描述,晚显示几分钟用户也不感知,对业务也没有影响

    再比如新闻页面,修改了几个错别字,晚几分钟显示也没有什么大不了啊

    下面我们还是用商品详情页这个场景来描述多级缓存的使用

    有关商品详情的架构演化在另一篇文章做了讲解 

    你的系统是怎样支持高并发的?-商品详情页

    这一篇我们重点讲一下多级缓存的设计

    2 多级缓存的读写逻辑

    闲话少说,先上图,缓存部分已经用彩色文字标识

    分别解释下,每级缓存的作用

    1 nginx本地缓存

    其特点是直接内存返回,速度极快 10毫秒内,

    但单机内存有限,主要作为热点商品缓存,分担redis压力

    2 redis集群缓存

    其特点是无限扩容,高可用,访问速度速度也很快 几十毫秒

    作为缓存的主要存储,商品详情的信息基本都保存在这里了

    3 jvm 缓存

    最要作用是保护数据库,防止在redis集群崩溃后 打死数据库

    相信看了架构图 对数据的读取逻辑应该有了大概的了解

    我们再来分析一遍

    1 首先用户请求进入nginx 检查本地有无缓存,如果有 就直接返回

    2 如果没有则查询redis缓存

    3 如果命中redis缓存,返回并渲染后返回html

    4 如果没命中redis缓存,直接调用‘‘商品详情页worker’’接口,商品详情页worker直接调用 ‘‘商品服务’’ ‘‘商家服务’’ ‘‘XX服务’’ 等依赖服务 生成数据写入redis 并返回(这一波操作可以说是相当直接 )

    3 缓存预热

    对于高并发系统,可能一上线就会有海量请求涌入

    如果缓存没有预热,很有可能直接导致数据库压力过大,甚至打死的情况

    这时候就要对缓存进行预热,但是这么多的商品到底选择那些进行预热呢?

    可以采用实时计算来统计,计算出最近访问量频繁的商品,并记录

    如下图

    右侧流程为实时计算架构

    nginx讲日志发送给kafka

    实时计算系统从kafka获取数据并实时分析,如果是热点商品就定期写入redis

    热点商品数据可采用LUR算法来计算 请参考大白话聊缓存之LRU算法

    4 总结

    还是强调下场景,多级缓存架构,用于可容忍短时间内数据不一致的场景

    如果是强一致性场景,又想读高性能,请参考大白话聊缓存之读写一致性

    后续我们将分享

    ‘‘超超超级热数据‘’的读并发解决方案

    高并发写入的解决方案

    敬请期待!

    欢迎关注 公众号

    相关文章

      网友评论

          本文标题:你的系统是怎样支持高并发的?-多级缓存架构

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