CDN的基本工作过程
CDN——到底用还是不用?
项目中会看到很多CDN存储,也听大神们常常说起我们什么什么资源是存储在CDN上的,一直处于一知半解的状态,本着求知的精神,专门去查了一下,终于了解这是个什么东东。
为什么要用CDN?
浏览器从服务器上下载CSS、js和图片等文件时都要和服务器连接,而大部分服务器的带宽有限,如果超过限制,网页就半天反应不过来。而CDN可以通过不同的域名来加载文件,从而使下载文件的并发连接数大大增加。
jquery一类的库文件被广泛使用,如果访问你网站的用户的浏览器之前在访问别的网站时通过和你相同的CDN已经加载了jquery,由于该文件已经被缓存了,就不用重新下载了。
CDN具有更好的可用性,更低的网络延迟和丢包率。
CDN能提供本地的数据中心,这样一来,那些远离你网站主服务器的用户也能就近很快地下载文件。
很多商业付费的CDN能提供使用报告,这可以作为你自己网站分析报告的补充。
CDN能够分配负载,节省带宽,提高你网站的性能,降低网站托管的成本,通常是免费的。
CDN的不足
在开发阶段如果处在断网环境下,CDN文件是无法加载的。
不够灵活。比如你只使用jquery库的一小部分,如果使用CDN上提供的文件就没办法进行拆分,还是得下载原来的大小,反而没有自己拆分后加载速度来得快。
尽管一些流行的CDN文件事先缓存过的几率较大,但并不是一定的,一些移动设备的缓存可能很小而且效率很低,CDN的优势就不明显了,特别是当你可以在本地服务器上存放比CDN文件更小的文件时。
由于地理、法律、政策和商业上的阻隔,你所在的地区可能屏蔽了一些流行的免费CDN服务的域名或者IP地址。
CDN会有出故障的时候,这时候要有备用方案,也就是你的本地文件,这种处于稳定考虑的冗余会增大开发工作量和复杂度。
如果安全性对你的网站很重要,就不要使用公共的CDN,因为当你远程从CDN请求文件时,你的访问来源信息也被发送过去,一些远程的js文件可能被修改用来搜集你的用户或者系统信息,而当你使用https协议时,能选择的CDN就更加有限。
CDN的主要内容
“分布式存储”:CDN也叫内容分发网络。将中心平台的内容分发到各地的边缘服务器,使用户能够就近获取所需内容,降低网络用赛,提高用户访问响应速度和命中率。利用了索引、缓存等技术。
“负载均衡”:对所有发送的请求进行访问调度,确定提供给用户的最终实际访问地址。
“内容管理”:负责对存储内容的监管、数据分析等。
传统网站的访问过程:
用户在自己的浏览器中输入要访问的网站域名。
浏览器向本地DNS服务器请求对该域名的解析。
本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求。
本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以递归方式向整个DNS系统请求解析,获得应答后将结果反馈给浏览器。
浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址。
浏览器向服务器请求内容。
服务器将用户请求内容传送给浏览器。
加入CDN后的访问过程
当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
用户向CDN的全局负载均衡设备发起内容URL访问请求。
CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
全局负载均衡设备把服务器的IP地址返回给用户。
用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
CDN的使用方法
可以在七牛云、阿里云等申请存储空间,将需要存储的文件上传,就可以获取到文件对应的一个域名。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。