CDN与缓存全面详聊,看完之后,大部分程序员收藏了...

存储 存储软件
缓存是一个到处都存在的用空间换时间的例子。通过使用多余的空间,我们能够获取更快的速度。我们通常意义上说的缓存主要包含两部分。第一个是用户浏览器端的缓存,第二个是服务器端为了提高访问速度而加的CDN。

[[317213]]

缓存是什么

缓存是一个到处都存在的用空间换时间的例子。通过使用多余的空间,我们能够获取更快的速度。

我们通常意义上说的缓存主要包含两部分。第一个是用户浏览器端的缓存,第二个是服务器端为了提高访问速度而加的CDN。

首先,看看没有网站没有接入CDN时,用户浏览器与服务器是如何交互的:

 

CDN与缓存全面详聊,看完之后,大部分程序员收藏了...

 

用户在浏览网站的时候,浏览器能够在本地保存网站中的图片或者其他文件的副本,这样用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了下载量意味着提高了页面加载的速度。

如果中间加上一层CDN,那么用户浏览器与服务器的交互如下:

 

CDN与缓存全面详聊,看完之后,大部分程序员收藏了...

 

客户端浏览器先检查是否有本地缓存是否过期,如果过期,则向CDN边缘节点发起请求,CDN边缘节点会检测用户请求数据的缓存是否过期,如果没有过期,则直接响应用户请求,此时一个完成http请求结束;如果数据已经过期,那么CDN还需要向源站发出回源请求(back to the source request),来拉取最新的数据。CDN的典型拓扑图如下:

 

CDN与缓存全面详聊,看完之后,大部分程序员收藏了...

 

可以看到,在存在CDN的场景下,数据经历了客户端(浏览器)缓存和CDN边缘节点缓存两个阶段,下面分别对这两个阶段的缓存进行详细的剖析。

CDN是什么

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

CDN可以理解为一个普通缓存,如代理缓存或者说边缘缓存,即便不关心用户的具体地理位置,也应该考虑使用cdn的代理缓存来提高用户体验。

CDN的作用

CDN就可以理解为分布在每个县城的火车票代售点,用户在浏览网站的时候,CDN会选择一个离用户最近的CDN边缘节点来响应用户的请求,这样海南移动用户的请求就不会千里迢迢跑到北京电信机房的服务器(假设源站部署在北京电信机房)上了。

CDN的优势

很明显:

(1)CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;

(2)大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。

CDN的缺点

当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常。

CDN缓存策略

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

当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。

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

CDN缓存时间会对“回源率”产生直接的影响。若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。

CDN缓存刷新

CDN边缘节点对开发者是透明的,相比于浏览器Ctrl+F5的强制刷新来使浏览器本地缓存失效,开发者可以通过CDN服务商提供的“刷新缓存”接口来达到清理CDN边缘节点缓存的目的。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制CDN节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2019-11-24 19:34:04

HTTP长连接短连接

2019-09-23 20:00:34

MySQL数据库程序员

2019-09-12 09:56:13

程序员技能开发者

2019-07-26 08:33:28

HTTP服务端负载均衡

2019-10-11 10:05:30

程序员固态硬盘Google

2019-08-09 11:25:01

Java虚拟机Java程序员

2019-06-12 10:35:49

程序员高效工具开源

2020-04-15 16:07:01

程序员技术数据

2020-04-03 08:42:08

Servelt3程序员Tomcat

2021-11-30 22:59:28

程序员IT架构师

2011-11-09 09:59:21

云计算IT管理

2017-07-03 11:15:46

LinuxBoot Repair

2019-07-12 15:28:41

缓存数据库浏览器

2020-12-09 16:55:57

程序员技术

2015-08-04 09:56:48

2010-11-18 12:44:25

LibreOffice

2018-08-31 07:33:58

2018-09-17 15:09:28

区块链去中心化互联网

2018-11-25 21:53:10

人工智能AI开发者

2020-03-02 09:50:50

程序员技能开发者
点赞
收藏

51CTO技术栈公众号