目录

CDN是Content Distribution Network的缩写,是利用多个分别部署的数据中心、机房、服务器,在网站和用户之间插入一层网络架构,选取最靠近或服务质量最佳的服务器为每位用户提供服务。

CDN可以有效地解决网站容量不足、互联网拥塞、降低主干网流量占用、提高用户响应速度和下载速度等问题,是现代互联网服务中必不可少的环节。

构建一个商用的CDN,需要基于DNS重定向、源站与边缘站(Origin Server与Edge Server)、缓存和负载均衡等关键技术。

CDN的基本原理在于,根据用户的来源将其访问请求重新指向选取出来的缓存服务器,用户不需要访问网站服务器即可得到所需的内容,所有静态的视频、图片文件、毋需常常变化的网页等都适合被缓存。

调度管理

用户操作时,浏览器或应用程序将网站请求地URL发送给DNS服务器,DNS服务器将返回该域名对应地CNAME(CNAME是规范名称记录即Canonical Name的缩写,可被认为是对域名设置别名,如果用户对域名设置了CNAME,意味着DNS服务将对相应的请求返回另一个域名,当使用CDN时,CNAME将指向CDN内部的DNS服务器。)

GSLB需要维护一个状态正常的服务器列表,以及IP地址对应的地理位置与运营商的信息,在策略上可以采取静态配置IP段、基于轮转加权、基于地理选择等方式选取服务器,还可以基于服务器当前的Session状况、物理服务器绑定状况、延迟时间等帮助选择。

缓存管理

CDN的核心功能,是在整个互联网的层级上为用户提供缓存访问。在CDN内部对缓存的管理和控制同样是关键技术,除使用现成的Varnish、Squid、Nginx进行网页缓存,Redis、Memcached数据缓存外,针对海量文件,还可使用包括MooseFS、SeaweedFS、FastDFS等在内的存储方案作为本地缓存。

当用户A访问被CDN加速的站点时,经由DNS指向CDN的某一台边缘服务器。若所需的页面或文件正好被缓存于服务器中,则缓存服务器立刻返回数据。但如果并没有所需内容,则将由边缘服务器向网站发起一次访问请求,获取对象再返回用户。同时将其放进缓存之中,以便下次其他用户访问用户时可以命中。这称作一次回源请求。

如视频文件、图片、静态网页等内容天然适合通过CDN向用户提供服务,对预计访问量较大的内容,CDN并非依仗向网站的回源请求将其缓存到各个边缘节点,而是提供CDN的源站服务,即允许网站服务商手动或自动地将希望CDN缓存加速的内容上传至CDN,边缘节点的回源访问指向的是CDN内部的源站。

CDN缓存设计的重要目标是增加缓存命中和减少回源请求。

对热点内容,预计有大量用户实时访问的内容,由于回源操作延迟较大,为使第一批访问的用户也可以得到较好的服务质量,可由用户配置或CDN服务选择,通过推送的方式将内容主动从源站分发到部分或全部边缘节点,或者通过测试请求让缓存预热起来的策略进行服务。

鉴于存储价格的下跌,视频公司在其私有CDN的边缘节点或次级源站中,缓存所有视频库中内容(包括长尾节目)的初始片段,例如一个GOP或HLS/DASH协议的init MP4文件、初始的切片等,以对影视节目加速,成本条件已经非常充分。

架构包括每节点的软硬件设计和节点的拓扑设计。

在较复杂的CDN方案中,CDN由多级体系组成,即在源站和边缘站中间还设置了一层或多层节点,次级或三级源站均可用来服务边缘站的回源请求。

多数现代CDN公司的节点管理并非粗糙地对物理机进行操纵,而是利用KVM、Docker等虚拟化技术,在边缘节点机房内设置服务集群和缓存,保证资源隔离和高可用性。在此基础上,CDN节点的部署亦可得到大幅简化,不但完全自动化进行,且能够快速部署到任何提供物理机器的机房而不需公司运维人员参与。