一种任务合并方法、装置和计算机可读存储介质与流程

文档序号:19943022发布日期:2020-02-14 23:26阅读:136来源:国知局
一种任务合并方法、装置和计算机可读存储介质与流程

本发明涉及任务处理技术领域,特别是涉及一种基于openstackdhcpagent的任务合并方法、装置和计算机可读存储介质。



背景技术:

dhcpagent是云平台开源框架的网络模块(openstackneutron)的一个组件,用于实现局域网中的dhcp功能,充当dhcp服务器。dhcpagent以服务的方式运行在网络节点上,通过为每一个网络启动一个dnsmasq进程,为该网络提供dhcp功能。

dhcpagent会接收一些任务:例如网络、子网或者端口的创建、更新、删除等任务。这些任务会涉及到创建dnsmasq进程、更改dnsmasq进程的配置文件、重启dnsmasq的配置文件等操作。dhcpagent在处理流程中,重启dnsmasq的配置文件是一个相对耗时的操作。

目前openstackdhcpagent处理任务采用先到先处理的逻辑,未区分一些可覆盖的任务。例如网络,子网,端口的更新,完全可以以最后的更新结果为准,进行处理。而基于目前先到先处理的逻辑,每次更新都需要重启dnsmasq的配置文件,导致多次进行不必要的耗时操作。对于一些有冲突的任务,例如,端口的更新,可能涉及到同一个网络时,会以网络id为key,使用线程锁,避免操作同一个dnsmasq进程,这就造成了同一网络下的其他端口更新处于阻塞状态。

可见,如何减少无用操作,提升任务的并发处理能力,是本领域技术人员需要解决的问题。



技术实现要素:

本发明实施例的目的是提供一种基于openstackdhcpagent的任务合并方法、装置和计算机可读存储介质,可以减少无用操作,提升任务的并发处理能力。

为解决上述技术问题,本发明实施例提供一种基于openstackdhcpagent的任务合并方法,包括:

接收任务;

当所述任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在所述任务库中对所述任务执行添加或覆盖操作;

当所述任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在所述任务库中对所述任务执行一级添加、二级添加或二级覆盖操作;

其中,一级添加操作是将新的端口任务添加到任务库中,二级覆盖操作是对相同端口的任务执行覆盖处理,二级添加操作是对相同网络下不同端口的任务执行的合并处理。

可选地,所述当所述任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在所述任务库中对所述任务执行添加或覆盖操作包括:

当所述任务的资源类型为网络或子网类型时,则判断任务库中是否存在所述任务的网络id;

若是,则将所述任务的资源信息覆盖所述网络id所对应的原有资源信息;

若否,则将所述任务的网络id以及资源信息添加至所述任务库中。

可选地,所述当所述任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在所述任务库中对所述任务执行一级添加、二级添加或二级覆盖操作包括:

当所述任务的资源类型为端口类型时,则判断一级任务库中是否存在所述任务的网络id;

若否,则将所述任务的网络id的资源信息添加至一级任务库,并将所述任务的端口id以及端口信息添加至二级任务库;

若是,则判断所述二级任务库中是否存在所述任务的端口id;

当所述二级任务库中不存在所述任务的端口id时,则将所述任务的端口id以及端口信息添加至所述二级任务库;

当所述二级任务库中存在所述任务的端口id时,则将所述任务的端口信息覆盖所述二级任务库中所述端口id所对应的原有端口信息。

可选地,在根据任务库中记录的一级网络标识和二级端口标识,在所述任务库中对所述任务执行一级添加、二级添加或二级覆盖操作之后还包括:

根据一级任务库中记录的网络id,获取与所述网络id相对应的配置文件;

读取所述网络id所属的二级任务库中记录的所有端口信息,根据所述所有端口信息修改所述配置文件,重启修改后的配置文件。

可选地,所述任务库为python有序字典。

本发明实施例还提供了一种基于openstackdhcpagent的任务合并装置,包括接收单元、第一处理单元和第二处理单元;

所述接收单元,用于接收任务;

所述第一处理单元,用于当所述任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在所述任务库中对所述任务执行添加或覆盖操作;

所述第二处理单元,用于当所述任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在所述任务库中对所述任务执行一级添加、二级添加或二级覆盖操作;

