一种DNS服务器及其线程控制方法和装置与流程

文档序号:15444974发布日期:2018-09-14 23:15阅读:141来源:国知局

本发明涉及互联网技术领域,特别是涉及一种dns服务器及其线程控制方法和装置



背景技术:

dns(domainnamesystem,域名系统),指的是在互联网中将域名映射为ip地址的一套系统,能够使用户能够利用更容易记住的域名去访问互联网,而不用去记住不易记住的ip数串。dns几乎可以说是目前所有线上服务的基础。在dns系统中,域名的管理者需要搭建dns服务器来处理dns的查询请求。目前的dns服务器应用程序架构中,dns查询请求的网络数据包首先达到服务器中linux操作系统的udp缓冲区,然后dns应用层服务器的工作线程会从udp缓冲区收取包来处理,每个线程单位时间内收取包的数量是相同的。

本申请的发明人在实际实施时发现,这种工作模式存在两个问题:由于数据包的大小不同,所需处理时间也就不同,但每个线程收取包的速度相同,从而导致每个线程实际处理的任务量不同,即有的线程因负担较大导致处理效率偏低,而有的线程因负担太小导致资源闲置,从而使dns服务器的整体效率不够优化,当查询请求的量剧增时,会造成dns服务器的性能无法满足需求。



技术实现要素:

有鉴于此,本发明提供了一种dns服务器及其线程控制方法和装置,以解决目前工作线程因需要收取固定数量的数据包而导致dns服务器的效率较差的问题。

为了解决上述问题,本发明公开了一种dns服务器,配置有多个工作线程和至少一个收包线程,每个所述工作线程配置有一个工作缓冲区,其中:

所述收包线程用于从所述dns服务器的linux内核的udp缓冲区读取数据包,并分配到所述工作缓冲区;

每个所述工作线程用于从与其对应的工作缓冲区读取数据包。

每个所述工作缓冲区的长度一致;

所述工作缓冲区的长度大于所述收包线程每次所收取的数据包的数量。

本发明还提供了一种线程控制方法,应用于如上所述的dns服务器,所述线程控制方法包括:

控制所述收包线程从所述udp缓冲区读取预设数量的数据包;

检测所述收包线程所对应的多个所述工作缓冲区中每个工作缓冲区的使用率;

根据所述使用率向所述工作缓冲区中分配数据包。

可选的,所述根据所述使用率向所述工作缓冲区中分配数据包,包括:

从多个所述使用率中找到最小使用率,将所述最小使用率所对应的工作缓冲区作为目标缓冲区;

将部分或全部的数据包放入所述目标缓冲区内。

可选的,所述将部分或全部的数据包放入所述目标缓冲区内,包括:

当所述目标缓冲区的使用率小于第一预设阈值时,将本次收取的数据包全部放入所述目标缓冲区内;

当所述目标线程的使用率大于所述第一预设阈值、且小于第二预设阈值时,仅将本次收取的数据包中高优先级的数据包放入所述目标缓冲区内;

当所述目标线程的使用率大于所述第二预设阈值时,将本次所收取的数据包全部丢弃;

所述第二预设阈值大于所述第一预设阈值。

相应的,为了保证上述方法的实施,本发明还提供了一种线程控制装置,应用于如上所述的dns服务器,所述线程控制装置包括:

数据读取控制模块,用于控制所述收包线程从所述udp缓冲区读取预设数量的数据包;

使用率检测模块,用于检测所述收包线程所对应的多个所述工作缓冲区中每个工作缓冲区的使用率;

数据包分配模块,用于根据所述使用率向所述工作缓冲区中分配数据包。

可选的,所述数据包分配模块包括:

使用率比对单元,用于从多个所述使用率中找到最小使用率,将所述最小使用率所对应的工作缓冲区作为目标缓冲区;

数据包分配单元,用于将部分或全部数据包放入所述目标缓冲区内。

可选的,所述数据包分配单元包括:

第一分配子单元,用于当所述目标线程的使用率小于第一预设阈值时,将本次收取的数据包全部放入与所述目标缓冲区内;

第二分配子单元,用于当所述目标线程的使用率大于所述第一预设阈值、且小于第二预设阈值时,仅将本次收取的数据包中高优先级的数据包放入所述目标缓冲区内;

第三分配子单元,用于当所述目标线程的使用率大于所述第二预设阈值时,将本次所收取的数据包全部丢弃;

所述第二预设阈值大于所述第一预设阈值。

从上述技术方案可以看出,本发明提供了一种dns服务器及其线程控制方法和装置,该dns服务器配置有多个工作线程和至少一个收包线程,每个工作线程配置有一个工作缓冲区。收包线程用于从dns服务器的linux内核的udp缓冲区读取数据包,并分配到工作缓冲区;每个工作线程用于从与其对应的工作缓冲区读取数据包。通过上述配置,该dns服务器中所有的工作线程不直接从linux内核的udp缓冲区读取数据包,而是从工作缓冲区读取数据包,而工作缓冲区内的数据包是收包线程根据相应的规则进行分配的,因此数量会有所差异,以使工作线程能够处理不同数量的任务,从而解决了目前工作线程因需要收取固定数量的数据包而导致dns服务器的效率较差的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种dns服务器的架构示意图;

