一种增量式的自动机更新方法与系统与流程

文档序号:11582219阅读:219来源:国知局
本发明旨在设计一种增量式的自动机更新系统,用于信息过滤、内容安全以及网络数据深度包检测等领域。基于规则匹配的内容过滤系统经常存在着规则更新的需求,每次的规则更新都耗时较长且浪费大量的计算资源。本发明旨在加速规则的更新操作,缩短规则的生效时间。
背景技术
::在实际的内容过滤系统中我们需要对相应的匹配规则进行实时的更新,每次更新匹配规则,对于基于自动机的匹配算法而言,规则的更新也就意味着用于匹配的自动机需要根据规则文件重新生成,从规则文件生成自动机,这是一个相当消耗时间的工作,会极大影响规则更新的生效时间。同时,对于一个负责某一种业务内容匹配的计算机集群系统而言,每一次规则的更新都导致集群系统中的各个计算机都需要根据新的规则文件重新生成用于匹配的自动机,而在每一台匹配机上,从规则文件生成自动机的过程都是完全相同的,这就造成了巨大的计算资源的浪费。本发明利用数据差分方法实现的增量式自动机更新方法可以有效加快规则生效时间并避免浪费计算资源。在计算机科学和信息学理论中,数据差分或差分压缩是用来产生两组数据(源数据和目标数据)之间的差异的技术说明,这种技术说明即是差分数据。由差分数据和源数据可以重新生成目标数据,数据压缩可以被看作是一种特殊情况下的数据差分。由于数据差分可以帮助减少硬盘空间或连接带宽这样的昂贵资源消耗,所以数据差分在软件更新、数据传输和数据备份方面都有广泛的应用。在计算机科学领域,串匹配算法一直是研究焦点之一。串匹配算法的应用包括生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测等。随着待处理信息量的不断增强和实时处理的紧迫需求,对串匹配算法提出了更新的挑战。文献“heckel,paul.atechniqueforisolatingdifferencesbetweenfiles.communicationsoftheacm.volume,21.issue,4.264–268,1978”提出了一种文本数据差分算法diff,diff已经集成为unix系统下的一个文件比较工具,他能够输出两个本地文件之间的差异。典型的应用是对相同文件的两个版本进行比较。diff命令逐行的显示两个文本文件间的差异。目前的实现也支持对二进制文件进行比较。diff的输出为一个patch,他可以应用到unix系统中的另外一个程序中:patch。diff工具通过求解最长公共序列问题来达到对文本文件的比较。rsync(http://rsync.samba.org/documentation.html)是类unix系统下的数据镜像备份工具,用于远程数据同步。rsync算法进行数据差分的过程可以分为以下两个步骤:(1)找出发生变化的文件;(2)找出文件中到底哪部分发生了变化,并用变化后的内容替换原来的内容。查找发生变化部分时,先找出可能相同的部分,然后确认到底是不是相同,经过这两次校验后就能找到两个文件中发生变化的部分,最后将发生变化的部分发送到目标机器并用新的部分替代就的部分。xdelta(http://code.google.com/p/xdelta/)算法是一个二进制的diff工具,xdelta3是xdelta的一个增强版,功能更加强大,但命令和补丁与xdelta3的并不兼容,xdelta3不能处理大于2gb的文件。文献“naivedifferencesofexecutablecode,colinpercival,computinglab,oxforduniversity”公开了一种数据差分算法bsdiff。该算法是一个基于bzip2压缩的二进制数据差分算法。该算法生成二进制差分数据的步骤为:(1)读入源文件,用后缀排序算法生成有序的索引;(2)用已生成的索引在目标文件中搜索,找到近似匹配对。(3)生成最终的差分文件。bsdiff算法生成差分文件时的时间复杂度是o((n+m)logn),恢复目标文件时的时间复杂度是o(n+m),生成差分文件时需要max(17n,9n+m)+o(1)字节的内存,其中m为目标文件的大小,n为源文件的大小。该算法能够应用到自动机文件的数据差分上,压缩率能够达到0.2%-0.5%。上述多种数据差分算法中,bsdiff算法具有最好的差分率,也适合用于对自动机文件进行数据差分,故本发明利用了bsdiff算法作为系统中的数据差分算法,实现了一种增量式的自动机更新方法。技术实现要素:随着计算机和网络应用的普及,为了满足内容过滤系统中实时更新关键词的快速匹配需求,尤其是实时数据处理的需求,本发明提供了一种增量式的自动机更新方法和系统;另外为了满足数据处理量日益增大的需求,克服存储容量的限制,克服对带宽的消耗,本发明也提供了一种节约内存的大规模增量式的自动机更新方法和系统。本发明提供的一种增量式的自动机更新方法,包括以下步骤:1)配置处理机进行初始化操作,根据配置文件生成初始自动机,并将初始自动机发送到各扫描机;2)配置处理机根据新配置文件生成更新后的自动机,并对更新后的自动机和更新前的自动机进行数据差分,生成自动机增量;3)配置处理机将自动机增量发到各扫描机,各扫描机根据自动机增量和更新前的自动机生成更新后的自动机。本发明提供的一种增量式的自动机更新系统,包括两个部分:server端(服务器端)和client端(客户端),server端部署在配置处理机上,是一种高性能的专用处理机,专门用于自动机的生成和数据差分操作;client端部署在扫描机上。在server端的有两种操作:初始化操作和更新操作。初始化的操作步骤为:1)读入配置文件;2)对配置文件按字典序进行排序,将排好序的配置文件存储在外部存储设备上;3)对排序后的配置文件用aho-corasick算法生成初始自动机;4)将初始自动机发送到client端,并通知client端该数据包为初始自动机。更新操作的步骤为:1)读入新配置文件,并按字典序进行排序;2)对排序后的配置文件用aho-corasick算法生成更新后的自动机;3)用bsdiff算法对更新后的自动机和更新前的自动机进行数据差分,生成自动机增量;4)将自动机增量从网络上发到各个扫描机,并通知client端该数据包为自动机增量。在client端的实现步骤是:1)接收server端传来的数据包;2)如果数据包为自动机增量,执行3)和4),否则执行步骤5)。3)用数据差分恢复方法(bspatch方法)由自动机增量和更新前的自动机生成更新后的自动机;4)用更新后的自动机对输入的文本进行扫描匹配,实现内容过滤等功能;5)用初始自动机对输入的文本进行扫描匹配,实现内容过滤等功能。本发明中,生成自动机的算法可以采用其它算法,比如karp-rabin算法(karpr.m.,rabinm.o.,efficientrandomizedpatternmatchingalgorithms[j].ibmj.res.dev.31(2),1987,249-260.)或wu-manber算法(sunwu,udimanber.afastalgorithmformulti-patternsearching[r].technicalrepart,departmentofcomputersciencechung-chenguniversitychia-y,1994.)等;数据差分算法也可以选用别的算法,比如diff算法,但是bsdiff算法效果最好。本发明通过将扫描机上生成自动机的操作迁移到配置处理机上,并且将自动机进行数据差分,一方面可以尽量减少因为初始化自动机而漏掉的需要过滤的数据,同时还能应用一些初始化时间较长的新的效果比较好的串匹配算法;另一方面可以避免因为发送完整自动机而导致的网络拥塞问题。对于15000条url模式串,它的大小为621kb,用aho-corasick算法生成的自动机大小为182057kb,而用bsdiff生成的自动机增量为624kb,仅为自动机大小的0.34%,效果和直接发送模式串的等同。实验结果表明,本系统可以用于大规模模式串扫描系统。附图说明图1:现有扫描系统结构图。图2:只有配置迁移的扫描系统的结构图。图3:本发明的系统结构图。图4:本系统的整体架构图。图5:关键字集合为{hers,his,she,he}的ac自动机示意图。图6:关键字集合为{hers,his,she,he,share}的ac自动机示意图。具体实施方式下面通过具体实施例和附图,对本发明做进一步说明。目前的扫描系统的结构如图1所示,其实现方式是:系统有一个配置处理机,它将用户配置的规则(表达式和关键词)以文件的方式发送到各个扫描机;扫描机从这些规则文件建立相关的数据结构(我们统称之为自动机),用于扫描文本数据。由于系统中的配置文件是定时更新的,所以,在上述实现方式中,每个扫描机都需要定时地从规则文件生成自动机。这是一个相当消耗时间的工作,使得扫描机在这段时间内无法有效地扫描网络数据。在每一台扫描机上,从规则文件生成自动机的过程都是完全相同的,这就造成了巨大的计算资源的浪费。并且在初始化的过程中,扫描机无法进行正常的扫描工作,以10s初始化时间,10g带宽计,则有100g的数据未受监控。在一方面,由于新的串匹配算法初始化时间可能较长,正则表达式匹配中也有同样的问题,这就导致新的算法无法进行工程化。基于以上问题,如果先在配置处理机上建立好自动机,然后将自动机直接通过网络发到各个扫描机上,将不会有数据未受监控,实现方式如图2所示。但是这种方法存在的问题是,用经典的算法生成的自动机都比较大,假设有1000万条规则,每个规则中有20个字符,字符集大小为256;经典aho-corasick算法建立dfa(确定的有限状态自动机)所需的空间:1000w×20×256×4=200gb,当配置处理机将这个自动机从网络上分发到各个扫描机上时,就会造成网络拥塞。扫描系统的配置文件的更新方式主要有以下几种:1、在原有的配置文件中添加一些新的模式串;2、在原有的配置文件中删除一些模式串;3、在原有的配置文件中既有删除一些模式串的操作又有添加新的模式串的操作。当有这些新的操作时,就要重新生成自动机。由于自动机是根据配置文件生成的,当配置文件相似性很大时,新生成的自动机和原来的自动机就会有很大的相似性,考虑到两个自动机的相似性,可以只发送两个自动机的差异部分,并且差异部分会很小。具体的解决方式为:先在配置处理机上建立好自动机,用数据差分算法bsdiff对更新后的自动机进行数据差分,生成一个自动机增量,然后通过网络把自动机增量分发到各个扫描机上,扫描机收到自动机增量后恢复更新后的自动机,然后进行扫描,这也是本发明的实现方式,其系统结构如图3所示。这种实现方式可以节约扫描机的计算资源,减少网络拥塞,提高整个系统的处理效率,同时也能很好地解决已有系统存在的问题。将自动机的构建过程从扫描机转移到配置处理机上的过程,我们称之为“配置迁移”。图4是依照本发明的一个典型实施例的关键词匹配系统结构示意图,下面参照图4并辅以具体实例,对本发明具体实施过程做详细说明。假设初始关键词规则为{hers,she,his,he},待增加的关键词为‘share’。server端的初始化操作的实现步骤:1、从磁盘的新配置文件中读出所有的关键词,将关键词存放在内存中;2、用基数排序的方法对内存中的新关键词集合按照字典序进行排序,排序后规则如表1所示;表1:字典序排序后的初始关键词规则规则id具体0he1hers2his3she3、用aho-corasick算法生成初始的自动机,自动机如图5所示;4、将自动机发送给client端,同时发送标志该数据为自动机的标志给client端。server端的更新操作的实现步骤:1、从磁盘的新配置文件中读出所有的关键词,将关键词存放在内存中;2、用基数排序的方法对内存中的新关键词集合按照字典序进行排序,排序后规则如表2所示;表2:增加‘share’后字典序排序后的关键词规则规则id具体0he1hers2his3share4she3、用aho-corasick算法生成更新后的自动机文件,如图6所示;4、从磁盘中读出初始自动机文件,将自动机存放在内存中,并且用bsdiff算法计算更新后的自动机和初始自动机文件的自动机增量,并把自动机增量发送给client端,同时发送标识该数据为自动机增量的标志给client端。上面步骤2的具体实现步骤为:21)统计所有关键字集合的长度,并找出其中的最大值max_len,并将集合中的元素长度统一为max_len位,数位较短的前面补零;22)选择计数排序为基数排序中用到的稳定排序算法;23)设定需要进行的排序轮数为最大长度值max_len;24)因为关键字和表达式集合的字符集为ascii码,所以设定计数排序的数值范围为0~255;25)从最低位开始,依次进行一次稳定排序,这样从最低位一直到最高位排序完成后,集合就变成一个有序序列。上面步骤3的具体实现步骤为:31)构造trie树;32)用trie树初始化ac-trie;33)计算ac-trie每个状态的供给状态,初始状态的供给状态为空状态θ。其中步骤33)的构造方法为:假设已经按照层次遍历序计算出了current状态之前所有状态的供给函数,现在考虑current的父节点parent。假设从parent到current的标号为σ,即current=δac(parent,σ),其中δac为状态转移函数,p=δac(q,σ)的含义为当前状态为q,当读入标号σ时,状态变为p。sac(parent)已经计算出来了,其中sac为状态供给函数。要搜索v=l(current)的最长后缀u,它同时也对应于trie中的一条路径。v可以写成v′σ的形式,如果u不是空字符串,那么u一定能写成u′σ的形式,并且u′一定是v′的后缀。如果sac(parent)有标号为σ的转移,并且目的状态为h,则w=l(sac(parent))是v′的最长后缀,并且wσ对应于trie中的一条路径。wσ就是最长路径u,sac(current)指向h。如果sac(parent)没有标号为σ的转移,就考虑sac(sac(parent)),依次类推。重复上述操作,直到某个状态有标号为σ的转移,或者抵达空状态θ为止。如果抵达了空状态θ,说明u是空字符串ε,这时sac(current)置为初始状态。文献(naivedifferencesofexecutablecode,colinpercival,computinglab,oxforduniversity)公开了数据差分算法bsdiff。该算法生成二进制差分数据的步骤为:1、读入源文件,用后缀排序算法生成有序的索引;2、用已生成的索引在目标文件中搜索,找到近似匹配对。这些近似匹配对需要满足的条件是:假设已找到的匹配是new[x...x+k]=old[y...y+k],其中x和x+k表示新文件中的位置,y和y+k表示旧文件中的位置,该算法要找到的匹配对是new[x′...x′+k′]=old[y′...y′+k′],这个匹配对至少含有8个满足new[x′+i]≠old[x′+i+(y-x)]的i。3、生成最终的差分文件,差分文件包括三部分:第一部分是包含add和insert指令的控制文件,第二部分是由近似匹配对组成的‘difference’文件,第三部分是由目标文件中近似匹配对以外的所有字节组成的‘extra’文件。其中add指令由偏移量字段和长度字段组成,insert指令只有一个长度字段。生成差分文件后,用bzip2进行压缩,压缩后的文件即是最终的二进制差分数据。在client端的实现步骤是:1)接收server端传来的数据包;2)如果数据包为自动机增量,执行3)和4),否则执行4)。3)用bspatch由自动机增量和初始自动机生成更新后的自动机;4)用更新后的自动机对输入的文本进行扫描匹配。增量自动机的文件格式为:08"bsdiff40"//文件格式标示符,占8个字节;88x//bzip2格式的控制文件块的大小,占8个字节;168y//bzip2格式的diff文件块的大小,占8个字节;248sizeof(newfile)//要生成的目标文件的大小,占8个字节;32xbzip2(controlblock)//x字节的bzip2格式的控制文件块;32+xybzip2(diffblock)//y字节的bzip2格式的difference文件块;32+x+y???bzip2(extrablock)//从32+x+y到文件末尾,都为bzip2格式的extra文件;其中,控制文件块是三元组集合,三元组为(x,y,z),意思是从“difference”文件块中读出x字节,然后从源文件中读入x字节添加到目标文件中;从extra文件块中读出y字节并写入到目标文件中;从源文件中继续向前读z字节。其中步骤4)对文本进行扫描的过程为:假设已经读入文本的前缀为t1t2…ti,而既是t1t2…ti的后缀,同时也是某个模式串的前缀的最长字符串对应于aho-corisick自动机的current状态,记这个最长的字符串为v=l(current)。当读入一个新的字符ti+1并计算t1t2…titi+1的新的最长后缀u时,可能有两种情况:(1).如果状态current存在标号为ti+1的转移,目标状态为f,那么f将成为新的current状态。并且,u=l(f)=uti+1是t1…ti+1的最长后缀,同时也为某个模式串的前缀。(2).如果不存在标号为ti+1的转移,那么沿着current的供给路径回朔,直到:a)找到了一个状态q,它存在标号为ti+1的转移。那么q的ti+1-转移的目标状态f成为新的current状态,并且u=l(f)。b)如果到达了空状态θ,那么说明要寻找的最长后缀u是空字符串ε,于是从current跳转到初始状态。本发明采用一种增量式的自动机更新方法,将内容过滤系统中的配置更新和数据扫描分开独立处理,有效的加速了更新过程,减少了计算资源的浪费,同时几乎不对扫描机的数据扫描产生影响测试数据采用随机数据集,即关键词文件和扫描数据由系统随机生成。测试环境:linux,64位;2颗4核cpu,主频1.8ghz,内核2.6.32。1)自动机差分效果模式串初始规模为10000,每次按1000的增量递增,测试了规则规模递增过程中,自动机增量大小的变化情况,测试结果以表4为例。从表4分析可看出,对相邻两次更新的新旧自动进行数据差分可取得非常好的效果,其自动机增量大小是原始自动机大小的0.1%到0.5%。2)数据差分时间与差分恢复分析模式串初始规模为10000,每次按1000的增量递增,测试了规则规模递增过程中,自动机差分时间以及差分数据的恢复时间,测试结果如表3与表4。表3:模式串规模1000,以100递增,差分效果、差分时间、恢复时间表4:模式串规模10000,以1000递增,差分效果、差分时间与恢复时间以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1