ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

缓存的价值和成本

2021-11-15 22:04:57  阅读:181  来源: 互联网

标签:缓存 性能 系统 流量 场景 速度 价值 成本


百度百科解释:缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。

可以看到解释的重点是更快的高速存储器系统发挥高性能的重要因素。表达出来的意思就是可以让系统短时间内做更多的操作,系统的性能达到更高。

显而易见,如果你使用缓存,不是为了提供系统的速度,不是为了提升系统的性能,就就是为了用而用,就是看啥都是钉子~~

速度 VS 性能

在聊缓存的时候,聊到了速度和性能!速度和性能可以划等号吗?

当我们在聊一个web服务的时候,会说RT< 200ms ,这是对某个请求的完整处理过程的时长要求,时间越短,速度越快。当我在数据序列化的时候,这次访问数据库耗时 20ms,这是对数据库操作的一个时长描述。当我们说这个Job 处理了30分钟,描述了这个任务需要的时长,等等。相关例子数不胜数。

在开发和系统运行的过程中,系统提升速度,提升性能的本质是什么呢?想要发现本质,就需要拨开云雾见月明的能力和洞察力。计算机运行体系如下图:

可以看到计算机在运行中涉及到的组件,以及它们之间的交互,接下来看下整个体系中的涉及到的缓存。

缓存已经到了每个组件的方方面面。接下来对比下不同存储设备速度差异。

计算机中CPU的速度很快,但是其他的外部存储相对的读写就慢了很多,有了这些缓存的加成,带来的计算机的性能变化,简单对比下CPU和缓存的性能(来源网络)如下:

当然,计算机在很多细节上也进行了优化,如:缓存行的设计、缓存页的设计、套接字缓存等

系统有缓存了,我们再缓存有必要吗?

聊一个事情,有没有做的必要性!是需要加入一些背景进行考虑的。先聊一下相关的背景。

  • 秒杀、抢购等场景

    这个场景很成熟了,特点就是:流量高,时间集中,到来时间可预测,峰值可评估。

    核心流程大概:展示 信息 -> 处理锁定 -> 完成动作。操作类型为:读 -> 写 -> 写

  • 集中式服务,如:配置中心、注册中心、权限系统、账户系统等

    这种场景,在企业服务中很常见,都是面向整个公司的,可能承载着整个公司的系统。

    主要特征是:所有的应用或者流量,都会依赖这些服务,发起请求;

    流量特征:高流量的,持续的,多数在读

  • 核心模块,如:登录、验证码等

    这类模块可能就提供一个接口,操作很简单,核心是验证某些数据。必然是承载全公司的流量。

    流量特征主要是:数据发起 -> 校验 响应;响应是要求同步的。

    这个场景和第二种有很大的相似,个人觉的个新差异是结果上要“内部数据”还是要“是否”的一个差异。

    当然,在实际生产环境还有更多的其他的场景,在我们的项目中引入缓存,真的能给项目的性能和效率带来很大提升吗?

    在使用缓存钱,不妨先考虑一下:

    1. 项目属于什么场景,读写操作的比例是多少,如果是写多读少,那缓存真的不一定能帮助你,此时不妨考虑对数据库进行分库分表,然后做mysql的分布式集群,或者简单直接,将硬盘全部替换SSD(如果你的公司财大气粗),反之,以读为主的项目就比较适合加缓存了
    2. 项目访问频率搞不搞(用户多不多)?如果用户区区几千人或几万人,全然没有必要使用缓存,这点访问量经过网络后几乎不会造成并发,即使偶尔出现几万的并发,MySQL也是扛得住的,强行使用缓存反而会增加代码复杂度,甚至不容易维护,得不尝失
    3. 数据是否要求强一致性?如果项目涉及到金钱或者重要数据,且数据频繁发生变化,不允许存在一点差异,那是否使用缓存就要慎重慎重再慎重!因为缓存适用的是对数据一致性不是特别高的项目,如果使用,需要对缓存的设计有很好的方案,非常考研技术功底

    在你决定好要使用缓存的话,前提要考虑清楚,你引入缓存架构,带来了什么收益,引入了什么风险。

    原文:为什么需要缓存

标签:缓存,性能,系统,流量,场景,速度,价值,成本
来源: https://www.cnblogs.com/Coming-Zero/p/15558470.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有