协作式缓存集群中面向视频点播服务的协作式缓存方法及系统的制作方法

文档序号:7870929阅读:445来源:国知局
专利名称:协作式缓存集群中面向视频点播服务的协作式缓存方法及系统的制作方法
技术领域
本发明涉及网络存储中的协作式缓存,尤其涉及面向视频点播服务的全局缓存空间利用率改善方法。
背景技术
随着社会的不断发展,需要保存和处理的信息量飞速增长。根据IDC “数字宇宙”的研究,2009年全球数字信息总量已达到800EB,而且还以每年60%速度高速增长,2010年达到1.2ZB,而2020年将达到35ZB。数字信息的爆炸式增长,对存储系统在存储容量、数据可用性以及IO性能等方面提出了越来越高的要求。在互联网上,以多媒体数据为代表的较大文件数据大概占总数据量的50%,而且近年来,该比例有进一步提高的趋势。以视频为代表的多媒体数据是一种非常重要的数据类型,在三网融合的趋势下,视频点播也成为网络存储系统的一种重要的数据访问模式。视频这类数据的特点是每个文件占用空间相对较大(几百MB到几十GB)。视频点播对服务质量有个要求,就是开始点播前可以允许有适当的初始延迟,但点播一旦开始,则不希望发生播放抖动,也就是说希望需要播放的视频数据能够及时到达。在现有的支持视频点播的网络存储系统中,通常包括用于存储视频数据的后端存储服务器,用于提高视频数据的访问速度和质量的多个中间缓存节点。当用户通过终端设备进行视频点播时,收到用户点播请求的缓存节点先检查是否具有所请求的视频数据,如果有,则直接将所请求的视频数据返回给用户,如果没有,可以从后端存储服务器或其他缓存节点取得该视频数据并且将该数据缓存在本地并返回给用户。所采用的多个缓存节点有时也被称为缓存集群。对这类视频数据的访问,存在着两个基本特点:a)对不同文件的访问频率不一致(skew in access pattern):对不同文件的访问频率符合齐普夫(Zipf)分布。图1给出了 100个视频文件的访问频率分布。b)随着时间的推移,文件流行度的演变没有规律性。图2显示了音乐类视频上线之后的流行度演变。在协作式缓存环境下,每个缓存节点同时也是一个视频点播服务器。如果每个文件在多个缓存节点上都放置副本,那么访问频率较低的文件,就会浪费大量的缓存空间。但是如果每个文件只放置一个副本,那么热点文件所在的视频点播服务器,又可能出现性能瓶颈。为了解决视频热点问题(即视频点播服务器的性能瓶颈问题),现有的动态多副本方法在当某些热点文件的访问数量较大时,为这些文件产生多个副本并放置到多个服务器上以分担热点访问的压力。但是,该方法以视频文件整体为单位,每个文件或者全部缓存在同一个服务器上或者全部不缓存在某个服务器上,缓存空间的利用率较差,达不到单副本效果。此外,对于视频文件副本的需求没有很好的预测算法,这样就导致动态多副本方法不能很好地解决热点问题。
也可以采用数据分片方法,将视频数据分成固定大小的分片,然后把同一个视频的多个分片分散到不同的服务器节点上,以分散较热视频文件的带宽需求。虽然在一定程度上提高了缓存空间的利用率,但是处于不同缓存节点上的视频数据在跨节点访问时可能发生抖动,不能满足对视频点播服务质量的要求。