图2为本发明实施例提供的一种线程控制方法的步骤流程图;

图3为本发明实施例提供的一种线程控制装置的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

图1为本发明实施例提供的一种dns服务器的架构示意图。

参照图1所示,本实施例提供的dns服务器为基于linux操作系统在物理服务器上所搭建,该dns服务器配置有多个工作线程100和至少一个收包线程300,且每个工作线程配置有相应的工作缓冲区200。

该收包线程用于从该物理服务器的linux内核的udp缓冲区400内读取数据包,该物理服务器上搭建有上述dns服务器。该收包线程对应与上述多个工作线程的全部或部分。

收包线程从udp缓冲区读取到数据包后,根据预设的规则将数据包分配到其对应的工作线程的工作缓冲区内。每个工作线程则用于从自己的工作缓冲区中读取数据包进行处理。

这里预设规则的含义是指根据数据包的大小向工作缓冲区内分配数据包,对于较大的数据包可以向相应线程的工作缓冲区内少分配一些,而对于较小的数据包则可以多分配一些,从而保证每个工作线程的负担均衡一些。

另外,为了避免单一的收包线程造成收包速度不够,可能会成为整体系统的瓶颈,因此可以配置2-3收包线程进行收包作业。每个工作线程的缓冲区长度一致,且远大于收包线程每次收取的包数量的最大值。该收包线程还用于监测其对应的每个工作线程的使用率,并根据使用率向相应的工作线程配置的工作缓冲区内放置数据包。

从上述技术方案可以看出,本实施例提供了一种dns服务器,其配置有多个工作线程和至少一个收包线程,每个工作线程配置有一个工作缓冲区。收包线程用于从dns服务器的linux内核的udp缓冲区读取数据包,并分配到工作缓冲区;每个工作线程用于从与其对应的工作缓冲区读取数据包。通过上述配置,该dns服务器中所有的工作线程不直接从linux内核的udp缓冲区读取数据包,而是从工作缓冲区读取数据包,而工作缓冲区内的数据包是收包线程根据相应的规则进行分配的,因此数量会有所差异,以使工作线程能够处理不同数量的任务,从而解决了目前工作线程因需要收取固定数量的数据包而导致dns服务器的效率较差的问题。

实施例二

图2为本发明实施例提供的一种线程控制方法的步骤流程图。

参照图2所示,本实施例提供的线程控制方法应用于上一实施例中所提供的dns服务器,用于对其配置的工作线程和收包线程进行控制,该线程控制方法具体包括:

s101:控制收包线程udp缓冲区读取预设数量的数据包。

即控制该收包线程循环从dns服务器所处的物理服务器的linux内核的udp缓冲区读取数据包,所读取的数据包的数量固定,也可以根据实际需求和工作负荷进行确定。这里循环的意思是该收包线程在将读取的数据包发送到工作线程的工作缓冲区后再次从udp缓冲区读取相应数量的数据包。

s102:检测每个工作线程对应的工作缓冲区的使用率。

每个收包线程对应有多个工作缓冲区,每个工作缓冲区则对应一个相应的工作线程。这里每个工作线程是指该收包线程对应的多个工作线程,在dns服务器存在多个收包线程的情况下,每个收包线程对应的多个工作线程为dns服务器中所有工作线程中的一部分。

在dns服务器运行过程中,实时检测该收包线程对应的工作线程的工作缓冲区使用率。使用率可以看做该工作缓冲区所使用的容量占其总容量的百分比。

s103:根据使用率向相应工作缓冲区分配数据包。

在确定多个工作缓冲区中每个缓冲区的使用率后,从中选出使用率最小的工作缓冲区,使用率最小意味着其最闲,此时收包线程将从udp缓冲区中读取的数据包向该使用率最小的工作缓冲区注入,从而实现对工作线程的工作量的平衡。

从上述技术方案可以看出,本实施例提供了一种线程控制方法,该方法应用于上一实施例中的dns服务器,具体为控制所述收包线程从所述udp缓冲区读取预设数量的数据包;检测所述收包线程所对应的多个所述工作缓冲区中每个工作缓冲区的使用率;根据所述使用率向所述工作缓冲区中分配数据包。通过根据使用率向相应工作缓冲区分配数据包,能够对工作线程的工作量实现平衡,从而可以避免工作线程之间的工作量不平衡,提高了dns服务器的工作效率。

其中,根据使用率向相应工作缓冲区分配数据包具体的过程为:

