一种缓存方法及装置与流程

文档序号:18029103发布日期:2019-06-28 22:27阅读:167来源:国知局
一种缓存方法及装置与流程

本申请涉及但不限于数据处理技术,尤其涉及一种缓存方法及装置。



背景技术:

为了提高数据的访问效率,一般会在磁盘存储前增加内存或是ssd(solidstatedrives,固态硬盘)的多级缓存区域。但是由于这部分存储空间相对于磁盘存储空间要小很多,所以需要通过一定的算法来提高缓存区域的利用率。目前常用的算法包括fifo(firstinputfirstoutput,先进先出)、lru(leastrecentlyused,最近最少使用)、lfu(leastfrequentlyused,最近最不常用)、s4lru等。其中,fifo在需要添加缓存区域访问未命中的数据时,淘汰最先进队列的数据;lru维护一个按访问次数排序的优先队列(小顶堆),每次需要淘汰时淘汰队列头部(访问次数最少的)数据;lfu维护一个先按访问次数再按访问时间排序的优先队列;s4lru通过多层lru来实现。这些算法通常基于数据的访问次数和访问时间来淘汰缓存区域内的数据,然而,在一些场景下,上述算法的处理无法确保缓存区域的ohr(objecthitratio,对象命中率)。



技术实现要素:

以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。

本申请实施例提供一种缓存方法及装置,能够在确保缓存区域的bhr(bithitratio,字节命中率)的前提下,提高缓存区域的ohr(objecthitratio,对象命中率)。

第一方面,本申请实施例提供一种缓存方法,包括:

根据访问请求所请求的对象的大小,计算所述对象的缓存概率;

根据所述对象的缓存概率,确定是否将所述对象写入缓存区域。

在示例性实施方式中,所述根据访问请求所请求的对象的大小,计算所述对象的缓存概率,可以包括以下之一:

根据访问请求所请求的对象的大小,确定所述对象所属的对象集合;根据缓存区域内所述对象集合的访问占比和存储占比,计算所述对象的缓存概率;

根据访问请求所请求的对象的大小,确定所述对象所属的对象集合;根据缓存区域内所述对象集合的累积访问占比和累积存储占比,计算所述对象的缓存概率。

在示例性实施方式中,所述根据缓存区域内所述对象集合的访问占比和存储占比,计算所述对象的缓存概率,可以包括:

根据下式计算所述对象的缓存概率:

p=p’×(α×a+(1-α)×s);

其中,p表示所述对象的缓存概率,α表示权重因子,α大于0且小于1,a表示所述对象所属的对象集合的访问占比,s表示所述对象所属的对象集合的存储占比,p’表示根据所述对象的访问频次和访问时间中至少之一确定的缓存替换概率。

在示例性实施方式中,所述根据所述对象的缓存概率,确定是否将所述对象写入缓存区域,可以包括:

在所述对象的缓存概率大于概率阈值时,确定将所述对象写入缓存区域;

在所述对象的缓存概率小于或等于概率阈值时,确定不在缓存区域缓存所述对象;

其中,所述概率阈值的初始值为0,在所述缓存区域写满后,所述概率阈值的取值为所述缓存区域内所有对象的缓存概率中的最小值。

在示例性实施方式中,上述方法还可以包括:

若所述缓存区域中不存在所述访问请求所请求的对象且所述对象的大小小于或等于阈值,则确定将所述对象写入所述缓存区域。

在示例性实施方式中,所述根据访问请求所请求的对象的大小,计算所述对象的缓存概率之前,上述方法还可以包括:

接收访问请求后,判断缓存区域内是否存在所述访问请求所请求的对象;

在所述缓存区域内没有所述对象时,从所述对象的源站或其他存储区域读取所述对象,并确定所述对象的大小。

第二方面,本申请实施例提供一种缓存装置,包括:

缓存概率计算模块,适于根据访问请求所请求的对象的大小,计算所述对象的缓存概率;

缓存确定模块,适于根据所述对象的缓存概率,确定是否将所述对象写入缓存区域。

在示例性实施方式中,所述缓存概率计算模块,可以适于通过以下方式之一根据访问请求所请求的对象的大小,计算所述对象的缓存概率:

根据访问请求所请求的对象的大小,确定所述对象所属的对象集合;根据缓存区域内所述对象集合的访问占比和存储占比,计算所述对象的缓存概率;

