掌桥专利:专业的专利平台
掌桥专利
首页

基于HeavyKeeper算法的TOP N热点域名实时监测方法

文献发布时间:2023-06-19 18:37:28


基于HeavyKeeper算法的TOP N热点域名实时监测方法

技术领域

本发明涉及网络数据监测技术领域,特别是一种基于HeavyKeeper算法的TOP N热点域名实时监测方法。

背景技术

在DNS(Domain Name Server)服务器使用过程中,实时报告最近X分钟内出现的TOP N的热点域名,是一种较为普遍的需求。如何在高并发的场景下,使用较低的计算与内存资源,准确而实时地监测出现的前N个热点域名(即TOP N),一直难度较大。

现有针对这种需求的通用实现方法可分为两种:第一种是在DNS服务器软件内部实现,将请求的域名以红黑树节点的形式存放,并对其出现次数进行计数。到第X时刻的时候,输出计数最多的前N个域名。这种方法在地并发、计算与内存资源充足时,可以及时、准确地输出结果。第二种是通过实时分析DNS服务器产生的日志,引入额外的设备对X分钟内的访问次数进行统计并排序输出。该方法不消耗DNS服务器的本身资源,也能及时、准确输出数据,其缺陷在于需要额外投入硬件设备。

两种方法检测TOP N热点域名的步骤可大致描述如下:

1、提取出请求的域名Domain,使用Hash函数H计算其Hash值为Hdomain,该值会作为该域名所在红黑树节点的Key,是该节点的唯一标识。

2、查询已有红黑树是否已经插入过该域名,即是否存在某个树节点Key=Hdomain,如不存在,则进入下一步,否则进入第4步。

3、为当前域名分配新的树节点,设置树节点Key=Hdomain,并将该节点插入红黑树。此处有时为了控制总内存占用量,会只保留M个树节点,如10万个。超过该数量后,直接开始丢弃域名数据,或者淘汰部分计数为1的数据,释放部分内存空间。若当前域名被丢弃,则直接结束流程。否则进入下一步

4、将该域名所在的节点域名出现次数计数器加1。

5、在时间间隔到达X的时候,如每5分钟。开始遍历红黑树,根据访问次数进行排序,输出前N项,即为结果。同时清空红黑树,为下一次统计做准备。

现有的方案为了实时监测TOP N热点域名,必须要维持一个节点数量相当多的红黑树来统计域名的访问次数。其缺点一是为了提高统计的准确性,在控制内存占用量的情况下,若节点数量M越小,则丢弃数据越多。因此为了提高准确性,往往该M值很大,从而消耗了较多的计算与内存资源;其缺点二是在第X时刻,为了获取前N项数值,必须遍历整个红黑树,取出访问次数最大的N个热点域名。在输出结束后,需要清空树。当并发量很高时,该操作有概率会引起系统抖动,业务出现丢包的情况。所以,现有方法在高并发场景下,一般不适用。方法二适用于高并发场景,但是需要额外的设备投入。

从实现步骤可以看出完成以上任务,这两种方法都有缺陷。在不控制内存占用量的情况下,结果准确但消耗资源过多。在控制内存使用总量的场景下,因为丢弃了一部分数据,会出现监测结果不准确的情况。

文献1:中国授权发明专利CN201710736503.9公开了一种DNS访问数据归类和内网访问占比提高方法,其主要作用是于对DNS的访问数据的内网外网属性进行归类,实现同时分段地对分类数据、外网域名访问量统计分析;其中,该方法对过期后的数据也进行了数据库实时保存,由此需要较大的内存支撑,依然存在无法解决内存资源消耗过多的问题。

发明内容

本发明的目的在于提供一种基于HeavyKeeper算法的TOP N热点域名实时监测方法,采用双流程数据结构,对数组中少量出现的域名进行衰减淘汰,只保留访问次数多的域名,实现对TOP N热点域名准确度的有效监测。

实现本发明目的的技术解决方案为:

一种基于HeavyKeeper算法的TOP N热点域名实时监测方法,该方法对DNS实时接收到的请求域名进行周期性处理,任一个周期的处理步骤具体如下:

计算当前请求域名的哈希值Hdomain,查询RB Tree中是否存在对应请求域名的哈希值Hdomain的节点,其中RB Tree包含与MinHeap相同的N个节点;

当RB Tree中存在对应Hdomain的节点时,请求域名在MinHeap中,同时更新RBTree和MinHeap中相应的节点值为Dnum,Dnum为当前请求域名的访问次数值;

当RB Tree中不存在对应Hdomain的节点时,若MinHeap中节点数量超过N且其根节点的计数Nmin满足Dnum-Nmin=1,则请求域名同时插入RBTree与MinHeap替换最小节点;反之MinHeap中节点数量不超过N项且其根节点的计数Nmin满足Dnum-Nmin=1,则请求域名同时插入MinHeap和RB Tree中进行访问累计;

当前周期结束时,输出TOP N的热点域名。

进一步的,RB Tree中不存在对应Hdomain的节点时,若MinHeap根节点的计数Nmin不满足Dnum-Nmin=1,则请求域名被淘汰。

进一步的,DNS实时接收到的请求域名存入内存池Pool,在输出TOP N的热点域名后,清空所述内存池Pool。

进一步的,Dnum的计算流程如下:

初始化r行w列的数组A,数组A中每个元素包括两个字段,分别存放请求域名的哈希值和访问次数;

其中,每个请求域名记录有唯一指纹标识FP,FP采用哈希函数计算,用于表示每个请求域名在数组A中的占用位置bucket;

对数组A进行行遍历;

步骤1:令i=0,开始获取请求域名;

步骤2:计算每个请求域名对应的FP,获取每个请求域名在数组A的第i行第[Hi(D)%w]列元素,即A[i][Hi(D)%w],式中Hi(D)表示域名D使用第i行所使用的哈希函数Hi(·)计算出的哈希值,%为求余符号;

步骤3:判断每个请求域名在数组A中存放的访问次数,若访问次数C=0,则将C置为1;若访问次数C>0且FP=Hdomain,则将C置为C+1;若访问次数C>0且FP≠Hdomain,则以1.1

步骤4:置Max C=MAX(Max C,C);

步骤5:若i<r则返回步骤3,否则Dnum=Max C。

进一步的,步骤3中若访问次数C>0且FP≠Hdomain,则以1.1

本发明还提供了一种TOP N热点域名实时监测设备,包括用于存储计算机程序的存储器,以及用于执行计算机程序时实现上述基于HeavyKeeper算法的TOP N热点域名实时监测方法的步骤的处理器。

本发明还提供了一种计算机可读存储介质,该计算可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述基于HeavyKeeper算法的TOP N热点域名实时监测方法的步骤。

本发明与现有技术相比,其显著优点是:

1、采用可配置定量内存,实现了只记录可能是热门的域名的出现次数的功能,对于出现次数少的域名进行淘汰且不存储,避免监测数据随着域名数量和请求增多而增多,从而解决了传统内存资源消耗多的问题。

2、利用双流程数据结构相互配合使用,将计算资源的消耗分布均匀,当在业务服务器内部运行时,面对多个域名哈希存储冲突的问题,使用概率衰减来踢除出现次数少的域名,消除高并发下业务系统抖动的风险,从而提高了TOP N热点域名实时监测的准确率。

附图说明

图1是本发明的基于HeavyKeeper算法的TOP N热点域名实时监测方法的主流程图。

图2是本发明的基于HeavyKeeper算法的TOP N热点域名实时监测方法的子流程图。

具体实施方式

以下结合附图,详细说明本发明的实施方式。

如图1所示,一种基于HeavyKeeper算法的TOP N热点域名实时监测方法,该方法对DNS实时接收到的请求域名进行周期性处理,任一个周期的处理步骤具体如下:

设置待统计的热点域名数量N以及统计时间间隔Interval;

DNS接收的请求域名D;

判断DNS的当前接收时间Tnow是否达到统计时间间隔Interval,如果“否”,则DNS持续接收请求域名,将接收到的请求域名存放于包含N个节点的小顶堆MinHeap内;反之,当前周期结束时,输出TOP N的热点域名;

DNS实时接收到的请求域名存入内存池Pool,在输出TOP N的热点域名后,清空内存池Pool。

其中,MinHeap的结构特点为其根节点存放着出现计数最少的域名,即Nmin;其时间复杂度为O(1)。当一个新域名要进入MinHeap时,需要与该Nmin值进行判断,若大于该Nmin值时,新域名进行替换,并且进入热点域名列表。

为了判断请求域名是否在MinHeap中,需要遍历整个MinHeap,其时间复杂度为O(N),所以MinHeap不利于直接查询请求域名是否已经在MinHeap中。因此引入红黑树RBTree,引入之后查询时间复杂度变为O(log2N),并且RBTree中存储的域名节点数与MinHeap中相同。

具体的,在当前周期内计算请求域名的哈希值Hdomain,查询RB Tree中是否存在对应请求域名的哈希值Hdomain的节点。若查询存在,则计数为Flag=1,反之,则计数为Flag=0。

当RB Tree中存在对应Hdomain的节点时,请求域名在MinHeap中,同时更新RBTree和MinHeap中相应的节点值为Dnum,Dnum为当前请求域名的访问次数值。

当RB Tree中不存在对应Hdomain的节点时,若MinHeap中节点数量超过N且其根节点的计数Nmin满足Dnum-Nmin=1,则请求域名同时插入RBTree与MinHeap替换最小节点;反之MinHeap中节点数量不超过N项且其根节点的计数Nmin满足Dnum-Nmin=1,则请求域名同时插入MinHeap和RB Tree中进行访问累计。

当RB Tree中不存在对应Hdomain的节点时,若MinHeap根节点的计数Nmin不满足Dnum-Nmin=1,则请求域名被淘汰。

如图2所示,输入数组A、请求域名和Flag值,Dnum的计算流程如下:

数组A中存放着域名的计数器,其采用固定内存大小r行w列的数组存放,因其内存占用存在误差,需要对其进行更新,以便准确记录着每个请求域名的出现次数。

初始化r行w列的数组A,对数组A进行行遍历;其中,设置i++,在每次遍历访问结束后,自动处理数组A的下一行元素;

步骤1:令i=0,输入请求域名;

具体的,数组A中每个元素包括两个字段,分别存放请求域名的哈希值和访问次数;每个请求域名记录有唯一指纹标识FP,FP采用哈希函数计算且占用2bytes,用于表示每个请求域名在数组A中的占用位置bucket;

步骤2:计算每个请求域名对应的FP,获取每个请求域名在数组A的第i行第[Hi(D)%w]列元素,即A[i][Hi(D)%w],式中Hi(D)表示域名D使用第i行所使用的哈希函数Hi(·)计算出的哈希值,%为求余符号;

步骤3:判断每个请求域名在数组A中存放的访问次数,具体更新策略如下:

若访问次数C=0,则将C置为1;

若访问次数C>0且FP=Hdomain,则将C置为C+1;

若访问次数C>0且FP≠Hdomain,则以1.1-c的概率衰减将C置为C-1;

步骤4:置Max C=MAX(Max C,C);

步骤5:若i<r则返回步骤3,否则Dnum=Max C。

具体的,步骤3中若访问次数C>0且FP≠Hdomain,则以1.1-c的概率衰减将C置为C-1,当同一个bucket存在多个请求域名占用冲突时,当前bucket占用的第一请求域名被第二请求域名占用冲突次数持续执行概率衰减,直至第二请求域名替换第一请求域名占用当前bucket。

具体举例如下:配置数组A的r=4,w=40万;

1、输入请求域名qqqq.com;

2、计算FP=HASHFP(qqqq.com),假设其结果为8000;

3、分别计算r行的四个hash值,包括:h1=hash1(qqqq.com)=1200,h2=hash2(qqqq.com)=3600,h3=hash3(qqqq.com)=2000,h4(qqqq.com)=6000;

4、分别更新A[0][1200].C、A[1][3600].C、A[2][2000].C以及A[3][6000].C;

5、若在请求域名qqqq.com之前已出现了请求域名pppp.com,请求域名pppp.com的h1为1200,那么A[0][1200].FP=HASHFP(pppp.com)=1111,且将A[0][1200].C设置成了1。

当请求域名qqqq.com出现时,识别出A[0][1200].FP为1111,与请求域名qqqq.com的FP=8000不一致,即执行以1/1.1-1=0.909的概率衰减请求域名pppp.com;

当请求域名qqqq.com出现的次数过多时,随着持续概率衰减,请求域名qqqq.com会替换掉请求域名pppp.com,bucket被请求域名qqqq.com占用,并且设置成了请求域名qqqq.com的FP。

此后再输入的请求域名bbbb.com与请求域名qqqq.com出现bucket占用冲突,查询请求域名qqqq.com的访问次数,即取A[0][1200].C、A[1][3600].C、A[2][2000].C以及A[3][6000].C中的最大值,并且A[0][1200].FP=8000。

若访问次数为20次,则衰减概率会变成1/1.1-20=0.15,概率值较小,因此请求域名qqqq.com不易被淘汰。

本发明还提供一种TOP N热点域名实时监测设备,包括用于存储计算机程序的存储器,以及用于执行计算机程序时实现上述基于HeavyKeeper算法的TOP N热点域名实时监测方法的步骤的处理器。

本发明还提供一种计算机可读存储介质,该计算可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述基于HeavyKeeper算法的TOP N热点域名实时监测方法的步骤。该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

技术分类

06120115630778