其中,一级添加操作是将新的端口任务添加到任务库中,二级覆盖操作是对相同端口的任务执行覆盖处理,二级添加操作是对相同网络下不同端口的任务执行的合并处理。

可选地,所述第一处理单元包括第一判断子单元、第一覆盖子单元和第一添加子单元;

所述第一判断子单元,用于当所述任务的资源类型为网络或子网类型时,则判断任务库中是否存在所述任务的网络id;若是,则触发所述第一覆盖子单元;若否,则触发所述第一添加子单元;

所述第一覆盖子单元,用于将所述任务的资源信息覆盖所述网络id所对应的原有资源信息;

所述第一添加子单元,用于将所述任务的网络id以及资源信息添加至所述任务库中。

可选地,所述第二处理单元包括第二判断子单元、一级添加子单元、第三判断子单元、二级添加子单元和二级覆盖子单元;

所述第二判断子单元,用于当所述任务的资源类型为端口类型时,则判断一级任务库中是否存在所述任务的网络id;若否,则触发所述一级添加子单元;若是,则触发所述第三判断子单元;

所述一级添加子单元,用于将所述任务的网络id的资源信息添加至一级任务库,并将所述任务的端口id以及端口信息添加至二级任务库;

所述第三判断子单元,用于判断所述二级任务库中是否存在所述任务的端口id;

所述二级添加子单元,用于当所述二级任务库中不存在所述任务的端口id时,则将所述任务的端口id以及端口信息添加至所述二级任务库;

所述二级覆盖子单元,用于当所述二级任务库中存在所述任务的端口id时,则将所述任务的端口信息覆盖所述二级任务库中所述端口id所对应的原有端口信息。

可选地,在根据任务库中记录的一级网络标识和二级端口标识,在所述任务库中对所述任务执行一级添加、二级添加或二级覆盖操作之后还包括获取单元、修改单元和重启单元;

所述获取单元,用于根据一级任务库中记录的网络id,获取与所述网络id相对应的配置文件;

所述修改单元,用于读取所述网络id所属的二级任务库中记录的所有端口信息,根据所述所有端口信息修改所述配置文件;

所述重启单元,用于重启修改后的配置文件。

可选地,所述任务库为python有序字典。

本发明实施例还提供了一种基于openstackdhcpagent的任务合并装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上述任意一项所述基于openstackdhcpagent的任务合并方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述基于openstackdhcpagent的任务合并方法的步骤。

由上述技术方案可以看出,接收任务;当任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在任务库中对任务执行添加或覆盖操作。对于同一个网络下的网络或子网类型的任务均是对该网络所对应的配置文件执行操作,因此在任务库中可以只保留最新一次的任务,从而减少不必要的任务处理。当任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作。二级覆盖操作是对于相同端口的任务执行覆盖处理,二级添加操作是对于相同网络下不同端口的任务执行的合并处理,一级添加操作是对于新的端口任务添加到一级任务库中。同一网络下的所有端口的操作,最终都需要重启配置文件,因此同一个网络下的端口任务,通过执行二级添加和二级覆盖,有效的减少了重启配置文件的次数,提升了任务的处理速度以及并发处理能力。

附图说明

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

图1为本发明实施例提供的一种基于openstackdhcpagent的任务合并方法的流程图;

图2为本发明实施例提供的一种根据网络id执行网络或子网类型的任务处理的流程图;

图3为本发明实施例提供的一种根据网络id和端口id执行端口任务处理的流程图;

图4为本发明实施例提供的一种基于openstackdhcpagent的任务合并装置的结构示意图;

图5为本发明实施例提供的一种基于openstackdhcpagent的任务合并装置的硬件结构示意图。

具体实施方式

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

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

接下来,详细介绍本发明实施例所提供的一种基于openstackdhcpagent的任务合并方法。图1为本发明实施例提供的一种基于openstackdhcpagent的任务合并方法的流程图,该方法包括:

s101:接收任务。

基于openstackdhcpagent的任务包括的任务类型有网络类型、子网类型和端口类型。其中,网络类型和子网类型的任务所执行的操作原理类似,在本发明实施例中,针对于接收任务的类型可以设置两种不同的业务处理逻辑。