根据访问请求所请求的对象的大小,确定所述对象所属的对象集合;根据缓存区域内所述对象集合的累积访问占比和累积存储占比,计算所述对象的缓存概率。

在示例性实施方式中,所述缓存确定模块,可以适于通过以下方式根据所述对象的缓存概率,确定是否将所述对象写入缓存区域:

在所述对象的缓存概率大于概率阈值时,确定将所述对象写入缓存区域;

在所述对象的缓存概率小于或等于概率阈值时,确定不在缓存区域缓存所述对象;

其中,所述概率阈值的初始值为0,在所述缓存区域写满后,所述概率阈值的取值为所述缓存区域内所有对象的缓存概率中的最小值。

第三方面,本申请实施例提供一种缓存装置,包括:存储器以及处理器;其中,所述存储器用于存储缓存程序;该缓存程序在被所述处理器读取执行时,执行以下操作:

根据访问请求所请求的对象的大小,计算所述对象的缓存概率;

根据所述对象的缓存概率,确定是否将所述对象写入缓存区域。

此外,本申请实施例还提供一种计算机可读介质,存储有缓存程序,所述缓存程序被处理器执行时实现以下步骤:

根据访问请求所请求的对象的大小,计算所述对象的缓存概率;

根据所述对象的缓存概率,确定是否将所述对象写入缓存区域。

在本申请实施例中,根据访问请求所请求的对象的大小,计算该对象的缓存概率;根据该对象的缓存概率,确定是否将该对象写入缓存区域。本申请实施例中,基于对象的大小,确定是否将对象写入缓存区域。如此,能够在确保缓存区域的bhr的前提下,提高缓存区域的ohr。比如,可以提升cdn(contentdeliverynetwork,内容分发网络)系统中缓存区域的小文件命中率。

当然,实施本申请的任一产品不一定需要同时达到以上所有优点。

附图说明

图1为本申请实施例提供的缓存方法的实施场景示意图;

图2为本申请实施例提供的缓存方法的流程图;

图3为本申请实施例提供的缓存方法的示例流程图;

图4为本申请实施例提供的缓存装置的示意图。

具体实施方式

以下结合附图对本申请实施例进行详细说明,应当理解,以下所说明的实施例仅用于说明和解释本申请,并不用于限定本申请。

需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

一些实施方式中,执行缓存方法的计算设备可包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存(memory)。

内存可能包括计算机可读介质中的非永久性存储器、随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块n(n为大于2的整数)。

计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom),快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

下面先对本申请提及的概念进行说明。

对象命中率(ohr,objecthitratio)指一个时间段内,请求访问的对象(比如,文件)命中缓存的概率。即,ohr可以等于一个时间段内,请求访问的存在于缓存区域内的对象个数与请求访问的对象总个数的比值。

字节命中率(bhr,bithitratio)是指一个时间段内,请求访问的字节命中缓存的概率。即,bhr可以等于一个时间段内,请求访问的存在于缓存区域内的对象的总字节数与请求访问的对象的总字节数的比值。

图1为本申请实施例提供的缓存方法的实施场景示意图。本实施例提供的缓存方法可以应用于cdn(contentdeliverynetwork,内容分发网络)。

如图1所示,cdn节点接收到终端(比如,智能手机、笔记本电脑等移动终端,或者,台式计算机等固定终端)的访问请求后,查询本地的缓存区域是否存在该访问请求所请求的对象,若存在,则cdn节点从本地的缓存区域读取该访问请求所请求的对象,然后返回给终端;若cdn节点查询到本地的缓存区域内没有该访问请求所请求的对象,则cdn节点从该对象所在的源站或者其他缓存有该对象的cdn节点读取该对象,然后返回给终端;并且,cdn节点判断是否在本地缓存区域存储该对象。

假设一个cdn节点上的缓存区域大小为1gb,用户采用轮询(rr,roundrobin)方式访问1万个文件,其中包括9999个100kb的文件和1个500mb的文件。在这1万个文件的访问热度平均时,每当500mb的文件进入缓存区域,都会导致约5000个100kb文件被剔除出缓存区域,那么平均的ohr就在50%左右。由此可见,基于访问热度进行缓存区域内容替换的方式对于小文件是不公平的,而且上述场景下小文件在缓存区域的命中率的提升需求强于大文件命中率。

