一种缓存分配方法、装置及设备制造方法及图纸

技术编号:9696999 阅读:96 留言:0更新日期:2014-02-21 05:35
本发明专利技术实施例提供了一种缓存分配方法、装置及设备,当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将待缓存数据从所述当前可用位置写入所述当前可用缓存块;当当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将写入点指示的位置更新为当前剩余可用空间的起始位置;当当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将写入点指示的位置更新为加入缓存块的起始位置,其中,预设缓存池用于存储预先设置的多个长度不小于预设最大长度的缓存块。本发明专利技术实施例提供的缓存分配方法使得缓存的分配更加合理。本发明专利技术涉及计算机技术领域。

【技术实现步骤摘要】
一种缓存分配方法、装置及设备
本专利技术涉及计算机
,尤其涉及一种缓存分配方法、装置及设备。
技术介绍
缓存的管理和分配在计算机编程领域、网络通信领域等领域中都有很广泛的应用。因为在很多情况下都需要对一些临时数据进行临时存储,下面以网络通信领域中,对接收到的数据包的缓存为例进行说明。Web应用防火墙(WAF, Web Application Firewall)作为Web客户端和服务器端的中间设备,部署在Web服务器之前,对超文本传输协议(Hyper Text Transfer Protocol,简称:HTTP)或基于安全套接字的超文本传输协议(Hypertext Transfer Protocol overSecure Socket Layer,简称HTTPS)的双向流量执行检测扫描来保证Web应用的安全。WAF的“在线检测”工作模式,通常是通过Web “代理(Proxy)”的方式,在Web客户端和Web服务器之间分别建立TCP连接,作为两者之间的中间人,对HTTP、HTTPS流量进行扫描,用以检测来自恶意攻击者的非法有害请求,并且对该类请求采取相应的措施进行处理;而WAF的“离线检测”工作模式,不是作为中间人的角色,而是作为旁观者的角色,通过报文嗅探的方式,将Web客户端和Web服务器之间的HTTP、HTTPS交互的TCP报文抓取到WAF中,并且在应用层重组TCP连接,对重组后的TCP连接,进行安全检测、审计等工作。进一步地,在WAF “离线检测”工作模式下,需要对嗅探后的报文进行缓存,现有技术中主要包括如下几种方案:第一种方案:随时为接收到的报文申请缓存块由嗅探线程申请一块能容纳最大长度的报文(可以称为“大报文”)的缓存作为嗅探报文的临时存储区。具体为当报文嗅探成功后,根据嗅探报文的大小,从系统中申请相应大小的缓存块,将报文从临时存储区拷贝至新申请的缓存块,并且将新申请的缓存块插入到处理队列,多个处理线程从处理队列中获取报文进行处理。但是,该种机制存在如下问题:首先,频繁地从系统申请缓存,会造成频繁地系统调用,降低工作效率;其次,从报文的临时存储区将报文拷贝至新申请的缓存块的过程,也会耗费一定的时间,降低对报文的处理速度。第二种方案:使用固定大小缓存池方案这种方案的处理机制是在第一种方案的基础上,对第一种方案存在的两个问题进行优化处理得到的。具体为在程序启动时,创建一个固定大小缓存块为基础的“缓存池”,每个缓存块大小为大报文的大小,该缓存池提供申请、释放固定大报文的接口。在调用报文嗅探的系统调用时,直接使用从缓存池中获得的大报文缓存,而不使用临时存储区。实现了所谓的“零拷贝”,解决了第一种方案中存在的两个问题,但是却引入了一个新问题:由于要嗅探的报文既可能包含几KB的大报文、也可能包含几十B的“小报文”,如果存储每个报文都使用存储大报文的缓存块进行存储,会造成大量的缓存浪费。当网口瞬间流量较大,且包含大量小报文,而处理流程不够迅速时,就会很快用完缓存池空间。如果从缓存池中申请不到缓存块,也会造成一定的丢包率。
技术实现思路
本专利技术实施例提供了一种缓存分配方法、装置及设备,用以解决现有技术中缓存分配不合理的问题。基于上述问题,本专利技术实施例提供的一种缓存分配方法,包括:当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将所述待缓存数据从所述当前可用位置写入所述当前可用缓存块;当所述当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将所述写入点指示的位置更新为所述当前剩余可用空间的起始位置;当所述当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将所述写入点指示的位置更新为加入缓存块的起始位置,其中,所述预设缓存池用于存储预先设置的多个长度不小于所述预设最大长度的缓存块。本专利技术实施例提供的一种缓存分配装置,包括:写入模块,用于当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将所述待缓存数据从所述当前可用位置写入所述当前可用缓存块;更新模块,用于当所述当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将所述写入点指示的位置更新为所述当前剩余可用空间的起始位置;当所述当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将所述写入点指示的位置更新为加入缓存块的起始位置,其中,所述预设缓存池用于存储预先设置的多个长度不小于所述预设最大长度的缓存块。本专利技术实施例提供的一种缓存分配设备,包括上述缓存分配装置。本专利技术实施例的有益效果包括:本专利技术实施例提供的一种缓存分配方法、装置及设备,当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将待缓存数据从所述当前可用位置写入所述当前可用缓存块;当当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将写入点指示的位置更新为当前剩余可用空间的起始位置;当当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将写入点指示的位置更新为加入缓存块的起始位置,其中,预设缓存池用于存储预先设置的多个长度不小于预设最大长度的缓存块。由于缓存队列中的缓存块长度大于预设最大长度,采用本专利技术实施例提供的一种缓存分配方法对嗅探数据包进行缓存分配,可以将预设最大长度设置为不小于“大报文”长度,当嗅探到的数据包长度较大时,可以独自占用一个缓存块,当嗅探到的数据包长度较小、且多个小数据包长度和不大于预设最大长度时,可以使多个小数据包共同占用一个缓存块,不仅实现了所谓的“零拷贝”,还节省了缓存空间,减小了丢包率,使得缓存的分配更加合理。【附图说明】图1为本专利技术实施例提供的一种缓存分配方法的流程图;图2为本专利技术实施例1提供的一种缓存分配方法的流程图;图3为本专利技术实施例2提供的判断当前待读取数据之后是否存储有待读取数据的方法的流程图;图4为本专利技术实施例3提供的缓存队列的初始化的流程图;图5a-图5f为本专利技术实施例提供的以WAF “离线检测”工作模式为例,对嗅探后的报文进行缓存过程的示意图;图6为本专利技术实施例提供的一种缓存分配装置的结构示意图。【具体实施方式】本专利技术实施例提供了一种缓存分配方法、装置及设备,以下结合说明书附图对本专利技术的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本专利技术,并不用于限定本专利技术。并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本专利技术实施例提供一种缓存分配方法,如图1所示,包括:S101、当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将待缓存数据从当前可用位置写入当前可用缓存块。S102、当当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将写入点指示的位置更新为当前剩余可用空间的起始位置。S103、当当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入缓存队列的队尾,并将写入点指示的位置更新为加入缓存块的起始位置,其中,预设缓存池用于存储预先设置的多个长度不小于预设最大长度的缓存块。较佳地,本实施例更适用于能够预先确定需要缓存的待缓存数据的最大长度的情况。下本文档来自技高网
...

