CDN加速原理

CDN加速原理

00:00
07:51

CDN是什么?

CDN(Content delivery networks,内容分发网络),是通过在源服务器和用户之间增加一层新的网络架构,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。

简单的说,CDN 的工作原理就是将源站的资源缓存到位于全球各地的 CDN 节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都向源站获取,避免网络拥堵、缓解源站压力,保证用户访问资源的速度和体验。


传统网站的请求响应过程

1.输入网站域名

2.浏览器向本地DNS服务器请求对该域名的解析

3.本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。

4.如果没有关于这个域名的解析结果的缓存,就

以迭代方式向整个DNS系统(相应的DNS服务器)请求解析,获得应答后将结果反馈给浏览器

5.浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址

6.浏览器获取IP地址之后,经过标准的TCP握手流程,建立TCP连接。

7.浏览器向服务器发起HTTP请求。

8.服务器将用户请求内容传送给浏览器。

9.经过标准的TCP挥手流程,断开TCP连接。

引入CDN之后,用户访问经历

当用户点击网站页面上的内容URL,先经过本地DNS系统解析,如果本地DNS服务器没有相应域名的缓存,则本地DNS系统会将域名的解析权交给CNAME指向的CDN专用DNS服务器。

CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回给用户。

用户向CDN的全局负载均衡设备发起URL访问请求。

CDN全局负载均衡设备根据用户IP地址,以及用户请求的URL,选择一台用户所属区域的区域负载均衡设备,并将请求转发到此设备上。

(CDN全局负载均衡设备会选择一个相对于用户较近的 访问快的服务器 让用户访问)

基于以下这些条件的综合分析之后,区域负载均衡设备会选择一个最优的缓存服务器节点,并从缓存服务器节点处得到缓存服务器的IP地址,最终将得到的IP地址返回给全局负载均衡设备。

全局负载均衡设备把服务器的IP地址返回给用户。

用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

CDN的好处

用户在浏览网站的时候,浏览器在硬盘上保存网站中的图片或者其他文件的副本,用户再次访问该网站的时候,浏览器就不用再下载全部的文件,减少了HTTP请求数量。与服务器在硬盘上存储缓存文件类似,CDN将网站的内容移动到更为强大的代理服务器上,通过动态域名解析,用户的请求被分配到到离自己最近的服务器,获取资源更快。CDN服务器直接返回缓存文件或通过专线代理原站的内容,进而提升了内容分发的速度。

一个是加速了内容的访问,安全方面,源服务器的IP被隐藏,被攻破的难度增大。高可用,当某个服务器故障时,系统会调用临近的健康服务器 进行服务,避免对用户造成影响。

CDN的弱点

CDN虽然有很多的优点,但它并不是万能的。在部分场景下,CDN并不是适用。

首先,CDN适用于静态的内容,不适用动态的内容。用户动态的实时交互数据,是难以缓存的。例如一些频繁修改的数据库表单内容等。(大家可能没想到,直播其实也是可以使用CDN的。感兴趣的同学可以搜一下“直播CDN”。)

其次,对隐私数据的保护不友好。很多应用提供商和内容服务商,为了保护自身的数据私密,不允许第三方公司CDN缓存他们的数据,只允许自家CDN缓存自家的数据。这个对用户体验会造成一定影响。

第三,建设CDN意味着不菲的资金投入。不管是自己买服务器搭建CDN,还是租用云服务提供商的CDN服务,都需要花钱。而且,区域越多,花的钱越多。这些CDN到底有没有人用,利用率是多少,很难精准预测。也许大部分时间里,利用率很低,就造成了资源浪费。


CDN缓存内容的更新?

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

CDN缓存静态资源,常用的有:图片、视频、音乐、css、js文件等。

通过手动刷新,定时更新,不用同名文件等。



以上内容来自专辑
用户评论
  • 杰哥v587

    一起努力前进的人

    梦啦啦大魔王 回复 @杰哥v587: 杰哥,我们一起加油!

  • 孔雀蓝三七

    加油加油

    梦啦啦大魔王 回复 @孔雀蓝三七: 谢谢支持,感恩