基于集群的流媒体缓存代理服务器系统的制作方法

文档序号:7589702阅读:124来源:国知局
专利名称:基于集群的流媒体缓存代理服务器系统的制作方法
技术领域
本发明属于计算机流媒体服务技术领域,具体涉及一种基于集群的流媒体缓存代理服务器系统。
背景技术
随着Internet的飞速发展和近年来宽带接入技术的逐渐成熟和普及,视频点播、远程教育、电子商务等Internet流媒体应用变得日益广泛。虽然流媒体对象的播放可以采取与传统Web对象(如HTML页面和GIF图像)类似的方式,即以下载的方式获得后再播放,但是,由于流媒体对象通常比较大,这种先下载后播放的方式导致了客户端较大的播放启动延迟,影响了流媒体服务质量。为了解决这个问题,一种新技术——流式播放技术应运而生。这种技术支持边下载边播放的流媒体服务方式,即用户不必等到整个影片对象都下载完毕,而只需经过几秒至十几秒的启动延迟便可开始播放影片。流式传输技术大大缩短了客户端播放启动延迟,提高了服务质量,是实现流媒体技术的关键,它包括实时流式传输技术和顺序流式传输技术两种。前者凭借其专门面向网络流媒体应用设计而越来越显出优势,现已成为实现流媒体的主流技术。目前,国际上已经制定了支持实时流式传输的标准协议,主要包括实时传输协议/实时传输控制协议RTP(Real Time Transport Protocol)/RTCP(RealTime Transport Control Protocol)、实时流协议RTSP(Real Time StreamingProtocol)和资源预留协议RSVP(Resource Reserve Protocol)等,这些协议是实现实时流式传输的主要标准。事实证明,实时流式播放技术和实时流媒体协议标准的制定大大加快了Internet流媒体应用普及的步伐。
然而,在流媒体应用加速普及的同时,Internet流媒体服务的用户数目也在急剧增长,这不可避免地带来流媒体服务器负载加重、客户端播放响应延迟变大以及主干网络拥塞等问题。针对这些问题的传统解决方法是不断升级流媒体服务器和提高客户端网络接入带宽,但是它们并不能从根本上解决问题服务器的升级速度要低于用户数目的增长速度;提高网络接入带宽并不能缓解主干网络的拥塞问题;对主干网络进行升级则将耗资巨大。
为了解决这个问题,最有效的方法就是采用缓存代理技术,在客户端和网络服务器之间配置一台专用设备——缓存代理服务器,将用户频繁访问的对象缓存在物理上距离客户端较近的缓存代理服务器的存储设备中,一方面直接降低客户端播放延迟,另一方面减少访问原始服务器的次数,从而减轻了原始服务器的工作负载。事实上,缓存代理技术早已作为Internet上的一种标准技术,在WWW(World Wide Web)服务领域得到广泛的应用,然而,现有的缓存代理技术(如著名的开源软件Squid)通常针对的是传统Web对象(如HTML页面和GIF图像)。由于Web对象和流媒体对象在大小上存在着较大差别,而且流媒体应用具有WWW应用所不具有的特征(如强时间相关性、可交互性以及高资源占用率),因此Web缓存代理技术不能直接应用到流媒体缓存代理服务器中。
当前的流媒体缓存代理研究侧重于两个方面(1)流媒体缓存管理策略。现有的流媒体缓存管理策略主要包括前缀缓存策略、基于逻辑段的缓存策略和滑动间隔缓存策略几种。前缀缓存策略的核心思想是既然客户端点播影片通常都是从头(即影片前缀)开始,那么影片的前缀部分就应该具备较高的缓存级别,优先缓存流媒体对象(如影片)的起始部分,必然能有效地降低客户端播放延迟,提高流媒体服务质量;基于逻辑段的缓存策略,即将流媒体对象划分为多个物理段,流媒体对象的存取和置换均以段为基本单位;滑动间隔缓存策略能充分利用用户对流媒体对象访问具有顺序性的特点,将对同一个流对象的相邻请求看作“一对”,然后将这些“对”进行全局排序,并按照较小间隔优先的原则分配内存。基于上述的流媒体缓存管理策略,国外已经研制了许多商用的流媒体缓存代理服务器系统,比较著名的有CacheFlow、Network Applicance、Enron和RealProxy。但是这些产品均采用了单节点结构(如图1),系统可扩展性很差,无法满足大规模客户访问的需求。(2)流媒体缓存体系结构。主要包括MiddleMan、SOCCER和Silo。MiddleMan系统由缓存代理服务器和协调器组成,协调器负责将许多缓存代理服务器虚拟化为可扩展的缓存池,有效提高了系统缓存流媒体数据的能力;SOCCER提出了结合动态和静态缓存的基于逻辑段的缓存策略以及一个自组织的合作式缓存;Silo引入一个分布合作式的流媒体缓存结构,提出了容错的数据放置和替换策略。但是,一方面这些体系结构过多地关注理论,且尚未形成实际可用的原型系统;另一方面,它们均采用了松散耦合的分布式结构,管理效率低,且这种结构使得缓存代理服务器之间进行合作很困难。

