程序员修神之路--高并发下为什么更喜欢进程内缓存


菜菜哥,告诉你一个好消息


YY妹子,什么好消息,你有男票了?


不是啦,我做的一个网站,以前经常由于访问量太大而崩溃,现在我加上了缓存,很稳定啦


加的什么缓存呢?


我用的redis,号称业界最快的缓存组件了


你觉得现在的缓存操作应该是最快的了吗?


是的,我觉得没有缓存能比这种模式更快了


你先停停,我给你先讲个故事


进程内缓存是指缓存和应用程序在相同地址空间。即同一个进程内。分布式缓存是指缓存和应用程序位于不同进程的缓存,通常部署在不同服务器上。


从前有个机构,机构的主人叫做 CPU,这个机构专门派仆人取一些东西然后做相应的处理。下面是这个机构日常的场景。


cpu


赶紧去我的仓库L1缓存取点东西



仆人


主人你要的东西,那里离我们最近,所以很快,但是空间比较小。


cpu


你丫还挺快,只用了大约一秒



cpu


赶紧去仓库 L2缓存取点东西



仆人


主人你要的东西,那里离我们也很近,比L1缓存远一点,但是也很快,空间比较小,但是比L1缓存的空间大。


cpu


速度还可以,大约20秒就回来了



cpu


街上有一个地方叫内存,赶紧去取点东西



仆人


主人你要的东西,内存这个地方空间很大呀,就是稍微远了点


cpu


居然用了5分钟,等你这段时间我都刷了好几个段子了



cpu


有一个叫做磁盘的小镇,赶紧去取点东西



仆人


主人你要的东西,磁盘这个地方空间太大呀,取点东西很慢呀


cpu


居然用了5天,等你这段时间我都能报团来一个周边游了



cpu


有一个叫做互联网的国度,赶紧去取点东西



仆人


主人你要的东西,互联网太远了,取点东西太费劲了


cpu


居然用了15天,等你去互联网取东西,简直就是在浪费我的生命


cpu

当我做完一个委托人的任务,切换到另外一个委托人的任务时候,我需要把上一个委托人的一些信息先记录下来,然后还需要把新委托人的信息读取一遍,这个过程我是很耗时的,大约需要一个小时呢

以上故事纯属预估数据,真实数据会根据不同的硬件配置和网络环境有误差。

通过以上不正经的小故事,我们可以了解到cpu取各个设备数据的大体差距。至于YY妹子的问题,大家也应该了解了。

1.  首先把数据从磁盘加载到内存做缓存,这个是对的。毕竟磁盘的IO速度比内存要慢的多。就拿我们现在使用的大多数PC机以及服务器来说,磁盘往往是性能的瓶颈。

2.  如果有条件或者框架支持可以实现进程内缓存,我还是推荐使用进程内缓存,毕竟类似Redis这样的kv存储和应用程序多数情况不在一台服务器上,虽然局域网的速度肉眼看起来非常快,但是对于cpu来讲,还是让cpu休了一个大假。

至于什么情况下适合应用进程内缓存,我觉得有几点需要注意:

1.  相同的请求或者设置的相同缓存key的请求每次都是同一个服务器上的同一个程序去处理,这样这个请求的缓存正常情况下只会产生一份。 如果每次请求都会路由到不同的服务器,便会产生多个缓存的副本,维护这些缓存数据的一致性是需要代价的。

2.  当有新的服务器节点加入或者服务器节点退出的时候,不能发生雪崩现象,所有缓存请求都穿透到达数据库,那是比较要命的。比如可以看一下菜菜以前的文章:分布式缓存的一条明路(附代码)

3.  如果缓存的处理服务器发生变化,比如:由于某种原因,开始请求是由服务器A来处理,后来A服务器down了,现在由服务器B来处理,在缓存转移的过程中,必须能保证数据的正确性和一致性。

4. 程序的进程内缓存必须有过期策略,在有限内存大小的情况下,合理的使用。推荐使用LRU淘汰算法来保证内存不会撑爆。

5.  系统的并发量及其大,对性能的要求及其高,可以考虑使用进程内缓存。

6.  如果是小部分只读数据,并且访问量比较大,例如经常使用的字典数据等,可以考虑使用进程内缓存。

相对于分布式缓存,比如Redis,进程内缓存有哪些优势呢?

1.  进程内缓存性能比较高,延迟会更小,更节省带宽,毕竟分布式缓存网络调用的性能和本地调用比起来慢太多,

2.  由于和应用程序位于同一进程,共享相同的虚拟内存,所以在状态维护上更容易一些,

3.  其次进程内的缓存不设计到网络传输,所以没有序列化的过程,在性能上更胜一筹。

4.  进程内缓存的数据类型几乎可以是语言级别支持的任意类型,数据类型设计上比大多数分布式缓存设备支持要灵活许多。

在应对高并发的情况下,如果有适当的环境菜菜还是觉得进程内缓存为首选,另外一点程序要尽量避免线程切换,尽量异步化。如果可以最好能预估出缓存数据的大小,避免内存泄漏等现象发生。

当然分布式缓存有自己的优势,在监控,容灾,扩展性,易用性等方面更胜一筹。至于用进程内还是分布式缓存,没有定论,能解决业务痛点就是最好的结果

写在最后

程序如果要想最大程度的提升并发量,缩短响应时间, 就把用户需要的数据放在离用户最近的地方



