一种面向信创领域高效可靠的分布式任务调度方法及系统与流程

文档序号:28549034发布日期:2022-01-19 15:24阅读:121来源:国知局
一种面向信创领域高效可靠的分布式任务调度方法及系统与流程

1.本发明属于分布式集群场景下的任务调度技术领域,特别涉及一种可简单接入的高效可靠的分布式任务调度方法及系统。


背景技术:

2.目前随着分布式解决方案需求不断增加,具体到信创领域,需要分布式集群快速、高效、可靠地处理大量任务,赋能各种业务场景。现有的调度方案要么架构复杂接入成本高,要么可靠性不高。因此研究一种面向信创领域简单高效可靠的分布式任务调度方法及系统是必要的。


技术实现要素:

3.为了克服现有的调度方法及系统可靠度不高、不高效,接入不够简单的不足,本发明提供一种简单、高效、可靠的任务调度方法。进一步地提供一种可简单接入的任务调度系统方案。
4.为实现上述目的,本发明提供如下技术方案:
5.一种面向信创领域高效可靠的分布式任务调度方法,其步骤包括:
6.1)设置多个任务执行器构成一个任务执行器集群,设置多个主从选举器;
7.2)利用各所述主从选举器对该任务执行器集群中的任务执行器进行选举,选举出一个任务执行器作为调度执行器,其余任务执行器作为工作执行器;所述调度执行器,用于定时获取任务列表、任务拆分、任务下发、工作执行器状态监控;所述工作执行器用于执行收到的任务;
8.3)调度执行器从业务系统定时获取任务列表,再通过分片算法将任务分片之后将任务下发给工作执行器,工作执行器根据收到的任务在该业务系统中执行对应的业务逻辑处理,并将处理结果返回为所述调度执行器;当调度执行器失效时,通过各所述主从选举器重新选举产生新的调度执行器;当工作执行器失效时,根据任务下发方式执行对应的策略保障任务不丢失:a)如果任务下发方式为一致性协议算法,每个工作执行器由主从选举器提供存储区,当工作执行器故障时,调度执行器从出现故障的工作执行器对应的存储区回收故障工作执行器的任务,进行任务重新派发;b)如果任务下发方式为消息队列,根据消息队列提供的未消费队列的超时重试机制进行任务重新派发。
9.进一步的,所述任务执行器中包括一任务设置数据模型,其包括分配给工作执行器的最小任务数量、任务分片方法、工作执行器执行任务线程数量、主从选举器访问地址和任务下发方式。
10.进一步的,所述任务分片方法包括水平分片方法、循环分片方法和整体分片方法。
11.进一步的,所述水平分片方法为:首先根据任务执行器的数量确定分组数,然后将任务按照分组数与每个分组最少任务数,将任务连续地分配到一个分组后再进行下一个分组分配任务,直至任务分配完毕。
12.进一步的,所述循环分片方法为:首先根据任务执行器的数量确定分组数,然后将任务按照分组数与每组最少任务数的要求,将任务循环地在分组之间分配。
13.进一步的,所述整体分片方法为:将所有任务放在一个分组。
14.进一步的,所述调度执行器中设置有initjob接口、aftersharding接口;其中,initjob接口包括入口参数nodenumber,用于设置工作执行器数量;aftersharding接口用于对成功分片的任务进行业务状态处理。
15.进一步的,所述工作执行器中设置有单任务处理接口和批处理任务接口;其中,当工作执行器调用单任务处理接口时,将任务id作为单任务处理接口的入口参数,然后根据执行任务线程数量封装多线程处理逻辑;当工作执行器调用批量任务处理接口时,将任务列表作为批量任务处理接口的入口参数,然后进行同步单线程或异步多线程实现业务处理逻辑。
16.一种面向信创领域高效可靠的分布式任务调度系统,其特征在于,包括多个主从选举器构成的选举器集群,多个任务执行器构成的任务执行器集群;其中,
17.所述选举器集群,用于对该任务执行器集群中的任务执行器进行选举,选举出一个任务执行器作为调度执行器,其余任务执行器作为工作执行器;
18.所述调度执行器,用于从业务系统定时获取任务列表,然后进行任务拆分、任务下发,以及监控工作执行器的状态;
19.所述工作执行器,用于根据收到的任务在该业务系统中执行对应的业务逻辑处理,并将处理结果返回为所述调度执行器。
20.第一方面,本发明提出一种分布式任务调度的基础组件的划分方式,包括:
21.任务执行器(jobexecutor):任务调度和执行的服务节点。分为调度执行器(主节点),工作执行器(从节点)。
22.调度执行器(scheduleexectuor):主节点具有排他性,有且只有一个,用于定时获取任务列表、任务拆分、任务下发、工作执行器状态监控等。特殊地当只有一个执行器时,可以既是调度执行器同时也是工作执行器。
23.工作执行器(workerexectuor):处理具体的业务,比如并行计算,图片转换等,可以多个。
24.主从选举器(ballot):对任务执行器集群选举产生调度执行器(主节点),其它均为工作执行器(从节点)。具有相同的任务名称的工作执行器,自动编为一组执行器集群。选举方式是公知的,由具体的选举器提供比如:zookeeper,etcd等。zookeepr简称zk,是一个分布式的,开放源码的分布式应用程序协调服务。etcd:是一个高可用的key/value存储系统,主要用于分享配置和服务发现,功能上类似于zookeeper。mq:mq(messagequeue)消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。
25.通过清晰地划分各个组件有利于系统模块化,提高系统内聚度。
26.第二方面,本发明提出一种分布式任务调度的任务执行器对象的抽象设计,包含构造函数接口与任务设置数据模型:
27.构造函数接口在任务执行器初始化的时候在任务执行器中执行:
28.public jobexecutor(string taskname,job job,string cron)
29.taskname:参数名称,选举时根据任务名称分组。job:任务设置数据模型。cron:任务调度执行周期cron表达式(即计划任务表达式)。
30.任务设置(job)数据模型:
[0031][0032]
第三方面,本发明提出三种任务分片方法,包括:
[0033]
水平分片方法:首先根据任务执行器的数量确定分组数,然后将任务按照分组数与每组最少任务数的要求,连续地分配到每一个分组。给当前分组分配完之后才给下一个分组分配任务,直至任务分配完毕。
[0034]
例如,对数组[0,1,2,3,4,5,6,7,8,9]用水平分片算法分两片的结果为:
[0035]
[0,1,2,3,4]
[0036]
[5,6,7,8,9]
[0037]
循环分片方法:首先根据任务执行器的数量确定分组数,然后将任务按照分组数与每组最少任务数的要求,将任务循环地在分组之间分配。给当前分组分配一个任务之后,立即给下一个还没分配满的分组分配一个任务,如此循环,直至任务分配完毕。
[0038]
例如,对数组[0,1,2,3,4,5,6,7,8,9]用循环分片算法分两片的结果为:
[0039]
[0,2,4,6,8]
[0040]
[1,3,5,7,9]
[0041]
整体分片方法:将所有任务放在一个分组。
[0042]
第四方面,本发明提出供业务系统自定义实现的四个抽象接口,包括:
[0043]
任务初始化接口:
[0044]
abstract list《string》initjob(int nodenumber)
[0045]
nodenumber:该任务需要的工作执行器数量
[0046]
该接口由业务系统实现,其中入口参数nodenumber为工作执行器数量,业务系统可根据具体业务执行特点进行实现。
[0047]
举例说明:如文件转换任务,每个工作执行器一次只能执行一个文件转换,平均转换时间为10分钟,当前有2个工作执行器,实现时可以一次返回2个文件,执行完成后再去获取任务列表。
[0048]
分片完成后处理接口:
[0049]
abstract void aftersharding(list《string》successshardingjoblist)
[0050]
successshardingjoblist:已分片任务列表
[0051]
该接口由业务系统实现,分片完成后,调度执行器将调用业务系统实现的接口,业务系统可以对“成功分片的任务”进行任务状态处理,如标识为“status:处理中”。业务系统可以记录处于“处理中”的任务的执行时间,用于判断任务处理是否超时等。
[0052]
单任务处理接口:
[0053]
abstract boolean dojobbyid(string jobid)
[0054]
jobid:单任务id
[0055]
单任务处理接口,任务执行器将任务id作为入口参数,任务执行器根据执行任务线程数量,封装了多线程处理逻辑,可以设置线程数实现并行处理任务,提高了处理能力,简化了业务实现。
[0056]
批处理任务接口:
[0057]
abstract boolean dobatchjob(list《string》joblist)
[0058]
joblist:任务id列表
[0059]
批量任务处理接口,任务执行器将任务列表作为入口参数,由业务系统根据实际情况进行同步单线程或异步多线程实现业务处理逻辑;可以设置线程数实现并行处理任务。
[0060]
业务系统只需实现这四个接口即可快速接入调度系统。
[0061]
第五方面,本发明提出一种分布式任务调度方法:任务执行器完成构建后通过主从选举器选出一个且仅有一个任务执行器作为调度执行器,由调度执行器根据任务cron执行周期定时地执行业务系统自定义initjob接口获取任务列表,再通过分片算法将任务分片之后下分给工作执行器,工作执行器执行业务系统自定义任务处理接口完成任务的逻辑处理。
[0062]
进一步地,提出如下保障机制:
[0063]
1、主节点失效时,由主从选举器(ballot)从其他工作执行器(从节点)重新选举产生新的调度执行器(主节点)。
[0064]
2、工作执行器失效时,根据不同的任务下发方式有相应的策略保障任务不丢失,策略包括:
[0065]