s102:当任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在任务库中对任务执行添加或覆盖操作。

对于同一个网络下的网络或子网类型的任务均是对该网络所对应的配置文件执行操作,因此在任务库中可以只保留最新一次的任务,从而减少不必要的任务处理。

在本发明实施例中,可以采用python有序字典作为任务库。python有序字典保证了各项任务的先后顺序,实现了各任务的有序执行。

接收到的网络或子网类型的任务包括网络或子网的创建、更新或删除操作等任务,这种任务的处理,应该按照网络或子网的最终状态处理,即后一个任务可以覆盖前一个任务。

例如,按照时间顺序,接收到的第一个任务为更新网络,第二个任务也是更新网络,最终是以第二个任务为网络的最终状态,因此,在实际应用中,可以将第二个任务覆盖第一个任务,此时无需再对第一个任务进行处理,提升了任务的处理效率。

由于同一个网络下的任务对应同一个配置文件,因此,可以将同一个网络下的网络或子网类型的任务进行覆盖操作,不同网络下的任务无法执行覆盖。在本发明实施例中,可以根据网络标识区分不同的网络。

s103:当任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作。

同一个网络下包含的端口往往有多个,每个端口可以有其对应的任务。考虑到同一个网络下不同端口所对应的任务,均涉及到配置文件的重启,而配置文件的重启需要花费较长的时间,因此,在本发明实施例中,可以将同一个网络下不同端口所对应的任务进行合并处理,从而减少配置文件重启的次数。

一级网络标识用于区分端口所属的网络,二级端口标识用于区分不同的端口。

为了便于介绍,可以将资源类型为端口类型的任务称作端口任务。

在本发明实施例中,当任务库中不存在该端口任务所属的网络标识时,需要在任务库中添加该网络标识及其端口任务,可以将该添加操作称作一级添加。当任务库中存在该端口任务所属的网络标识,但是不存在该端口标识时,需要在任务库中该网络标识下添加该端口任务,可以将该添加操作称作二级添加。当任务库中存在该端口任务所属的网络标识,并且存在该端口标识时,则说明任务库中记载了该端口所对应的任务,对于同一个端口所对应的端口任务,可以执行端口任务的覆盖操作,可以将端口任务的覆盖操作称作二级覆盖操作。

在实际应用中,针对于每个网络会设置相应的网络id,在本发明实施例中,可以将网络id作为区分不同网络的网络标识。如图2所示为根据网络id执行网络或子网类型的任务处理的流程图,该处理流程包括:

s201:当任务的资源类型为网络或子网类型时,判断任务库中是否存在任务的网络id。

服务器的处理能力有限,当接收到的任务较多时,服务器无法同时对所有的任务进行处理,因此需要先将未处理的任务进行缓存,在本发明实施例中,采用任务库记录未处理的任务。

每个任务有其所属的网络,在任务中可以携带有其所属网络的网络id,当任务库中存在该网络id时,则说明任务库中已经记载了该网络下的任务。对于同一个网络下的网络或子网类型的任务可以以最新的一个任务作为最终状态,为了提升任务的处理效率,此时可以执行s202。

当任务库中不存在该网络id时,则说明任务库中未记载该网络下的任务,此时可以将该任务记录到任务库中,即执行s203。

s202:将任务的资源信息覆盖网络id所对应的原有资源信息。

在本发明实施例中,可以采用键值对(key-value)的方式记录任务,key为网络id,value为资源信息。其中,资源信息指的是所需执行的具体任务信息。

当任务库中存在与接收到的任务所携带的网络id相同的网络id时,此时可以将接收到的任务的资源信息覆盖任务库中该网络id原先对应的资源信息即原有资源信息,服务器执行任务库中的任务时,只需执行当前最新记录的任务即可,减少了服务器执行不必要的任务,有效的提升了服务器的任务处理效率。

s203:将任务的网络id以及资源信息添加至任务库中。

当任务库中不存在与接收到的任务所携带的网络id相同的网络id时,说明任务库中不具有该网络id所对应的任务,此时需要将接收到的任务添加到任务库中。以键值对的方式为例,需要将该任务的网络id作为key,将该任务的资源信息作为value记录到任务库中。