首先,在得到所有工作线程所对应的工作缓冲区的使用率后,从该多个使用率中选取最小的使用率,并将该使用率最小的工作缓冲区定为目标缓冲区;然后,根据该目标缓冲区的使用率将全部或部分数据包放入到该目标缓冲区内。这里部分或全部放入目标缓冲区的方法如下所述:

1)当该目标线程的使用率小于第一预设阈值时,将收包线程本次收取的数据包全部放入到该目标缓冲区内。该第一预设阈值可以根据dns服务器在具体工作时的工作效率确定,即使用率为第一预设阈值时,该工作线程可以较为高效地工作。例如,第一预设阈值可以选择85%。

2)当该目标线程的使用率大于第一预设阈值,且小于第二预设阈值时,将收包线程所收取的数据包进行区分,将优先级较低的数据包丢弃,仅将优先级较高的数据包放入该目标缓冲区。这里的第一预设阈值小于第二预设阈值,在第一预设阈值取值85%的情况下,第二预设阈值可以取大于该值的数值,如95%,但不应该取100%。

3)当目标线程的使用率大于第二预设阈值时,将本次收包线程所收取的数据包全部丢弃,以此避免dns服务器负荷过大。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

实施例三

图3为本发明实施例提供的一种线程控制装置的结构框图。

参照图3所示,本实施例提供的线程控制装置应用于实施例一中所提供的dns服务器,用于对其配置的工作线程和收包线程进行控制,该线程控制装置具体包括数据读取控制模块10、使用率检测模块20和数据包分配模块30。

数据读取控制模块用于控制收包线程动udp缓冲区读取预设数量的数据包。

即控制该收包线程循环从dns服务器所处的物理服务器的linux内核的udp缓冲区读取数据包,所读取的数据包的数量固定,也可以根据实际需求和工作负荷进行确定。这里循环的意思是该收包线程在将读取的数据包发送到工作线程的工作缓冲区后再次从udp缓冲区读取相应数量的数据包。

使用率检测模块用于检测每个工作线程对应的工作缓冲区的使用率。

每个收包线程对应有多个工作缓冲区,每个工作缓冲区则对应一个相应的工作线程。这里每个工作线程是指该收包线程对应的多个工作线程,在dns服务器存在多个收包线程的情况下,每个收包线程对应的多个工作线程为dns服务器中所有工作线程中的一部分。

在dns服务器运行过程中,实时检测该收包线程对应的工作线程的工作缓冲区使用率。使用率可以看做该工作缓冲区所使用的容量占其总容量的百分比。

数据包分配模块用于根据使用率向相应工作缓冲区分配数据包。

在确定多个工作缓冲区中每个缓冲区的使用率后,从中选出使用率最小的工作缓冲区,使用率最小意味着其最闲,此时收包线程将从udp缓冲区中读取的数据包向该使用率最小的工作缓冲区注入,从而实现对工作线程的工作量的平衡。

从上述技术方案可以看出,本实施例提供了一种线程控制方法,该方法应用于上一实施例中的dns服务器,具体为控制所述收包线程从所述udp缓冲区读取预设数量的数据包;检测所述收包线程所对应的多个所述工作缓冲区中每个工作缓冲区的使用率;根据所述使用率向所述工作缓冲区中分配数据包。通过根据使用率向相应工作缓冲区分配数据包,能够对工作线程的工作量实现平衡,从而可以避免工作线程之间的工作量不平衡,提高了dns服务器的工作效率。

本实施例中,该数据包分配模块根据使用率向相应工作缓冲区分配数据包,该模块具体包括使用率对比单元和数据包分配单元。

使用率对比单元用于在得到所有工作线程所对应的工作缓冲区的使用率后,从该多个使用率中选取最小的使用率,并将该使用率最小的工作缓冲区定为目标缓冲区;数据包分配单元用于根据该目标缓冲区的使用率将全部或部分数据包放入到该目标缓冲区内。该数据包分配单元包括第一分配子单元、第二分配子单元和第三分配子单元。

第一分配子单元用于当该目标线程的使用率小于第一预设阈值时,将收包线程本次收取的数据包全部放入到该目标缓冲区内。该第一预设阈值可以根据dns服务器在具体工作时的工作效率确定,即使用率为第一预设阈值时,该工作线程可以较为高效地工作。例如,第一预设阈值可以选择85%。

第二分配子单元用于当该目标线程的使用率大于第一预设阈值,且小于第二预设阈值时,将收包线程所收取的数据包进行区分,将优先级较低的数据包丢弃,仅将优先级较高的数据包放入该目标缓冲区。这里的第一预设阈值小于第二预设阈值,在第一预设阈值取值85%的情况下,第二预设阈值可以取大于该值的数值,如95%,但不应该取100%。

第三分配子单元用于当目标线程的使用率大于第二预设阈值时,将本次收包线程所收取的数据包全部丢弃,以此避免dns服务器负荷过大。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的技术方案进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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