CN1315045C - 一种对机群实现集中并发管理的方法 - Google Patents
一种对机群实现集中并发管理的方法 Download PDFInfo
- Publication number
- CN1315045C CN1315045C CNB2004100086738A CN200410008673A CN1315045C CN 1315045 C CN1315045 C CN 1315045C CN B2004100086738 A CNB2004100086738 A CN B2004100086738A CN 200410008673 A CN200410008673 A CN 200410008673A CN 1315045 C CN1315045 C CN 1315045C
- Authority
- CN
- China
- Prior art keywords
- task
- list
- overall
- resources
- task list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明公开了一种对机群实现集中并发管理的方法,该方法包括:机群管理服务器中的运行实体侦听到任务请求时,如果该任务中的资源子集中有不都可用资源,则裁减所述任务中涉及不可用资源实例的部分任务,同时将裁减掉的任务创建为一新任务,并写入一预先设定的全局任务列表中,按正常流程处理所述被裁减任务的剩余部分,运行实体读取全局任务列表,并处理读取的任务;如果该任务由一个以上独立的子任务组成,则将所述任务分解为多个子任务,并将该多个子任务写入一预先设定的全局任务列表中,运行实体读取全局任务列表,并处理读取的任务。利用上述方法可提高对机群并发管理的效率。
Description
技术领域
本发明涉及计算机机群网络管理技术,尤其涉及一种对机群实现集中并发管理的方法。
背景技术
应用于计算机网络环境中的管理系统一般有两种控制策略:基于分布式算法的分布式控制策略和集中控制策略。分布式控制策略是指管理系统中没有专门用于管理的结点,全部管理任务都是由所有结点协商来实现的,由于分布式算法比较复杂,且效率较低,因此分布式控制策略一般只用于小规模的管理系统中;集中式控制策略是指管理系统中存在有专门的管理结点,该管理结点不一定唯一,可能存在备份,负责对整个网络环境的运行进行各种管理与控制。当前在大规模机群环境的管理系统中一般都采用集中控制策略。
如图1所示,在对机群实现集中并发管理的管理系统中,一般采用客户机-服务器的体系结构,管理服务器101为管理结点,客户机103为被管理结点,管理服务器101上有一个运行实体负责侦听管理服务端口102,并对侦听到的任务进行处理。所述的运行实体为:进程或者线程。由于进程与线程的处理过程很类似,因此本文仅以进程为例来进行说明。参见图1,所有被管理结点上的客户机103向管理端口102发送服务请求,由管理服务器101内的进程处理该请求并将处理结果返回客户端103。
在现有技术中,管理服务器101对机群实现集中并发管理的方法通常有以下两种:
现有技术一:普通并发管理方法。如图2所示,本方法中,管理服务器内的一主控制进程201侦听管理服务端口102上的服务请求,每当在管理服务端口102上接收到一个新连接请求,主控制进程201就动态创建一个临时子进程202来处理该连接请求,临时子进程202作完处理并将结果返回给发送请求的客户端后,自行销毁。本方法有一个明显的缺陷:主控制进程201对临时子进程202的管理是面向连接的而不是面向任务的,即主控制进程201无法预知任务所需的进程数目,因此为每个连接只创建一个临时子进程202。如果需要为一个连接创建并分配多个进程,该工作只能由连接所对应的临时子进程202来完成,效率不高;另外,使用本方法必然要频繁地动态建立进程和销毁进程,而建立和销毁进程是一种很耗费资源的系统操作,因此导致资源浪费严重。
现有技术二:采用运行实体池结构和细粒度锁机制的并发管理方法,所述的运行实体池为进程池或线程池,由于进程池与线程池的处理过程很类似,因此本文仅以进程池为例来进行说明。如图3所示,本方法中,管理服务器内的主控制进程301动态维护进程池302中的一个以上进程。进程池302中的多个进程同时处于侦听状态,当某个进程接收到来自客户端的请求时,该进程立即进入到处理状态,而其它进程仍处于侦听状态,这样可以在一定程度上提高系统的并发处理效率。管理服务器周期检查进程池302中每个进程的状态,并始终保持一定数目的空闲进程。当由于任务多而导致进程池中的空闲进程不足时,管理服务器自动向进程池302中创建一些新的空闲进程;当进程池302中的空闲进程数目超过预期时,管理服务器自动销毁一定数目的空闲进程。本方法不需实时动态建立和销毁进程,可使进程持久化,节省了资源。同时,由于进程池302保持了一定数量的空闲进程,因此可以随时实现面向任务的进程分配。
在上述的并发管理方法中,还存在资源竞争的问题,所述的资源指的是管理服务器101所维护的、用于管理整个机群系统的、被所有进程所共享的表明全局状态的信息。所述的资源有各种类型,例如结点状态信息和服务状态信息等。每种类型的资源包含有多个资源实例,而所有具有相同资源类型的资源实例构成了一个资源子集。例如机群中部署了两个服务:Web服务和Mail服务,Web服务的状态信息与Mail服务的状态信息就是服务状态资源中的两个实例,它们属于同一种资源类型,因而构成了一个资源子集。
由于管理任务的相关性比较强,在多任务,即多进程并发处理的环境下,竞争同一个资源而导致进程间冲突的可能性较大,所以如果不能很好地解决资源竞争问题,将大大降低进程池的并发处理效率。因此,上述并发管理方法中的资源竞争问题采用细粒度锁机制来解决。
所述“细粒度锁机制”是指为每一个资源实例创建一把细粒度锁,该细粒度锁为互斥锁,每把细粒度锁都有一个唯一的标识。细粒度锁有两种状态:开锁状态和加锁状态。开锁意味着当前没有进程“单独占用”该资源实例;加锁意味着当前该资源实例已被某个进程单独占用。所述的细粒度锁机制包括下列基本操作:
1、加锁操作,即管理服务器能够一次性地对某个资源子集中的任意资源实例进行加锁。如果某个资源实例已经被其它进程所占用,即该资源实例所对应的细粒度锁处于加锁状态,则后续占用该资源实例的进程进入阻塞睡眠状态,当资源实例被解锁时,所有阻塞于该资源实例的进程将被唤醒。
2、开锁操作,管理服务器能够一次性地对某个资源子集中的任意资源实例进行开锁。
3、获取锁状态,管理服务器能够一次性地获取某个资源子集中的任意资源实例所对应的锁状态。
在“细粒度锁机制”中,进程处理任务的常规流程为:进程一次性地获取待处理任务所需要的资源实例,为资源实例加锁,并利用获取的资源实例对任务进行处理。在多进程发生资源冲突的情况下,“细粒度锁机制”还会作串行处理,参见图4,以两个进程,即进程1和进程2为例,具体说明应用“细粒度锁机制”处理多进程资源冲突的实现方法,其具体为:进程1在处理任务前,首先一次性地获取待处理任务所需要的所有资源实例,并为所有资源实例加锁,获取资源,并利用获取的资源对任务进行处理;此时,如果进程2所需要的资源实例和进程1所独占的资源实例有冲突,则进程2进入阻塞睡眠状态,当进程1处理完任务并对全部资源实例解锁后,进程2再为其所需要的资源实例加锁,并进行处理。应用“细粒度锁机制”,在多个进程同时请求某个共享资源时,使原本并发执行的进程改为串行执行,进程执行的顺序是随机的,即哪个进程先获得资源,就先执行处理。上述的细粒度锁机制有多种实现方式,例如可用现代通用的操作系统所提供的进程间通信机制(IPC)来实现。
在现有技术二中相对于现有技术一有很多优势,但现有技术二还存在以下缺陷:
1、当多任务冲突时,处理效率低下。
进程池中的进程在执行任务时是彼此独立的,虽然通过细粒度锁可以将多个争夺相同资源实例的进程进行串行化排序,但是,在大多数情况下相互冲突的任务只是由于对部分资源实例的争夺而造成的,并非争夺任务所需的全部资源实例,而且,即使缺少了部分资源实例,有些任务仍然可以继续处理。因此,应用上述方法,必然导致一个任务占用资源时,其他所有与其有资源冲突的进程都无法执行处理,由此导致服务器的处理效率不高。
2、当单进程处理大任务时,处理效率低下。
所述的大任务是指由一系列耗时的子任务组成的任务集。上述的并发管理方法在处理大任务时,是在一个进程中顺序处理该大任务中的多个子任务,而每个子任务都要耗费一定的时间,因此,大大加长了处理时间,处理效率不高。例如,对于规模非常庞大和复杂的机群而言,一个结点上可能运行着多个服务,若结点发生故障,则故障的恢复就是一个大任务,该结点上每一个故障的恢复作为一项子任务可能都需要几秒甚至是几十秒钟的时间,因此,利用现有技术二所述的方法必然会导致整个故障结点的恢复效率的低下,又由于运行在结点上的服务数目是不确定的,因此故障结点恢复的时间也是很难预期的。
发明内容
有鉴于此,本发明的主要目的是提供一种对机群实现集中并发管理的方法,使原有的串行处理方式改为并行处理方式,提高对机群并发管理的管理效率。
为了实现上述目的,本发明所述方法的基本构思为:利用多个运行实体同时侦听任务请求并处理任务,当某个任务所用到的资源与其他任务所用资源冲突时,裁减掉该任务中的利用冲突资源的部分,继续处理裁减后的任务,同时将裁减掉的任务创建为新任务,使该新任务处于等待处理状态,直到冲突资源被释放,再对该新任务进行处理;当运行实体侦听到一大任务请求时,将该大任务分解成多个子任务,分别由机群管理服务器中的不同运行实体同时进行处理。
本发明的技术方案具体是这样实现的:
一种对机群实现集中并发管理的方法,该方法包括:
a、机群管理服务器中的运行实体侦听到的来自机群客户端的任务请求信息;
b、根据所述任务请求获取所述任务所需的资源子集,再根据资源子集中资源实例的细粒度锁状态获得资源子集中所有可用的资源实例,并判断该资源子集中的资源实例是否都可用,如果是,则按照常规流程处理所述任务,结束流程;否则,裁减所述任务中涉及不可用资源实例的部分任务,同时将裁减掉的部分任务创建为新任务,并将所述新任务写入预先设置的全局任务列表中;
c、按照常规流程处理所述经过裁减的任务;
d、机群管理服务器中的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析,根据解析结果,调用与之相对应的任务处理模块进行常规处理。
所述步骤c中按照常规流程处理所述经过裁减的任务之前,进一步包括:
判断所述经过裁减的任务是否为由一个以上独立子任务构成的大任务,如果是,则将所述任务分解为一个以上独立子任务,并将所述子任务写入一预先设定的全局任务列表中,并执行步骤d;否则,再按照常规流程处理所述经过裁减的任务。
步骤d中所述的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析之后,进一步包括:
判断读取到的任务所用到的资源是否都可用,若是,则继续执行后续步骤;否则,裁减所述任务中涉及不可用资源实例的部分任务,同时将裁减掉的部分任务创建为新任务,并将所述新任务写入预先设置的全局任务列表中,返回步骤c。
步骤d所述根据解析结果,调用与之相对应的任务处理模块后,进一步包括:
所述任务处理模块再次判断是否需要执行所述读取的任务,如果是,则再对该任务进行常规处理,否则,直接结束本流程。
步骤b所述判断资源子集中的资源实例是否都可用的方法为:判断所有可用资源实例的数目是否与资源子集中全部资源实例的数目相同,如果是,则所述资源子集中的资源实例都可用,否则,所述资源子集中有不可用资源实例。
所述获取所述资源子集中所有可用资源实例的具体过程为:
a1、获取所述资源子集中所有资源实例的细粒度锁状态;
a2、依次读取所述资源子集中的资源实例的细粒度锁状态,并判断当前读取的资源实例是否处于开细粒度锁状态,如果是,则获取该资源实例,并执行步骤a3;否则,将该资源实例从该资源子集中删除,执行步骤a3;
a3、判断当前读取的资源实例是否为资源子集中最后一个资源实例,如果是,结束获取流程;否则,继续执行步骤a2,读取下一个资源实例。
所述全局任务列表包括:用于存放任务实体的任务表、用于保存当前任务表中任务数的任务计数器、用于指向任务计数器的任务数指针、用于指向任务表的任务表指针和一个用于实现运行实体对全局任务列表进行互斥读取的互斥锁,所述的任务实体包括任务类型和参数信息。
所述向全局任务列表中写入任务的过程包括以下步骤:
b1、将所述的互斥锁加锁;
b2、读取任务计数器内的任务数,并将任务数加1;
b3、通过任务表指针获取任务表的首地址,将步骤b2所述的任务数与任务实体大小之积与任务表首地址相加,得到待写入任务的存储位置;
b4、将待写入任务的任务类型与参数信息写入任务表中步骤b3所述的存储位置;
b5、将所述的互斥锁解锁。
所述空闲运行实体互斥并发读取全局任务列表的具体过程包括:
c1、将所述互斥锁加锁;
c2、判断所述全局任务列表中是否有待读取任务,若有,则读取该任务,并将该任务从全局任务列表中删除,且将所述任务计数器减1,执行下一步;否则,直接执行下一步;
c3、将所述互斥锁解锁;
所述并发读取全局任务列表的空闲运行实体为:机群管理服务器中处理完当前任务且释放了所有资源后的空闲运行实体,或者机群管理服务器中接收到读取命令的空闲运行实体。
所述读取命令的发送方为:机群管理服务器中向全局任务列表写入任务的运行实体。
所述运行实体为进程或线程。
一种对机群实现集中并发管理的方法,其特征在于,该方法包括:
d1、机群管理服务器中的运行实体根据侦听到的来自机群客户端的任务请求信息,判断该任务是否为一个以上独立子任务构成的大任务,如果是,则将所述任务分解为一个以上独立子任务,并将所述子任务写入一预先设定的全局任务列表中,并执行下一步骤;否则,获取所述任务用到的资源实例,并按照常规流程正常处理所述任务,并结束流程;
d2、机群管理服务器中的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析,根据解析结果,调用与之相对应的任务处理模块进行常规处理。
步骤d2所述根据解析结果,调用与之相对应的任务处理模块后,进一步包括:
所述任务处理模块再次判断是否需要执行所读取任务,如果是,则再对该任务进行常规处理,否则,直接结束本流程。
所述全局任务列表包括:用于存放任务实体的任务表、用于保存当前任务表中任务数的任务计数器、用于指向任务计数器的任务数指针、用于指向任务表的任务表指针和一个用于实现运行实体对全局任务列表进行互斥读取的互斥锁,所述的任务实体包括任务类型和参数信息。
所述向全局任务列表中写入任务的过程包括以下步骤:
e1、将所述的互斥锁加锁;
e2、读取任务计数器内的任务数,并将该任务数加1;
e3、通过任务表指针获取任务表的首地址,将步骤e2所述的任务数与任务实体大小之积与任务表首地址相加,得到待写入任务的存储位置;
e4、将待写入任务的任务类型与参数信息写入任务表中步骤e3所述的存储位置;
e5、将所述的互斥锁解锁。
所述机群管理服务器中的空闲运行实体互斥并发读取全局任务列表的具体过程包括:
f1、将所述互斥锁加锁;
f2、判断所述全局任务列表中是否有待读取任务,若有,则读取该任务,并将该任务从全局任务列表中删除,且将所述任务计数器减1,执行下一步;否则,直接执行下一步;
f3、将所述互斥锁解锁。
所述并发读取全局任务列表的空闲运行实体为:机群管理服务器中处理完当前任务且释放了所有资源后的空闲运行实体,或者机群管理服务器中接收到读取命令的空闲运行实体。
所述读取命令的发送方为:机群管理服务器中向全局任务列表写入任务的运行实体。
所述运行实体为进程或线程。
所述按常规流程处理任务的方法为:为资源实例加锁,并利用获取的资源实例对任务进行处理。
由于本发明所述的方法采用包含多个运行实体的运行实体池结构作为基础程序结构,结合灵活的细粒度机制,并采用高效的并发任务管理机制来实现对机群的集中并发管理,在多任务的资源实例冲突时,将资源冲突的部分任务置后处理,并发处理没有资源冲突的任务,从而能够有效地解决多个运行实体因任务的资源冲突而造成的管理效率降低的问题,使得系统的整体管理过程更加迅速;在发生故障等大任务时,能够使多个独立的运行实体同时参与故障的恢复,充分利用多个结点的处理资源,大大减小了故障处理总时间,提高了应用的可用性。此外,由于动态调整的运行实体池使管理服务器具有良好的可伸缩性,因此能够满足各种规模的机群的管理需求。由于上述优点,本发明所述的方法特别适用于对管理效率、应用可用性要求较高的复杂的计算机网络环境。
附图说明
图1为采用集中控制策略进行管理的机群系统拓扑图;
图2为现有技术一的进程结构图;
图3为现有技术二的进程池结构图;
图4为现有技术二中采用细粒度锁机制的进程顺序执行图;
图5为所述全局任务列表的存储结构图;
图6为所述任务实体的结构图;
图7为本发明第一种实施例的流程图;
图8为所述获得资源子集中所有可用资源实例的流程图;
图9为所述任务解析模块和任务处理模块的程序结构图;
图10为本发明第二实施例的流程图;
图11为本发明所述第二实施例处理两个任务资源冲突时的示意图;
图12为本发明第三实施例的流程图;
图13为本发明所述第三实施例处理大任务请求时的示意图。
具体实施方式
下面结合附图和具体实施例进一步说明本发明的实施方法。
本发明所述的方法在采用现有的运行实体池结构和细粒度机制的基础上,结合一种灵活的任务并发管理机制来实现对机群的集中并发管理,从而保证对机群实现高效、可靠地管理。
所述的运行实体为:进程或者线程。下面以进程为例来说明所述实施例。
预先在管理服务器中建立一全局任务列表,所述的全局任务列表为一套数据结构的集合,如图5所示,该全局任务列表由五个部分组成:任务计数器(task_counter)501、任务表(task_list)502、任务数指针503、任务表指针504和一个互斥锁505。任务计数器501保存的是当前任务表502中的任务数;任务表502是一系列任务实体(task_entity)的集合,每个任务实体对应一个独立的任务。任务计数器501与任务表502保存在一块由主控制进程在管理服务器初始化时创建的共享存储区域里。任务数指针503和任务表指针504是两个指针类型的全局变量,分别指向任务计数器501和任务表502。在主进程空间506内,这两个全局变量指针在管理服务器初始化的时候被赋值;所有子进程空间507都保存了全局变量的副本,该副本的创建由操作系统的创建进程的系统调用自身来完成。所述互斥锁505用于在进程间实现互斥并发操作全局任务列表,所述的操作为向全局任务列表写入任务或者从全局任务列表读取任务,如果某个进程要操作全局任务列表,则先将该互斥锁加锁,其他进程就不能再操作全局任务列表,进程操作结束后再将该互斥锁解锁。由此实现始终为单进程操作全局任务列表,所以不会造成进程间操作全局任务列表的冲突。
图6为一任务实体的结构图,如图6所示,任务实体包括任务类型字段601、参数个数字段602和若干参数字段603。所述的任务类型为用于区别不同任务实体的标识性信息。由于在机群中,存在着各种需要进行不同处理的任务实体,因此每个任务类型都对应着一个的处理流程,每个处理流程对应存储在任务处理模块中。所述的参数为在一个任务的处理过程中需要的信息。由于不同的任务实体所需要的参数个数可能不同,因此所述的参数个数字段602用于保存本任务实体所需的参数个数。保存参数的方式为:取所有任务实体中,包含任务参数个数的最大值MAX,并使任意任务实体都具有能够容纳MAX个任务参数的相同存储空间,同时,在任务实体中增加一个参数个数字段602,用来记录实际使用的任务参数字段的个数。由于任务参数的类型也可能有差异,为了提供一种通用的存储机制,管理服务器将所有任务参数都以字符串形式保存,而具体任务参数类型的转换则由每个任务的处理流程自己解决。
以下是本发明的一个较佳实施例的具体实施流程,如图7所示,该流程包括:
步骤701、进程池中的多个进程同时处于侦听状态,进程池中侦听到任务请求的进程进入到处理任务状态;进程池中未侦听到任务请求的进程仍处于侦听状态。
步骤702、所述侦听到任务请求的进程根据任务请求的内容确定该任务所用到的资源子集,并获取该资源子集中所有可用的资源实例。
步骤703、判断所述任务用到的资源子集中的资源实例是否都可用,即判断所有可用资源实例的数目是否与资源子集中全部资源实例的数目相同,如果是,则执行步骤710;否则,执行下一步骤;
步骤704、将所述任务中所涉及冲突资源的部分任务裁减掉,同时将裁减掉任务创建为一新任务,将该新任务写入所述的全局任务列表中等待处理。
步骤705、所述进入处理任务状态的进程判断所述经过裁减后的任务是否为一需要拆分的大任务,如果是,则执行下一步骤,否则,执行步骤708;
所述判断任务是否需要拆分,根据系统配置会有不同的判断机制,例如,如果一个任务由一个以上相互独立的子任务组成,则该任务为一个需拆分的大任务。
步骤706、将所述任务分解为多个子任务,并将所述的子任务写入所述全局任务列表中等待处理,并向进程池中与子任务数量相等的且处在侦听状态的多个进程发送读取全局任务列表的命令。
步骤707、上述进程池中的多个进程收到读取全局任务列表的命令后,互斥并发读取全局任务列表,对读取到的任务进行解析,执行步骤712。
步骤708、对裁减后的任务按照常规流程进行处理,即获取裁减后任务的资源实例,为资源实例加锁,并利用获取的资源实例对所述裁减后的任务按常规流程进行处理。
步骤709、所述进程在处理完当前任务,且释放了所有占用的资源后,即为所占用的资源实例解细粒度锁后,主动互斥并发读取全局任务列表,对读取到的任务进行解析,执行步骤712。
步骤710、所述进入处理任务状态的进程判断所述任务是否为一需要拆分的大任务,如果是,则执行步骤706,否则,执行下一步骤;
步骤711、按常规流程处理所述任务,即获取所述任务的资源实例,为资源实例加锁,并利用这些资源实例对所述任务进行处理,结束流程。
步骤712、并根据解析结果,确定读取到任务所用到的资源子集,获取该资源子集中所有可用资源实例,并判断该资源子集中的所有资源实例是否都可用,若是,则执行下一步骤;否则,返回步骤704。
步骤713、调用与所述读取到的任务相对应的任务处理模块进行常规处理。
上述步骤702中,所述获取资源子集中所有可用资源实例的具体过程如图8所示,包括:
步骤801、获取所述资源子集中所有资源实例的细粒度锁状态;
步骤802、依次读取所述资源子集中的资源实例的细粒度锁状态,并判断当前读取的资源实例是否处于开细粒度锁状态,如果是,则说明该资源实例与其他任务用到的资源实例不冲突,即该资源实例可用,此时获取该资源实例,并执行步骤803;否则,说明该资源实例与其他任务用到的相应资源实例发生冲突,即该资源实例不可用,此时将该资源实例从该资源子集中删除,再执行步骤803。
步骤803、判断当前读取的资源实例是否为资源子集中最后一个资源实例,如果是,结束获取流程,输出资源子集;否则,继续执行步骤802,读取下一个资源实例。
通过上述的步骤801到步骤803可将所述资源子集中的可用资源实例保留,并过滤掉不可用资源实例,从而获取资源子集中所有可用的资源实例。
上述步骤704和步骤706所述的将任务写入全局任务列表的具体过程为:
a、将所述互斥锁加锁;
b、通过任务数指针得到task_counter的任务数,并将task_counter的任务数加1;
c、通过任务表指针与任务计数器计算出新任务的存储位置,具体的计算方法为:任务表首地址加上任务数与任务实体大小之积;
d、将新任务的任务类型与参数信息写入任务实体;
e、将所述互斥锁解锁。
本发明所述方法在并发管理服务器上配置了任务解析模块和与每种任务类型相对应的任务处理模块,如图9所示,所述的任务解析模块901用于解析任务的类型,并根据该任务类型调用相应的任务处理模块902对任务进行处理。
上述步骤707和步骤709所述的进程互斥并发读取全局任务列表中任务的具体过程包括:
A、将所述互斥锁加锁;
B、判断所述全局任务列表中是否有任务,若有,则读取该任务,并将该任务从全局任务列表中删除,且将task_counter减1,执行下一步;否则,直接执行下一步;
C、将所述互斥锁解锁;
虽然互斥锁可以保证只有一个进程获得任务的执行权,但是由此而带来的其他进程的阻塞也是对管理服务器资源的一种浪费,因此,在解析并处理读取到的任务之前,将读取到的任务从全局任务列表中删除,以此防止多个进程同时处理相同的任务。
上述步骤712中,对读取到的任务进行解析,并根据解析结果,调用与之相对应的任务处理模块进行常规处理的具体步骤为:
D1、任务解析模块901读取任务实体的任务类型,根据该任务类型从任务处理模块组902中调用该任务类型所对应的任务处理模块;
D2、所述任务处理模块再次判断是否需要执行读取到的任务,如果是,则执行该模块内的具体处理流程,对所述的任务进行处理,否则,直接退出;
执行本步骤的原因是:当任务真正被执行时,机群的环境与生成此任务的时候相比可能已经发生了变化。如果已不再需要执行该任务,可直接退出。
上述的每一种任务类型都对应一种任务处理模块,每种任务处理模块都对应一种特定的处理流程,该处理流程由具体的任务而定,本发明所述的方法只是调用这个处理流程。
上述实施例是本发明的一种较佳实施例,本发明所述方法还可有以下实施例:
如图10所示,本发明第二实施例的具体流程包括:
步骤1001、进程池中的多个进程同时处于侦听状态,进程池中侦听到任务请求的进程进入到处理任务状态;进程池中未侦听到任务请求的进程仍处于侦听状态。
步骤1002、所述侦听到任务请求的进程根据任务请求的内容确定该任务所用到的资源子集,并获取该资源子集中所有可用的资源实例;
步骤1003、判断所述任务用到的资源子集中的资源实例是否都可用,即判断所有可用资源实例的数目是否与资源子集中全部资源实例的数目相同,如果是,则按常规流程处理所述任务,结束本流程;否则,执行下一步骤;
步骤1004、将所述任务中所涉及不可用资源实例的部分任务裁减掉,同时将裁减掉的部分任务创建为一新任务,将该新任务写入一全局任务列表中等待处理,再对所裁减的任务按照正常方式进行处理,即利用可用的资源实例对所述裁减后的任务按常规流程进行处理;
步骤1005、所述进程在处理完当前任务且释放了所有占用的资源后,主动互斥并发读取全局任务列表,对读取到的任务进行解析;
步骤1006、根据解析结果,判断所述任务用到的资源子集中的资源实例是否都可用,即判断所有可用资源实例的数目是否与资源子集中全部资源实例的数目相同,如果是,则执行下一步骤;否则,返回步骤1004。
步骤1007、调用与之相对应的任务处理模块进行常规处理
以下通过一个具体的应用实例来说明上述第二实施例。
假设结点1上部署了服务1与服务2,结点2上部署了服务2和服务3,结点1和结点2先后加入机群并向集中管理器发出请求服务的任务,此时,结点1和结点2发送的任务请求中均包括服务2,所以两个任务在利用服务2的资源时会造成冲突。
图11为本发明所述第二实施例处理上述两个任务资源冲突时的示意图,如图11所示,该处理过程为:
步骤1101、结点1向进程池发出“请求服务1和服务2”的请求服务任务;
步骤1102、进程池中的进程1侦听到该请求服务任务,由侦听状态转化为忙状态,获取到可用资源,即服务1与服务2的状态信息,假设该任务的所有资源可用,因此为服务1与服务2的状态信息加细粒度锁,并执行下一步骤,对该任务按常规流程进行处理;
步骤1103、进程1向结点1发送可以启动服务1和服务2的分配服务信息,并等待启动结果;
步骤1104、结点2向进程池发出“请求服务2和服务3”的请求服务任务;
步骤1105、进程池中的进程2侦听到该请求服务任务,由侦听状态转化为忙状态,获取可用的资源,即服务3的状态信息,并为服务3的状态信息加细粒度锁。由于服务2的状态信息已经被进程1加细粒度锁,所以该任务的部分资源不可用,因此,执行下一步骤;
步骤1106、进程2将所述请求服务任务中的服务2裁减掉,只向结点2发送可以启动的服务3的服务分配信息,并等待启动结果;
步骤1107、进程2生成一新任务,该新任务为:启动服务2,并将该新任务写入所述的全局任务列表中等待处理。本步骤的目的是防止服务2在结点1启动失败时,导致服务2不可用。
步骤1108、结点1和结点2将服务的启动结果分别发送到进程1和进程2,进程1和进程2根据具体情况互斥并发读取全局任务列表:
如果进程1先处理完任务并释放资源,则进程1先读取全局任务列表中的新任务,读取到新任务后,将该新任务从全局任务列表中删除,由于此时没有资源冲突,因此进程1调用启动服务任务处理模块来处理该新任务,本实例中,所述启动服务任务处理模块的处理流程为:判断服务2是否已经启动,如果是,则进程1不执行所述的新任务,否则,执行所述的新任务,即启动服务2。
如果进程2先处理完任务并释放资源,则进程2先读取全局任务列表,读取到所述新任务后,将其从全局任务列表中删除,并判断该新任务是否有资源冲突,又由于此时进程1还在处理任务,服务2的状态信息仍处于加锁状态,因此该新任务有资源冲突,将服务2裁减掉,并为服务2再创建一新任务,该新任务为:启动服务2,并将该新任务写入全局任务列表等待读取。由于将服务2裁减后,读取到的任务中已经没有任何任务,因此进程2不再作任何处理,进入到侦听状态;当进程1完成任务并释放资源后,读取全局任务列表中的新任务,读取到新任务后,将该新任务从全局任务列表中删除,并调启动服务任务处理模块处理该新任务,本实例中,所述启动服务任务处理模块的处理流程为:判断服务2是否已处于运行状态,如果是,则进程1不执行所述的新任务,否则,执行所述的新任务,即启动服务2。
在上述应用实例中,结点1和结点2发送的任务请求中均包括服务2,所以两个任务在利用服务2的资源时造成了冲突,如果按现有技术的方法,将这两个任务进行串行化的排序,依次执行,则会使管理效率低下,而本发明所述的方法,将结点2发送的任务中与结点1发送的任务相冲突的服务2裁减掉,继续执行服务3,并将对服务2的处理生成一个新任务,写入全局任务列表,等待处理,进程对当前任务处理结束后,再处理全局任务列表中的新任务。这种方法充分调动了可用资源,提高了效率。
如图12所示,本发明第三实施例的具体流程包括:
步骤1201、进程池中的多个进程同时处于侦听状态,进程池中侦听到任务请求的进程进入到处理任务状态;进程池中未侦听到任务请求的进程仍处于侦听状态。
步骤1202、所述侦听到任务请求的进程判断所述任务是否为一需要拆分的大任务,如果是,则执行下一步骤,否则,对所述任务按常规流程进行处理;
步骤1203、将所述任务分解为多个子任务,并将所述的子任务写入一全局任务列表中等待处理,并向进程池中与子任务数量相等的且处在侦听状态的多个进程发送读取全局任务列表的命令。
步骤1204、上述进程池中的多个进程收到读取全局任务列表的命令后,互斥并发读取全局任务列表,并对读取到的任务进行解析和处理,结束流程。
以下通过一个具体的应用实例来说明上述第三实施例。
例如在结点2上运行了三个服务,服务1、服务2与服务3,结点2发生故障。此时由于结点2发生故障,则服务1、服务2和服务3都不能正常使用,因此该请求服务任务包括三个独立子任务,分别为:“服务1故障恢复”、“服务2故障恢复”和“服务3故障恢复”。
图13为本发明所述第三实施例处理上述大任务请求时的示意图,如图13所示,该处理过程为:
步骤1301、结点1向进程池发送“结点2故障处理”的请求服务任务。
步骤1302、进程池中的进程1侦听到该请求服务任务,由于该任务包括服务1故障处理、服务2故障处理与服务3故障处理,因此判断该请求服务任务为一大任务,将该大任务分解为三个子任务,并在全局任务列表中写入这三个子任务,分别为:“服务1故障恢复”、“服务2故障恢复”和“服务3故障恢复”;
步骤1303、进程1向进程池中的其它处在侦听状态的进程2、进程3和进程4,发送读取全局任务列表的命令,通知它们读取全局任务列表;
步骤1304、收到读取全局任务列表信号的进程2、进程3和进程4互斥并发读取全局任务列表;
步骤1305、进程2、进程3和进程4分别读到了上述三个新任务,经过任务解析模块解析,分别调用相应的任务处理模块对上述三个新任务进行处理,即对服务1的故障、服务2的故障和服务3的故障进行恢复。
在上述应用实例中,“结点2发生故障”的请求服务任务为一大任务,包括“服务1故障恢复”、“服务2故障恢复”和“服务3故障恢复”三个子任务,如果按现有技术的方法,由单进程处理这个大任务,浪费时间,效率低下,而本发明所述的方法将大任务分解为三个子任务,由三个进程分别同时执行这三个子任务,节约了时间,提高了效率。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (22)
1、一种对机群实现集中并发管理的方法,其特征在于,该方法包括:
a、机群管理服务器中的运行实体侦听到的来自机群客户端的任务请求信息;
b、根据所述任务请求获取所述任务所需的资源子集,再根据资源子集中资源实例的细粒度锁状态获得资源子集中所有可用的资源实例,并判断该资源子集中的资源实例是否都可用,如果是,则按照常规流程处理所述任务,结束流程;否则,裁减所述任务中涉及不可用资源实例的部分任务,同时将裁减掉的部分任务创建为新任务,并将所述新任务写入预先设置的全局任务列表中;
c、按照常规流程处理所述经过裁减的任务;
d、机群管理服务器中的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析,根据解析结果,调用与之相对应的任务处理模块进行常规处理。
2、如权利要求1所述的方法,其特征在于,步骤c所述按照常规流程处理所述经过裁减的任务之前,进一步包括:
判断所述经过裁减的任务是否为由一个以上独立子任务构成的大任务,如果是,则将所述任务分解为一个以上独立子任务,并将所述子任务写入一预先设定的全局任务列表中,直接执行步骤d;否则,再按照常规流程处理所述经过裁减的任务。
3、如权利要求1或2所述的方法,其特征在于,步骤d所述的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析之后,进一步包括:
判断读取到的任务所用到的资源是否都可用,若是,则继续执行后续步骤;否则,裁减所述任务中涉及不可用资源实例的部分任务,同时将裁减掉的部分任务创建为新任务,并将所述新任务写入预先设置的全局任务列表中,返回步骤c。
4、如权利要求1或2所述的方法,其特征在于,步骤d所述根据解析结果,调用与之相对应的任务处理模块后,进一步包括:
所述任务处理模块再次判断是否需要执行所述读取的任务,如果是,则再对该任务进行常规处理,否则,直接结束本流程。
5、如权利要求1或2所述的方法,其特征在于,步骤b所述判断资源子集中的资源实例是否都可用的方法为:判断所有可用资源实例的数目是否与资源子集中全部资源实例的数目相同,如果是,则所述资源子集中的资源实例都可用,否则,所述资源子集中有不可用资源实例。
6、如权利要求1或2所述的方法,其特征在于,获取所述资源子集中所有可用资源实例的具体过程为:
a1、获取所述资源子集中所有资源实例的细粒度锁状态;
a2、依次读取所述资源子集中的资源实例的细粒度锁状态,并判断当前读取的资源实例是否处于开细粒度锁状态,如果是,则获取该资源实例,并执行步骤a3;否则,将该资源实例从该资源子集中删除,执行步骤a3;
a3、判断当前读取的资源实例是否为资源子集中最后一个资源实例,如果是,结束获取流程;否则,继续执行步骤a2,读取下一个资源实例。
7、如权利要求1或2所述的方法,其特征在于,所述全局任务列表包括:用于存放任务实体的任务表、用于保存当前任务表中任务数的任务计数器、用于指向任务计数器的任务数指针、用于指向任务表的任务表指针和一个用于实现运行实体对全局任务列表进行互斥读取的互斥锁,所述的任务实体包括任务类型和参数信息。
8、如权利要求7所述的方法,其特征在于,所述向全局任务列表中写入任务的过程包括以下步骤:
b1、将所述的互斥锁加锁;
b2、读取任务计数器内的任务数,并将任务数加1;
b3、通过任务表指针获取任务表的首地址,将步骤b2所述的任务数与任务实体大小之积与任务表首地址相加,得到待写入任务的存储位置;
b4、将待写入任务的任务类型与参数信息写入任务表中步骤b3所述的存储位置;
b5、将所述的互斥锁解锁。
9、如权利要求7所述的方法,其特征在于,所述空闲运行实体互斥并发读取全局任务列表的具体过程包括:
c1、将所述互斥锁加锁;
c2、判断所述全局任务列表中是否有待读取任务,若有,则读取该任务,并将该任务从全局任务列表中删除,且将所述任务计数器减1,执行下一步;否则,直接执行下一步;
c3、将所述互斥锁解锁;
10、如权利要求1或2所述的方法,其特征在于,所述并发读取全局任务列表的空闲运行实体为:机群管理服务器中处理完当前任务且释放了所有资源后的空闲运行实体,或者机群管理服务器中接收到读取命令的空闲运行实体。
11、如权利要求10所述的方法,其特征在于,所述读取命令的发送方为:机群管理服务器中向全局任务列表写入任务的运行实体。
12、如权利要求1或2所述的方法,其特征在于,所述运行实体为进程或线程。
13、如权利要求1或2的方法,其特征在于,所述按常规流程处理任务的方法为:为获取的资源实例加锁,并利用获取的资源实例对任务进行处理。
14、一种对机群实现集中并发管理的方法,其特征在于,该方法包括:
d1、机群管理服务器中的运行实体根据侦听到的来自机群客户端的任务请求信息,判断该任务是否为一个以上独立子任务构成的大任务,如果是,则将所述任务分解为一个以上独立子任务,并将所述子任务写入一预先设定的全局任务列表中,并执行下一步骤;否则,获取所述任务用到的资源实例,按照常规流程正常处理所述任务,并结束流程;
d2、机群管理服务器中的空闲运行实体互斥并发读取上述全局任务列表,并对读取到的任务进行解析,根据解析结果,调用与之相对应的任务处理模块进行常规处理。
15、如权利要求14所述的方法,其特征在于,步骤d2所述根据解析结果,调用与之相对应的任务处理模块后,进一步包括:
所述任务处理模块再次判断是否需要执行所读取任务,如果是,则再对该任务进行常规处理,否则,直接结束本流程。
16、如权利要求14所述的方法,其特征在于,所述全局任务列表包括:用于存放任务实体的任务表、用于保存当前任务表中任务数的任务计数器、用于指向任务计数器的任务数指针、用于指向任务表的任务表指针和一个用于实现运行实体对全局任务列表进行互斥读取的互斥锁,所述的任务实体包括任务类型和参数信息。
17、如权利要求16所述的方法,其特征在于,所述向全局任务列表中写入任务的过程包括以下步骤:
e1、将所述的互斥锁加锁;
e2、读取任务计数器内的任务数,并将该任务数加1;
e3、通过任务表指针获取任务表的首地址,将步骤e2所述的任务数与任务实体大小之积与任务表首地址相加,得到待写入任务的存储位置;
e4、将待写入任务的任务类型与参数信息写入任务表中步骤e3所述的存储位置;
e5、将所述的互斥锁解锁。
18、如权利要求16所述的方法,其特征在于,所述机群管理服务器中的空闲运行实体互斥并发读取全局任务列表的具体过程包括:
f1、将所述互斥锁加锁;
f2、判断所述全局任务列表中是否有待读取任务,若有,则读取该任务,并将该任务从全局任务列表中删除,且将所述任务计数器减1,执行下一步;否则,直接执行下一步;
f3、将所述互斥锁解锁。
19、如权利要求14所述的方法,其特征在于,所述并发读取全局任务列表的空闲运行实体为:机群管理服务器中处理完当前任务且释放了所有资源后的空闲运行实体,或者机群管理服务器中接收到读取命令的空闲运行实体。
20、如权利要求19所述的方法,其特征在于,所述读取命令的发送方为:机群管理服务器中向全局任务列表写入任务的运行实体。
21、如权利要求14至20任一所述的方法,其特征在于,所述运行实体为进程或线程。
22、如权利要求14所述的方法,其特征在于,所述按常规流程处理任务的方法为:为获取的资源实例加锁,并利用获取的资源实例对任务进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100086738A CN1315045C (zh) | 2004-03-16 | 2004-03-16 | 一种对机群实现集中并发管理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100086738A CN1315045C (zh) | 2004-03-16 | 2004-03-16 | 一种对机群实现集中并发管理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1670705A CN1670705A (zh) | 2005-09-21 |
CN1315045C true CN1315045C (zh) | 2007-05-09 |
Family
ID=35041978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100086738A Expired - Fee Related CN1315045C (zh) | 2004-03-16 | 2004-03-16 | 一种对机群实现集中并发管理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1315045C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699363A (zh) * | 2013-12-13 | 2014-04-02 | 华中科技大学 | 一种用于在多核平台下优化关键临界区的方法 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101370024B (zh) * | 2007-08-15 | 2012-10-31 | 北京灵图软件技术有限公司 | 信息的分布式采集方法及系统 |
CN101140528B (zh) * | 2007-08-31 | 2013-03-20 | 中兴通讯股份有限公司 | 一种实现集群内定时任务负载分担的方法及装置 |
CN101201753B (zh) * | 2007-12-13 | 2012-12-26 | 浪潮通信信息系统有限公司 | 一种多状态机管理引擎的配置管理方法 |
CN101984404B (zh) * | 2010-11-04 | 2014-02-05 | 东莞宇龙通信科技有限公司 | 控制应用程序并行运行的方法、装置及具有该装置的终端 |
CN102043669B (zh) * | 2010-12-22 | 2013-01-09 | 中国农业银行股份有限公司 | 一种工作流并发模式的控制方法及装置 |
CN102880503B (zh) * | 2012-08-24 | 2015-04-15 | 新浪网技术(中国)有限公司 | 数据分析系统及数据分析方法 |
CN103577594A (zh) * | 2013-11-13 | 2014-02-12 | 广州市久邦数码科技有限公司 | 一种锁屏界面信息推送系统及方法 |
CN103984544A (zh) * | 2014-04-24 | 2014-08-13 | 浪潮电子信息产业股份有限公司 | 一种避免任务同时执行的方法 |
CN106095585B (zh) * | 2016-06-22 | 2019-08-30 | 中国建设银行股份有限公司 | 任务请求处理方法、装置和企业信息系统 |
CN105959238A (zh) * | 2016-06-28 | 2016-09-21 | 深圳市彬讯科技有限公司 | 一种基于消息队列多优先级渲染资源的调度方法及系统 |
CN111385255B (zh) * | 2018-12-28 | 2022-05-06 | 北京金山云网络技术有限公司 | 一种异步调用实现方法、装置、服务器及服务器集群 |
CN111949471A (zh) * | 2019-05-16 | 2020-11-17 | 珠海格力电器股份有限公司 | 一种用于终端进程的监听控制方法 |
CN110569115B (zh) * | 2019-08-15 | 2023-08-04 | 贝壳技术有限公司 | 多点部署的进程管理方法及进程的争夺方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120701A1 (en) * | 2001-12-20 | 2003-06-26 | Darren Pulsipher | Mechanism for managing execution environments for aggregated processes |
CN1466050A (zh) * | 2002-07-02 | 2004-01-07 | 联想(北京)有限公司 | 大规模异构机群的管理系统 |
-
2004
- 2004-03-16 CN CNB2004100086738A patent/CN1315045C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120701A1 (en) * | 2001-12-20 | 2003-06-26 | Darren Pulsipher | Mechanism for managing execution environments for aggregated processes |
CN1466050A (zh) * | 2002-07-02 | 2004-01-07 | 联想(北京)有限公司 | 大规模异构机群的管理系统 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699363A (zh) * | 2013-12-13 | 2014-04-02 | 华中科技大学 | 一种用于在多核平台下优化关键临界区的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1670705A (zh) | 2005-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1315045C (zh) | 一种对机群实现集中并发管理的方法 | |
CN1906586A (zh) | 用于在多处理器系统中处置处理错误的方法和设备 | |
CN1114859C (zh) | 数据共享方法和计算机体系结构 | |
CN1292346C (zh) | 用于在分布式计算体系结构中执行作业的系统和方法 | |
CN1908903A (zh) | 执行作业步的系统和方法以及计算机产品 | |
CN1154928C (zh) | 用于多任务设施信息处理系统的资源管理方法和设备 | |
CN1917504A (zh) | 一种避免资源数据共享访问导致死锁的加锁方法 | |
CN101055533A (zh) | 一种多线程处理器动态内存管理系统及方法 | |
CN1719831A (zh) | 基于集群路由器结构的高可用分布式边界网关协议系统 | |
CN101031886A (zh) | 网络系统、管理计算机、集群管理方法以及计算机程序 | |
CN101079902A (zh) | 海量数据分级存储方法 | |
CN1664803A (zh) | 用于使能多节点计算机系统中操作系统资源的分配的机制 | |
CN1658145A (zh) | 可升级打印假脱机系统 | |
CN1906580A (zh) | 对于具有可移动对象的启用网格的虚拟机的方法和系统 | |
CN106033373A (zh) | 一种云计算平台中虚拟机资源调度方法和调度系统 | |
CN1208890A (zh) | 操作系统的重启动方法 | |
CN1791037A (zh) | 一种实现Web服务自动化测试的方法 | |
CN101980207B (zh) | 一种数据库访问的实现方法和系统 | |
CN1874538A (zh) | 一种呼叫事件并发处理方法 | |
CN108268546B (zh) | 一种优化数据库的方法及装置 | |
CN1251103C (zh) | 提高商务机群可服务性的方法 | |
CN1975655A (zh) | 用于管理对存储装置的访问的方法和设备 | |
CN1794183A (zh) | Java操作系统中实时任务调度的实现方法 | |
CN101079736A (zh) | 模型化的网格资源定位方法 | |
CN1889048A (zh) | 组件的实现方法以及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070509 Termination date: 20210316 |