简单的说,CDN是一个经策略性部署的整体系统,包括分布式缓存,负载均衡,网络请求和重定向和内容管理4个要件。
内容管理和全局的网络流量管理是CDN的核心所在,通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
传统的IDC 服务模式
CDN分发模式
- 用户在浏览器中输入要访问的域名;
- 浏览器向域名解析服务器发出解析请求,由于CDN对域名解析过程进行了调整,所以用户端一般得到的是该域名对应的CNAME记录,此时浏览器需要再次对获得的CNAME域名进行解析才能得到缓存服务器实际的IP地址。
//注:在此过程中,全局负载均衡DNS解析服务器会根据用户端的源IP地址,如地理位置(深圳还是上海)、接入网类型(电信还是网通)将用户的访问请求定位到离用户路由最短、位置最近、负载最轻的Cache节点(缓存服务器)上,实现就近定位。定位优先原则可按位置、可按路由、也可按负载等。 - 再次解析后浏览器得到该域名CDN缓存服务器的实际IP地址,向缓存服务器发出访问请求;
- 缓存服务器根据浏览器提供的域名,通过Cache内部专用DNS解析得到此域名源服务器的真实IP地址,再由缓存服务器向此真实IP地址提交访问请求;
- 缓存服务器从真实IP地址得到内容后,一方面在本地进行保存,以备以后使用,同时把得到的数据发送到客户端浏览器,完成访问的响应过程;
- 用户端得到由缓存服务器传回的数据后显示出来,至此完成整个域名访问过程。
CDN 的关键技术
内容路由技术,内容分发技术,内容存储技术,内容管理技术
内容路由
最佳节点的选择,最佳节点的选定可以有多种策略,例如距离最近,节点负载最轻等。
负载均衡分为全局负载均衡和本地负载均衡等,就近性判断是全局负载均衡的主要特点
负载均衡的实现方法包括DNS,应用重定向,传输层重定向等。
内容分发技术
内容分发包括从内容源到CDN边缘的Cache过程。从实现上看主要有两种实现方试:Push和Pull
通过Push分发的内容一般是比较热点的内容,由内容管理节点发起主动Push到各个cache节点,通过用户的pv来判断那些内容时热点内容,可以主动的推送到各个Cache节点
通过Pull分发的内容一般是比较分散的内容,由用户主动请求,但是Cache几点不存在,这样的话Cache几点会向数据源或者其他Cache节点请求。
在内容分发过程中,对于Cache设备而言,关键的是需要建立内容源URL,内容发布者URL,用户访问的URL,以及内容在Cache中存储的的位置之间的映射关系
内容存储技术
对于在Cache节点中的存储,是Cache设计的一个关键问题。需要考虑的因素包括功能和性能两个方面:在功能上包括对各种内容格式的支持、对部分缓存的支持,在性能上包括支持的容量、多文件吞吐率、可靠性、稳定性。
Cache 存储的另外一个重要因素是存储的可靠性,目前,多数存储系统都采用了RAID技术进行可靠存储
内容管理技术
内容管理在广义上涵盖了从内容的发布、注入、分发、调整、传递等一系列过程。在这里,内容管理重点强调内容进入Cache点后的内容管理,我们称为本地内容管理。
本地内容管理主要针对一个CDN节点(由多个CDN Cache设备和一个SLB设备构成)进行。本地内容管理的主要目标是提高内容服务的效率,提高本地节点的存储利用率。通过本地内容管理,可以在CDN节点实现基于内容感知的调度,通过内容感知的调度,可以避免将用户重定向到没有该内容的Cache设备上,从而提高负载均衡的效率。通过本地内容管理还可以有效地实现在CDN节点内容的存储共享,提高存储空间的利用率。
在实现上,本地内容管理主要包括如下几个方面。
一是本地内容索引。本地内容管理首先依赖于对本地内容的了解。包括每个Cache设备上内容的名称、URL、更新时间、内容信息等。本地内容索引是实现基于内容感知的调度的关键。
二是本地内容拷贝。通常,为了提高存储效率,同一个内容在一个CDN节点中仅存储一份,即仅存储在某个特定的Cache上。但是一旦对该内容的访问超过该Cache的服务提供能力,就需要在本地(而不是通过PUSL的方式)实现内容的分发。这样可以大大提高效率。
三是本地内容访问状态信息收集。搜集各个Cache设备上各个内容访问的统计信息,Cache设备的可用服务提供能力及内容变化的情况。
可以看出,通过本地内容管理,可以将内容的管理从原来的Cache设备一级,提高到CDN节点一级,从而大大增加了CDN的可扩展性和综合能力。
综上所述,CDN作为一种支持大规模高质量的流媒体服务的关键技术,目前已经基本成熟,具备了广泛应用的能力。