发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,提供一种协作式缓存集群中面向视频点播服务的协作式缓存方法。本发明的目的是通过以下技术方案实现的:一方面,本发明提供了一种协作式缓存集群中面向视频点播服务的协作式缓存方法,包括:步骤I)为所有参与协作的缓存节点分配唯一的缓存节点索引号;步骤2)将每个视频文件在逻辑上分成大小相等的数据分片;步骤3)将每个视频文件的数据分片与缓存节点索引号相关联;步骤4)将每个数据分片缓存在与其关联的缓存节点上。在上述方法中,所述方法还可包括:将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点。在上述方法中,所述方法还可包括:接收到对数据分片的访问请求的缓存节点检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片将其保存在本地缓存中;否则, 直接从本地缓存中读取该数据分片。在上述方法中,所述步骤3)中对于视频文件A,可以将该视频文件的第i个数据分片与缓存节点索引号为j的缓存节点相关联,其中j = i modN,0^j^N-l,0^ i^MA-l,N为参与协作的缓存节点的个数,Ma为视频文件A的数据分片的个数。在上述方法中,所述方法还可包括:在每个缓存节点中保存后继数据分片缓存信息,所述后继数据分片缓存信息是指关于在该缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。在上述方法中,所述方法还可包括: 步骤A,当缓存节点X上的第η个数据分片An被访问时,在该缓存节点X本地查询后继数据分片缓存信息,判断第η+1个数据分片Αη+1是否已经被缓存在与数据分片Αη+1关联的缓存节点Y上,如果没有,则向缓存节点Y发送预取通知,指示缓存节点Y从后端服务器预先读取数据分片Αη+1 ;否则,不发送预取通知;步骤B,缓存节点Y在成功读取数据分片Αη+1后,给数据分片An所在缓存节点X发送预取成功消息;步骤C,缓存节点X在收到缓存节点发送的预取成功的消息之后,更新本地的后继数据分片缓存信息。又一方面,本发明提供了一种协作式缓存集群中面向视频点播服务的协作式缓存系统,包括:用于存储视频文件的存储服务器,每个视频文件在逻辑上分成大小相等的数据分片;
一个或多个缓存节点,每个缓存节点具有唯一的缓存节点索引号并且被配置为缓存与其关联的数据分片;调度器,用于将每个视频文件的数据分片与缓存节点索引号相关联以及用于将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点。上述系统中,所述缓存节点还可被配置为:在接收到对数据分片的访问请求时,检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片将其保存在本地缓存中;否则,直接从本地缓存中读取该数据分片。在上述系统中,所述调度器可被配置为:对于视频文件A,将该视频文件的第i个数据分片与缓存节点索引号为j的缓存节点相关联,其中j=i mod N,O ( j ( N-1,0 ( i ( Ma-1, N为参与协作的缓存节点的个数,Ma为视频文件A的数据分片的个数。在上述系统中,每个缓存节点还可被配置为:保存后继数据分片缓存信息,所述后继数据分片缓存信息是指关于在该缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。在上述系统中,每个缓存节点还可被配置为:当该缓存节点上的数据分片被访问时,在本地查询后继数据分片缓存信息,判断该数据分片的后继数据分片是否已经被缓存在与该后继数据分片关联的缓存节点上,如果没有,则向与该后继数据分片关联的缓存节点发送预取通知,以指示其从后端服务器预先读取该后继数据分片;否则,不发送预取通知;当该缓存节点在收到与该后继数据分片关联的缓存节点发送的预取成功的消息之后,更新本地的后继数据分片缓存信息。在上述系统中,每个缓存节点还可被配置为:当该缓存节点收到来自其他缓存节点的预取通知时,从后端服务器预先读取该预取通知中指定的数据分片,并向发出该预取通知的缓存节点发送预取成功消息。与现有技术相比,本发明的优点在于:采用了协作式数据分片结合协作式数据预取方法,通过协作式分片,使得视频文件的访问压力由所有服务节点均摊,这样解决了视频的热点问题,从而消除了以文件为单位时,热点文件需要多份的问题,提高了缓存空间的利用率。通过协作式数据预取,解决了连续视频分片数据在跨节点访问时可能的较大数据延迟而造成的播放抖动,避免对服务质
量产生影响。


以下参照附图对本发明实施例作进一步说明,其中:图1示出了 100个视频文件的访问频率分布示意图;图2示出了音乐类视频上线之后的流行度演变示意图;图3示出了根据本发明实施例的由N个缓存节点组成的缓存节点环的示意图;图4示出了根据本发明实施例的由3个节点组成的缓存节点环中的数据分布示意图5示出了根据本发明实施例的协作式缓存系统示意具体实施例方式为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。在本发明的一个实施例中,提供了面向视频点播服务的协作式缓存方法,把每个视频都分成大小相等的数据分片,将每个视频的数据分片与参与协作的缓存节点的唯一索引号相关联,从而通过将每个数据分片缓存在与其关联的缓存节点上,使得每个视频的数据分片可均衡地分布在不同的缓存节点上。更具体地,该方法包括:步骤I)为所有参与协作的缓存节点分配唯一的缓存节点索引号。例如,如图3所示,将所有参与协作的N个缓存节点首尾顺序相接组成一个缓存节点环,该环中的每个缓存节点都具有一个唯一的缓存节点索引,比如N个缓存节点所组成的节点环,其缓存节点索引从O到N-1。步骤2)将每个视频文件在逻辑上分成大小相等的数据分片。例如,给定一个分片块大小(chunk size),通过分片块大小,把一个视频A文件逻辑上分成Ma块,其块号为O到Ma-1,即视频A文件的数据分片的序号为O到^-1。例如,分片块大小可以预先指定为32M或64M等。步骤3)将每个视频文件的数据分片与缓存节点索引相关联。也就是建立每个视频文件的数据分片序号与缓存节点索引之间的映射关系。例如,对于N个缓存节点,假设任意文件X的总块数为Mx,那么对于该文件的第i(0 ( i ^ Mx-1)个数据分片,把它缓存在缓存节点索引号为j的缓存节点上。例如,j = imod N,也就是j等于i对N取余数。图4给出了由3个缓存节点(CN0、CN1、CN2)组成的缓存节点环中的数据分布示例。其中,视频文件A有三个分片A0、Al、A2、视频文件B有9个分片B0-B8、视频文件C有6个分片C0-C5,上述数据分片均匀地分布在这三个缓存节点上,例如B6分布在第O (即6mod3)个缓存节点上,B7分布在第I (即7mod3)个节点上,B8 (即7mod3)分布在第2个缓存节点上。这样,可以将对每个视频文件的访问请求均摊到所有的视频点播服务器上,以此避免了单个服务器出现热点的可能。在又一个实施例中,例如也可以通过映射表来建立数据分片与缓存节点之间的关联,例如,当收到应用请求时,通过查询映射表来将该应用请求定向到合适的缓存节点。步骤4)将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点;步骤5)响应于接收到访问请求,缓存节点检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片并将其保存在本地缓存中;否则,直接从本地缓存中读取该数据分片。例如,仍参考图4,当应用要访问视频文件A时,可以根据应用当前访问的视频A中的偏移量来计算出应用当前要访 问的数据属于视频A的哪个数据分片,例如属于Al,则将该访问请求自动定向到与数据分片Al关联的缓存节点CN1,如果缓存节点CNl此时无此数据分片,则它从存储视频文件A的后端存储服务器读取该数据分片,并将此数据分片缓存在了本地的缓存中。经过此次应用访问之后,A文件的数据分片Al就缓存在CNl的缓存中了。可见,通过建立每个视频文件的数据分片与缓存节点索引之间的映射关系,使得应用对特定数据分片的请求可以由与该数据分片关联的缓存节点来提供服务。此外,视频点播服务的一个要求是点播一旦开始,则不希望点播途中出现由于数据获取延迟而产生的播放中断。在类似于机顶盒等只具有很少本地缓存或无本地缓存的环境下,无法采用点播终端大量预取数据的办法来消除视频播放抖动,数据几乎是在播放的同时实时获取。在上述方法中,例如缓存节点X上的某个视频分片Al被点播之后,其直接相邻的后一分片数据A2可能并没有被缓存到与其关联的缓存节点上。当播放器访问数据A2时,如果A2不在与其关联的缓存节点的本地缓存中,则需要把A2首先加载到该缓存节点的本地缓存中,然后再提供给数据访问终端。由于把数据分片从后端存储服务器加载到缓存节点的本地缓存中,可能存在着较大的访问延迟,从而可能造成播放的中断。在本发明的一个实施例中,该协作式缓存方法还包括协作式数据预取的步骤,该协作式数据预取的步骤主要包括:步骤a)在每个缓存节点中保存后继数据分片缓存信息。后继数据分片缓存信息是关于在当前缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。假设视频文件A的第η个分片(记为An)被保存在节点X上,通过数据分片与缓存节点之间的映射关系可以知道该数据分片的后继数据分片,即第η+1个数据分片(记为Αη+1),应该保存在节点Y上。步骤b)当X上的An被访问的时候,可以在节点X本地查询后继数据分片缓存信息,判断数据分片An+1是否已经被缓存在节点Y上,如果没有,则向Y节点发送预取通知,要求Y节点预取An+1分片数据;如果An+1已在Y节点缓存,则不发送预取通知。步骤c)Y节点在成功预取An+1数据分片后,给数据分片An所在节点X发送预取成功消息。步骤d) X节点在收到Y节点发送的An+1预取成功的消息之后,更新本地的后继数据分片缓存信息,以记录Y节点已经缓存了 An+1的信息,使得下次再对An访问时,不会发送多余的让Y节点预取An+1的通知。例如,在参考图3所示的缓存节点环中,视频文件的第i (O < i < Mx-1)个数据分片,被缓存在缓存节点索引号为(i mod N)的缓存节点上。如果视频文件A的第η个分片(记为An)被保存在节点X上,通过数据分片与缓存节点之间的映射关系可以知道该数据分片的后继数据分片,即第η+1个数据分片(记为Αη+1),应该保存在节点X的直接后继节点Y上。这样,每个缓存节点保持其后继节点的分片缓存信息,该信息可以以红黑树的方式保存,以便快速数据搜索。该结构记为file_chunks_info_collection,该集合中用一棵红黑树表示文件的块(即分片)信息,树中的每个节点包含如下信息:fh:代表文件句柄,是键值,唯一标识一个文件;filename表示文件的字符名称;node表示树节点,用于把空洞化的该缓存文件挂载到红黑树上;local_should_cached_chunks_count表示该文件应该在本缓存节点缓存的分片数;local_have_cached_chunks_count表示该文件已在该缓存节点缓存的分片数;
successor_should_cached_chunks_count表不该文件应该在后继缓存节点缓存的分片数;successor_have_cached_chunks_count表示该文件已在后继缓存节点缓存的分片数;successor_chunks_mapping该文件在后继节点上的块位图信息。这样,当X上的An被访问的时候,查询本地的file_chunks_info_collection,看An+1是否在Y节点上存在,如果不存在则发送通知,要求Y节点预取An+1分片数据;如果An+1已在Y节点缓存,则不发送预取通知。Y节点在成功预取An+1数据分片后,给其直接前继节点X发送预取成功消息。X在收到Y发送的An+1预取成功的消息之后,更新本地的file_chunks_info_collection,记录上Y缓存了 An+1的信息,使得下次再对问时,不会发送多余的让Y预取An+1的通知。图5示出了根据本发明一个实施例的面向视频点播服务的协作式缓存系统示意图。该系统包括用于存储视频数据的后端存储服务器,充当视频点播服务器的多个缓存节点,以及调度器。在该系统中为所有参与协作的缓存节点分配唯一的缓存节点索引号,并将每个视频文件在逻辑上分成大小相等的数据分片。所述调度器用于将每个视频文件的数据分片与缓存节点索引相关联,以及用于将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点。例如,所述调度器可以存储每个视频文件的数据分片序号与缓存节点索引之间的映射关系。当收到应用请求时,根据该映射关系将该应用请求定向到合适的缓存节点。收到应用请求的缓存节点检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片以及将该数据分片缓存在本地并返回给用户。在又一个实施例中,每个缓存节点可以保存后继数据分片缓存信息,所述后继数据分片缓存信息是指在该缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。对于每个缓存节点,当该缓存节点上的第η个数据分片An被访问时,在本地查询后继数据分片缓存信息,判断第η+1个数据分片Αη+1是否已经被缓存在与数据分片Αη+1关联的缓存节点Y上,如果没有,则向缓存节点Y发送预取通知,指示缓存节点Y从后端服务器预先读取数据分片Αη+1 ;否则,不发送预取通知。缓存节点Y在成功读取数据分片Αη+1后,给数据分片An所在该缓存节点发送预取成功消息。该缓存节点在收到缓存节点发送的预取成功的消息之后,更新本地的后继数据分片缓存信息。对于每个缓存节点,当该缓存节点收到来自其他缓存节点的预取通知时,从后端服务器预先读取该预取通知中指定的数据分片,并向发出该预取通知的缓存节点发送预取成功消息。本发明的实施例提供的缓存方法和系统可以适合于单个机房或CDN单个边缘节点内部多台服务器提供视频点播的情况,其优点在于:采用协作式数据分片的方法,通过适当的数据分片使得每个视频文件只放置一份数据,与多副本模式相比大大提高了缓存的空间利用率,同时避免了单台服务器出现热点,并提高了缓存的读取命中率,增强了缓存系统整体的扩展性;而且通过协作式数据预取技术,避免了在仅进行简单数据分片情况下可能影响视频点播服务质量的播放抖动问题,不影响视频点播的服务质量。虽然本发明已经通过优选实施例进行了描述,然而本发明并非局限于这里所描述的实施例,在不脱离本发明范围的情况下还包括所作出的各种改变以及变化。
权利要求
1.一种协作式缓存集群中面向视频点播服务的协作式缓存方法,该方法包括: 步骤1)为所有参与协作的缓存节点分配唯一的缓存节点索引号; 步骤2)将每个视频文件在逻辑上分成大小相等的数据分片; 步骤3)将每个视频文件的数据分片与缓存节点索引号相关联; 步骤4)将每个数据分片缓存在与其关联的缓存节点上。
2.根据权利要求1所述的方法,所述方法还包括: 将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点。
3.根据权利要求2所述的方法,所述方法还包括: 接收到对数据分片的访问请求的缓存节点检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片将其保存在本地缓存中;否则,直接从本地缓存中读取该数据分片。
4.根据权利要求1所述的方法,所述步骤3)中对于视频文件A,将该视频文件的第i个数据分片与缓存节点索引号为j的缓存节点相关联,其中j=i mod N,O ^ j ^ N-1,Ma-1, N为参与协作的缓存节点的个数,Ma为视频文件A的数据分片的个数。
5.根据权利要求1所述的方法,所述方法还包括: 在每个缓存节点中保存后继数据分片缓存信息,所述后继数据分片缓存信息是指关于在该缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。
6.根据权利要求5所述的方法,所述方法还包括: 步骤A,当缓存节点X上的第η个数据分片An被访问时,在该缓存节点X本地查询后继数据分片缓存信息,判断第η+1个数据分片Αη+1是否已经被缓存在与数据分片Αη+1关联的缓存节点Y上,如果没有,则向缓存节点Y发送预取通知,指示缓存节点Y从后端服务器预先读取数据分片Αη+1 ;否则,不发送预取通知; 步骤B,缓存节点Y在成功读取数据分片Αη+1后,给数据分片An所在缓存节点X发送预取成功消息; 步骤C,缓存节点X在收到缓存节点发送的预取成功的消息之后,更新本地的后继数据分片缓存信息。
7.一种协作式缓存集群中面向视频点播服务的协作式缓存系统,该系统包括: 用于存储视频文件的存储服务器,每个视频文件在逻辑上分成大小相等的数据分片; 一个或多个缓存节点,每个缓存节点具有唯一的缓存节点索引号并且被配置为缓存与其关联的数据分片; 调度器,用于将每个视频文件的数据分片与缓存节点索引号相关联以及用于将对每个数据分片的访问请求定向到与该数据分片所关联的缓存节点。
8.根据权利要求7所述的系统,所述缓存节点还被配置为: 在接收到对数据分片的访问请求时,检索本地缓存,如果不存在要访问的数据分片,则从后端存储服务器读取该数据分片将其保存在本地缓存中;否则,直接从本地缓存中读取该数据分片。
9.根据权利要求7所述的系统,所述调度器被配置为: 对于视频文件Α,将该视频文件的第i个数据分片与缓存节点索引号为j的缓存节点相关联,其中j=i mod N,O ≤ j ≤ N-1,0 ≤ i ≤ Ma-1, N为参与协作的缓存节点的个数,Ma为视频文件A的数据分片的个数。
10.根据权利要求7所述的系统,每个缓存节点还被配置为: 保存后继数据分片缓存信息,所述后继数据分片缓存信息是指关于在该缓存节点上缓存的数据分片的后继数据分片是否已经被缓存在与其关联的缓存节点上的信息。
11.根据权利要求10所述的系统,每个缓存节点还被配置为: 当该缓存节点上的数据分片被访问时,在本地查询后继数据分片缓存信息,判断该数据分片的后继数据分片是否已经被缓存在与该后继数据分片关联的缓存节点上,如果没有,则向与该后继 数据分片关联的缓存节点发送预取通知,以指示其从后端服务器预先读取该后继数据分片;否则,不发送预取通知; 当该缓存节点在收到与该后继数据分片关联的缓存节点发送的预取成功的消息之后,更新本地的后继数据分片缓存信息。
12.根据权利要求11所述的系统,每个缓存节点还被配置为: 当该缓存节点收到来自其他缓存节点的预取通知时,从后端服务器预先读取该预取通知中指定的数据分片,并向发出该预取通知的缓存节点发送预取成功消息。
全文摘要
本发明协作式缓存集群中面向视频点播服务的协作式缓存方法和系统。其中,将每个视频文件的数据分片与缓存节点的索引号相关联,将每个数据分片缓存在与其关联的缓存节点上。收到访问数据分片的请求时将其定向到与要访问的数据分配关联的缓存节点,并且可以指示其他缓存节点预取下一个数据分片。该方法使得每个视频文件只放置一份数据,提高了缓存的空间利用率和读取命中率,同时避免了单台服务器出现热点,增强了缓存系统整体的扩展性。此外,通过协作式数据预取技术,避免了在仅进行简单数据分片情况下可能影响视频点播服务质量的播放抖动问题,不影响视频点播的服务质量。
文档编号H04N21/222GK103096126SQ20121058747
公开日2013年5月8日 申请日期2012年12月28日 优先权日2012年12月28日
发明者石刘, 张军伟, 刘振军, 韩晓明, 许鲁 申请人:中国科学院计算技术研究所, 天津中科蓝鲸信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1