另外,在一些cdn场景中,访问请求所请求的对象的大小存在时间差异性。比如,上午8:00至10:00,请求访问的对象的大小在180k左右(例如用户通常在上午访问资讯类的文件内容),而晚上20:00至24:00,请求访问的对象的大小在250k左右(例如用户通常在晚上访问视频文件)。在一些cdn场景中,不同服务类型的节点上接收的访问请求所请求访问的对象的大小存在较大差异。比如,提供视频访问的节点上接收的访问请求所请求访问的对象的大小在1000k以上,提供文本访问的节点上接收的访问请求所请求访问的对象的大小在30k左右。

由此可见,在确定缓存区域的内容替换策略时,仅考虑缓存区域内数据的访问次数和访问时间,无法提高缓存区域的ohr。

本实施例提供一种缓存方法,基于待缓存的对象的大小,确定是否缓存该对象,从而在尽可能不降低bhr的前提下,提高缓存区域的ohr。

需要说明的是,本实施例提供的缓存方法的实施场景并不限定在图1所示的场景,还可以应用于其他场景。本申请对此并不限定。

图2为本申请实施例提供的缓存方法的流程图。如图2所示,本实施例提供的缓存方法包括以下步骤:

s201、根据访问请求所请求的对象的大小,计算该对象的缓存概率;

s202、根据该对象的缓存概率,确定是否将该对象写入缓存区域。

其中,在s201之前,本实施例的缓存方法还可以包括:

接收访问请求后,判断缓存区域内是否存在该访问请求所请求的对象;

在该缓存区域内没有该对象时,从该对象的源站或其他存储区域读取该对象,并确定该对象的大小。

以本实施例的缓存方法由图1中的cdn节点执行为例,cdn节点接收到终端的访问请求之后,根据访问请求携带的信息(比如,对象标识、对象名称等信息),判断本地的缓存区域内是否存在该访问请求所请求的对象;若本地的缓存区域内没有该对象,则cdn节点可以向该对象的源站请求该对象,或者,可以从其他缓存有该对象的cdn节点获取该对象;cdn节点在获取该对象之后,可以确定该对象的大小,即确定该对象占用的空间大小;然后,cdn节点可以执行s201和s202,确定是否将该对象写入本地的缓存区域,同时,cdn节点获取该对象后可以将该对象返回给终端;另外,若cdn节点确定本地的缓存区域内存在该对象,则可以直接从本地的缓存区域读取该对象,并返回给终端。

在示例性实施方式中,s201可以包括以下之一:

根据访问请求所请求的对象的大小,确定该对象所属的对象集合;根据缓存区域内该对象集合的访问占比和存储占比,计算该对象的缓存概率;

根据访问请求所请求的对象的大小,确定该对象所属的对象集合;根据缓存区域内该对象集合的累积访问占比和累积存储占比,计算该对象的缓存概率。

其中,缓存区域内的对象可以根据对象的大小分成多个集合,比如,大小为0至1kb的对象属于一个对象集合,大小为4kb至8kb的对象属于另一个对象集合。

针对每个对象集合,可以统计设定时长内的访问占比和存储占比。其中,一个对象集合的访问占比可以根据在设定时长内缓存区域内该对象集合内所有对象的访问量与缓存区域内所有对象的访问量的比值确定;一个对象集合的存储占比可以根据缓存区域内存储的该对象集合内的对象个数与缓存区域内中存储的对象总个数的比值确定。

其中,一个对象集合的累积访问占比可以根据缓存区域内该对象集合的访问占比以及对象大小小于该对象集合内最小对象的其他对象集合的访问占比的总和确定;一个对象集合的累积存储占比可以根据缓存区域内该对象集合的存储占比以及对象大小小于该对象集合内最小对象的其他对象集合的存储占比的总和确定。举例而言,按照对象大小从小到大的顺序将缓存区域内的对象划分为三个对象集合a、b、c,且对象集合c内的对象大小大于对象集合b内的对象大小,对象集合b内的对象大小大于对象集合a内的对象大小,则对象集合a的累积访问占比即等于对象集合a的访问占比,对象集合b的累积访问占比可以等于对象集合a和b的访问占比的总和,对象集合c的累积访问占比可以等于对象集合a、b及c的访问占比的总和。

在示例性实施方式中,根据缓存区域内对象集合的访问占比和存储占比,计算对象的缓存概率,可以包括:

根据下式计算对象的缓存概率:

p=p’×(α×a+(1-α)×s);

其中,p表示对象的缓存概率,α表示权重因子,α大于0且小于1,a表示该对象所属的对象集合的访问占比,s表示该对象所属的对象集合的存储占比,p’表示根据该对象的访问频次和访问时间中至少之一确定的缓存替换概率。

在其他示例性实施方式中,a还可以为该对象所属的对象集合的累积访问占比,s还可以为该对象所属的对象集合的累积存储占比。

其中,权重因子α可以调整亲和于存储占比还是访问占比,存储占比可以体现缓存区域内对象集合的历史情况,访问占比可以体现缓存区域内对象集合的当前情况。

其中,缓存替换概率p’可以根据缓存区域采用的缓存内容替换算法确定;在采用的算法不同时,缓存替换概率p’的计算方式也会不同。本申请对此并不限定。

在示例性实施方式中,s202可以包括:

在对象的缓存概率大于概率阈值时,确定将该对象写入缓存区域;

在对象的缓存概率小于或等于概率阈值时,确定不在缓存区域缓存该对象;

其中,概率阈值的初始值为0,在该缓存区域写满后,概率阈值的取值可以为缓存区域内所有对象的缓存概率中的最小值。

在本实施例中,在缓存区域写满之后,概率阈值可以是动态变化的。通过动态变化的概率阈值,使得缓存区域内缓存的对象可以适应场景变化而变化。

在示例性实施方式中,本实施例的缓存方法还可以包括:

若缓存区域中不存在访问请求所请求的对象且该对象的大小小于或等于阈值,则确定将该对象写入缓存区域。

其中,针对访问对象的大小相对固定的场景,可以设置一个缓存对象大小的阈值msize;若缓存区域不存在请求访问的对象且请求访问的对象的大小大于阈值msize,则不在缓存区域内缓存该对象;若缓存区域不存在请求访问的对象且请求访问的对象的大小小于或等于阈值msize,则在缓存区域内写入该对象。

图3为本申请实施例提供的缓存方法的示例流程图。本实施例的缓存方法以由图1中的任一个cdn节点执行为例进行说明。

在本示例中,cdn节点可以统计过去n分钟内(比如5分钟)本地的缓存区域内对象的大小分布情况和访问情况。其中,n可以根据实时性要求进行调整,本申请对此并不限定。下面以表1为例说明cdn节点的缓存区域内的对象大小的统计数据。

表1

在表1中,缓存区域内一个对象集合的访问占比a等于过去n分钟内,该对象集合内所有对象的访问量与缓存区域内所有对象的访问量的比值;一个对象集合的存储占比s等于缓存区域内该对象集合内的对象总个数与缓存区域内所有对象的总个数的比值。

如图3所示,本实施例提供的缓存方法,包括:

s301、接收请求端(比如,用户终端)的访问请求;

s302、判断本地的缓存区域内是否存在访问请求所请求的对象;若本地的缓存区域内存在该对象,则执行s303,否则,执行s304;

s303、从本地的缓存区域读取该对象,并返回给请求端;更新缓存区域内每个对象的缓存概率以及概率阈值;

在本步骤中,举例而言,在当前读取的对象的大小为6kb时,则该对象属于表1中的对象集合4,由于缓存区域的访问次数发生了改变,则可以更新缓存区域内每个对象集合的访问占比,以及更新每个对象的缓存概率。

在缓存区域未写满时,概率阈值的取值为0;在缓存区域写满之后,概率阈值的取值会动态变化,即为缓存区域内所有对象的缓存概率中的最小值。

s304、从该对象的源站或其他缓存有该对象的cdn节点读取该对象,并返回给请求端;根据读取的对象,确定该对象的大小;根据该对象的大小,计算该对象的缓存概率;

在本步骤中,根据读取的对象的大小,确定该对象所属的对象集合,比如,该对象的大小为3kb,参照表1可知,该对象所属的对象集合为对象集合3,且对象集合3在过去n分钟内的访问占比a为35%,存储占比s为33%;然后,可以根据下式计算该对象的缓存概率:

p=p’×(α×a+(1-α)×s);

其中,a为该对象所属的对象集合在缓存区域内的访问占比,s为该对象所属的对象集合在缓存区域内的存储占比;0<α<1,通过调整α的取值可以调整缓存概率亲和于存储占比(历史情况)还是访问占比(当前情况);p’为按照缓存区域替换算法确定的缓存替换概率,可以基于该对象在设定时长内的访问频次和访问时间中的至少之一确定。

