概述
今天从掘金网站看到一张高并发系统中的缓存设计图,如下:
图片来源:缓存仅仅是使用Redis?看看高并发系统缓存体系架构(缓存体系架构一)(共6篇,后续不断更新) (juejin.cn)
针对这张图,写一下我对缓存的思考:
首先,分析一下系统中缓存的位置都有哪些,常见的缓存位置包括:
1.浏览器页面缓存
2.路由网关可以有缓存,进行限流等操作
3.应用级别缓存,主要是业务数据,常见的redis、memorycache等
4.持久层框架缓存,比如hibernate,mybatis都有缓存
5.数据库查询sql缓存
限流部分:
利用redis+lua脚本实现原子操作,提高并发性能。
业务数据
利用redis 集群+主从模式构建,为什么呢?为了读写分离,提高性能。本架构中,redis slave集群读取数据,不修改缓存数据,只读操作。
那么缓存数据如何修改呢?我们原来简单的处理是:同步修改数据库和缓存,显然提高了查询效率(如果命中),但是有侵入性,当然可以抽象缓存的操作。
另一个方式就是修改数据库,然后异步修改缓存,怎么解决呢?增加一层中间件,比如阿里巴巴的canel,适用于定于mysql binlog,充当mysql 从节点的角色,
从mysql主机获取bin log,然后推送到kafka、ES等中间价,当然也可以是redis。
实时性呢?是不是会读取到脏数据呢?考虑两个异步问题:
1. 从mysq通过canel读取bin log推送到redis master集群的延迟问题
2.从redis master集群异步同步数据到redis slave集群的延迟问题
数据库数据“复制”方法
通过canel实现,架构如下:
图片来源:ElasticSearch + Canal 开发千万级的实时搜索系统 - 陈树义 - 博客园 (cnblogs.com)
最后
以上就是陶醉舞蹈为你收集整理的一张图分析架构中的缓存设计的全部内容,希望文章能够帮你解决一张图分析架构中的缓存设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复