原文地址:https://www.cnblogs.com/zhanlang/p/10461642.html

时间: 2024-10-05 05:05:53

程序员修神之路--高并发下为什么更喜欢进程内缓存的相关文章

程序员修神之路--做好分库分表其实很难之一(继续送书)

菜哥,领导让我开发新系统了 这么说领导对你还是挺信任的呀~ 必须的,为了设计好这个新系统,数据库设计我花了好多心思呢 做一个系统我觉得不应该从数据库入手,应该从设计业务模型开始,先不说这个,说说你的数据库设计的优势 为了高性能我首先设计了分库 分表策略,为以后打下基础 那你的数据量将来会很大吗?分库分表其实涉及到很多难题,你了解过吗? 我觉得分库分表很容易呀 是吗? 是否需要分 说到数据库分库分表,不能一味的追求,我们要明白为什么要进行分库分表才是最终目的.现在网上一些人鼓吹分库分表如何应对了多

程序员修神之路--高并发优雅的做限流(有福利)

菜菜哥,有时间吗? YY妹,什么事? 我最近的任务是做个小的秒杀活动,我怕把后端接口压垮,X总说这可关系到公司的存亡 简单呀,你就做个限流呗 这个没做过呀,菜菜哥,帮妹子写一个呗,事成了,以后有什么要求随便说 那好呀,先把我工资涨一下 那算了,我找别人帮忙吧 跟你开玩笑呢,给哥2个小时时间 谢谢菜菜哥,以后你什么要求我都答应你 好嘞,年轻人就是豪爽 ◆◆ 技术分析 ◆◆ 如果你比较关注现在的技术形式,就会知道微服务现在火的一塌糊涂,当然,事物都有两面性,微服务也不是解决技术,架构等问题的万能钥匙

程序员修神之路--redis做分布式锁可能不那么简单

菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个分布式锁,很简单 不管你基于什么做分布式锁,你觉得很简单吗?来来来 在计算机世界里,对于锁大家并不陌生,在现代所有的语言中几乎都提供了语言级别锁的实现,为什么我们的程序有时候会这么依赖锁呢?这个问题还是要从计算机的发展说起,随着计算机硬件的不断升级,多核cpu,多线程,多通道等技术把计算机的计算速度大幅度提升,原来同一时间只能执行一条cpu指令的时代已

程序员修神之路--为什么有了SOA,我们还用微服务?

菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做 那挺好呀,微服务现在的确很流行 我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀 的确,微服务和SOA有相同之处 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互.它是一种设计方法,其中包

程序员修仙之路- CXO让我做一个计算器!!

菜菜呀,个税最近改革了,我得重新计算你的工资呀,我需要个计算器,你开发一个吧 CEO,CTO,CFO于一身的CXO X总,咱不会买一个吗? 菜菜 那不得花钱吗,一块钱也是钱呀··这个计算器支持加减乘除运算就行,很简单 CEO,CTO,CFO于一身的CXO (尼玛)那能不能给我涨点工资呀? 菜菜 公司现在很困难,你这个计算器关系到公司的存亡,你要注意呀!! CEO,CTO,CFO于一身的CXO (关于撇开话题佩服的五体投地)好吧X总,我尽快做 菜菜 给你一天时间,我这里着急要用 CEO,CTO,C

程序员修仙之路--优雅快速的统计千万级别uv

菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己拥有主动权.给你两天时间,系统性能不要太差呀 好吧~~~ 定义PV是page view的缩写,即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.网页浏览数是评价网站流量最常用的指标之一,简称为PV UV是unique visitor的简写,是指通过互联网访问.浏览这个网页的自

zz 游戏程序员的学习之路(中文版)

游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. Github miloyip/game-programmer 检视/下载中文版 SVG / PDF 「真诚赞赏,手留余香」 赞赏 15 人赞赏 程序员游戏开发书籍推荐 分享 举报 977 文章被以下专栏收录 Milo的编程 进入专栏 97 条评论 写下你的评论 trycatch 这是劝退吧...

程序员工资为什么普遍很高,原来是因为这个...

点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 来源:互联网 在中国,虽然程序员这个职业已经非常普及,但大多数人对程序员的了解还仅仅停留在薪资高的层面上.至于为什么薪资高,到底在做什么,很多人还是说不上来. 其实,程序员与其他行业的工作没有本质上的区别.现阶段社会任何一个岗位都有一定的入职门槛,只不过这个门槛有高低的区别.门槛越高的职位,收入也越高,这是一个基本常识. 会计.销售.司机.医生等大家耳熟能详的工作,实际上和程序员没有本质上的区别. 如果你决定成为一名司机,你需

菜鸟程序员的成长之路(三)——2014,逝去的半年,奋斗的半年

从3月份到现在,仅仅半年的时间让我扮演了两个完全不同的角色,从在校生一下变成了毕业生,作为毕业生不能再像在校生一样自由自在,无所顾忌,想怎样就怎样,肆无忌惮的生活,浪费时间.如果你想从容的面临未来的生活,就需要彻头彻尾的改变.多一份稳重,多一份责任,多一份担当. 鉴于LZ不太擅长写非技术博文,那就以碎碎念的形式,来回顾一下我的奋斗历程: 技术 3月份开始备战软考,软考准备了两个多月的时间,从看视频做笔记,再到大家一起讲课,复习,做试题巩固,整个过程至今历历在目.软考虽然不难,但是对于基础差的同学