发明内容
本发明的目的是克服现有流媒体缓存代理服务器系统的不足,提供一种具有良好可扩展性的基于集群的流媒体缓存代理服务器系统,为MOV、MPEG1、MP3和MPEG4等流行媒体格式的音频/视频流媒体点播服务系统提供缓存代理支持。
本发明提供的一种基于集群的流媒体缓存代理服务器系统,包括控制结点和缓存节点;控制节点用于对客户端的RTSP请求进行调度,在客户端和缓存节点之间转发RTSP消息,并根据缓存节点的缓存负载状况实施全局缓存置换操作;缓存节点用于接收控制节点转发的客户端RTSP请求消息,它根据客户端请求的影片内容查看本机是否已缓存了该影片,在已缓存该影片的情况下,缓存节点替代流媒体服务器直接为客户端提供流服务,其发送的RTP数据流绕过控制节点直接发送到客户端;在缓存节点未缓存影片的情况下,缓存节点模拟客户端的功能与流媒体服务器交互,从服务器获得该影片RTP流数据,并在将RTP流数据转发给客户端的同时,缓存这些数据到本机磁盘中。
上述控制节点包括连接管理模块、RTSP协议分析模块、调度模块、负载收集模块、全局置换模块、媒体对象定位表和缓存节点负载表;连接管理模块在Linux操作系统内核实现,它负责客户端和缓存节点之间RTSP消息的转发,并为控制节点端负载收集模块和全局置换模块提供与缓存节点通信的UDP连接通道;RTSP协议分析模块负责从连接管理模块提供的应用层数据中解析客户端RTSP协议请求DESCRIBE命令并获取其中的会话描述协议信息,并激活调度模块,同时将流媒体对象名作为参数传给该模块分析;调度模块从RTSP协议分析模块获得流媒体对象名,查找媒体对象定位表,如果从表中找到流媒体对象名和对应的缓存节点记录,说明客户端请求的流媒体对象命中这个缓存节点,否则说明新请求到来;在命中的情况下,调度模块激活连接管理模块,并将缓存节点IP地址作为参数传递给该模块,连接管理模块首先创建到该缓存节点的TCP连接,然后将客户端IP地址添加到已提取出的应用层数据末端,最后通过新建立的TCP连接将应用层数据发送到该缓存节点;在未命中的情况下,调度模块调用负载收集模块以获得缓存节点当前负载状况,并激活连接管理模块,连接管理模块与负载因子L最小的缓存节点建立主动TCP连接,之后,该模块在提取出的应用层数据末端添加客户端IP地址,并通过新建立的TCP连接发送给该缓存节点;负载收集模块负责定时与缓存节点通信,以获得缓存节点最新负载信息、计算负载因子L,并及时更新缓存节点负载表;负责在一定数目的缓存节点的空间利用率达到预定阈值时,激活全局置换模块;全局置换模块在系统缓存空间不足时,激活连接管理模块,并通过连接管理模块向缓存节点发出全局置换命令,从已缓存对象中淘汰出流行度低的流媒体对象,以腾出部分空间来缓存新的对象。
上述缓存节点包括RTSP连接管理模块、RTP会话接收管理模块、RTP会话发送管理模块、缓存管理模块、负载监视模块和全局置换接收模块;RTSP连接管理模块通过控制节点构建和管理缓存节点与客户端间的RTSP消息会话,以及缓存节点与流媒体服务器间的RTSP消息会话;通过将两端RTSP会话连接起来,保证了客户端和流媒体服务器之间的RTSP交互能顺利进行;该模块将消息通知与缓存管理模块;RTP会话接收管理模块用于从流媒体服务器接收RTP流数据,并传送缓存管理模块;缓存管理模块为RTSP连接管理模块提供缓存命中性检查,为RTP会话发送管理模块提供RTP流数据,从RTP会话接收管理模块获得RTP流数据并进行缓存,为负载监视模块提供缓存对象利用率和缓存空间利用率数据,接收全局置换接收模块发来的置换命令进行缓存置换操作;RTP会话发送管理模块用于将RTP流数据传输到客户端;负载监视模块负责接收控制节点端负载收集模块发来的负载收集命令,并与缓存管理模块通信以获取缓存对象利用率和缓存空间占用率,并将负载收集结果发送到控制结点端负载收集模块;全局置换接收模块负责接收控制节点端全局置换模块发来的全局置换命令,并调用缓存管理模块进行本机缓存置换操作。
本发明的流媒体缓存代理服务器系统具有以下优点和用途(1)高可扩展性和容错能力由于整个系统采用了集群体系结构,可以通过增加缓存节点的个数,迅速提高系统整体服务吞吐率;同时,这种体系结构还可以避免传统的单节点流媒体缓存代理服务器系统存在的单一失效点问题(一台服务器失效,整个系统失效),具备了很强的容错能力。
(2)流服务能力强、流服务质量高系统将RTSP消息交互和RTP数据传送任务分别均衡到控制节点和缓存节点,有效地减轻了控制节点的负载,避免控制节点成为系统瓶颈,同时提高了系统整体服务能力;控制节点采用了基于内容的流调度策略,相比较传统的基于连接数目的调度策略,能明显提高缓存节点的缓存命中率,从而减少客户端直接访问流媒体服务器的次数、降低客户端播放响应延迟、提高流服务质量。
(3)缓存管理效率高系统在控制节点上维护了媒体对象定位表和缓存节点负载表。利用这两个表,实现了对集群缓存节点缓存空间的统一分配和回收,集群中所有缓存节点机缓存空间在逻辑上构成了全局缓存空间,从而显著提高了缓存空间的管理和使用效率。针对现有缓存管理系统的不足,本发明提供了一种基于逻辑段的前后缀结合的缓存管理策略,它具备基于逻辑段的缓存管理策略和前缀缓存管理策略的所有优点;另外,针对该策略并结合集群体系结构特征提供了一种全局缓存置换算法,该算法有效地提高了缓存置换操作的性能,使缓存管理效率明显得到提高。
(4)能支持缓存多种常用流媒体文件格式由于采用缓存RTP包而不是缓存原始流数据的工作方式,整个系统不会受到媒体压缩格式不同的限制,具有较强的通用性。