s305、比较该对象的缓存概率与最新的概率阈值;若该对象的缓存概率大于概率阈值,则执行s306;若该对象的缓存概率小于或等于概率阈值,则执行s307;

s306、确定将该对象写入本地的缓存区域;

在本步骤之后,缓存区域内每个对象集合的存储占比会发生变化,则可以更新缓存区域内每个对象的缓存概率以及概率阈值。

s307、确定不将该对象写入本地的缓存区域。

图4为本申请实施例提供的缓存装置的示意图。如图4所示,本实施例提供的缓存装置,包括:

缓存概率计算模块401,适于根据访问请求所请求的对象的大小,计算该对象的缓存概率;

缓存确定模块402,适于根据该对象的缓存概率,确定是否将该对象写入缓存区域。

在示例性实施方式中,缓存概率计算模块401可以适于通过以下方式之一根据访问请求所请求的对象的大小,计算该对象的缓存概率:

根据访问请求所请求的对象的大小,确定该对象所属的对象集合;根据缓存区域内该对象集合的访问占比和存储占比,计算该对象的缓存概率;

根据访问请求所请求的对象的大小,确定该对象所属的对象集合;根据缓存区域内该对象集合的累积访问占比和累积存储占比,计算该对象的缓存概率。

在示例性实施方式中,缓存概率计算模块401适于通过以下方式根据缓存区域内对象集合的访问占比和存储占比,计算该对象的缓存概率:

根据下式计算该对象的缓存概率:

p=p’×(α×a+(1-α)×s);

其中,p表示该对象的缓存概率,α表示权重因子,α大于0且小于1,a表示该对象所属的对象集合的访问占比,s表示该对象所属的对象集合的存储占比,p’表示根据该对象的访问频次和访问时间中至少之一确定的缓存替换概率。

在示例性实施方式中,缓存确定模块402可以适于通过以下方式根据该对象的缓存概率,确定是否将该对象写入缓存区域:

在该对象的缓存概率大于概率阈值时,确定将该对象写入缓存区域;

在该对象的缓存概率小于或等于概率阈值时,确定不在缓存区域缓存该对象;

其中,概率阈值的初始值为0,在缓存区域写满后,概率阈值的取值为缓存区域内所有对象的缓存概率中的最小值。

在示例性实施方式中,缓存确定模块402还适于若缓存区域中不存在访问请求所请求的对象且该对象的大小小于或等于阈值,则确定将该对象写入该缓存区域。

在示例性实施方式中,本实施例的缓存装置还可以包括:

判断模块,适于在接收访问请求后,判断缓存区域内是否存在访问请求所请求的对象;

对象获取模块,适于在缓存区域内没有该对象时,从该对象的源站或其他存储区域读取该对象,并确定该对象的大小。

关于本实施例提供的缓存装置的相关说明可以参照上述缓存方法的描述,故于此不再赘述。

本申请实施例还提供一种缓存装置,包括:存储器以及处理器,存储器上用于存储缓存程序;该缓存程序在被处理器读取执行时,执行本实施例提供的缓存方法的步骤。

其中,本实施例提供的缓存装置可以设置在图1中的cdn节点。然而,本申请对此并不限定。

其中,处理器可以包括但不限于微处理器(mcu,microcontrollerunit)或可编程逻辑器件(fpga,fieldprogrammablegatearray)等的处理装置。存储器可用于存储应用软件的软件程序以及模块,如本实施例中的缓存方法对应的程序指令或模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的缓存方法。存储器可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至上述缓存装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

其中,上述缓存装置还可以包括:通信单元,可以经由一个网络接收或者发送数据。在一个实例中,通信单元可以为射频(radiofrequency,简称为rf)模块,其用于通过无线方式与互联网进行通信。

此外,本申请实施例还提供一种计算机可读介质,存储有缓存程序,所述缓存程序被处理器执行时实现上述缓存方法的步骤。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在机器可读介质(比如,计算机可读介质)上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

以上显示和描述了本申请的基本原理和主要特征和本申请的优点。本申请不受上述实施例的限制,上述实施例和说明书中描述的只是说明本申请的原理,在不脱离本申请精神和范围的前提下,本申请还会有各种变化和改进,这些变化和改进都落入要求保护的本申请范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1