引言

随着一阵阵秋风吹过和一场场秋雨降临,天气早已由热转凉。在这准备步入严寒之际。起早的吒吒辉辉紧紧裹了下被子,鼻子依旧竖立着大鼻涕在那键盘上啪啪啪敲打着。想必大家此刻依旧在清晨甜美的梦乡之中,此刻唯独我眼角默默地流出了眼泪,只差泣不成声

都是心酸,都是泪,好了 好了 别被,小吒带偏了,走着,走着

开篇

继上篇后,咱们分布式多级缓存的链路,将会驶入网络缓存阶段,如果没看到上文的同学请返回阅读。

小白: 老吒,网络不都是做请求--响应数据吗?哪里有缓存? 这缓存是干啥的?我 TM 要这缓存有啥用

吒吒辉:其实不然,可能你使用到了,但对网络缓存不明确,它满足什么条件?实现原理是什么?什么场景使用? 架构里面的代表是什么?这些都是得作为我暖男的必要条件,必须得给大家安排 (#^.^#)

什么是网络缓存?

顾名思义,就在请求--响应阶段,通过使用缓存来提高请求响应的速度,毕竟只有通信才会涉及到网络数据的传输。

可能有小伙伴会觉得,网络缓存难道是在网络上面的缓存?其实不然,看吒吒辉的

试想一个完整HTTP请求。它采用报文的方式发送数据,根据TCP协议来进行数据的传输。这个网络上面有缓存吗?

那都是通过电信号把咱们数据通过网络传输过去(这是抽象,实体就是光缆等)。这本身就是直线通路的,如果有缓存那就得拥塞啦。就算有,也应该在路由器、交换机上面。

这时,可能又有同学有疑问。在网络通信上不都有接受数据的网络缓冲区吗?用它们来加速的,这不是缓存?

那吒吒辉在就要敲敲黑板啦,缓存和网络缓冲区是不一样的,网络缓冲区是建立在Socket网络通信基础之上的。 这玩意儿是提高系统每个单元的利用率和系统吞吐量。从而实现多路复用的。和这里缓存不一样。

啥,你还不清楚!!后面安排下计算机底层的操作系统原理,你就知道啦。谁叫我是暖男一枚呢(* ̄︶ ̄)

例如:
Redis获取数据,首先要建立连接,这时的缓冲区是指,客户端发送Redis指令,首先会先存入自己本地的缓冲区上,然后再通过网卡把数据给整到网络上。
Redis的服务端也是一样的,它接受数据首先也会把数据暂存在服务端缓冲区里面。然后再获取到Redis服务进行处理。 这就是网络缓冲区,也就是针对数据处理的时候,你首先得放到缓冲区里面,再进行存取、发送操作。

这一下子,还把我干懵了,哪吒哥,到底什么是网络缓存? 咳咳,你往下看

所谓网络中的缓存,是位于客户端和服务端之间,通过代理或响应客户端的网络请求,从而对重复的请求返回缓存中的数据资源。
同时,接受服务端的请求,更新缓存中的内容。

还不明白?

你这么看 像HTTP请求一般都需要发送到后端的应用服务器获取数据吧,那位于客户端和应用服务端之间是不是就有web服务器,也就是Apache、Nginx等。
换句话来说,就是把一些后端的数据存储在它们上面,从而减少重复请求的响应,因为位于客户端和服务的网络通信之间,故此这么称呼。

吒吒辉,你看那nginx、Apache整的那么到位,还不都需要接受网络请求呀?

这里你需要明白,你当前HTTP请求的目的是干嘛?
是要获取请求的动态数据,所以客户端与服务端之间的距离都算在它们的网络通信上,如果中间有个缓存的地方,即可减少网络响应时间,那就是如下的赶脚:

  1. PHP的请求,客户端----->nginx----->php-fpm
  2. JAVA的请求,客户端----->Apache----->Tomcat 这样说大家应该明白吧,忽然感觉自己太温暖啦。累死耕地的牛了

Web代理缓存

Web代理几乎是伴随着互联网诞生的,常用的Web代理分为 正向代理、反向代理和透明代理。Web代理缓存可理解为Web代理+缓存的一种技术。

正向与反向代理,详情看上篇文章

一般情况下,Web代理默认说的是正向代理, 如下所示。

正向代理

为了从源服务器取得内容,用户 向 代理服务器发送一个请求并指定目标服务器,然后代理服务向源服务器转交请求并将获得的内容返回给客户端。一般,客户端要进行一些特别的设置才能使用正向代理

反向代理

反向代理与正向代理相反,对于客户端而言代理服务器就像是源服务器,并且客户端不需要进行设置。客户端向反向代理发送普通请求,接着反向代理将判断向何处转发请求,并将从源服务器获得的内容返回给客户端。

透明代理

透明代理的意思是客户端根本不需要知道有代理服务器的存在,由代理服务器改变客户端请求的报文字段,并会传送真实的IP地址。加密的透明代理属于匿名代理,不用设置就可以使用代理了。透明代理的例子就是时下很多公司使用的行为管理软件。
它是介于交换机和防火墙之间的一种设备,用户的上网行为都会交由它来进行流控、限速、工作网址的屏蔽等操作。

不知道你家公司有这个软件没得呢?折磨人

这里所谓的Web代理缓存是指使用正向代理的缓存技术。 Web代理缓存的作用跟浏览器的内置缓存类似,只是介于浏览器和互联网之间。简单点就是把上游服务的数据,缓存到代理软件处。

当通过代理服务器进行网络访问时,浏览器不是直接到Web服务器去取回网页而是向Web代理发出请求,由代理服务器来取回浏览器所需要的信息并传送给浏览器。

而且,Web代理缓存有很大的存储空间,不断将新获取的数据储存到本地的存储器上,如果浏览器所请求的数据在Web代理的缓存上已经存在而且是最新的,那么就不重新从Web服务器取数据,而是直接将缓存的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
对于企业而言,使用Web代理既可以节省成本,又能提高性能。

对于Web代理缓存而言,较流行的是Squid,它支持建立复杂的缓存层级结构,拥有详细的日志、高性能缓存以及用户认证支持。Squid同时支持各种插件。
例如:
Squid Guard就是一个提供URL过滤的插件,对于屏蔽某些站点和内容十分有用。 如果需要分析Squid的各种指标,可选择 webalizer 。 如果有兴趣的话,可以进一步了解一下 Squid 的内部机制。它不仅可以作为正向代理还可以作为反向代理。如下是内部机制工作图:

Squid 架构工作原理解析

Squid 的部署模式: child、sibling、parent。

关系如下:

  1. Child 和 Parent关系(父子级模式):当 Child Squid Server 没有资料时,会直接向 Parent Squid Server 要资料,然后一直等,直到 Parent 给它资料为止。 父子级模式通信配置简述 icp_access allow all #开启所有的icp权限 cache_peer 192.168.1.50 parent 81 0 no-query originserver weight=1 name=a cache_peer_domain a www.zhazhahui.com
  2. Sibling 和 Sibling关系(邻居模式):当 Squid Server 没有资料时,会先向 Sibling 的 Squid Server 要资料,如果 Sibling 没资料,就跳过它直接向 Parent 要或上 internet 去拿。 也就是多台机器部署,相互实现通信。

注:关系是通过配置文件来进行指定,各个Squid 服务之间通信关系

icp_access allow all #开启所有的icp权限cache_peer 121.9.221.160 parent 80 0 no-query no-digest originserver设置源服务器cache_peer 121.9.221.158 sibling 80 3130 #添加icp通讯的sibling邻居cache_peer 121.9.221.147 sibling 80 3130 #添加icp通讯的sibling邻居cache_peer_access 121.9.221.147 allow all #允许icp通讯的sibling邻居通讯cache_peer_access 121.9.221.158 allow all #允许icp通讯的sibling邻居通讯cache_peer_domain 121.9.221.160 www.zhazhahui.com #配置本机squid允许接受访问的域名

那Squid的资料如何拿? 首先你得看下它是如何存在?

每一台Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下存放文件(Squid 把它叫object)。

当 Squid 获取资料时,会通过查询表的方式来定位某个资源的位置,所查询的表叫 Hash table 和 Digest table;

  1. Hash table在这里可以称之为目录或者提纲,它记录所有的Digest table表信息。
  2. Digest table在这里可以称之为摘要或者索引,它记录了磁盘上每个分区,每个目录里存的缓存摘要,

Squid 接受到请求后先查询Hash table,在根据Hash table所指向的Digest table查询需要的信息。   

Squid工作模式

首先 Squid 按照上述模式进行部署,然后客户端发送请求到 Squid 服务器,首次磁盘上无缓存数据,直接代理到后端网络服务器获取资源并缓存数据。后续请求直接根据部署的模式在 Squid 上进行内容查找。

边缘缓存

使用Web反向代理服务器和使用正向代理服务器一样,都可达到缓存的作用。 反向代理缓存可以缓存原始资源服务器的资源,而不是每次都要向原始资源服务器请求数据,特别是一些静态的数据,比如图片和文件,很多Web服务器就具备反向代理的功能,比如大名鼎鼎的Nginx。

如果反向代理服务器能够做到和用户来自同一个网络,可以将这样的反向代理缓存称为边缘缓存。因为用户访问反向代理服务器,将会得到更快响应速度。

那如何判断用户的网络和代理服务器网络是同一个呢?

客户端在访问到服务端时,是通过 智能DNS 规则 来实现就近访问,就是DNS在解析到客户端访问域名的时候,得到服务器ip,然后拿它与客户端ip进行比较,如果是同一个ip地址段就采用最近的服务器来响应客户端。
简单点原理就是先在DNS上面做好域名和IP段的映射,然后再对比IP查找,相当于数据库找数据。

边缘缓存在网络上位于靠近用户的一侧,可以处理来自不同用户的请求,主要用于向用户提供静态的内容,以减少应用服务器的介入。边缘缓存的一个有名的开源工具就是 Varnish,在默认情况下进行保守缓存。也就是说,Varnish 只缓存它所知的安全内容。Varnish的一个特性是使用虚拟内存,精妙之处在于利用了操作系统的管理机制。Varnish可以高度定制如何处理请求,缓存哪些内容。

如果感兴趣,可以进一步了解Varnish后端的内部机制,如图所示。

说到边缘缓存,那就得就得谈谈它典型的商业化服务 CDN 了,例如:AWS的Cloud Front,我国的ChinaCache等,现在一般的公有云服务商都提供了CDN服务。 CDN是Content Delivery Network的简称,即“内容分发网络”的意思。使用CDN之后,客户端与服务器通信如图所示。

使用CDN后,客户端/服务器的通信方式

CDN边缘节点的缓存策略因服务商不同而有所变化,但一般都会遵循HTTP标准协议,通过HTTP响应头中的 Cache-control:max-age 的字段来设置CDN边缘节点数据缓存时间。

当你在CDN提供商控制台添加完加速域名后,会得到一个CDN给您分配的CNAME域名,然后你需要在的DNS解析服务商添加CNAME记录,将自己的加速域名指向这个CNAME域名,这样该域名所有的请求才会都将转向CDN的节点。

客户端请求通过DNS规则解析后,就会拿到你得到CDN节点地址。客户端在向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。

CDN服务商一般会提供基于文件后缀、目录等多个维度来指定在CDN上的缓存时间,为用户提供更精细化的缓存管理。

CDN回源率的影响因素

若数据在CDN上的缓存时间较短,则CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大了访问延时;若数据在CDN上的缓存时间太长,会带来数据更新时间慢的问题。开发者需要针对各自特定的业务,来做特定的数据缓存时间管理。 影响CDN缓存条件如下:

  1. 缓存时间会对“回源率”产生直接的影响
  2. 源站动态资源较多,多为不可缓存的内容,也会导致频繁回源拉取。
  3. 资源访问量较低,文件热度不够,CDN 收到请求较少无法有效命中缓存。此时缓存内容可能已经过期。
  4. 访问资源的 URL 带参数,并且参数不断变化,当用不同的 URL 去访问 CDN 的时候,CDN 会认为这是一个新请求(即便这两个不同的 URL 其实是访问到了同一个文件,并且该文件已经缓存在节点上),也会回源去拉取所请求的内容。

有什么些方式可及时更新CDN缓存呢?

一般,CDN边缘节点对开发者来说是透明的,开发者可以通过CDN服务商提供的“刷新缓存”接口来清理位于CDN边缘节点上的缓存数据。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制要求CDN边缘节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。

除开拉模式,还存在推模式,就是当源数据发生变化后,直接推送给CDN缓存服务器。常见的就是你在后端控制里面设置了CDN缓存内容,会自动做更新,后续在继续分享这个原理内容。

总结

  • 网络缓存本质是减少请求响应之间的网络时间,也就是常说的正、反向代理。
  • 正向代理就是知道应用服务器所在位置,反向代理不知道,分别对应外与内网应用。
  • CDN的回源影响因素文件缓存时间、URL参数时常变化、访问量过低、动态源过多等,CDN资源获取可采用推与拉模式

>哈喽,我是吒吒辉,就爱分析进阶相关知识,如果觉得文章对你有帮助,欢迎分享给你的朋友,也给小吒点个「赞」。同时也可私信获取pdf笔记文档,还有【知识盛宴】活动参与

bilibili缓存文件在哪里_面试官:你知道什么是网络缓存吗?了解原理?多级缓存架构知道?相关推荐

  1. redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...

    上周因为实在太忙就认认真真写了一篇水文,吹了一下自己过去的经历,反响竟然超出了我的预期,并且后台还有读者留言表示想看续集的.哈哈,果然大家还是对水文更有热情. 这期我们继续回到之前的 Redis 话题 ...

  2. swf缓存文件在哪里_面试官:mybatis一级缓存二级缓存的区别都不知道,知道门在哪吧...

    面试官:虫虫你简历上写了了解mybatis缓存,那你能说说一级缓存和二级缓存的区别吗? 虫虫:我只知道这是用来缓存sql查询的数据 面试官:没了? 虫虫:没了 面试官:公司门知道在哪里吧 自己走还是我 ...

  3. java线程池原理简答_面试官让我讲讲Java线程池的实现原理,我笑了...

    期待与你,一起进步 随着cpu核数越来越多,不可避免的利用多线程技术以充分利用其计算能力.所以,多线程技术是服务端开发人员必须掌握的技术. 线程的创建和销毁,都涉及到系统调用,比较消耗系统资源,所以就 ...

  4. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理

    写在前面 在了解分布式锁具体实现方案之前,我们应该先思考一下使用分布式锁必须要考虑的一些问题.​ 互斥性:在任意时刻,只能有一个进程持有锁. 防死锁:即使有一个进程在持有锁的期间崩溃而未能主动释放锁, ...

  5. 关于fi dd ler 手机抓包 网卡地址地址_面试官:你给我讲讲抓包神器tcpdump的原理...

    点击上方蓝色字关注我们~ 面试官 你说你会网络编程?你说你熟悉网络知识,那你使用过tcpdump吗?能给我讲下tcpdump是什么,或者你有用过tcpdump解决过实际问题吗? 如果你学过网络,甚至搞 ...

  6. 引用计数器法 可达性分析算法_面试官:你说你熟悉jvm?那你讲一下并发的可达性分析...

    持续输出原创文章,点击蓝字关注我吧 上面这张图是我还是北漂的时候,在鼓楼附近的胡同里面拍的. 那天刚刚下完雨,路过这个地方的时候,一瞬间就被这五颜六色的门板和自行车给吸引了,于是拍下了这张图片.看到这 ...

  7. java录排名怎么写_面试官:Java排名靠前的工具类你都用过哪些?

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 推荐:https://www.xttblog.com/?p=5158 在Java ...

  8. redis删除过期key的算法_面试官别再问我Redis内存满了该怎么办了

    概述 Redis的文章,我之前写过一篇关于「Redis的缓存的三大问题」,累计阅读也快800了,对于还只有3k左右的粉丝量,能够达到这个阅读量,已经是比较难了. 这说明那篇文章写的还过得去,收到很多人 ...

  9. qps是什么意思_面试官:说说你之前负责的系统,QPS 能达到多少?

    被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾吾,导致整体面试效果降低? 原因基本是一些公司中,做完功能测试就完了,压根不会有性能测试这一步,或者说并发量较少,没有 ...

最新文章

  1. 分页插件php,文章内容分页插件
  2. 向量 矩阵 张量_张量,矩阵和向量有什么区别?
  3. ImagesSprite V1.1.1 Beta发布
  4. 为什么需要云压力性能测试?
  5. sql server分布式事务解决方案
  6. 一场来自腾讯的自我革命,已然来临!
  7. 【百度春招】 买帽子
  8. cl.clus pw index.php,Application Essay 写作 第五课 Introductions and Conclus
  9. android电脑手柄游戏平台,玩转PC、安卓TV、Stam平台等多平台的游戏手柄——北通斯巴达2...
  10. Springboot源码分析第一弹 - 自动装配实现
  11. typora + smss / github / 又拍云 / 七牛云 图床
  12. cad批量转换pdf格式
  13. 模块pygame介绍以及库的下载
  14. 进程互斥以及进程互斥实现方法(包含代码)
  15. java写linux内核,基于mykernel 2.0编写一个操作系统内核
  16. mysql数据库设计与应用答案智慧树_知到智慧树_MySQL数据库设计与应用_答案完整...
  17. 场景金融丨神州信息签约第三个国家级单品大数据试点项目 助力场景金融创新
  18. 小程序 - 颜值大师
  19. “中国李宁“,能否救李宁?
  20. 【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)

热门文章

  1. 杨永智:创业者需具备的六大基因 五大攻略(下)
  2. ISO8583包[详细说明]
  3. 独家专访李林 | 回归火币后的一年
  4. Shopee怎么发货?虾皮无货源怎么发货?
  5. 堰流实验报告思考题_堰流流量测定
  6. PMP项目经理常用项目管理工具分析
  7. 【阿贝云】免费的云服务器,真香
  8. 如何删除PPT密码?附详细方法
  9. uni-app跨端开发H5、微信小程序、支付宝小程序遇到的坑
  10. 【HISI系列】海思 IPC hi3516a、hi3519v101 的单包模式和多包模式