图1为传统的单节点流媒体缓存代理服务器系统结构;图2为基于集群的流媒体缓存代理服务器系统结构;图3为控制节点模块结构;图4为缓存节点模块结构;图5为基于逻辑段的前后缀结合的缓存;图6为缓存管理模块结构;
图7为缓存目录层次结构;图8为元数据管理的层次结构;图9元数据字段格式。
具体实施例方式
下面结合附图对本发明作进一步详细的说明。
从工作原理划分,集群流媒体缓存代理服务器系统分为两大部分控制结点和缓存节点。如图2所示,控制节点4是客户端6和缓存节点5.1-5.N之间的RTSP消息交换机它接收客户端6的RTSP请求,根据请求影片内容的不同,将该RTSP请求调度到合适的缓存节点(假定调度到缓存节点5.1)。缓存节点5.1收到RTSP请求后,根据其缓存中是否存在客户端所请求影片的拷贝决定是否将该RTSP请求转发到流媒体服务器7。如果缓存节点5.1已经缓存了客户端6请求的影片,则直接发送对该客户端RTSP请求的RTSP响应给控制结点4,否则转发流媒体服务器7的RTSP响应给控制结点4。控制节点4收到缓存节点5.1发过来的RTSP响应后,将该响应转发给客户端6,至此,便完成了一次RTSP消息交换。由上所述,控制节点4主要负责对客户端的RTSP请求进行调度,以及在客户端6和缓存节点5.1-5.N之间转发RTSP消息。此外,控制节点4还负责根据缓存节点5.1-5.N的缓存负载状况实施全局缓存置换操作。
缓存节点5.1-5.N的功能是接收控制节点4转发的客户端RTSP请求消息,它们首先根据客户端6请求的影片内容查看本机是否已缓存了该影片。在已缓存该影片(即缓存命中)的情况下,缓存节点5.1-5.N替代流媒体服务器7直接为客户端6提供流服务,其发送的RTP数据流绕过控制节点4直接发送到客户端6(如图2中缓存节点5.1-5.N指向客户端6的实线箭头所示),这样避免了RTSP控制信息和大量的RTP数据流均经由控制节点4转发给客户端6而造成控制结点4成为系统通信瓶颈的问题,从而有效提高了整个系统的服务吞吐率和系统可扩展性。在缓存节点5.1-5.N未缓存影片(即缓存失效)的情况下,缓存节点5.1-5.N将模拟客户端6的功能与流媒体服务器7交互,从服务器获得该影片RTP流数据,并在将RTP流数据转发给客户端6的同时,缓存这些数据到本机磁盘中,以便下次收到相同RTSP请求时能直接为客户端6提供流服务。
下面分别介绍本系统各部分的功能控制节点为避免内核层与应用层之间频繁的数据拷贝以及上下文切换开销,本系统在Linux-2.4.20操作系统内核网络BSD(Berkly Software Distribution)插口层实现了控制结点模块。如图3所示,控制节点主要由下列部分构成(1)连接管理模块12;(2)RTSP协议分析模块8;(3)调度模块9;(4)负载收集模块10;(5)全局置换模块11;(6)媒体对象定位表;(7)缓存节点负载表。其功能与相互关系描述如下连接管理模块12负责在Linux内核网络BSD插口层著名端口554(用于流媒体服务)上监听客户端连接请求,接收客户端发出的TCP连接请求(RTSP协议是一种应用层协议,必须通过TCP协议传输),并从该连接后续网络包中提取出应用层数据(即TCP协议头后所有数据)。随后,它激活RTSP协议分析模块8,并将提取出的应用层数据交由RTSP协议分析模块8处理。此外,该模块还负责与调度模块9选中的缓存节点主动建立TCP连接,并将已提取的相关应用层数据通过新建TCP连接发送到该缓存节点。连接管理模块12还为负载收集模块10和全局置换模块11提供能与缓存节点通信的UDP连接。
RTSP协议分析模块8负责从连接管理模块12提供的应用层数据中解析客户端RTSP协议请求DESCRIBE命令并获取其中的SDP(会话描述协议)信息,从而得到客户端点播的流媒体对象(如影片)名称,然后激活调度模块9,同时将流媒体对象名作为参数传给该模块分析。特别说明的是,该模块只分析RTSP协议请求中的DESCRIBE命令,不分析RTSP协议请求的其它命令(如SETUP,PLAY,PAUSE,TEARDOWN等)。
调度模块9该模块从RTSP协议分析模块8获得流媒体对象名后,首先查找媒体对象定位表13,如果从表中找到流媒体对象名和对应的缓存节点记录,说明客户端请求的流媒体对象命中这个缓存节点,否则说明新请求到来。在命中的情况下,调度模块9激活连接管理模块12,并将缓存节点IP地址作为参数传递给该模块,连接管理模块12首先创建到该缓存节点的TCP连接,然后将客户端IP地址添加到已提取出的应用层数据末端,最后通过新建立的TCP连接将应用层数据发送到该缓存节点;在未命中的情况下,调度模块9调用负载收集模块10以获得缓存节点当前负载状况(系统综合考虑缓存节点已有连接数目C和缓存空间利用率U,负载因子L的计算方法L=C×U),并激活连接管理模块12,连接管理模块12与负载因子L最小的缓存节点建立主动TCP连接,之后,该模块在提取出的应用层数据末端添加客户端IP地址,并通过新建立的TCP连接发送给该缓存节点。
负载收集模块10负责定时与缓存节点负载监视模块18通信以获得缓存节点最新负载信息并计算负载因子L以及时更新缓存节点负载表14。该模块主要负责为调度模块9提供缓存节点负载状况,以便在全局缓存失效(即客户端请求的流媒体对象未命中媒体对象定位表13)的情况下为其提供调度依据。此外,负载收集模块还负责在一定数目的缓存节点的空间利用率达到预定阈值时,激活全局置换模块11。
全局置换模块11由于缓存节点并非具备无限大小的缓存空间,所以当缓存空间耗尽时,必须进行缓存置换,即有选择地从已缓存对象中淘汰一批流行度较低的流媒体对象,以腾出部分空间来缓存新的对象。在描述全局置换模块11之前,首先对全局置换策略进行说明由于采用了集群体系结构,且控制节点上保存了缓存节点负载表14,利用这些信息,本系统采用了一种全局缓存置换策略,该策略的核心思想和基本原理是将集群中所有缓存节点的缓存空间视为一个统一的全局缓存空间,由控制节点进行统一分配和回收。体现在置换策略上就是尽量推迟比较“忙碌”的节点机上的置换操作,而加快那些比较“清闲”的节点机上的置换操作。其依据是如果节点机“忙碌”,说明其缓存的对象普遍比较流行,不应该立即将这些对象置换出缓存;反之则说明其缓存对象已经过时,应该腾出缓存空间给新对象使用才合理。
显然,全局缓存置换策略的关键问题就是如何区分“清闲”和“忙碌”状况。控制节点综合考虑了两个因素(1)缓存对象利用率;(2)缓存空间利用率。
设缓存对象利用率为U,缓存空间利用率为V,节点机当前正在使用的缓存对象数目为O,已缓存对象总数为T,已经缓存文件大小为S,可用缓存空间大小为P,则有以下定义U=O/TV=S/P全局置换策略的第一步是控制节点负载收集模块10定时向缓存节点负载监视模块18发出负载信息收集的请求,缓存节点收到请求后,统计U和V值,并将这些值返回给负载收集模块10,负载收集模块10首先用U和V更新缓存节点负载表14中各个缓存节点负载信息,再查看各缓存节点的V值大小,如果同时有90%以上的缓存节点V值大于一个预定的阈值Y,则说明集群全局缓存空间利用率已经非常高,置换操作时机成熟,接着负载收集模块10在所有V值大于Y的缓存节点中寻找U值小于阈值Z的缓存节点,并激活全局置换模块11,同时将U值小于Z的缓存节点IP以参数的形式传递给全局置换模块11。
全局置换策略的第二步将在描述缓存节点端全局置换接收模块19后再说明。
全局置换模块11的功能是激活连接管理模块12,并通过连接管理模块12向缓存节点发出全局置换命令(为提高通信效率,置换命令通过UDP协议发送)。
缓存节点缓存节点主要由五个部分组成①RTSP连接管理模块16;②RTP会话发送管理模块17;③RTP会话接收管理模块20;④缓存管理模块15;⑤负载监视模块18;(6)全局置换接收模块19,如图4所示。下面详细说明各模块功能及其相互关系。
RTSP连接管理模块16该模块包含RTSP服务器子模块16.1和RTSP客户端子模块16.2。RTSP服务器子模块16.1负责和控制节点建立TCP通道,经由控制结点与客户端交互建立RTSP会话,并管理维护RTSP会话。RTSP客户端子模块16.2则负责与流媒体服务器建立RTSP会话,以及管理和维护RTSP会话。根据RTSP协议规范,每个RTSP会话都由一个全局唯一的RTSP会话ID来标识,RTSP连接管理模块16通过将两端会话ID保存在同一结构中,从而将其与客户端和流媒体服务器两端分别建立的RTSP会话连接起来,形象的说,它负责建立一条RTSP消息通道,以保证客户端和流媒体服务器之间的RTSP交互能顺利进行。RTSP连接管理模块16与缓存管理模块15之间通信的目的有两个1)当RTSP客户端子模块16.2收到流媒体服务器发来的DESCRIBE响应消息后,通知缓存管理系统15将响应消息中提取出来的SDP信息缓存起来;2)当RTSP服务器子模块16.1收到从控制节点转发过来的客户端RTSP消息——PLAY请求命令时,通知缓存管理系统15进行缓存命中性检查,并根据检查结果确定下一步操作。
RTP会话发送管理模块17该模块负责将RTP流数据传输到客户端6,又可分为RTP音频发送子模块17.1和RTP视频发送子模块17.2。RTP音频发送子模块17.1负责发送RTP音频流数据给客户端;RTP视频发送子模块17.2则负责发送RTP视频流数据给客户端,如图4所示。当RTSP服务器子模块16.1收到客户端发来的RTSP消息——SETUP请求命令时,在缓存命中的情况下,RTP会话发送管理模块17中RTP音频发送子模块17.1与客户端6建立RTP音频会话,同时,RTP视频发送子模块17.2与客户端6建立RTP视频会话,之后,流媒体缓存代理服务器便通过这两个RTP会话将流媒体数据传送到客户端6。
RTP会话接收管理模块20该模块负责从流媒体服务器7接收RTP流数据,又可分为RTP音频接收子模块20.1和RTP视频接收子模块20.2。RTP音频接收子模块20.1负责从流媒体服务器7接收RTP音频流数据;RTP视频接收子模块20.2则从流媒体服务器7接收RTP视频流数据,如图4所示。当RTSP服务器子模块16.1收到客户端发来的RTSP消息——SETUP请求命令时,在缓存未命中的情况下,RTP会话发送管理模块17中RTP音频发送子模块17.1与客户端6建立RTP音频会话,同时,RTP视频发送子模块17.2与客户端6建立RTP视频会话,然后,RTSP客户端子模块16.2适当修改SETUP请求命令的内容(如将SETUP请求命令中会话ID修改为RTSP客户端子模块16.2与流媒体服务器之间RTSP会话ID,以及重新选择一个RTP通信端口,并将SETUP命令中指明的RTP端口改为新选择的这个端口),再向流媒体服务器7发出新的SETUP命令。在RTSP客户端模块16.2收到服务器SETUP响应后,RTP会话接收管理模块20中RTP音频接收子模块20.1与流媒体服务器7建立RTP音频会话,同时,RTP视频接收子模块20.2与流媒体服务器7建立RTP视频会话(如图4所示)。这样,连接客户端和流媒体服务器的RTP数据通道就成功地建立了。
基于逻辑段的前后缀结合缓存策略在描述缓存管理模块之前,首先介绍本系统所采取的缓存策略。本系统采用了基于RTP协议包的缓存方法,即缓存节点在收到服务器端发送的RTP协议数据包之后,不是缓存有效负荷(即流媒体对象数据),而是直接将收到的RTP数据包按序存放在流媒体缓存文件中。使用这种缓存方式,所有的媒体格式在缓存代理服务器看来都相同,巧妙地避开了缓存原始数据方式中必须区别对待不同媒体格式的弊端。
图5描绘了本系统基于逻辑段的前后缀结合缓存策略。它不是在物理上将流媒体对象强行分为不同的段文件分别存储,而是引入逻辑段的概念,将属于相同流媒体对象的逻辑段存放在同一缓存文件中;从影片起始部分开始缓存,新到数据的起始播放时间必须等于已缓存影片数据段的终止播放时间,否则不缓存这段数据。这种策略有效的保证了缓存中的数据没有“空洞”,从而在一定程度上保证了缓存流服务的连续性和同步性。逻辑上属于同一个流媒体对象的段均存放在同一个缓存文件中,前缀部分段长设为K秒,后缀部分段长设为N×K(N为整数),后缀段长之所以比前缀段长长主要基于以下考虑1)前缀的缓存优先级要高于后缀,置换粒度也应该比后缀置换粒度小;2)后缀段较长有利于在缓存空间紧张时减少置换操作次数,从而加速缓存空间回收速度;3)后缀段较长,段总数目相应减少,有利于减少元数据管理上的开销。此外,后缀段长度值设定为前缀段长度值的整数倍数是因为这样能加快在段元数据表中进行定位的速度。
缓存管理模块15缓存管理模块是缓存节点的核心,该模块又可分为缓存文件管理子模块21、元数据管理子模块25、置换管理子模块22、故障恢复子模块23以及元数据表24,模块内部结构和通信联系如图6所示。
其中,缓存文件管理子模块21负责构建、维护和管理磁盘中的缓存目录和文件结构,为加快缓存对象的搜索速度,本系统采用了分层缓存目录结构,如图7所示,所有的缓存对象都统一存放在缓存文件根目录下。每个流媒体对象(如影片)由一个单独的缓存目录进行管理。
元数据表24用来保存系统元数据信息。系统元数据信息包括影片元数据、段元数据和包元数据三个层次。各个层次元数据间的组织结构和联系如图8所示,各层次元数据所包含的具体信息字段如图9所示。
元数据管理子模块25负责元数据的构造(包括影片元数据、段元数据和包元数据)和维护,元数据管理在缓存管理模块1 5中具有重要作用,通过按层次查找元数据信息可以判断客户端请求是否命中缓存,如果命中缓存,则可判断是部分命中缓存还是完全命中缓存。
为实现系统容错,元数据管理子模块25周期性地将内存中的元数据信息备份到磁盘文件中。当系统崩溃后重启时,缓存管理系统15的故障恢复子模块23便可通过磁盘中备份的元文件重构内存元数据信息。
元数据管理子模块25将元数据在逻辑上分为三个层次1)影片级元数据;2)段级元数据;3)RTP包级元数据。元数据管理子模块25将这些元数据存放在元数据表24中,图8描述了三个层次的元数据管理结构以及各层次间的关系。内存中每一元数据层次均与磁盘中的元文件相对应,这些元文件保存的内容和其对应的内存元数据完全相同。当系统崩溃重启时,元文件可用来为故障恢复子模块23提供恢复内存元数据所需的信息。下面分别介绍这三个层次。缓存中所有影片元数据信息通过一个双向链表来管理,该链表的每个节点对应一个影片对象;每个影片元数据节点均指向一个段元数据数组,该数组每个节点对应了缓存流媒体文件中的一个逻辑段;每个段元数据节点又指向一个RTP包元数据链表,此链表主要用于在其所属逻辑段中定位RTP包的位置。
置换管理子模块22负责接收全局置换接收模块19发来的置换命令,并为缓存中每个流媒体对象计算置换因子(具体计算方法将在后文描述全局置换策略的第二步时给出),按照置换因子由小至大的顺序淘汰缓存中的流媒体对象,直到获得缓存新对象的足够缓存空间。
故障恢复子模块23负责在系统崩溃重启时读取磁盘中的元文件,校验元文件和流媒体对象数据的一致性,并恢复内存中相应的元数据管理信息。
负载监视模块18该模块负责接收控制节点端负载收集模块10发来的负载收集命令,并与缓存管理模块15中元数据管理子模块25和缓存文件管理子模块21通信以获取缓存对象利用率和缓存空间占用率,并将负载收集结果发送到控制结点端负载收集模块10。
全局置换接收模块19该模块负责接收控制节点端全局置换模块11发来的全局置换命令,并调用缓存管理模块15中的置换管理子模块22进行本机缓存置换操作。前文讨论控制节点端全局置换模块11时已经详细说明了本系统全局置换策略的第一步,下面继续说明全局置换策略的第二步。
全局置换策略的第二步是缓存节点端全局置换接收模块19收到控制节点端全局置换模块发来的置换命令之后,激活缓存管理模块15中的置换管理子模块22,该模块针对缓存节点本地缓存中的每个流媒体对象计算置换因子,计算公式如下R(v)=P(v)×B(v)S(v)]]>
其中,P(v)表示影片v的流行度,B(v)表示缓存节点从流媒体服务器预取影片v时的平均网络延迟,S(v)表示影片v所占用缓存空间大小。流行度的计算通常采用LFU算法,即通过历史访问频度来预测未来访问频度。但是影片流行度在某些时候也会发生较大的变化,这将导致有些曾被多次访问的流媒体对象凭借其较高的历史访问次数记录而不合理地占据缓存空间(即“缓存污染”),导致新影片没有空间可以缓存,这种情况显然是不合理的。本系统在计算流媒体对象流行度时,创新性地综合考虑长期流行度和近期流行度。所谓长期流行度,即自流媒体对象被缓存以来,该对象被访问的频度;近期流行度表示该对象最近一段时间被访问的频度。P(v)的计算公式如下P(v)=Pl(v,n)×(1-α)+Ps(v,n,l)×αPl(v,n)=Σk=0nRkTn-T0]]>Ps(v,n,l)=Σk=lnRkTn-Tl]]>其中,Pl(v,n)表示影片v的长期流行度,参数n表示影片v被点播的次数,T0表示影片v第一次被点播的时刻,Tn表示影片最近一次被点播的时刻,Rk表示影片v在第k次被客户点播时,此次会话正常结束或异常终止前逻辑段被访问的数目,通过对Rk值从k=0至n求和,便可得到从T0时刻至Tn时刻逻辑段被访问的总次数,该值除以Tn与T0的时间差值就得到从影片v被缓存以来被访问的频率。系统不使用对整个影片访问的次数而是采用对逻辑段被访问的次数作为访问频率计算依据,主要原因在于以段为记数对象更能准确的估算出该影片的真正受欢迎程度。
Ps(v,n,l)表示影片v的近期流行度,参数n和Rk的意义和Pl(v,n)计算式中的相同,Tl表示第l次被点播的时间,第l次则指上一次置换操作执行后的首次访问。对Rk从k=l至n求和,便可得到从上一次置换操作以来影片v的逻辑段被访问的累计次数总和。于是,Ps(v,n,l)则表示在最近一段时间内影片v的访问频率。
α是平衡因子,其值小于1。通过调整α值,可以调整长期流行度和近期流行度之间的相对重要程度。B(v)的值可通过以下公式计算得到B(v)=Σk=0itk+Σx=i+1ytxi+(y-i)×β]]>其中,i表示前缀末段编号,y表示后缀末段的编号,tk表示从流媒体服务器预取段k时所花的时间,上式的分子部分表示获取影片v的所有段所需的时间总和,β表示后缀段大小与前缀段大小的比值,因此分母表示影片v包含多少个前缀段大小的单元。分析可知,B(v)表示从原始服务器获得影片的一个段平均所需的时间。通过该值可以比较准确的估算平均网络延迟,也即估计出获取影片的代价。S(v)就是缓存文件的大小。
置换管理子模块22为缓存的每个流媒体对象计算置换因子之后,按置换因子大小对流媒体对象进行升序排序,依次从头开始淘汰流媒体对象的后缀段,直到有足够的空间用来缓存新对象为止。
下面举例说明本系统实施过程中的配置情况。
采用16个节点机构建一个视频点播系统,包括一个客户端、一个流媒体服务器,集群流媒体缓存代理服务器系统和客户端。其基本配置如表1所示。
表1系统的配置例示

