CN115840631B - 基于raft的高可用分布式任务调度方法和设备 - Google Patents
基于raft的高可用分布式任务调度方法和设备 Download PDFInfo
- Publication number
- CN115840631B CN115840631B CN202310006917.1A CN202310006917A CN115840631B CN 115840631 B CN115840631 B CN 115840631B CN 202310006917 A CN202310006917 A CN 202310006917A CN 115840631 B CN115840631 B CN 115840631B
- Authority
- CN
- China
- Prior art keywords
- task
- execution
- server
- information
- scheduling
- 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.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Multi Processors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施例提供了基于RAFT的高可用分布式任务调度方法和设备。所述方法包括实时扫描数据库的命令表,获取待执行的流程的命令,转化为DAG,将DAG中入度为0的任务节点对应的任务提交到待派发任务队列中;计算执行服务器的执行负载,得到最优执行服务器,将待派发任务队列中的任务发送至最优执行服务器;响应于任务执行结果,更新DAG,判断更新后的DAG中是否存在入度为0的任务节点,流程执行结束。以此方式,可以最大化利用集群资源,利用RAFT分布式一致性协议实现了调度服务器和执行服务器的水平拓展能力,提高了任务调度系统的可靠性和高可用,降低了部署和运维的难度。
Description
技术领域
本发明一般涉及任务调度领域,并且更具体地,涉及基于RAFT的高可用分布式任务调度方法和设备。
背景技术
在大数据项目的开发、运行及维护的过程中,不可避免地会产生很多不同类型的作业或者任务。如ETL(Extract-Transform-Load的缩写)作业,需要将数据从源数据库通过抽取、转换后加载到目标数据库;如数据清洗作业,需要检查数据质量是否达标,如果不达标则执行相对应的清洗脚本;如数据分析作业,需要执行SQL或者Python脚本生成统计报表等。这些任务需要定时周期性执行,任务之间存在复杂的上下游依赖关系。
目前任务调度的方法一般有两种,方法一:通过crontab手动维护定时作业,任务间的依赖关系通过指定执行时间控制;这种方式的任务分散在不同服务器上,不能集中化管理,任务间依赖关系不能保证,无法做到实时监控更无法有效利用服务器集群的计算能力。方法二:利用Azkaban等大数据调度工具;现有的调度工具通常是分布式部署,在满足不同类型任务的集中化管理的同时支持任务的分布式执行,但是由于调度服务器不支持水平拓展,其分布式作业的能力存在单点故障的风险,而一些支持调度服务器水平拓展的工具,通常依赖于第三方分布式协调服务Zookeeper,增加了部署难度的同时也降低了整体的可靠性和可用性。
发明内容
根据本发明的实施例,提供了一种基于RAFT的高可用分布式任务调度方案。本方案能够最大化利用集群资源,利用RAFT分布式一致性协议实现了调度服务器和执行服务器的水平拓展能力,提高了任务调度系统的可靠性和高可用,降低了部署和运维的难度。
在本发明的第一方面,提供了一种基于RAFT的高可用分布式任务调度方法。该方法应用于调度服务器,所述调度服务器所属于RAFT集群,该方法包括:
步骤1:实时扫描数据库的命令表,从所述命令表中获取待执行的流程的命令,转化为DAG,将所述DAG中入度为0的任务节点对应的任务提交到待派发任务队列中;
步骤2:计算执行服务器的执行负载,得到最优执行服务器,将所述待派发任务队列中的任务发送至所述最优执行服务器,使所述最优执行服务器执行所述任务,返回任务执行结果;
步骤3:响应于所述任务执行结果,更新所述DAG,判断更新后的DAG中是否存在入度为0的任务节点,若是,则将所述入度为0的任务节点对应的任务提交到待派发任务队列中,重新执行步骤2;否则所述流程执行结束。
进一步地,所述数据库的命令表用于存储流程的命令,所述流程的命令由流程定义信息和调度信息封装得到;所述调度信息通过接口服务器轮询数据库中的流程定义信息,按照所述流程定义信息中的执行时间从所述数据库中读出;所述流程定义信息为通过所述接口服务器验证的流程信息,包括流程执行参数、流程中的任务定义和任务间的依赖关系。
进一步地,所述流程中的任务定义通过拖拽任务组件生成任务,输入执行任务所需要的流程执行参数进行完成任务定义;
所述任务间的依赖关系为任务组件之间的单向箭头连接关系;在所述单向箭头连接关系中,箭头指向方向的任务为下游任务,非箭头指向方向的任务为上游任务。
进一步地,所述RAFT集群中的调度服务器具有调度服务器ID,所述调度服务器ID用于唯一标识所述RAFT集群中的调度服务器;
当调度服务器从所述命令表中获取待执行的流程的命令时,对所述流程的命令进行预领取,将预领取信息发送至所述调度服务器所属RAFT集群的Leader;
所述调度服务器响应于所属RAFT集群的Leader生成的提交日志,对所述流程的命令进行确认领取;所述提交日志由所述Leader将所述预领取信息同步到RAFT集群,取得多数一致后生成,并向所属RAFT集群中的其他调度服务器发布。
进一步地,所述计算执行服务器的执行负载,得到最优执行服务器,包括:
所述调度服务器获取执行服务器信息;所述执行服务器信息包括各个执行服务器的执行负载信息;
利用线性加权算法对各个执行服务器的执行负载信息配置负载权重,进行加权计算,生成执行服务器的执行负载值,根据所述执行负载值将执行负载最少的执行服务器作为最优执行服务器。
进一步地,当所述执行服务器启动时,将所述执行服务器的地址信息、所述工作组信息和执行负载信息发送至所述Leader;
若所述执行服务器处于工作状态,则将执行负载信息以心跳包形式发送至所述Leader,使所述Leader更新所述执行服务器的执行负载信息。
进一步地,所述任务执行结果由所述最优执行服务器依次从优先队列中取出任务执行生成;所述优先队列用于按照任务优先级顺序存储任务实例;所述任务实例由所述最优执行服务器将分配到的任务根据任务类型解析得到。
进一步地,所述响应于所述任务执行结果,更新所述DAG,包括:
若所述任务执行结果为任务执行成功,则所述DAG中所述执行成功的任务的直接下游任务的入度减1;
若所述任务执行结果为任务执行失败,则将所述流程执行参数中的失败重试次数减1;
若失败重试次数是为0,则将所述执行失败的任务以及直接或间接依赖该任务的所有下游任务从所述DAG中删除,执行所述流程执行参数中的失败告警策略,并标记所述流程的执行状态为失败状态。
进一步地,在将所述待派发任务队列中的任务发送至所述最优执行服务器后,若所述最优执行服务器与所述调度服务器失去连接且未收到所述最优执行服务器返回的任务执行结果,则返回步骤2,对所述任务重新调度。
在本发明的第二方面,提供了一种电子设备。该电子设备至少一个处理器;以及与所述至少一个处理器通信连接的存储器;所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明第一方面的方法。
应当理解,发明内容部分中所描述的内容并非旨在限定本发明的实施例的关键或重要特征,亦非用于限制本发明的范围。本发明的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本发明各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了根据本发明的实施例的服务器架构示意图;
图2示出了根据本发明的实施例的基于RAFT的高可用分布式任务调度方法的流程图;
图3示出了根据本发明的实施例的RAFT选举示意图;
图4示出了能够实施本发明的实施例的示例性电子设备的方框图;
其中,400为电子设备、401为CPU、402为ROM、403为RAM、404为总线、405为I/O接口、406为输入单元、407为输出单元、408为存储单元、409为通信单元。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本发明保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本发明中,通过构建有向无环图(Directed acyclic graph,DAG)集中管理各类调度任务及任务间的依赖关系,并且通过解析DAG将任务按照调度策略分配到执行服务器集群中,最大化利用集群资源,利用RAFT分布式一致性协议实现了调度服务器和执行服务器的水平拓展能力,提高了任务调度系统的可靠性和高可用,降低了部署和运维的难度。
本实施例提供了一种基于RAFT的高可用分布式任务调度方法,该方法应用于调度服务器。所述调度服务器是基于RAFT的任务管理系统中的五类服务器之一,其所属于RAFT集群。
如图1所示为本发明的实施例的服务器架构示意图。
在本实施例中,基于RAFT的任务管理系统中的五类服务器分别为接口服务器、调度服务器、执行服务器、日志服务器和告警服务器。
其中,所述接口服务器用于处理前端的HTTP请求,以及将要执行的流程提交至命令列表。调度服务器由三台及以上的服务器组成RAFT集群,用于领取流程命令并解析DAG,派发给执行服务器。执行服务器用于将执行任务实例化,具体执行各类任务。日志服务器用于向执行服务器获取执行时的日志内容,通过接口服务器发送给前端。告警服务器用于当调度服务器发现在调度过程以及任务执行过程中出现故障时,执行告警策略。
图2示出了本发明实施例的基于RAFT的高可用分布式任务调度方法的流程图。
该方法包括:
S201、实时扫描数据库的命令表,从所述命令表中获取待执行的流程的命令,转化为DAG,将所述DAG中入度为0的任务节点对应的任务提交到待派发任务队列中。
作为本发明的一种实施例,调度服务器通过扫描线程不断地轮询数据库的命令表,获取当前服务器需要调度的流程;所述数据库的命令表用于存储流程的命令,所述流程的命令由流程定义信息和调度信息封装得到;所述调度信息通过接口服务器轮询数据库中的流程定义信息,按照所述流程定义信息中的执行时间从所述数据库中读出;所述流程定义信息为通过所述接口服务器验证的流程信息,包括流程执行参数、流程中的任务定义和任务间的依赖关系。
在上述实施例中,所述接口服务器验证流程信息是否满足要求,若满足,则作为流程定义信息保存到数据库中。所述是否满足要求是指:流程执行参数中的执行时间是否符合crontab格式,是否大于等于当前时间;以及任务间的依赖关系是否是有向无环图,即没有循环依赖等等。任务定义随着任务类型要求也不同,以DataX为例,自定义json的话json内容是否为空,非自定义json的话数据源和数据去向是否为空等。
作为本发明的一种实施例,所述流程中的任务定义通过拖拽任务组件生成任务,输入执行任务所需要的流程执行参数进行完成任务定义;所述任务间的依赖关系为任务组件之间的单向箭头连接关系;在所述单向箭头连接关系中,箭头指向方向的任务为下游任务,非箭头指向方向的任务为上游任务。
在本实施例中,在面板界面通过拖拽任务组件生成任务,任务类型包含Shell任务、Python任务、SQL任务、DataX数据迁移任务、HTTP请求任务。
在任务配置界面通过填写执行任务所需要的流程执行参数完成任务定义。具体地,这些流程执行参数包括调度参数和个性化参数。调度参数包括失败重试次数、失败重试间隔、失败告警策略等;个性化参数随着任务类型不同而不同,如SQL任务需要指定数据库实例、填写执行SQL;Shell任务需要填写Shell脚本等。
用户在可视化界面中通过拖拽组件、连线配置的方式完成流程和流程内多种类型任务以及任务间依赖关系的定义,降低了用户的使用门槛。
在本实施例中,典型的流程执行参数例如流程执行时间、执行周期、执行工作组、通知策略等,流程执行参数配置结束后,提交给接口服务器保存。
在本实施例中,任务是调度的最小单位,多个任务和任务之间的依赖关系构成一个流程,用户可以构造很多的流程。这里的子流程是指,将其他已经构造好的流程视作一个特殊的任务引入到当前的流程构造中。
在本实施例中,将有依赖关系的任务组件之间使用单向箭头连接,系统会为箭头两端的任务自动添加上下游关系。通过图形化界面中各项任务的定义以及任务间的依赖关系构成了流程,以DAG的形式存在。
在本实施例中,还可以对按照所述流程定义信息中的执行时间从所述数据库中读出的过程进行优化,例如将即将执行的任务先提前读到List中,在指定时间写入数据库的命令表里。如此能够避免读出过程延迟,即在执行时间需要进行读出时,需要额外花费时间从数据库中读取。
在一些实施例中,可以使用条件分支组件,通过判断上游任务是否成功执行状态选择不同的下游任务。所述执行状态例如成功状态或失败状态。通过条件分支组件可以实现调度过程中分支的自动选择,在上游任务失败时执行另一套调度逻辑,极大地增加了调度的完整性和灵活性。
在一些实施例中,可以使用子流程组件,将其他已经构造好的流程整体视作一个任务引入到当前的流程中,能够进一步提高流程构造效率。
作为本发明的一种实施例,调度服务器和执行服务器是分布式部署的,用户需要配置各台调度服务器和执行服务器的连接信息。例如,调度服务器是一个典型的RAFT集群,对于一个5服务器集群,该集群能够容忍2台调度服务器不能正常工作,而整个系统保持正常。
作为本发明的一种实施例,所述RAFT集群中的调度服务器具有调度服务器ID,所述调度服务器ID用于唯一标识所述RAFT集群中的调度服务器;例如表示为ServerID。
当调度服务器从所述命令表中获取待执行的流程的命令时,对所述流程的命令进行预领取,此时并不立即进行确认领取。所述预领取会生成预领取信息,例如“S1预领取CommandID=4”;将预领取信息发送至所述调度服务器所属RAFT集群的Leader。
LEADER将预领取信息封装成日志后同步到集群,在取得多数一致后标记该日志为提交状态,同步给其他服务器。该提交日志的提交状态会随着Leader的心跳信息同步给所有服务器,包括所述调度服务器。所述调度服务器执行关于所述领取信息的提交日志,对所述流程的命令进行确认领取。
根据上述实施例,具体地,假设集群leader为S2,S1预领取了CommandID=4的命令。
S1向S2发送“S1预领取CommandID=4的命令”信息,S2将该信息包装为一条日志存储到自己的RAFT命令日志中,然后该日志同步给其他服务器S1、S3。
假设S1、S3状态正常,同步信息会将收到的同步信息存储到RAFT命令日志中,而且存储的位置与Leader相同。存储后向Leader S2发送确认。
S2通过回复的确认,判断该日志是否多数一致,一致的话将该日志标记为提交状态,具体的,将指针commitIndex指向RAFT命令日志中该日志所在的位置,commitIndex会随着心跳同步给所有集群中的服务器。
集群中的所有服务器会通过扫描线程的方式,实时的把提交状态的日志交给上层状态机执行(RAFT中称作Apply)。当S1执行这条日志时,会执行确认领取的动作;当S2,S3执行时,因为与自身无关,所以没有动作。
通过上述预领取、Leader检查、日志同步、确认领取的过程,能够避免同一个命令被多个调度服务器领取。为了防止上述情况,本申请进行了两个措施:
1、预领取的服务器ID满足 serverID = commandID % serverNum,按照对服务器数量取模的方式,避免冲突;
2、由于serverNum随着调度服务器的水平扩展而变化,所以有很小的概率仍然会有冲突,为了进一步避免冲突,需要Leader进行仲裁,所以将预领取信息提交给Leader,并且将该信息同步给其他服务器取得多数一致,这样即便Leader宕机,集群中的大多数服务器也记录了该命令的领取信息,从而安全可靠地保证确实避免了冲突。
在上述实施例中,RAFT集群的Leader通过选举产生,如图3所示,假设RAFT集群中有调度服务器S1、S2、S3,选举过程包括:
首先假设调度服务器S2的定时器由于长时间没有接收到来自Leader的心跳消息或者日志复制消息而超时,那么会转变为Candidate状态,将自己的任期增加,通过RPC向调度服务器S1,S3发送选举投票消息。假设调度服务器S1先收到了来自调度服务器S2的请求,那么它比较自己当前任期和调度服务器S2的任期,发现对方其任期更高且日志状态与自己一致,则投赞成票。调度服务器S2收到调度服务器S1的投票结果,那么当选为Leader,即多票当选。
在上述实施例中,多数一致,即命令会以日志的形式先同步给服务器集群,只有集群中超过一半的服务器都存在,才会提交日志到状态机,执行具体的命令。假设集群有三台调度服务器S1、S2、S3,Leader为S2,那么S2会把这个日志同步给S1和S3,S1、S3收到这个日志后会回复确认给S2。如果S2收到不少于一个确认,就达到多数一致(S2自己和确认的那台服务器两台已经超过了一半),会将该日志标记为提交,S1、S2、S3会把该日志提交到自己的状态机执行。
作为本发明的一种实施例,调度服务器解析流程定义,利用任务和任务间的依赖关系,构造DAG,DAG中的任务共享流程执行参数。遍历DAG,获取所有入度为0的任务节点,将这些任务节点对应的任务都提交到待派发任务队列中。
S202、计算执行服务器的执行负载,得到最优执行服务器,将所述待派发任务队列中的任务发送至所述最优执行服务器,使所述最优执行服务器执行所述任务,返回任务执行结果。
作为本发明的一种实施例,所述计算执行服务器的执行负载,得到最优执行服务器,包括:
所述调度服务器获取执行服务器信息;所述执行服务器信息包括各个执行服务器的执行负载信息。具体地,执行负载信息,例如CPU使用率,空闲内存数等。
利用线性加权算法对各个执行服务器的执行负载信息配置负载权重,进行加权计算,生成执行服务器的执行负载值,根据所述执行负载值将执行负载最少的执行服务器作为最优执行服务器。
在本实施例中,所述加权计算即利用每台执行服务器配置的权重,对执行负载进行加权,得到每台执行服务器的负载值。
所述执行服务器的负载值高,说明其执行能力差,反之负载值低,则说明其具有可执行空间,执行能力强。取负载值最低的执行服务器作为当前的最优执行服务器。
在另一种实施例中,还可以通过调度算法对执行服务器的分数进行计算,包括:
其中,为执行服务器Si配置的权重,和为服务器Si当前可用内存数和cpu负载,为服务器Si的CPU核心数,和为服务器Si配置的最大CPU负载值和最小可用内存值,只有当前CPU负载小于最大CPU负载值,且可用内存大于最小可用内存值才会被考虑调度。且可用内存越多,CPU负载越低,得分越高。和为可用内存得分和CPU负载得分的调和参数。
在上述实施例中,在加权计算之前,还可以先剔除掉CPU利用率过高、空闲内存不足的服务器,再进行加权计算,从而排除干扰的服务器。
作为本发明的一种实施例,所述上述选择的最优执行服务器在接收到任务后,将分配到的任务根据任务类型解析,得到任务实例;将任务实例按照任务优先级的顺序添加存储到优先队列中。所述上述选择的最优执行服务器依次从优先队列中取出任务执行,执行的过程实时同步给日志服务器,生成任务执行结果发送给调度服务器。
在任务执行过程中,将日志重定向到文本文件中,日志服务器通过RPC调用向上述选择的最优执行服务器获取日志内容。
执行结束后,上述选择的最优执行服务器通过RPC调用的方式,将任务执行结果发送给调度服务器。所述任务执行结果如正常结束或者执行报错等。
作为本发明的一种实施例,所述执行服务器也是以集群的形式存在,并且可以将执行服务器划分至不同的工作组。执行服务器在启动时,将自己的地址信息、所属工作组信息、执行负载信息发送给调度服务器的集群Leader,由Leader通过日志复制的形式同步给所有其他调度服务器完成注册,随后执行服务器的心跳线程定时将执行负载信息发送给调度服务器的集群Leader更新信息。
在本实施例中,例如执行服务器集群:如有W1、W2、W3、W4、W5共五台服务器,工作组可以人为设定W1、W2为工作组1,W3、W4为工作组2,W5为工作组3。在流程定义中,需要指定执行工作组,假设指定工作组2,意味着该流程中所有的任务只能在W3、W4服务器上执行。
S203、响应于所述任务执行结果,更新所述DAG,判断更新后的DAG中是否存在入度为0的任务节点,若是,则将所述入度为0的任务节点对应的任务提交到待派发任务队列中,重新执行S202;否则所述流程执行结束。
作为本发明的一种实施例,所述响应于所述任务执行结果,更新所述DAG,包括:
若所述任务执行结果为任务执行成功,则将该执行成功的任务从DAG中移除,即所述DAG中所述执行成功的任务的直接下游任务的入度减1。所述直接下游任务指直接依赖于执行成功的任务的其他任务,也就是可视化界面中,用有向箭头直接与之相连的任务。
若所述任务执行结果为任务执行失败,则将所述流程执行参数中的失败重试次数减1。
若失败重试次数是为0,则将所述执行失败的任务以及直接或间接依赖该任务的所有下游任务都标记为失败,并从所述DAG中删除。当执行失败的任务从DAG中删除后,执行所述流程执行参数中的失败告警策略,并标记所述流程的执行状态为失败状态。
若失败重试次数是大于0则不对DAG进行修改。
在本实施例中,更新完DAG之后,系统会继续遍历该DAG,继续寻找入度为0的任务节点,如果存在,则提交该任务并重复S4及之后的步骤。如果不存在入度为0的任务节点,也就是图中不存在任何节点,那么整个流程执行完毕。
作为本发明的一种实施例,在将所述待派发任务队列中的任务发送至所述最优执行服务器后,若所述最优执行服务器与所述调度服务器失去连接且未收到所述最优执行服务器返回的任务执行结果,则返回步骤2,对所述任务重新调度。
下面从系统启动开始,对上述实施例的整个过程进行说明。
系统启动时,接口服务器、告警服务器、日志服务器分别启动。调度服务器集群启动,启动后处于Follower状态。由于RAFT集群中不存在Leader,所以很快会进行一次选举,选举出Leader。当选后Leader开始向调度服务器S1、S3定时发送心跳信息以及有需要时发送日志复制消息和安装快照消息。调度服务器通过执行日志的方式更新状态机状态,具体地,状态信息包括调度服务器集群中所有服务器的连接信息、每台服务器执行命令的信息,执行服务器集群中所有服务器的连接信息、执行负载信息等。调度服务器启动完成后,执行服务器集群启动,启动后通过RPC向调度服务器发送注册信息,并定时发送自身的执行负载信息,该信息由调度服务器集群中的Leader处理,以日志复制的形式同步到Follower。
任务管理系统的服务器启动完成后,在前端可视化界面中根据任务类型拖拽需要的任务组件并进行初始化即可完成任务的创建,通过各个任务组件之间的连线完成任务间依赖关系的创建,最后配置流程的执行参数后提交即完成了整个流程的创建工作。
下面以一个具体的业务例子对上述过程进行说明。
通过从任务组件列表中拖拽DataX组件生成DataX数据迁移任务,在配置界面,选择数据来源和数据去向,任务为增量数据迁移任务,将数据从MySQL读出,写入Hive的分区表,完成字段映射以及其他任务配置项后该DataX迁移任务成功构建。在任务面板中,将该任务连线到初始化Hive分区和分区是否存在两个任务之后,即完成了该任务对上游任务的依赖定义。特别地,检查分区是否存在是条件分支组件,其会根据上游SQL任务的执行结果,动态的选择下游任务。为流程配置流程执行时间、执行周期、执行工作组、通知策略等执行参数后保存即完成了整个流程调度及流程内各任务调度的配置,并被接口服务器保存到数据库当中。
接口服务器使用单独的线程实时扫描数据库中的流程,在设定的执行时间将流程从数据库中读出,添加实际调度时间等信息,封装为命令存储在数据库的命令表里。假设在数据库中该命令的ID为3。调度服务器均有单独的线程实时扫描数据库中的命令,该命令会被服务器S3预领取,预领取命令的服务器编号满足serverID = commandID % serverNum,其中serverNum为集群中服务器的数量。调度服务器S3会把预领取到命令的消息发送给集群中的Leader,也就是S2。S2读取命令执行信息,确保该命令没有冲突,即没有别的服务器领取过该命令后,通过日志复制的形式同步给其他服务器。该日志在集群中取得多数一致被提交。当服务器S3在执行到这条日志时,确认正式领取该命令,并将该命令解析为DAG,也就是任务间的依赖图,遍历图寻找入度为0的任务节点,在本例中,为SHELL任务:更新环境变量,并将该任务提交到待派发队列中。
调度服务器有单独的线程扫描待派发队列,扫描到该SHELL任务后,根据执行服务器信息中,计算得到最优的执行服务器。
调度服务器通过PRC将SHELL任务发送给最优的执行服务器,假设为E1。E1解析任务,并添加执行相关上下文信息,如开始时间等,然后根据任务优先级提交到优先队列中。执行服务器使用单独的线程实时扫描优先队列,取出优先级最高的任务解析并执行。以上述SHELL任务为例,执行服务器E1会将SHELL命令写入临时文件中,具体地会使用子进程来执行该命令,并将该进程的标准输出流和标准错误流重定向到E1为该任务创建的特定的日志文件里。执行过程中,前端轮询接口服务器,获取该任务执行的详细信息,接口服务器会向日志服务器发送RPC请求,日志服务器解析该任务的实例ID,将请求转发到执行服务器E1,最终将特定日志文件中的内容返回给前端。任务执行结束后,执行服务器E1通过RPC将结果反馈给调度服务器S3,假设任务执行成功,那么S3会将该SHELL任务从DAG中移出,检查分区存在的入度变为0并被提交到待派发队列中。重复执行步骤S4及以后的步骤,直至遍历DAG时不再能找到入度为0的任务节点,标志着整个流程执行完毕,补充执行相关上下文信息,如流程的执行结果、重复次数、结束时间等,存储到数据库中。
根据本发明的实施例,通过构建DAG(有向无环图)集中管理各类调度任务及任务间的依赖关系,并且通过解析DAG将任务按照调度策略分配到执行服务器集群中,最大化利用集群资源,利用RAFT分布式一致性协议实现了调度服务器和执行服务器的水平拓展能力,提高了任务调度系统的可靠性和高可用,降低了部署和运维的难度。
同时系统提供了可视化界面,用户在可视化界面中通过拖拽组件、连线配置的方式完成流程和流程内多种类型任务以及任务间依赖关系的定义,降低了用户的使用门槛,流程提交后具体的调度、执行、容错都由系统自动完成,用户可以更专注于调度任务的设计上。同时在界面中用户可以实时查看任务执行的状态和执行日志,可以高效便捷地排查错误和修正调度流程。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本发明所必须的。
以上是关于方法实施例的介绍,以下通过装置实施例,对本发明所述方案进行进一步说明。
根据本发明的实施例,本发明还提供了一种电子设备。
图4示出了可以用来实施本发明的实施例的电子设备400的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
设备400包括计算单元401,其可以根据存储在只读存储器(ROM)402中的计算机程序或者从存储单元408加载到随机访问存储器(RAM)403中的计算机程序,来执行各种适当的动作和处理。在RAM 403中,还可存储设备400操作所需的各种程序和数据。计算单元401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
设备400中的多个部件连接至I/O接口405,包括:输入单元406,例如键盘、鼠标等;输出单元407,例如各种类型的显示器、扬声器等;存储单元408,例如磁盘、光盘等;以及通信单元409,例如网卡、调制解调器、无线通信收发机等。通信单元409允许设备400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元401可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元401的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元401执行上文所描述的各个方法和处理,例如方法S201~S203。例如,在一些实施例中,方法S201~S203可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元408。在一些实施例中,计算机程序的部分或者全部可以经由ROM 402和/或通信单元409而被载入和/或安装到设备400上。当计算机程序加载到RAM 403并由计算单元401执行时,可以执行上文描述的方法S201~S203的一个或多个步骤。备选地,在其他实施例中,计算单元401可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法S201~S203。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (9)
1.一种基于RAFT的高可用分布式任务调度方法,应用于调度服务器,所述调度服务器所属于RAFT集群,其特征在于,包括:
步骤1:实时扫描数据库的命令表,从所述命令表中获取待执行的流程的命令,转化为DAG,将所述DAG中入度为0的任务节点对应的任务提交到待派发任务队列中;
步骤2:计算执行服务器的执行负载,得到最优执行服务器,将所述待派发任务队列中的任务发送至所述最优执行服务器,使所述最优执行服务器执行所述任务,返回任务执行结果;
步骤3:响应于所述任务执行结果,更新所述DAG,判断更新后的DAG中是否存在入度为0的任务节点,若是,则将所述入度为0的任务节点对应的任务提交到待派发任务队列中,重新执行步骤2;否则所述流程执行结束;所述RAFT集群包括:接口服务器、调度服务器、执行服务器、日志服务器和告警服务器;所述接口服务器用于将要执行的流程提交至命令列表;所述调度服务器用于领取流程命令并解析DAG,派发给执行服务器;其中领取流程命令并解析DAG包括:利用任务和任务间的依赖关系,构造DAG,DAG中的任务共享流程执行参数;遍历DAG,获取所有入度为0的任务节点,将这些任务节点对应的任务都提交到待派发任务队列中;所述执行服务器用于将执行任务实例化,具体执行各类任务;
所述RAFT集群中的调度服务器具有调度服务器ID,所述调度服务器ID用于唯一标识所述RAFT集群中的调度服务器,且按照对服务器数量取模的方式设置;
当调度服务器从所述命令表中获取待执行的流程的命令时,对所述流程的命令进行预领取,将预领取信息发送至所述调度服务器所属RAFT集群的Leader;
所述调度服务器响应于所属RAFT集群的Leader生成的提交日志,对所述流程的命令进行确认领取;所述提交日志由所述Leader将所述预领取信息同步到RAFT集群,取得多数一致后生成,并向所属RAFT集群中的其他调度服务器发布;
所述执行服务器是以集群的形式存在,将执行服务器划分至不同的工作组;执行服务器在启动时,将自己的地址信息、所属工作组信息、执行负载信息发送给调度服务器所属RAFT集群的Leader,由Leader通过日志复制的形式同步给所有其他调度服务器完成注册,随后执行服务器的心跳线程定时将执行负载信息发送给调度服务器所属RAFT集群的Leader更新信息。
2.根据权利要求1所述的方法,其特征在于,所述数据库的命令表用于存储流程的命令,所述流程的命令由流程定义信息和调度信息封装得到;所述调度信息通过接口服务器轮询数据库中的流程定义信息,按照所述流程定义信息中的执行时间从所述数据库中读出;所述流程定义信息为通过所述接口服务器验证的流程信息,包括流程执行参数、流程中的任务定义和任务间的依赖关系。
3.根据权利要求2所述的方法,其特征在于,所述流程中的任务定义通过拖拽任务组件生成任务,输入执行任务所需要的流程执行参数进行完成任务定义;
所述任务间的依赖关系为任务组件之间的单向箭头连接关系;在所述单向箭头连接关系中,箭头指向方向的任务为下游任务,非箭头指向方向的任务为上游任务。
4.根据权利要求1所述的方法,其特征在于,所述计算执行服务器的执行负载,得到最优执行服务器,包括:
所述调度服务器获取执行服务器信息;所述执行服务器信息包括各个执行服务器的执行负载信息;
利用线性加权算法对各个执行服务器的执行负载信息配置负载权重,进行加权计算,生成执行服务器的执行负载值,根据所述执行负载值将执行负载最少的执行服务器作为最优执行服务器。
5.根据权利要求1所述的方法,其特征在于,当所述执行服务器启动时,将所述执行服务器的地址信息、所述工作组信息和执行负载信息发送至所述Leader;
若所述执行服务器处于工作状态,则将执行负载信息以心跳包形式发送至所述Leader,使所述Leader更新所述执行服务器的执行负载信息。
6.根据权利要求5所述的方法,其特征在于,所述任务执行结果由所述最优执行服务器依次从优先队列中取出任务执行生成;所述优先队列用于按照任务优先级顺序存储任务实例;所述任务实例由所述最优执行服务器将分配到的任务根据任务类型解析得到。
7.根据权利要求2所述的方法,其特征在于,所述响应于所述任务执行结果,更新所述DAG,包括:
若所述任务执行结果为任务执行成功,则所述DAG中所述执行成功的任务的直接下游任务的入度减1;
若所述任务执行结果为任务执行失败,则将所述流程执行参数中的失败重试次数减1;
若失败重试次数是为0,则将所述执行失败的任务以及直接或间接依赖该任务的所有下游任务从所述DAG中删除,执行所述流程执行参数中的失败告警策略,并标记所述流程的执行状态为失败状态。
8.根据权利要求1所述的方法,其特征在于,在将所述待派发任务队列中的任务发送至所述最优执行服务器后,若所述最优执行服务器与所述调度服务器失去连接且未收到所述最优执行服务器返回的任务执行结果,则返回步骤2,对所述任务重新调度。
9.一种电子设备,包括至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其特征在于,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310006917.1A CN115840631B (zh) | 2023-01-04 | 2023-01-04 | 基于raft的高可用分布式任务调度方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310006917.1A CN115840631B (zh) | 2023-01-04 | 2023-01-04 | 基于raft的高可用分布式任务调度方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115840631A CN115840631A (zh) | 2023-03-24 |
CN115840631B true CN115840631B (zh) | 2023-05-16 |
Family
ID=85579476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310006917.1A Active CN115840631B (zh) | 2023-01-04 | 2023-01-04 | 基于raft的高可用分布式任务调度方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115840631B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149827A (zh) * | 2023-04-04 | 2023-05-23 | 云粒智慧科技有限公司 | 分布式任务调度系统和分布式任务调度执行系统 |
CN116340431B (zh) * | 2023-05-24 | 2023-09-01 | 阿里云计算有限公司 | 一种分布式系统、数据同步方法、电子设备及存储介质 |
CN117539642B (zh) * | 2024-01-09 | 2024-04-02 | 上海晨钦信息科技服务有限公司 | 一种信用卡分布式调度平台及调度方法 |
CN117610325B (zh) * | 2024-01-24 | 2024-04-05 | 中国人民解放军国防科技大学 | 基于分布式的优化设计节点调度方法、系统和设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656690A (zh) * | 2017-10-11 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 调度系统、方法和存储介质 |
CN111526186A (zh) * | 2020-04-10 | 2020-08-11 | 河海大学 | 基于Raft的分布式服务器集群配置方法 |
CN111858097A (zh) * | 2020-07-22 | 2020-10-30 | 安徽华典大数据科技有限公司 | 分布式数据库系统、数据库访问方法 |
CN112860393A (zh) * | 2021-01-20 | 2021-05-28 | 北京科技大学 | 一种分布式任务调度方法及系统 |
CN113391885A (zh) * | 2021-06-18 | 2021-09-14 | 电子科技大学 | 一种分布式事务处理系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8402466B2 (en) * | 2009-02-17 | 2013-03-19 | International Business Machines Corporation | Practical contention-free distributed weighted fair-share scheduler |
CN104462370A (zh) * | 2014-12-09 | 2015-03-25 | 北京百度网讯科技有限公司 | 分布式任务调度系统及方法 |
CN108021435B (zh) * | 2017-12-14 | 2022-01-04 | 南京邮电大学 | 一种基于截止时间的具有容错能力的云计算任务流调度方法 |
CN109561148B (zh) * | 2018-11-30 | 2021-03-23 | 湘潭大学 | 边缘计算网络中基于有向无环图的分布式任务调度方法 |
CN110096342A (zh) * | 2019-05-08 | 2019-08-06 | 深圳乐信软件技术有限公司 | 任务处理方法、装置、服务器和存储介质 |
CN110888721A (zh) * | 2019-10-15 | 2020-03-17 | 平安科技(深圳)有限公司 | 一种任务调度的方法及相关装置 |
CN111506431B (zh) * | 2020-04-26 | 2023-07-04 | 泸州职业技术学院 | 一种云服务器在能耗约束下感知负载性能优化方法 |
CN112579267A (zh) * | 2020-09-28 | 2021-03-30 | 京信数据科技有限公司 | 一种去中心化大数据作业流调度方法及装置 |
CN112162841A (zh) * | 2020-09-30 | 2021-01-01 | 重庆长安汽车股份有限公司 | 面向大数据处理的分布式调度系统、方法及存储介质 |
CN113535367B (zh) * | 2021-09-07 | 2022-01-25 | 北京达佳互联信息技术有限公司 | 任务调度方法及相关装置 |
-
2023
- 2023-01-04 CN CN202310006917.1A patent/CN115840631B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656690A (zh) * | 2017-10-11 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 调度系统、方法和存储介质 |
CN111526186A (zh) * | 2020-04-10 | 2020-08-11 | 河海大学 | 基于Raft的分布式服务器集群配置方法 |
CN111858097A (zh) * | 2020-07-22 | 2020-10-30 | 安徽华典大数据科技有限公司 | 分布式数据库系统、数据库访问方法 |
CN112860393A (zh) * | 2021-01-20 | 2021-05-28 | 北京科技大学 | 一种分布式任务调度方法及系统 |
CN113391885A (zh) * | 2021-06-18 | 2021-09-14 | 电子科技大学 | 一种分布式事务处理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115840631A (zh) | 2023-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115840631B (zh) | 基于raft的高可用分布式任务调度方法和设备 | |
CN110825535B (zh) | 一种作业调度的方法和系统 | |
CN112882813B (zh) | 任务调度方法、装置、系统及电子设备 | |
CN107016480B (zh) | 任务调度方法、装置及系统 | |
CN111897638B (zh) | 分布式任务调度方法及系统 | |
CN111506412A (zh) | 基于Airflow的分布式异步任务构建、调度系统及方法 | |
CN109284184A (zh) | 一种基于容器化技术的分布式机器学习平台的搭建方法 | |
CN110611707B (zh) | 一种任务调度的方法及装置 | |
US20180137188A1 (en) | Command processing method and server | |
US9104486B2 (en) | Apparatuses, systems, and methods for distributed workload serialization | |
CN112579267A (zh) | 一种去中心化大数据作业流调度方法及装置 | |
CN111400041A (zh) | 服务器配置文件的管理方法、装置及计算机可读存储介质 | |
CN113703997A (zh) | 集成多种消息代理的双向异步通信中间件系统及实现方法 | |
CN115544044A (zh) | 一种数据一致性保持方法、装置、设备和存储介质 | |
CN117311937A (zh) | 一种分布式任务调度方法、装置、电子设备及存储介质 | |
CN113658351B (zh) | 一种产品生产的方法、装置、电子设备及存储介质 | |
CN112817992B (zh) | 执行更改任务的方法、装置、电子设备以及可读存储介质 | |
CN114201294A (zh) | 一种任务处理方法、装置、系统、电子设备及存储介质 | |
CN113608765A (zh) | 数据处理方法、装置、设备以及存储介质 | |
US9772882B2 (en) | Detecting and selecting two processing modules to execute code having a set of parallel executable parts | |
CN116069497A (zh) | 执行分布式任务的方法、装置、设备以及存储介质 | |
CN114237858A (zh) | 一种基于多集群网络的任务调度方法及系统 | |
CN113656239A (zh) | 针对中间件的监控方法、装置及计算机程序产品 | |
CN115599507A (zh) | 数据处理方法、执行工作站、电子设备和存储介质 | |
CN112749193A (zh) | 工作流的处理方法及装置、存储介质、电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |