网易首页 > 网易号 > 正文 申请入驻

系统架构设计:进程缓存和缓存服务,如何抉择?

0
分享至

概述

我们所说的缓存分为进程内部缓存(系统内部缓存)和 缓存服务(如redis/memcache)。计算机服务从原来的单体结构,到多实例,到现在流行的微服务,缓存服务变得原来越流行了。

进程缓存

先说说进程缓存,它将数据存储在站点、服务的进程内。在Web的发展历史上,这样的方式备受欢迎。比如早期常用的.Net的 System.Web.Caching.

这种实现载体很简单,比如一个带锁的HasTable,或者一个List对象。使用简单便捷,能存储数据、html页面片段、文件,甚至任何对象。

在单体结构的Web模式下,进程内缓存被开发到极致,大概流程如下图:

与原先没有缓存相比,进程内缓存的好处是,数据读取不再直接访问数据库,先判断缓存中是否存在,如果存在,则直接读取,不存在则再去数据库中取,同时写入缓存。

这样避免了每次的请求都走数据库,减少网络开销和数据请求次数,提高了数据获取效率,基本等同在内存中执行。

缓存的目的是为了冷热数据的隔离,对于频繁被修改的数据,缓存的意义不是很大,比如微信用户的实时步数。比较有价值的是那些不被频繁修改且数据量较大的内容,比如系统字典、配置数据。

判断是否需要创建缓存需要一定的依据,以下是我的团队的策略,不一定适用,可以参考:

缓存的必要性:数据的变更是否过于频繁,过于频繁则可能导致缓存不断重建,反而降低效率。评估方式:缓存的过期时间内没被主动更新的量值应该超过60%。

假设缓存时间:3600s

假设同一种类型缓存数据基数:6000个

6000 * 60% = 3600 的数据在一个小时内事务未更新,这样的缓存价值更大。

进程缓存的问题

在互联网大潮下,随着用户量的激增,原来单体结构逐渐的向Web服务集群发展,在多实例目标下,进程缓存的弊端越来越明显。

比如缓存无法统一的问题。

如果站点和服务中的多个节点访问统一的缓存服务(比如redis 或者 memerche),数据统一存储,数据的一致性就比较容易保障。

但如果是进程缓存,数据存储在站点和服务的多个节点内,每个节点一个缓存,存储多份,一致性就比较难保障。

如上图,但是有个问题,Cache1、Cache1、Cache3一致性难以保障,如果想保持缓存的一致性时,该怎么办呢?

一般有以下几种方法:

1、单一服务节点通知其他服务节点,如果我们只是Web Service1 在执行业务操作的时候修改数据库,更新缓存,同时通知其他Web Service

服务,其他Web Service 接收到信息的时候,进行缓存更新。

2、 启动MQ通知其他节点:如下图,可以通过MQ通知其他节点。写请求发生在server1,在修改完自己缓存数据与数据库中的数据之后,给MQ生产数据变化通知,

server2和server1订阅MQ消息,当消费到MQ信息的时候,也修改缓存数据。

3、有一种简单的方式,也可以解耦与Web Server的关系,就是直接放弃了“实时一致性”,启动一个独立的进程服务,定时从后端拉取最新的数据,更新内存缓存。

上述的几种方法为了保持数据的一致性,增加了一定的开销,一方面缓存数据同步过程中会有出错的风险;

另一方面实际上违背了缓存的原则:冷热数据隔绝,有效的利用冷数据,减轻数据库压力,提升效率。如果缓存被频繁修改或者同步,那缓存的价值就不大了。

补充:1、2 两种方式,实例越多,缓存冗余越多,各缓存节点数据同步的原子性越难保证,一致性也就越难保证。

第3种方式:采用定时拉取本身已经放弃了数据的实时一致性。

所以我们在以下这几种情况下抛弃进程缓存,选用缓存服务:

1、Web集群下,包含多个实例,并且不允许业务数据的不一致性(我相信大部分业务不允许)

2、进程内缓存数据量较大,缓存内存空间不足,影响Web性能,可以考虑走缓存服务(缓存服务如redis,一般独立服务甚至集群配置,支持超大量级)。