通过以键值对的方式在任务库中记录任务,可以快速的从任务库中查询是否存在与新接收的任务属于同一个网络的任务,进一步提升了任务的查询和记录效率。

在本发明实施例中,可以以网络id作为一级网络标识,以端口id作为二级端口标识。如图3所示为根据网络id和端口id执行端口任务处理的流程图,该处理流程包括:

s301:当任务的资源类型为端口类型时,则判断一级任务库中是否存在任务的网络id。

同一个网络包含的端口往往有多个,每个端口任务有其对应的端口id以及网络id,在本发明实施例中,为了区分不同的端口,以及各端口所属的网络,可以将任务库划分为两个等级,分别为一级任务库和二级任务库。其中,一级任务库中记录的是端口所属的网络,二级任务库中记录的是端口的端口id以及端口信息。

当接收到新的任务时,若一级任务库中不存在与该任务的网络id相同的网络id时,则说明一级任务库中未记录该端口所属网络的任务,此时需要在任务库中添加新接收的任务,即执行s302。

当接收到新的任务时,若一级任务库中存在与该任务的网络id相同的网络id时,则说明一级任务库中记录有该端口所属网络的任务,此时需要进一步确定是否存在该端口的任务,即执行s303。

s302:将任务的网络id的资源信息添加至一级任务库,并将任务的端口id以及端口信息添加至二级任务库。

在任务库中添加端口任务时,首先需要在一级任务库中添加该端口任务的网络id作为key,在二级任务库中添加该端口任务的端口id以及端口信息。二级任务库即为该网络id的value。其中,端口信息指的是所需执行的具体端口任务信息。

s303:判断二级任务库中是否存在任务的端口id。

当一级任务库中存在与该任务的网络id相同的网络id时,需要进一步判断二级任务库中是否存在与该任务的端口id相同的端口id。

当二级任务库中不存在任务的端口id时,即二级任务库中不存在与该任务的端口id相同的端口id时,则说明二级任务库中未记录该端口的任务,此时需要在二级任务库中添加该端口任务,即执行s304。

当二级任务库中存在任务的端口id时,即二级任务库中存在与该任务的端口id相同的端口id时,则说明二级任务库中记录有该端口的任务,对于同一个端口的任务可以采用覆盖的方式处理,即执行s305。

s304:将任务的端口id以及端口信息添加至二级任务库。

以键值对的方式记录任务为例,当二级任务库中不存在任务的端口id时,在二级任务库中以端口id作为key,端口信息作为value,记录端口任务。

s305:将任务的端口信息覆盖二级任务库中端口id所对应的原有端口信息。

当任务库中存在与接收到的任务所携带的端口id相同的端口id时即二级任务库中存在任务的端口id时,此时可以将接收到的任务的端口信息覆盖二级任务库中该端口id原先对应的端口信息即原有端口信息,服务器执行任务库中的任务时,只需执行当前最新记录的端口任务即可,减少了服务器执行不必要的任务,有效的提升了服务器的任务处理效率。

由上述技术方案可以看出,接收任务;当任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在任务库中对任务执行添加或覆盖操作。对于同一个网络下的网络或子网类型的任务均是对该网络所对应的配置文件执行操作,因此在任务库中可以只保留最新一次的任务,从而减少不必要的任务处理。当任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作。二级覆盖操作是对于相同端口的任务执行覆盖处理,二级添加操作是对于相同网络下不同端口的任务执行的合并处理,一级添加操作是对于新的端口任务添加到一级任务库中。同一网络下的所有端口的操作,最终都需要重启配置文件,因此同一个网络下的端口任务,通过执行二级添加和二级覆盖,有效的减少了重启配置文件的次数,提升了任务的处理速度以及并发处理能力。

在实际应用中,记录任务和处理任务可以看作是两个并列的处理流程,当前所需处理的任务数量超过服务器的处理能力时,会将待处理的任务放入任务库中,后续服务器可以从任务库中读取任务进行处理。

在存储端口任务时,划分了一级任务库和二级任务库,因此服务器在读取任务时,需要根据一级任务库中记录的网络id,获取与网络id相对应的配置文件;读取网络id所属的二级任务库中记录的所有端口信息,根据所有端口信息修改配置文件,重启修改后的配置文件。

