本文旨在作学习记录(原回答链接放置本文最下方),作者在此基础上进行补充说明、整理论述,使其能以一种更为逻辑地清晰地方式表达出“CDN是什么?”的理解,可作对CDN是什么的简要了解。
一、HTML的文件引用:
HTML的文件头(也有文件中,文件尾)那边常有其他文件引用,比如CSS以及JS的引用。就以bootstrap常用的引用来举个例子,你常见的引用可能会是这样的:
<head>
<title>Mushroom</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<!-- 引入 Bootstrap -->
<link href="/css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery (Bootstrap 的 JavaScript 插件需要引入 jQuery) -->
<script src="/js/jquery.min.js"></script>
<!-- 包括所有已编译的插件 -->
<script src="/js/bootstrap.min.js"></script>
</head>
这之中,<script src="/js/bootstrap.min.js"></script> 这段就是外部脚本文件的一个链接,当前的这种链接是相对URL,指向站点内的文件,即你本项目里对应路径下面放置的文件。可以在 HTML <script> 标签的 src 属性 查看这个标签的具体属性。
属性值
值 描述
URL 外部脚本的 URL。可能的值有:
•绝对 URL - 指向其他站点(比如 src="www.example.com/example.js")
•相对 URL - 指向站点内的文件(比如 src="/scripts/example.js")
通过查看可以得知,URL的引用有两种方式,绝对和相对,绝对的方式就是直接引用其他站点的js地址,比如我把上方的引用改为
<script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>
这样即是引用其他站点的js。CSS文件的引用与此类似:HTML <link> 标签的 href 属性。图片以及其他文件的引用也类似,不赘述。
二、系统的资源引用
在一个网站项目中,页面里经常会有许多js以及css的引用,接触过开发项目的一般都会了解,大部分界面里的脚本引用并不是像第一步里的那么精简,如果是直接引用项目内文件的话,他们可能是这样的:
<SCRIPT src="/iforums/templates/default/js/common.js" type=text/javascript></SCRIPT>
<SCRIPT src="/iforums/templates/default/js/ajax.js" type=text/javascript></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/third-party/jquery-1.10.2.min.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.config.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.parse.js"></SCRIPT>
<SCRIPT type=text/javascript src="/iforums/ueditor/ueditor.all.js"></SCRIPT>
可能甚至引用的更多,这样将资源文件与业务代码一锅炖的方式适用于小型的,应用服务器压力并不是太大的系统(并发、带宽、存储空间、资源等等)。这种方式的优点是开发省力,发布省力,对服务器要求小,省钱,没有具体公网接入需求。许多小型,内部使用型的网站系统往往采取这种形式放置资源文件。
三、系统访问量变高了,速度变慢了怎么办
怎么办?优化系统部署呗。
怎么优化?优化方式有很多,读写分离,负载均衡,这方面的东西可以讲上三天三夜。具体到本问题的范畴内,那就是资源服务器与应用服务器的分离。粗暴的理解方式就是,就是应用放置于应用服务器(一台或者是集群),资源放置于在资源服务器(一台或者是集群),这时候,js以及css的引用就需要更改为绝对URL,指向对应的资源服务器。
四、CDN的工作实例
与传统访问方式(即客户端→服务器)不同,CDN网络则是在用户和服务器之间增加缓存节点(或叫边缘节点),根据节点路径和节点负载程度,将用户的访问请求引导到最优的缓存节点而不是服务器中心节点(或叫源站点),从而加速访问速度。若缓存节点没有目标资源,则向中心节点发出请求,将请求后的资源复制到自身节点中,并返回请求后的资源给客户端。理解如下图。
优点简括:解决Internet网络拥堵状况,提高用户访问网络的响应速度。
五、参考