内容分发网络:Content Delivery Networks,简称 CDN,它是构筑在现有网络上的一种先进的流量分配网络。它将更多的缓存服务器分布在不同的位置;当用户访问网站时,利用负载均衡技术,将用户的访问指向距离最近的缓存服务器上,由缓存服务器响应用户请求。其目的是使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
CDN 更适用于发布静态资源,如图片、脚本、样式表和 Flash 等,因为静态文件更容易存储并具有较少的依赖性;如果提供动态 HTML 页面会引入特殊的存储需求,例如:数据库连接、状态管理、验证、硬件和 OS 优化等,这些复杂性超越了 CDN 的能力范围。
通常一些比较出名的开源框架都会将打包后的源码放到一些比较出名的、免费的 CDN 服务器上。国际上使用较多的有:unpkg、JSDelivr、cdnjs;国内使用较多的有:bootcdn。
CDN 的组成部分:
典型的 CDN 系统由分发服务系统、负载均衡系统和运营管理系统三大部分组成:
- 分发服务系统:主要实现将内容从内容源中心向边缘的推送和存储。基本工作单元是许许多多的 缓存服务器,缓存服务器负责使用缓存响应最终用户的访问请求,还负责与源站点进行内容同步。
- 负载均衡系统:负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。
- 运营管理系统:分为运营管理和网络管理两个子系统。运行管理包含客户管理、产品管理、计费管理、统计分析等;网络管理实现对 CDN 系统的网络设备管理、拓扑管理、链路监控和故障管理,为管理员提供管理操作界面。
CDN 的工作流程:
- 浏览器根据 URL 地址去本地 DNS 域名服务器中寻求 IP 地址解析。
- 本地 DNS 域名服务器会将域名的解析权交给 CDN专用的 DNS 服务器。
- CDN 专用的 DNS 服务器会将 CDN 的全局负载均衡设备 IP 地址返回给用户。
- 用户向 CDN 的负载均衡设备发起内容 URL 访问请求。
- CDN 负载均衡设备根据用户 IP 地址,以及用户请求的内容 URL,选择一台用户所属区域的缓存服务器。
- 负载均衡设备告诉用户这台缓存服务器的 IP 地址,让用户向所选择的缓存服务器发起请求。
- 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
- 如果这台缓存服务器上并没有用户想要的内容,那么这台缓存服务器就要网站的源服务器请求内容。源服务器返回内容给缓存服务器,缓存服务器发给用户,并根据用户自定义的缓存策略,判断要不要把内容缓存到缓存服务器上。
CDN 挂了的解决方法:
可以在 CDN 引入的时候增加一个判断,如果引入的资源正常则使用引入的 CDN,否则引入一个其他的 CDN。
<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>