前言
记得刚刚开始学习Bootstrap,发现一些文章中总是提到使用CDN。HTML文件头的引用,以及常有其他文件引用,比如CSS以及JS的引用。
例如下面这个:
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
1
2
3
4
其中就有对CDN的引用。当时也就没怎么在意,可是过了一段时间后,当我又重新看到了这个一直困扰着我的问题。我想着:为什么要应用CDN呢?这个CDN服务是必须的吗?我的系统都是在内网里面使用,与Internet不联通,还需要CDN吗?
CDN简介
百度给出CDN的解释
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
属性:
一种新型网络构建方式
目的:
传输的更快、更稳定全
基本原理
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
简单来说,CDN就是一个分布式的缓存服务器,存着非常多文件,并且分布在世界各地,每个人都能就近访问。
文件资源的引用
所以我们就很好理解了
像这种形式的:
<script src="/js/bootstrap.min.js"></script>
1
就是外部脚本文件的一个链接,当前的这种链接是相对URL,指向站点内的文件,即你本项目里对应路径下面放置的文件。
我们可以知道,URL的引用有两种方式,绝对引用和相对引用,绝对的方式就是直接引用其他站点的js地址,比如我把上方的引用改为这种样子的:
<script src="https://cdn.bootcss.com/twitter-bootstrap/4.4.1/css/bootstrap-grid.min.css"></script>
1
即是引用其他站点的js文件。
形象理解CDN
我再举一个通俗的例子来说明:假设有两家除了位置其他完全一致的超市,一家离你的住所很近,另一家很远,那么你会选择去哪一家?一般人都会选去近的那家,对吧?CDN服务器就相当于是离你近的那家超市。
带宽与延迟
当然,CDN也可以用来做一些边缘计算,处理一些动态资源。网络不是四通八达的么?为什么需要CDN呢?
这就得提到一关键词 带宽。
举个例子,如果我们原本要连接的服务器在国外,那么因为出口带宽有限等因素,连接质量会很差、下载速度也变慢。而如果是在国内有一台同样内容的服务器,就可以直接连接到这台国内服务器上,以更快的速度和更好的连接质量来获取内容。
其次,比如原本1000个人连接到一台带宽为100Gbps的服务器上面进行下载,平均每个用户只能分到0.1Gbps的带宽,速度就非常慢;而用CDN,原本一台服务器变成多台拥有相同内容的服务器,用户被分散到不同的服务器上面去进行下载,平均每个用户能够分到的带宽就会得到明显的提高。
在计算机网络中就像木桶最短的木板,带宽最小的那一块决定了你去服务器拉取数据的最大速度。
另一个关键词 延迟
据某研究(关于人脑在等待不同时长的信息时,产生的不同意识行为,进而对信息获取产生的差别感官体验。)报道:
0.1 s: 用户几乎感觉不到系统是否不连贯性。
1.0 s: 用户明显注意到时延的发生,但是在该时间内思维依然是连贯的。
10 s: 超过该时间的时延会使用户失去等待意愿。
控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
总结
所以说,CDN的本质上是将媒体资源,动静态图片,HTML,CSS,JS等等内容缓存到距离你更近的IDC,从而让用户进行共享资源,实现缩减站点间的响应时间等等需求,而网游加速器的本质则是通过建立高带宽机房,架设多节点服务器来为用户进行加速。
在某乎上看到一句话觉得挺好的,就作为CDN的总结吧: CDN的本质是缓存,而内核中支撑它的互联网精神则是共享。
留言0