消息队列:根据队列提供的未消费队列的超时重试机制实现。
[0066]

采用一致性协议算法:每个工作执行器由选举器提供节点存储区,当工作执行器(从节点)故障时,调度执行器(主节点)会去节点存储区回收故障工作执行器的任务,进行任务重新派发。
[0067]
3、业务系统补偿:业务系统对于过长时间处于“status:处理中”的任务,业务系统根据超时情况,补发待处理任务。由业务系统判断处理时间,如果超时,业务系统可以将该任务再提交。
[0068]
特别地,通过上述机制,本方法可以保证任务至少一次执行,因此业务系统需要在任务执行环节保证幂等性,确保任务不重复执行。
[0069]
本发明的有益效果是:
[0070]
本发明的架构简洁易于实现,保障机制完备、可靠性高,任务分片高效,任务并行执行效率高,业务系统接口简单易于接入。
附图说明
[0071]
图1是本发明的架构图。
[0072]
图2是本发明的时序图。
具体实施方式
[0073]
下面结合附图对本发明进行进一步详细描述。
[0074]
本发明的主要流程如图2所示,其步骤包括:
[0075]
1、执行器构造:通过执行器构造方法,设置相应参数,构造任务执行器。
[0076]
2、主节点选举:任务执行器向主从选举器注册,完成调度执行器(主节点)选举。任务执行器可根据情况人工部署启动或结合容器化部署动态拉起,根据构造方法中的“任务名称”,自动加入相应执行器集群。
[0077]
3、执行任务获取:调度执行器根据调度执行周期cron表达式配置,定时调用获取任务系统自定义任务初始化接口initjob得到一个待执行任务列表。
[0078]
4、任务拆分:调度执行器根据工作执行器数量以及任务拆分设置,完成任务分片处理。具体有水平、循环、不分片等
[0079]
分片完成后,调度执行器将调用aftersharding接口,业务系统可以对“成功分片的任务”进行业务状态处理,如标识为“status:处理中”。
[0080]
5、任务调度:调度执行器将拆分好的任务分发给工作执行器。分发方式包括:消息队列(如:kafka,rocketmq)、一致性协议算法(如:zookeeper)。
[0081]
6、任务执行:工作执行器调用业务系统实现的任务执行单任务接口dojobbyid,或批量任务接口dobatchjob完成业务处理。
[0082]
实验数据:
[0083]
水平任务拆分算法:
[0084]
1万任务数据,均分30份,执行100万次,耗时5.5秒
[0085]
10万任务数据,均分300份,执行10万次,耗时5.7秒
[0086]
循环任务拆分算法:
[0087]
1万任务数据,均分30份,执行100万次,耗时20秒
[0088]
10万任务数据,均分300份,执行10万次,耗时20秒
[0089]
其它实施方式:
[0090]
其他实施方式可能将主从选举器组件改为etcd,主节点选举的处理逻辑可能根据业务需求有细微差距。
[0091]
以上公开的本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,本领域的普通技术人员可以理解,在不脱离本发明的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书的实施例和附图所公开的内容,本发明的保护范围以权利要求书界定的范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1