端口信息中记录了对相应端口所需执行的操作,在本发明实施例中,可以对同一网络下的所有端口任务进行合并处理,此时只需执行一次配置文件的重启即可。

例如,一个网络id所属的二级任务库中记录有10个端口信息,此时可以根据各端口信息中记录的操作方式修改配置文件中的相关信息,最后重启修改后的配置文件,对于同一网络下的10个端口任务,只需执行一次配置文件的重启操作。相比于现有技术中10个端口任务需要执行10次配置文件的重启,通过对端口任务进行合并处理,增加了任务的并发处理能力,极大的缩短了任务的处理时间。

图4为本发明实施例提供的一种基于openstackdhcpagent的任务合并装置的结构示意图,包括接收单元41、第一处理单元42和第二处理单元43;

接收单元41,用于接收任务;

第一处理单元42,用于当任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在任务库中对任务执行添加或覆盖操作;

第二处理单元43,用于当任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作;

其中,一级添加操作是将新的端口任务添加到任务库中,二级覆盖操作是对相同端口的任务执行覆盖处理,二级添加操作是对相同网络下不同端口的任务执行的合并处理。

可选地,第一处理单元包括第一判断子单元、第一覆盖子单元和第一添加子单元;

第一判断子单元,用于当任务的资源类型为网络或子网类型时,则判断任务库中是否存在任务的网络id;若是,则触发第一覆盖子单元;若否,则触发第一添加子单元;

第一覆盖子单元,用于将任务的资源信息覆盖网络id所对应的原有资源信息;

第一添加子单元,用于将任务的网络id以及资源信息添加至任务库中。

可选地,第二处理单元包括第二判断子单元、一级添加子单元、第三判断子单元、二级添加子单元和二级覆盖子单元;

第二判断子单元,用于当任务的资源类型为端口类型时,则判断一级任务库中是否存在任务的网络id;若否,则触发一级添加子单元;若是,则触发第三判断子单元;

一级添加子单元,用于将任务的网络id的资源信息添加至一级任务库,并将任务的端口id以及端口信息添加至二级任务库;

第三判断子单元,用于判断二级任务库中是否存在任务的端口id;

二级添加子单元,用于当二级任务库中不存在任务的端口id时,则将任务的端口id以及端口信息添加至二级任务库;

二级覆盖子单元,用于当二级任务库中存在任务的端口id时,则将任务的端口信息覆盖二级任务库中端口id所对应的原有端口信息。

可选地,在根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作之后还包括获取单元、修改单元和重启单元;

获取单元,用于根据一级任务库中记录的网络id,获取与网络id相对应的配置文件;

修改单元,用于读取网络id所属的二级任务库中记录的所有端口信息,根据所有端口信息修改配置文件;

重启单元,用于重启修改后的配置文件。

可选地,任务库为python有序字典。

图4所对应实施例中特征的说明可以参见图1至图3所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,接收任务;当任务的资源类型为网络或子网类型时,则根据任务库中记录的网络标识,在任务库中对任务执行添加或覆盖操作。对于同一个网络下的网络或子网类型的任务均是对该网络所对应的配置文件执行操作,因此在任务库中可以只保留最新一次的任务,从而减少不必要的任务处理。当任务的资源类型为端口类型时,则根据任务库中记录的一级网络标识和二级端口标识,在任务库中对任务执行一级添加、二级添加或二级覆盖操作。二级覆盖操作是对于相同端口的任务执行覆盖处理,二级添加操作是对于相同网络下不同端口的任务执行的合并处理,一级添加操作是对于新的端口任务添加到一级任务库中。同一网络下的所有端口的操作,最终都需要重启配置文件,因此同一个网络下的端口任务,通过执行二级添加和二级覆盖,有效的减少了重启配置文件的次数,提升了任务的处理速度以及并发处理能力。

图5为本发明实施例提供的一种基于openstackdhcpagent的任务合并装置50的硬件结构示意图,包括:

存储器51,用于存储计算机程序;

处理器52,用于执行计算机程序以实现如上述任意一项基于openstackdhcpagent的任务合并方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项基于openstackdhcpagent的任务合并方法的步骤。

以上对本发明实施例所提供的一种基于openstackdhcpagent的任务合并方法、装置和计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

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