1引言
随着互联网的普及和发展,个人计算机的性能也在不断地提高,现有网络服务质量受到了考验。由于网民数量的急剧增加,用户与网站之间的链路由于大流量访问造成拥塞的机率也大大增加,访问质量大受考验;异地用户访问网站的数量也提高了,网络距离过长而导致访问的质量也受到严重影响。因此,内容分发网络技术应运而生。
2概述
CDN,全称ContentDistributionNetwork,即内容分发网络技术。其原理就是在用户和网站中间添加一层新的智能化网络架构,通过将网站的内容分发到距离用户最近的边缘节点,用户能就近获取到相应的内容,由此解决了异地的访问质量的问题;再者,用户对网站的访问分散到各个边缘节点,源站的访问负载也随之下降,大并发造成的拥塞机率也大大下降。
CDN系统一般分为3层,即中心、骨干、边缘3个节点,较小的CDN系统可以只选取中心、边缘两个节点。
3关键技术
CDN的实现需要依赖多种网络技术的支持,其中包括了缓存技术、本地负载均衡技术、全局负载均衡技术、内容分发技术这几个关键性技术。
3.1缓存技术
缓存技术是通过缓存用户需要访问站点的内容,将用户所需的内容缓存到距离用户最近的节点,可以快速响应请求,提升了用户获取所需资源的速度。宏观上来说,CDN系统可以认为是一个庞大的分布式缓存系统。
缓存服务器的空间是有限的,并且随着时间的推移,缓存内容的流行度随之降低,用户对这部分内容访问需求也减少了,所以需要对缓存周期性地进行替换删除,腾出空间给新的热点资源,提高缓存空间的重复使用率,称这个过程为缓存替换。
现在流行的替换算法主要有以下这几种:
(1)LRU:即最近最少使用(LeastRecentlyUsed)算法,每当一个缓存文件被访问时,算法更新文件的最后访问时间,需要空间时将最后访问时间最早的文件进行删除。
(2)FIFO:即先进先出算法,当缓存空间达到设定的上限时,则从队列头部开始替换内容。
(3)SIZE:大小替换算法,记录目标文件的大小,在缓存服务器进行替换时,将大于某一体积的文件进行替换。
(4)LFU:最少频率使用算法(LeastFrequentlyUsed),每当缓存中的文件被访问时(HIT),则将其对应的访问次数加1;当缓存空间达到设定的上限时,从访问次数最小的文件开始驱逐,直到可以容纳新文件。
3.2负载均衡技术
负载均衡在CDN系统中是起内容路由的作用,将用户的请求导向整个CDN系统中对用户而言最佳的节点。负载均衡一般可以分为全局负载均衡(GSLB)和本地负载均衡(SLB)两个层次。负载均衡的准确性和效率直接决定了整个CDN系统的性能和效率。
3.2.1全局负载均衡
全局负载均衡(GSLB)作为全局的调度系统,充当着对CDN的所有节点之间进行流量调配,保证调度用户到最近的节点(或区域)。因此,全局负载均衡的主要功能是实现就近性判断。
目前全局负载均衡系统一般采用DNS来实现,具体的流程如下:
(1)用户访问网站,首先通过本地DNS发起DNS解析。
(2)本地DNS重定向到实现全局负载均衡(GLSB)转交DNS请求。
(3)GLSB根据转交请求的本地DNS执行负载均衡判断,返回被确定的最佳CDN节点的IP地址。
然而基于DNS重定向的技术也存在不少缺点,(1)依赖于DNS数据的及时更新,(2)不能得知服务器之间的差异来进行权值分配。
3.2.2本地负载均衡
本地负载均衡是为了解决网络负荷过重、数据流量过大的问题,通过将数据流量均衡地分配给服务器集群内部的服务器,充分利用现有资源,避免服务器单点失效而造成损失,而且后期扩展操作简单,不需要更改现有网络结构。常使用反向代理实现本地负载均衡。
反向代理是通过将缓存服务器放置在Web服务器的前端,作为代理Web服务器接受来自所有用户的http请求(需要DNS域名解析配置),对用户而言,代理服务器就像是原始服务器。反向代理工作方式可以利用在加密、缓存动态内容、文件压缩和抗攻击等方面,也是CDN最常采用的方式。
常用的负载调度算法:
(1)轮询:将请求循环分配到服务器集群中的每台有效服务器。
(2)加权轮询:轮询请求,通过服务器的处理能力为服务器分配权重,充分利用资源。
(3)最少连接数:通过动态地将网络请求调度到已建立的链接数最少的服务器上,避免阻塞。
3.3内容分发技术
内容分发是内容从源分发到CDN边缘节点缓存的过程,分为PUSH和PULL。
PUSH是主动分发的技术,一般情况下,由内容管理系统发起,将内容从源站通过HTTP、RTSP等协议推送到各边缘节点。PUSH主要是预分发一些流行度高的内容,针对性地提供内容。
PULL是由用户请求发起的被动式分发技术。当用户发起请求,而内容在本地的边缘缓存中不存在而导致未命中时,缓存服务器使用PULL的方法从上级获取内容。PULL是根据需求进行的分发方式。
4CDN系统的搭建
4.1服务器型号
选用的是IBMBladeCenterE刀片系列,规格为305mm*442*711,备有冗余电源,支持外接NAS/SAN存储,管理口标配1-2个,支持冗余;拥有4个冗余热插拔/冗余网络口,每个为1000MB的网卡。
4.2软硬件配置
本CDN系统使用Squid软件搭建缓存服务器,版本为2.7.STABLE9,采用LRU算法,同时限定磁盘的阈值,对资源进行替换。使用Nginx作本地负载均衡,版本为1.0.9,调度算法采用LeastConnected,实现对缓存服务器的均衡利用。全局负载均衡使用BIND搭建,版本为BIND9,采用的是DNS重定向的策略。
4.3整体架构
根据图3的系统架构图,CDN架构的流程如下:
(1)用户输入域名,请求域名解析,授权DNS将域名解析转向GSLB的IP地址,用户向GSLB发起TCP连接。
(2)GSLB通过用户信息返还距离用户最近的IP节点。
(3)用户根据GSLB返回的IP进行资源请求,访问边缘节点。
(4)边缘节点中的Nginx根据连接数最小的调度策略,转发到缓存服务器Squid。
(5)Squid邻居之间通过ICP协议,查看对方是否有请求的文件,有则返回,没有则向上级骨干节点请求内容。
(6)边缘节点向骨干节点发起资源请求。
(7)骨干节点本地负载均衡向缓存服务器集群请求文件,集群相互查看是否有对应文件,有则返回。
(8)若都没有,请求将返回到源站,源站返回对应的文件,原路返回给用户。
5系统性能测试
测试工具采用的是思科的专业测试仪器思博伦SpirentTestCenter4.00,它通过在测试的PC机上安装客户端,设定HTTP头部和请求文件的脚本,从而模拟真实的用户对CDN系统进行访问,可以实现并发、步进并发和稳定并发等功能。
性能测试从结构上分为3层:边缘节点、骨干节点、中心(源站),分别测试静态网页、音频和视频在并发量和响应时间之间的关系。
6结语
基于现有的硬件基础上,本CDN系统已经能承受上千用户的并发访问网页和音频,而由于视频的码率较高,加之服务器的单网口流量是1000M,限制住了视频的并发,可通过压缩码率或增加网口流量增强并发性能,减少源站压力。因此,开发的CDN系统,不仅实现了CDN大部分加速,而且在有限的硬件资源上承受住了一定用户的网页和音频并发,满足了CDN的性能要求。