3、评估value大小、缓存内存空间、峰值QPS、过期时间、缓存命中率、读写更新策略、key值分布路由策略、过期策略以及数据一致性方案,根据实际需要判断是否走缓存服务。

缓存服务

在互联网分层架构中,最常用的kv结构的缓存是redis。他有如下特点:


1、它支持复杂数据结构

value是字符串、哈希,列表,集合,有序集合这类复杂的数据结构。支持各种场景,如客户订单信息列表,用户消息,帖子评论等。

2、支持持久化

首先,redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);

也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”,效率会低一点)。

但是我们尽量不要把redis当作数据库用,如果真的需要持久化数据,建议可以走MySQL:

2.1、redis的定期快照不能保证数据不丢失

2.2、redis的AOF会降低效率,并且不能支持太大的数据量

3、具备高可用特性

redis天然支持集群功能,可以实现主动复制,读写分离。 官方也提供了sentinel集群管理工具,能够实现主从服务监控,故障自动转移。

4、存储的内容比较大

String类型:一个String类型的value最大可以存储512M,List、Set、Hash类型:list的元素个数最多为2^32-1个,也就是4294967295个。

5、 支持事务

操作都是原子性,对数据的更改要么全部执行,要么全部不执行。避免业务数据的不一致性。


缓存使用注意

1、Web服务 单体模式转为多实例之后,我们将进程缓存升级为缓存服务(redis),清清理了所有的缓存使用,都改成了对接redis。但是有一些地方漏掉,因为我们有3个实例,所以漏掉的那几个地方,一旦修改某个数据之后,一会儿是新值,一会儿旧值,很神奇。

2、谨防缓存击穿、雪崩的产生,这个我们有惨痛的教训,后续来一篇专门分析下。

出处:https://www.cnblogs.com/wzh2010/p/13874206.html

更多推荐

大型分布式系统中的缓存架构

高可用架构的6大常规方案

支付系统高可用架构实践

如何让笨重的系统架构变灵巧?

微服务之间的最佳调用方式

免责声明:

本公众号部分分享的资料来自网络收集和整理,所有文字和图片版权归属于原作者所有,且仅代表作者个人观点,与本公众号无关,文章仅供读者学习交流使用,并请自行核实相关内容,如文章内容涉及侵权,请联系后台管理员删除。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
张雪峰“替身”被政府“收编”:人要先有价值,才会被看见

张雪峰“替身”被政府“收编”:人要先有价值,才会被看见

亚哥谈古论今
2026-08-16 17:13:43
“榜一大哥”打赏200万粉丝女主播超千万求交往,遭拒后起诉,女方家属:打赏系自愿,实际到手金额因平台抽成远低于指控数额

“榜一大哥”打赏200万粉丝女主播超千万求交往,遭拒后起诉,女方家属:打赏系自愿,实际到手金额因平台抽成远低于指控数额

台州交通广播
2026-08-15 19:22:56
《牛来》单日票房已超400万元,多地影城称未接到下映通知,有工作人员称“建议趁早看”

《牛来》单日票房已超400万元,多地影城称未接到下映通知,有工作人员称“建议趁早看”

极目新闻
2026-08-16 17:23:20
明明主角是奥德修斯,为什么荷马史诗和电影名叫奥德赛?

明明主角是奥德修斯,为什么荷马史诗和电影名叫奥德赛?

封面新闻
2026-08-15 21:18:03
穆里尼奥妙手激活!皇马边缘人彻底逆袭!两大宝藏新星横空出世

穆里尼奥妙手激活!皇马边缘人彻底逆袭!两大宝藏新星横空出世

澜归序
2026-08-17 08:16:31
张本智和丢冠快哭了!赛后父子俩黑脸呆若木鸡,已第7次输勒布伦

张本智和丢冠快哭了!赛后父子俩黑脸呆若木鸡,已第7次输勒布伦

郝小小看体育
2026-08-17 08:55:23
为报父仇积蓄10年,侄子枪杀叔叔全家13口,湖南特大灭门惨案始末

为报父仇积蓄10年,侄子枪杀叔叔全家13口,湖南特大灭门惨案始末

易玄
2026-08-13 10:41:45
刘晓庆和陈冲同台,惊现不和谐一幕!都这么老了还在玩心机?