【技术保护点】
一种缓存分配方法,其特征在于,包括:当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将所述待缓存数据从所述当前可用位置写入所述当前可用缓存块;当所述当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将所述写入点指示的位置更新为所述当前剩余可用空间的起始位置;当所述当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将所述写入点指示的位置更新为加入缓存块的起始位置,其中,所述预设缓存池用于存储预先设置的多个长度不小于所述预设最大长度的缓存块。

【技术特征摘要】
1.一种缓存分配方法,其特征在于,包括: 当接收到待缓存数据时,根据缓存队列中写入点指示的当前可用缓存块的当前可用位置,将所述待缓存数据从所述当前可用位置写入所述当前可用缓存块; 当所述当前可用缓存块的当前剩余可用空间不小于预设最大长度时,将所述写入点指示的位置更新为所述当前剩余可用空间的起始位置; 当所述当前剩余可用空间小于预设最大长度时,从预设缓存池中获取一个缓存块加入所述缓存队列的队尾,并将所述写入点指示的位置更新为加入缓存块的起始位置,其中,所述预设缓存池用于存储预先设置的多个长度不小于所述预设最大长度的缓存块。2.如权利要求1所述的方法,其特征在于,还包括: 当读取所述缓存队列中的待读取数据时,循环执行如下步骤,直到所述读取点指示的位置与所述写入点指示的位置为同一位置为止: 根据所述缓存队列中读取点指示的当前待读取数据的起始位置,读取所述当前待读取数据; 当所述当前待读取数据所在缓存块内,在所述当前待读取数据之后还存储有待读取数据时,将所述读取点指示的位置更新为紧邻所述当前待读取数据存储的待读取数据的起始位置; 当所述当前待读取数据所在缓存块内,在所述当前待读取数据之后不存在待读取数据,且所述写入点指示的位置不为所述当前待读取数据的结束位置时,将所述读取点指示的位置更新为所述缓存队列中,所述当前待读取数据所在缓存块之后的下一个缓存块的起始位置,并将所述当前待读取数据所在缓存块释放到所述预设缓存池; 当所述当前待读取数据所在缓存块内,在所述当前待读取数据之后不存在待读取数据,且所述写入点指示的位置为所述当前待读取数据的结束位置时,将所述读取点指示的位置更新为所述写入点指示的位置。3.如权利要求2所述的方法,其特征在于,从所述当前可用位置写入所述当前可用缓存块的数据包括:顺次存储的所述待缓存数据的长度信息以及所述待缓存数据的内容; 所述方法,采用如下方式确定所述当前待读取数据所在缓存块内,在所述待读取数据之后是否存储有待读取数据: 确定紧邻所述当前待读取数据的、用于存储待缓存数据的长度的存储位置,存储的内容是否为零; 若不为零,则确定所述当前待读取数据所在缓存块内,在所述待读取数据之后存储有待读取数据; 否则,确定所述当前待读取数据所在缓存块内,在所述待读取数据之后未存储待读取数据。4.如权利要求1-3任一项所述的方法,其特征在于,还包括: 在将所述待缓存数据写入所述当前可用缓存块之后,通过事件机制触发对所述缓存队列中的数据的读取操作。5.如权利要求1-3任一项所述的方法,其特征在于,采用如下方式对所述缓存队列进行初始化: 从所述预设缓存池中获取一个缓存块作为缓存队列中的第一个节点;并将写入点指示的位置和读取点指示的位置初始化为所述第一个节点缓存块的起始位置。6.一种缓存分配装置,其特征在于,包括: 写入模块,用于当接收到待缓存数据时,根据...

【专利技术属性】
技术研发人员:刘冀鹏
申请(专利权)人:福建星网锐捷网络有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1