概述
CDN,Content Delivery Network,内容分发网络。使用户可就近取得所需内容,解决网络拥挤状况,提高用户访问网站的响应速度。CDN=更智能的镜像+缓存+流量导流。
核心功能:
- 加速静态资源加载(如图片、视频、CSS/JS);
- 动态内容加速及边缘计算;
- 负载均衡和故障切换;
- DNS优化;
- 提供HTTPS加密支持。
优势:
- 提升页面加载速度;
- 减少服务器负载;
- 提高网站可用性和稳定性;
- 地域性加速的效果;
- 安全性增强:DDoS防护、WAF(Web Application Firewall,Web应用防火墙)。
不足:
- 实时性不太好
优化方案:在网络内容发生变化时将新的网络内容从服务器端直接传送到缓存器,或当对网络内容的访问增加时将数据源服务器的网络内容尽可能实时地复制到缓存服务器。
应用场景:
- 网站(电商、企业官网)、游戏加速;
- 流媒体分发(视频、音乐);
- 移动应用的资源分发;
- API服务优化。
关于DNS,请参考一文入门DNS。
原理
目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,解决网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。
狭义地讲,CDN是一种新型的网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;广义来说,CDN代表一种基于质量与秩序的网络服务模式。
CDN是一个经过策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理四个核心模块,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
流程
如上图所示,用户访问未使用CDN的网站的大致过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析函数库对域名进行解析得到对应IP地址;
- 浏览器使用得到的IP地址,向服务器发出数据访问请求;
- 浏览器根据域名主机返回的数据显示网页内容。
CDN是在用户和服务器之间增加Cache层,主要是通过接管DNS实现。
不需要改动网站架构,只需修改自己的DNS解析,设置一个CNAME指向CDN服务商,如下图所示。
引入CDN后的过程:
- 用户向浏览器提供要访问的域名;
- 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行调整,所以解析函数库得到的是该域名对应的CNAME记录(CNAME为CDN服务商域名),为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。(CDN服务来提供最近的机器)
- 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
- 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
- 缓存服务器从实际IP地址得到内容后,返回给客户端,同时在本地保存备份;
- 客户端得到由缓存服务器返回的数据后显示出来并完成整个浏览的数据请求过程。
架构
CDN网络架构主要由两大部分:
- 中心