刘晓庆和陈冲同台,惊现不和谐一幕!都这么老了还在玩心机?

百言君
2026-08-14 22:12:10
美国乱?为啥有钱人还都愿意定居美国?这几个原因很现实

美国乱?为啥有钱人还都愿意定居美国?这几个原因很现实

怪味历史连连看
2026-08-14 02:08:20
普京自己也没料到!海参崴堵了,俄海运命脉被乌克兰拧出新高度!

普京自己也没料到!海参崴堵了,俄海运命脉被乌克兰拧出新高度!

顾秋韵
2026-08-15 11:43:40
实拍画面曝出尿布漏水细节!卡罗琳强势复仇,特朗普颜面彻底扫地

实拍画面曝出尿布漏水细节!卡罗琳强势复仇,特朗普颜面彻底扫地

玲儿爱唱歌
2026-08-17 06:24:56
拉简·隆多:勒布朗·詹姆斯的76人队已成争夺NBA总冠军的大热门

拉简·隆多:勒布朗·詹姆斯的76人队已成争夺NBA总冠军的大热门

好火子
2026-08-17 06:54:43
中国车企集体杀回燃油车!HEV成反攻新武器

中国车企集体杀回燃油车!HEV成反攻新武器

小马姨
2026-08-14 17:16:11
老兵油子不认识毛主席,叫他给自己挑担,毛主席一句话吓坏杨立三

老兵油子不认识毛主席,叫他给自己挑担,毛主席一句话吓坏杨立三

凉州辞
2026-08-17 08:50:03
汪峰把公司1100人砍到400人,700人被裁。他说:“引入AI两个月,剩下400人干得比原来还好”,财务笑开了花。

汪峰把公司1100人砍到400人,700人被裁。他说:“引入AI两个月,剩下400人干得比原来还好”,财务笑开了花。

LULU生活家
2026-08-15 14:17:30
8月17日正式下架,从7千冲到450万,《牛来》的收益到底有多少?

8月17日正式下架,从7千冲到450万,《牛来》的收益到底有多少?

动物奇奇怪怪
2026-08-17 03:35:28
他在红四方面军的口碑极差,同级下级意见很大,结局却至今是谜

他在红四方面军的口碑极差,同级下级意见很大,结局却至今是谜

顾史
2026-08-17 00:30:05
吉利被骂!内部员工吐槽:为什么有些领导见不得员工周末休息,但凡员工周末在家休息,没有加班,他们就浑身难受!

吉利被骂!内部员工吐槽:为什么有些领导见不得员工周末休息,但凡员工周末在家休息,没有加班,他们就浑身难受!

谭谈社会
2026-08-15 10:33:19
湖人53胜却无缘揭幕战,詹姆斯一走票价1999美元,东契奇迎大考

湖人53胜却无缘揭幕战,詹姆斯一走票价1999美元,东契奇迎大考

林子说事
2026-08-16 10:52:07
德比斯与老板张雪首次在中国线下见面 拥抱时张雪激动得蹦起来“好高啊”

德比斯与老板张雪首次在中国线下见面 拥抱时张雪激动得蹦起来“好高啊”

快科技
2026-08-17 08:40:09
2026-08-17 09:56:49
IT架构师联盟 incentive-icons
IT架构师联盟
IT架构实战分享
844文章数 7671关注度
往期回顾 全部

科技要闻

马斯克600亿美元买条近路

头条要闻

男子把特斯拉送4S店维修 1小时后收到路试撞报废消息

头条要闻

男子把特斯拉送4S店维修 1小时后收到路试撞报废消息

体育要闻

因莫比莱:普通人的平凡故事

娱乐要闻

辟谣恋情都按谷爱凌这个标准来!

财经要闻

电商“AB货”,乱象背后是行业内卷

汽车要闻

杨洋成001号车主 岚图追光S正式上市

态度原创

亲子
艺术
家居
公开课
军事航空

亲子要闻

反应力挑战

艺术要闻

看看康生真迹,才知什么叫“眼高于顶”

家居要闻

2026建博会(广州) 公装联探展交流活动

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

伊朗:对每名入境美国军人悬赏50亿土曼

无障碍浏览 进入关怀版