其中,一台配置成为客户端,一台配置成为流媒体服务器,一台主机作为控制节点,其余13台主机作为缓存节点。具体实施如下节点机1充当客户端,节点2为流媒体服务器,节点3为控制节点,节点4至节点16充当缓存节点。
流媒体服务器软件采用苹果公司的Darwin Streaming Server系统,客户端采用苹果公司的QuickTime 6.0流媒体播放软件。客户端播放器中必须设定RTSP代理服务器地址为控制节点IP地址,以保证客户端的RTSP请求能正确发送到控制节点。流媒体服务器Darwin Streaming Server系统中必须预先存放客户端点播的影片。
权利要求
1.一种基于集群的流媒体缓存代理服务器系统,包括控制结点(4)和缓存节点(5.1,5.2,…5.N);控制节点(4)用于对客户端的RTSP请求进行调度,在客户端和缓存节点(5.1-5.N)之间转发RTSP消息,并根据缓存节点(5.1-5.N)的缓存负载状况实施全局缓存置换操作;缓存节点(5.1-5.N)用于接收控制节点(4)转发的客户端RTSP请求消息,它根据客户端请求的影片内容查看本机是否已缓存了该影片,在已缓存该影片的情况下,缓存节点(5.1-5.N)替代流媒体服务器(7)直接为客户端提供流服务,其发送的RTP数据流绕过控制节点(4)直接发送到客户端;在缓存节点(5.1-5.N)未缓存影片的情况下,缓存节点(5.1-5.N)模拟客户端的功能与流媒体服务器(7)交互,从服务器获得该影片RTP流数据,并在将RTP流数据转发给客户端(6)的同时,缓存这些数据到本机磁盘中。
2.根据权利要求1所述的系统,其特征在于控制节点(4)包括连接管理模块(12)、RTSP协议分析模块(8)、调度模块(9)、负载收集模块(10)、全局置换模块(11)、媒体对象定位表和缓存节点负载表;连接管理模块(12)在Linux操作系统内核实现,它负责客户端和缓存节点之间RTSP消息的转发,并为控制节点端负载收集模块(10)和全局置换模块(11)提供与缓存节点通信的UDP连接通道;RTSP协议分析模块(8)负责从连接管理模块(12)提供的应用层数据中解析客户端RTSP协议请求DESCRIBE命令并获取其中的会话描述协议信息,并激活调度模块(9),同时将流媒体对象名作为参数传给该模块分析;调度模块(9)从RTSP协议分析模块(8)获得流媒体对象名,查找媒体对象定位表(13),如果从表中找到流媒体对象名和对应的缓存节点记录,说明客户端请求的流媒体对象命中这个缓存节点,否则说明新请求到来;在命中的情况下,调度模块(9)激活连接管理模块(12),并将缓存节点IP地址作为参数传递给该模块,连接管理模块(12)首先创建到该缓存节点的TCP连接,然后将客户端IP地址添加到已提取出的应用层数据末端,最后通过新建立的TCP连接将应用层数据发送到该缓存节点;在未命中的情况下,调度模块(9)调用负载收集模块(10)以获得缓存节点当前负载状况,并激活连接管理模块(12),连接管理模块(12)与负载因子L最小的缓存节点建立主动TCP连接,之后,该模块在提取出的应用层数据末端添加客户端IP地址,并通过新建立的TCP连接发送给该缓存节点;负载收集模块(10)负责定时与缓存节点通信,以获得缓存节点最新负载信息、计算负载因子L,并及时更新缓存节点负载表(14);负责在一定数目的缓存节点的空间利用率达到预定阈值时,激活全局置换模块(11);全局置换模块(11)在系统缓存空间不足时,激活连接管理模块(12),并通过连接管理模块(12)向缓存节点发出全局置换命令,从已缓存对象中淘汰出流行度低的流媒体对象,以腾出部分空间来缓存新的对象。
3.根据权利要求1或2所述的系统,其特征在于缓存节点(5)包括RTSP连接管理模块(16)、RTP会话接收管理模块(20)、RTP会话发送管理模块(17)、缓存管理模块(15)、负载监视模块(18)和全局置换接收模块(19);RTSP连接管理模块(16)通过控制节点(4)构建和管理缓存节点(5)与客户端间的RTSP消息会话,以及缓存节点(5)与流媒体服务器(7)间的RTSP消息会话;通过将两端RTSP会话连接起来,保证了客户端和流媒体服务器之间的RTSP交互能顺利进行;该模块将消息通知与缓存管理模块(15);RTP会话接收管理模块(20)用于从流媒体服务器(7)接收RTP流数据,并传送缓存管理模块(15);缓存管理模块(15)为RTSP连接管理模块(16)提供缓存命中性检查,为RTP会话发送管理模块(17)提供RTP流数据,从RTP会话接收管理模块(20)获得RTP流数据并进行缓存,为负载监视模块(18)提供缓存对象利用率和缓存空间利用率数据,接收全局置换接收模块(19)发来的置换命令进行缓存置换操作;RTP会话发送管理模块(17)用于将RTP流数据传输到客户端(6);负载监视模块(18)负责接收控制节点端负载收集模块(10)发来的负载收集命令,并与缓存管理模块(15)通信以获取缓存对象利用率和缓存空间占用率,并将负载收集结果发送到控制结点端负载收集模块(10);全局置换接收模块(19)负责接收控制节点端全局置换模块(11)发来的全局置换命令,并调用缓存管理模块(15)进行本机缓存置换操作。
4.根据权利要求3所述的系统,其特征在于缓存管理模块(15)包括缓存文件管理子模块(21)、元数据管理子模块(25)、置换管理子模块(22)、故障恢复子模块(23)以及元数据表(24);其中缓存文件管理子模块(21)用于构建、维护和管理磁盘中的缓存目录和文件结构;元数据表(24)用于保存系统元数据信息,包括影片元数据、段元数据和包元数据;元数据管理子模块(25)用于元数据的构造和维护;置换管理子模块经(22)用于接收全局置换接收模块(19)发来的置换命令,并为缓存中每个流媒体对象计算置换因子,按照置换因子由小至大的顺序淘汰缓存中的流媒体对象,直到获得足够的缓存空间缓存新对象为止;故障恢复子模块(23)用于在系统崩溃重启时读取磁盘中的元文件,校验元文件和流媒体对象数据的一致性,并恢复内存中相应的元数据管理信息。
5.根据权利要求3所述的系统,其特征在于全局置换模块(11)和全局置换接收模块(19)采用下述全局置换策略进行全局置换策略的第一步是控制节点负载收集模块(10)定时向缓存节点负载监视模块(18)发出负载信息收集的请求,缓存节点收到请求后,按下述公式(1)和(2)统计缓存对象利用率U和缓存空间利用率V,并将这些值返回给负载收集模块(10),负载收集模块(10)首先用U和V更新缓存节点负载表(14)中各个缓存节点负载信息,再查看各缓存节点的V值大小,如果同时有90%以上的缓存节点V值大于一个预定的阈值Y,负载收集模块(10)在所有V值大于Y的缓存节点中寻找U值小于阈值Z的缓存节点,并激活全局置换模块(11),同时将U值小于Z的缓存节点IP以参数的形式传递给全局置换模块(11);U=O/T (1)V=S/P (2)其中,O为节点机当前正在使用的缓存对象数目,T为已缓存对象总数,S为已经缓存文件大小,P为可用缓存空间大小;全局置换策略的第二步是缓存节点端全局置换接收模块(19)收到控制节点端全局置换模块发来的置换命令之后,激活缓存管理模块(15)中的置换管理子模块(22),该模块针对缓存节点本地缓存中的每个流媒体对象计算置换因子R(v),计算公式如下R(v)=P(v)×B(v)S(v)]]>其中,P(v)表示影片v的流行度,B(v)表示缓存节点从流媒体服务器预取影片v时的平均网络延迟,S(v)表示影片v所占用缓存空间大小。
6.根据权利要求3所述的系统,其特征在于RTSP连接管理模块(16)包括RTSP服务器子模块(16.1)和RTSP客户端子模块(16.2);RTSP服务器子模块(16.1)负责和控制节点建立TCP通道,经由控制结点与客户端交互建立RTSP会话,并管理维护RTSP会话;RTSP客户端子模块(16.2)则负责与流媒体服务器建立RTSP会话,以及管理和维护RTSP会话。
7.根据权利要求6所述的系统,其特征在于RTP会话接收管理模块(20)分为RTP音频接收子模块(20.1)和RTP视频接收子模块(20.2);RTP会话发送管理模块(17)分为RTP音频发送子模块(17.1)和RTP视频发送子模块(17.2)。
全文摘要
本发明公开了一种集群流媒体缓存代理服务器系统,包括控制节点和缓存节点。控制节点在Linux内核层实现,包括连接管理模块、调度模块、负载收集模块和全局置换模块。缓存节点则包括RTSP连接管理模块、RTP会话管理模块、缓存管理模块、负载监视模块以及全局置换接收模块。本系统充分利用集群体系结构所具备的优势,实现了由集群内各个缓存节点缓存空间所构成的逻辑上的全局缓存空间,提高了缓存空间管理和使用的效率;系统实现了一种基于逻辑段的前后缀结合的缓存管理策略,该策略综合了基于逻辑段的缓存技术和前缀缓存技术的优点,能有效地提高缓存管理效率。本系统与现有的流媒体缓存代理服务器系统相比,具有能同时支持更多的并发流、系统可扩展性好、能缓存的流媒体文件格式多及缓存管理效率高等优点。
文档编号H04N7/173GK1595905SQ200410013419
公开日2005年3月16日 申请日期2004年7月4日 优先权日2004年7月4日
发明者金海 , 杨志玲, 范开钦, 储杰, 韩宗芬 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1