一种任务自动拆分以及子任务并行执行的方法及其系统
技术领域
本发明涉及一种任务自动拆分以及子任务并行执行的方法及其系统,尤其涉及一种基于分布式队列实现的任务自动拆分以及子任务分布式并行执行方法及其系统。
背景技术
在分布式程序中定时调用(worker)是异步处理中常用的手段。我们往往会分布几台机器。然后让这几台机器定时运行预设置的任务。但是生成环境是瞬息万变的。可能由于客观原因,某个定时调用(worker)执行速度满足不了要求,但是线上又急于执行完定时调用任务。这个时候就需要一个功能,就是能够快速将这个定时调用要处理的内容水平拆分,分派到预设值的闲置机器上,一起处理,加快速度,尽量降低风险,并且灵活地控制定时调用执行的速度。但是平常这些预备的机器又不能闲置,所以需要一套成熟的中间单元,管理一些预备的机器,能够通过控制这些机器,控制定时调用执行的状况。
当出现某个定时调用执行慢的情景后,如果是并发执行定时调用,只需要在别的机器上部署定时调用代码,达到多定时调用执行的目的;如果是互斥定时调用,也就是说整个环境只能有一个定时调用在运行,这个时候,只有通过分析代码,优化代码,然后重新上线,才能解决问题。不管是并发执行定时调用还是互斥定时调用,如果不能及时处理执行慢的问题,可能会造成不可预知的风险。
发明内容
本发明正是鉴于以上的问题而提出的,其目的在于提供一种通过远程灵活控制将指定定时调用任务水平拆分成若干子任务,分配到其他空闲子任务服务器上,当所有子任务都运行完的时候,指定定时调用任务完成,从而通过这种方式实现快速响应执行不同定时调用任务的优先级、以及应急处理的任务的自动拆分以及子任务并行执行的方法及其系统。
本发明的任务自动拆分以及子任务并行执行的方法,包括:将需要处理的主任务拆分为多个子任务;获取能配置给子任务的单元,查看能配置给子任务的单元的状态,并筛选出没有运行相应子任务的单元;对筛选出的每个单元分配相等的参数,创建树节点,并行启动子任务;在所有子任务启动成功之后,锁定相应的主任务;子任务并行执行完成,更新树节点状态;判断是否执行完成所有子任务;在判断为执行完成所有子任务的情况下,发出执行成功的消息,并解锁相应的主任务。
本发明的任务自动拆分以及子任务并行执行的方法,其中,还包括:在判断没有执行完成所有子任务的情况下,等待执行完成其他子任务。
本发明的任务自动拆分以及子任务并行执行的方法,其中,按照自定义拆分规则将需要处理的主任务拆分为多个子任务。
本发明的任务自动拆分以及子任务并行执行的方法,其中,在树节点中存储每个子任务执行的状态,并以自定义的格式存储。
本发明的任务自动拆分以及子任务并行执行的方法,其中,能通过监控节点状态来异步判断是否执行完成所有子任务。
本发明的任务自动拆分以及子任务并行执行的方法,其中,通过指定IP地址和端口将执行成功的消息通知给主任务单元。
本发明的任务自动拆分以及子任务并行执行系统,包括:拆分单元,将需要处理的主任务拆分为多个子任务;获取筛选单元,获取能配置给子任务的单元,查看能配置给子任务的单元的状态,并筛选出没有运行相应子任务的单元;创建启动单元,对筛选出的每个单元分配相等的参数,创建树节点,并行启动子任务;锁定单元,在所有子任务启动成功之后,锁定相应的主任务;更新单元,子任务并行执行完成,更新树节点状态;判断单元,判断是否执行完成所有子任务;解锁单元,在判断为执行完成所有子任务的情况下,发出执行成功的消息,并解锁相应的主任务。
本发明的任务自动拆分以及子任务并行执行系统,其中,还包括:等待单元,在判断没有执行完成所有子任务的情况下,等待执行完成其他子任务。
本发明的任务自动拆分以及子任务并行执行系统,其中,在拆分单元中,按照自定义拆分规则将需要处理的主任务拆分为多个子任务。
本发明的任务自动拆分以及子任务并行执行系统,其中,在树节点中存储每个子任务执行的状态,并以自定义的格式存储。
本发明的任务自动拆分以及子任务并行执行系统,其中,在判断单元中,能通过监控节点状态来异步判断是否执行完成所有子任务。
本发明的任务自动拆分以及子任务并行执行系统,其中,在解锁单元中,通过指定IP地址和端口将执行成功的消息通知给主任务单元。
发明效果
通过本申请发明的上述技术方案,中间件远程控制自定义任务水平拆分成子任务,通过自定义的节点方式控制子任务并行运行,灵活控制定时调用执行的过程,间接实现了定时调用优先级的功能,加快了指定定时调用的执行速度,同时可以对生产环境的突发情况快速地响应。
附图说明
图1为表示本申请发明的任务自动拆分以及子任务并行执行系统的整体结构图。
图2为表示任务拆分以及子任务执行的示意图。
图3是本申请发明的自定义节点以及分布式队列实现的示例图。
图4为表示本申请发明的任务自动拆分以及子任务并行执行的方法的流程图。
图5为表示本申请发明的任务自动拆分以及子任务并行执行的系统的结构的方框图。
图6为表示本申请发明的任务自动拆分以及子任务并行执行装置的结构的方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
图1为表示本申请发明的任务自动拆分以及子任务并行执行的整体结构图。
如图1所示,该系统包括主任务服务器(例如图中所示的worker1~n)、中间服务器(例如包括图中所示的中间服务器客户端A以及中间服务器服务端B)、分布式应用服务器(例如图中所示的Zookeeper服务器)、缓存服务器(例如图中所示的Rdeis缓存服务器)以及子任务服务器(例如图中所示的子任务服务器1~n)。在此,需要指出图1中所例示的内容仅仅是例示,本申请发明并不限于此,也可以采用其他的设备。下面具体地进行说明。
主任务服务器是指依赖中间服务器客户端A,需要将主任务拆分为多个子任务的主任务服务器。每次执行任务前,将要执行的任务参数封装,然后向中间服务器入口提交拆分子任务分批执行请求。每次请求会把当前机器的IP地址和监听的端口同时告知中间控制单元。在中间控制单元中子任务全部处理完成后,会通过指定IP地址和端口返回消息。
中间控制服务器包括中间服务器客户端A以及中间服务器服务端B,中间服务器客户端A以依赖包的方式,让业务系统集成到中间控制服务器。中间服务器基于技术架构例如基于NIO(NIO是new IO的简称,为一种新的技术架构,比普通IO的性能高,可靠性好)的服务来处理请求),管理着所有的子任务服务器,在服务器配置界面可以配置需要处理的子任务(worker)对应不同的子任务服务器。
分布式应用单元(例如Zookeeper服务器)中配置已经分配的子任务信息,在缓存单元例如redis缓存服务器中存储定时调用任务(worker)与子服务器的映射关系、主任务拆分成子任务的配置(包括当前主任务可用的机器、拆分最大子任务数量、拆分策略)。通过预配置的方式,来确定每个类型的定时调用任务(worker),有几台子任务服务器对应,达到动态配置的效果。同时分布式应用单元中也会存储每个子任务执行的状态,并以树节点的方式按照中间控制服务器自定义的格式存储。
子任务单元(例如子任务服务器)是运行子任务的服务器。子任务服务器上必须预先部署相关子任务的代码,同时在分布式应用单元上关联子任务与子任务服务器的映射关系。在子任务服务器中不会自己启动处理子任务,统一由中间控制服务器来进行调配。需要注意的是,主任务服务器即图中所示的worker服务器也可以作为子任务服务器,避免主任务服务器拆分任务后,本身不运行数据了,造成机器的浪费。
缓存单元(例如图中所示的Redis缓存服务器)中存储worker配置,例如主任务拆分成子任务的配置(包括当前主任务可用的机器、拆分最大子任务数量、拆分策略等)。
以下,参照附图2对本申请发明的任务拆分以及子任务执行的情况具体地进行说明。图2为表示任务拆分以及子任务执行的示意图。
如图2所示,首先主任务服务器开始启动定时调用,并自定义拆分规则,然后调用远端接口。
接下来,中间控制服务器接受远端调用请求,并在redis缓存服务器中查看worker配置,例如主任务拆分成子任务的配置(包括当前主任务可用的机器、拆分最大子任务数量、拆分策略等)。
接下来,中间控制服务器根据所获取到的Worker配置而得到分配给这些子任务的机器即子任务服务器,然后在分布式应用服务器(例如Zookeeper服务器)中查看指定机器的状态,并筛选出没有在运行相同的子任务的机器,在分布式应用服务器(例如Zookeeper服务器)中根据所筛选出的没有运行相同的子任务的子任务服务器来存储每个子任务执行的状态,并以树节点的方式按照中间控制服务器自定义的格式存储。
接下来,中间控制服务器进行等分计算,对筛选出的没有运行相同的子任务的每个子任务服务器分配相等的目标参数,接下来对相应的子任务服务器发出启动指令来启动子任务。
在子任务启动完成之后打上标志位,并将该子任务执行成功的标志发送到主任务服务器,在主任务服务器中将当前的子任务放入待确认队列,并锁定相应的主任务。
接下来,子任务执行完成,在分布式应用服务器中更新树节点状态即更新子任务执行的状态,并在中间控制服务器中监控节点状态,来异步判断所有的子任务是否完成。
如果判断所有节点执行完毕,则通知主服务器任务执行成功,并将锁定的主任务解锁。
在以上的过程中,需要注意以下的情况。即
主任务服务器的拆分方式
由中间控制服务器提供接口。主任务服务器必须制定子任务执行子任务代码。其中入口参数必须是一个数组参数。这样是为了让中间控制服务器能够基于等分原则进行拆分。例如主任务服务器传来[0,1,2,3….100]的数组。中间控制服务器会根据闲置的机器来进行等分。将数组参数拆分分配到不同的机器上并行运行。
主任务服务器通知方式
主任务服务器向中间控制单元申请拆分子任务,并且子任务启动后,会立马给主任务服务器一个反馈。反馈格式例如可以是json(json为轻量级的数据交换格式),当然也可以是其他的方式。主任务服务器收到回复之后,会立刻将该主任务放到锁定队列中,等待子任务都处理完成,才算这次主任务执行完成。
子任务通过分布式应用服务器例如zk服务器实现的分布式队列的方式,使得中间控制服务器每次都会比对是否执行完了所有的子任务。如果全部执行完了,立刻通过主任务绑定的ip和端口,socket(套接字,是机器间的联通方式)连接告知主任务服务器。让主任务立刻解锁,然后立刻继续执行。
中间控制服务器独立部署
由于中间控制服务器是独立部署的,所以主任务服务器与子任务服务器没有任何关联。由于是可插拔式的,随时可以让主任务服务器不需要拆分。而且主任务服务器和子任务服务器都是因作用不同而划分的,其实完全也可以是一台服务器。
以下,图3是本申请发明的自定义节点以及分布式队列实现的示例图。以下是对示例中的节点的说明:
/worker/worker_name/queue是每个worker名字叫做work_name的子任务队列集合
/worker/worker_name/num是指worker_name拆分的子任务服务器数量
/worker/worker_name/queue/finish是标志节点,表示整个worker所有的子任务全部完成
中间控制服务器通过监控完成节点,来异步判断所有的子任务是否完成。在判断为所有子任务已完成的情况下,同时回调主任务服务器,告知其可以继续运行新任务。对于本领域技术人员而言,图3仅仅是例示,本申请发明并不限于此。
接下来,参照图4对本申请发明的任务自动拆分以及子任务并行执行的方法的流程具体地进行说明。图4为表示本申请发明的任务自动拆分以及子任务并行执行的方法的流程图。
如图4所示,首先,本申请发明的任务自动拆分以及子任务并行执行系统开始运行。按照自定义拆分规则将需要处理的主任务拆分为多个子任务(步骤S1)。所谓自定义拆分规则,就是由上层业务系统自己实现的拆分规则。实现的方式是中间件定义了相应的api(应用程序接口),上层业务系统实现后,然后每次向中间件提交申请来拆分子任务执行请求的时候,同时会把拆分规则也当做参数传来。中间件如果发现上层用户自定义了拆分规则,则遵守上层业务的规则,否则使用中间件默认的规则。
接下来,获取能配置给子任务的单元,查看能配置给子任务的单元的状态,并筛选出没有运行相应子任务的单元(步骤S2)。
接下来,对筛选出的每个单元分配相等的参数,创建树节点,并行启动子任务(步骤S3)。其中,树节点中存储每个子任务执行的状态。
接下来,在所有子任务启动成功之后,锁定相应的主任务(步骤S4)。
接下来,子任务并行执行完成,更新树节点状态即更新子任务执行的状态(步骤S5)。
接下来,判断是否执行完成所有子任务(步骤S6)。该判断可以通过监控节点状态,来异步判断所有的子任务是否完成。
在判断为没有执行完成所有子任务的情况下,等待执行完成其他子任务(步骤S7),并返回到步骤S5进一步进行判断。
在判断为所有子任务执行完成的情况下,发出执行成功的消息,并解锁主任务(步骤S8)。结束本次任务拆分及子任务并行执行的处理。
以下,参照图5对本申请发明的任务自动拆分以及子任务并行执行的系统进行说明。图5为表示本申请发明的任务自动拆分以及子任务并行执行的系统的结构的方框图。
如图5所示,本申请发明的任务自动拆分以及子任务并行执行的系统包括拆分单元、获取筛选单元、创建启动单元、锁定单元、更新单元、判断单元和解锁单元。其中,拆分单元,将需要处理的主任务拆分为多个子任务;获取筛选单元,获取能配置给子任务的单元,查看能配置给子任务的单元的状态,并筛选出没有运行相应子任务的单元;创建启动单元,对筛选出的每个单元分配相等的参数,创建树节点,并行启动子任务;锁定单元,在所有子任务启动成功之后,锁定相应的主任务;更新单元,子任务并行执行完成,更新树节点状态;判断单元,判断是否执行完成所有子任务;解锁单元,在判断为执行完成所有子任务的情况下,发出执行成功的消息,并解锁相应的主任务。
以下,参照图6对本申请发明的任务自动拆分以及子任务并行执行装置进行说明。图6为表示本申请发明的任务自动拆分以及子任务并行执行装置的结构的方框图。
如图6所示,本申请发明的任务自动拆分以及子任务并行执行装置包括主任务单元、中间控制单元(100)、分布式应用单元、子任务单元以及缓存单元。其中,中间控制单元的结构与本发明的任务自动拆分以及子任务并行执行系统的结构完全相同,可以参照图5所示。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,本领域技术人员所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明。凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。本发明的实际保护范围由权利要求来确定。
此外,本发明的上述技术方案,虽然以软件流程进行了说明,但就本领域技术人员而言,这些技术方案的一部分或全部均可以由硬件、软件或硬件与软件的组合来实现,这是不言而喻的。