具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
如背景技术中所述,现今的任务系统中任务之间的关联越来越复杂,现有的调度方式难以满足对任务的准确调度。基于此,本公开提供以下实施例。
图1所示,为根据本公开的一种实施方式提供的分布式工作流调度系统的结构示意图,如图1所示,所述系统10包括:
控制器110,用于分布式工作流的任务进行调度;
多个依赖检查模块120,与所述控制器110建立通信连接,用于检查当前任务所依赖的任务是否完成,从而确定该当前任务是否可以执行;
多个执行模块130,与所述控制器110建立通信连接,用于执行由所述控制器110发送的任务。
以下结合具体的实施例,对本公开提供的分布式工作流调度方法进行详细说明。
图2所示,为根据本公开的一种实施方式提供的分布式工作流调度方法的流程图,可选地,该方法可以应用于上述控制器,如图2所示,所述方法可以包括:
在步骤11中,获取触发事件,所述触发事件用于触发执行目标任务。
示例地,在本公开实施例中,在任务执行完成后,可以向控制器发送一触发事件,以用于触发该任务的下游任务执行。其中,控制器中可以通过一事件队列存储该触发事件,以便于按照时间顺序对该触发事件进行处理。
在步骤12中,向目标依赖检查模块发送触发事件,以由目标依赖检查模块根据任务依赖图确定目标任务对应的依赖任务,并根据依赖任务确定目标任务是否满足执行条件,其中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务。
示例地,该任务依赖图可以是基于用户预先设置的依赖关系生成。例如,用户可以通过UI界面和/或API(Application Programming Interface,应用程序接口)设置工作流中的任务,并设置该任务的依赖关系。例如,用户可以通过UI界面中配置任务A、B、C、D,并选择依赖关系为任务C依赖任务A和B,任务D依赖任务C,则可以基于该用户的配置操作,生成任务依赖图。其中,该任务依赖图可以由任一依赖检查模块进行可读访问,以实现任务依赖图的共享和维护管理。
现有技术中,在基于分布式工作流进行调度时,不同部门的任务通常要求任务独立,即每一部门中单独管理其自身任务之间的依赖关系,不同部门的任务之间不能直接设置依赖关系,从而难以实现跨部门协作的数据回溯或重跑任务。
基于此,在本公开实施例中,在用户配置依赖关系时,可以将当前已存在的各个任务显示给用户,以使得用户既可以设置其本身配置的任务之间的依赖关系,也可以设置其配置的任务对其他任务的依赖关系,从而简化用户使用流程,并且可以保证生成的任务依赖图的完整性和准确性。
在步骤13中,在接收到指示目标任务满足执行条件的确认消息的情况下,确定用于执行目标任务的目标执行模块。
在步骤14中,向目标执行模块发送目标任务,以由目标执行模块执行目标任务。
其中,调度系统中可以有多个执行模块,示例地,控制器可以监控每一执行模块的状态,则可以从处于就绪状态的执行模块中选择一者作为该目标执行模块。示例地,执行模块的运行状态的监测可以通过Zookeeper(ZK)实现。其中,ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务,执行模块可以通过Worker线程实现,在执行模块中可以启动子线程对任务进行提交及监控,执行模块可以将其注册至ZK中,则可以基于ZK对该执行模块的运行状态进行监听,基于ZK实现模块监听的方式为本领域中的常用技术,在此不再赘述。
由此,在上述技术方案中,获取触发事件,向目标依赖检查模块发送所述触发事件,以由所述目标依赖检查模块根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件,并在接收到指示所述目标任务满足执行条件的确认消息的情况下,确定用于执行所述目标任务的目标执行模块,向所述目标执行模块发送所述目标任务,以由所述目标执行模块执行所述目标任务。由此,通过上述技术方案,可以直接通过目标任务的上游任务产生的触发事件,以触发对目标任务是否满足执行条件进行检查,一方面可以避免轮询任务是否运行所造成的资源浪费,另一方面可以及时触发目标任务进行执行检查,从而可以一定程度上提高工作流调度的实时性和效率。并且,在本公开实施例中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,即通过任务依赖图对整个数据链路中的任务之间的依赖关系进行表征,从而便于快速且准确地的确定出目标任务对应的依赖任务,进一步提高工作流调度的效率,并且可以简化各任务之间的依赖管理,并且可以支持跨部门协作下的数据回溯和重跑任务,进一步提高分布式工作流调度方法的准确性,并且有效拓宽该方法的适用范围。
可选地,在步骤13中,确定用于执行目标任务的目标执行模块的另一实施方式如下,该步骤可以包括:
根据所述目标任务的操作类型和/或资源占用状态,确定所述目标任务对应的模块类型;
从属于所述模块类型的执行模块中确定所述目标执行模块。
其中,模块类型可以分为安全类型和隔离类型,其中安全类型的执行模块中执行的任务对其他用户或其他任务的影响较小,该类型的执行模块可以通过Worker线程实现;隔离类型的执行模块中采用单独的资源进行任务执行,可以用于执行对其他用户或者其他任务影响较大的任务,该类型的执行模块可以通过K8S(kubernetes)实现,通过隔离的方式执行任务可以降低其任务执行失败或任务执行时对资源的占用的影响,保证工作流调度的安全性和稳定性。
作为示例,可以根据目标任务的操作类型确定目标任务对应的模块类型,例如,目标任务为查询任务,则该目标任务的执行过程中不会修改数据,可以确定其对应的模块类型为安全类型;目标任务为写任务,则该目标任务的执行过程中会对数据进行修改、新增或删除,可以将该目标任务对应的模块类型确定为隔离类型。
作为另一示例,可以根据目标任务的资源占用状态确定目标任务对应的模块类型。例如,可以根据系统实际资源情况设置一资源阈值,将所需资源量小于该资源阈值的目标任务对应的模块类型确定为安全类型,将所需资源量大于或等于该资源阈值的目标任务对应的模块类型确定为隔离类型,以避免所需资源量较大的任务在执行时,堵塞其他任务执行。
作为另一示例,可以根据目标任务的操作类型和资源占用状态综合确定目标任务对应的模块类型,例如可以设置所需资源量小于该资源阈值的查询任务对应的模块类型为安全类型,所需资源量小于该资源阈值的写任务、以及所述所需资源量大于或等于该资源阈值的任务对应的模块类型为隔离类型。
其中,上述设置方式仅为示例性说明,不对本公开进行限定,可以根据实际使用场景进行设置。由此,在确定出目标任务对应的模块类型,若确定目标任务对应的模块类型为安全类型,则可以从安全类型的执行模块中确定目标执行模块,如将worker模块中确定目标执行模块。
因此,通过上述技术方案,可以首先确定目标任务对应的模块类型,从而可以从该模块类型的执行模块中确定目标执行模块,从而可以保证对不同任务的安全执行,一定程度上保证任务执行的隔离性,有效降低任务执行失败所影响的范围,保证工作流调度系统的稳定性和安全性,保证工作流调度的准确性。
可选地,在实际使用场景中,分布式工作流调度系统中可以同时并发处理的任务是有限的,因此本公开还提供以下实施例,以保证任务的合理调度。
可选地,所述方法还可以包括:
确定满足执行条件的候选任务的数量,其中,接收到指示任务满足执行条件的确认消息,即该任务满足执行条件,则将该任务作为候选任务,从而可以确定候选任务的数量。
在所述数量与正在执行的任务的数量之和超过并发数的情况下,将按照任务优先级由高至低排序前M的候选任务确定为待执行任务,其中,M为小于或等于所述并发数与正在执行的任务的数量之差的正整数。
其中,该并发数是该分布式工作流对任务进行调度时,可以同时执行的任务的最大数量。在该实施例中,若满足执行条件的任务过多,则可以根据任务优先级的顺序,优先调度任务优先级较高的任务,满足用户的使用需求。示例地,该并发数为Sum,当前正在执行的任务的数量为Num,则M可以设置为小于或等于Sum-Num。示例地,该任务优先级可以根据任务对应的用户权限进行设置,例如对应于VIP权限的任务的任务优先级高于对应于普通权限的任务的任务优先级,或者也可以是根据任务所属的部门权限等设置任务优先级,或者也可以结合任务的等待时间进行设置,也可以通过Yarn的调度算法确定优先级,本公开对此不进行限定。
在确定出待执行任务后,在所述目标任务属于所述待执行任务的情况下,执行所述确定用于执行所述目标任务的目标执行模块的步骤。
在确定出待执行任务后,若该目标任务属于待执行任务,则可以进一步确定该目标任务对应的目标执行模块,其中,在确定用于执行目标任务的目标执行模块时,也可以结合上文所述的实施例进行确定。若该目标任务不属于待执行任务,则需要等待正在执行中的任务或者待执行任务中存在执行结束的任务时,以重新确定待执行任务,并以对目标任务进行调度,具体方式与上文所述类型,在此不再赘述。
由此,通过上述技术方案,可以在满足执行条件的任务过多时,结合任务优先级对优先级较高的任务优先执行,从而可以保证任务的有序调度,保证分布式工作流调度方法调度的合理性和均衡性,贴合用户的使用需求。
可选地,步骤13中,确定用于执行目标任务的目标执行模块的另一实施例如下,该步骤可以包括:
确定目标任务的目标任务类型;
在处于运行状态的、所述目标任务类型的任务数量小于所述目标任务类型对应的任务并发数的情况下,确定用于执行所述目标任务的目标执行模块。
其中,在工作流调度的过程中,可能会由于某些任务执行失败需要回溯重跑以对数据及该数据所关联的数据进行修改,若回溯重跑任务过多时,则会对系统资源的占用过大,严重影响系统正向任务调度执行的效率。因此,在本公开实施例中,可以针对每一任务类型设置其对应的任务并发数,示例地,可以设置正向执行类型的任务并发数为Q,回溯重跑类型的任务并发数为P,或者也可以根据任务执行所需的资源对任务类型进行进一步细粒度的划分,本公开对此不进行限定。
在本公开实施例中,若确定出目标任务的目标任务类型为回溯重跑类型,则可以查询此时处于运行状态的回溯重跑类型的任务数量,若此时任务数量为P,则表示该回溯重跑类型的任务并发执行已达上限,此时该目标任务不可执行,由此可以有效避免单一任务类型的任务大量执行对系统资源的抢占,保证对系统调度资源的合理利用,保证分布式工作流中任务调度的合理性和均衡性,从而提高调度系统的资源利用率和调度稳定性。
可选地,所述方法可以还包括:
监测所述分布式工作流中每一依赖检查模块的运行状态。其中,所述依赖检查模块可以通过Scheduler实现,可以通过Zookeeper(ZK)实现对依赖检查模块的运行状态的监控,依赖检查模块可以将其注册至ZK中,则可以基于ZK对该依赖检查模块的运行状态进行监听。
在所述目标依赖检查模块的运行状态为异常状态的情况下,存储所述目标依赖检查模块的任务数据信息。其中,在确定目标依赖检查模块的运行状态为异常状态时,如该目标依赖检查模块运行中断或者关机状态,表示此时该目标依赖检查模块不可用,则存储该目标依赖检查模块的任务数据信息,其中该任务数据信息可以包括记录目标任务的依赖任务是否完成的信息,从而可以基于该任务数据信息进行数据恢复,以继续执行目标任务是否满足执行条件的检查。
在一实施例中,该情况下可以直接从运行状态为就绪状态的其他依赖检查模块中确定新的目标依赖检测模块。其中,就绪状态表示该依赖检查模块当前活跃可用且空闲。并向所述新的目标依赖检测模块发送所述任务数据信息,以由所述新的目标依赖检测模块继续根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件。
在另一实施例中,可以先控制该目标依赖检查模块重启,该目标依赖检查模块重启成功后,可以由该目标依赖检查模块继续确定目标任务是否满足执行条件,在控制所述目标依赖检查模块重启失败的情况下,从运行状态为就绪状态的其他依赖检查模块中确定新的目标依赖检测模块;向所述新的目标依赖检测模块发送所述任务数据信息,以由所述新的目标依赖检测模块继续根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件。
由此,通过上述技术方案,可以对多个依赖检查模块的状态进行监测,从而可以在确定当前正在检查目标任务是否满足执行条件的目标依赖检查模块异常时,对目标依赖检查模块进行处理,或者及时更换新的目标依赖检查模块,从而可以保证对目标任务是否满足执行条件检查的效率,从而可以保证任务调度的效率。
相应地,本公开还提供一种分布式工作流调度方法,示例地,可以应用于图1中的依赖检查模块,如图3所示,所述方法包括:
在步骤31中,在接收到触发事件的情况下,根据任务依赖图确定目标任务对应的依赖任务,其中,所述触发事件用于触发执行所述目标任务,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务。
示例地,控制器可以根据每一依赖检查模块当前的资源占用状态对其接收到的触发事件进行分发,则依赖检查模块在接收到其分发的触发事件时,则可以基于该触发事件进行任务依赖检查。具体地,如上文所述示例,在任务A完成后,可以形成一触发事件,该触发事件用于触发目标任务C执行,则在接收到用于触发目标任务C执行的触发事件时,可以根据任务依赖图确定目标任务C对应的依赖任务为任务A和任务B。
在步骤32中,根据依赖任务确定目标任务是否满足执行条件。
作为示例,可以通过确定该依赖任务是否全部完成,从而确定目标任务是否满足执行条件。示例地,可以在确定依赖任务后,查询每一依赖任务的状态,在依赖任务的状态均为完成状态时,则确定依赖任务全部完成,即该目标任务满足执行条件。在其中任一依赖任务的状态不为完成状态时,即表示该目标任务的上游还存在未完成的依赖任务,则此时该目标任务还不能执行,则可以丢弃该触发事件,以等待该未完成的依赖任务在执行完成后生成的触发事件,从而对目标任务是否满足执行条件进行再次检查。由此,在确定目标任务是否可执行时,无需对其依赖任务进行轮询,基于触发事件的方式,可以对目标任务是否满足执行条件的检查进行主动触发,从而可以避免多次轮询对资源的占用,提高工作流调度的效率。
在实际使用场景中,通常可能会设置任务的执行时间,因此,本公开还提供以下实施例。作为另一示例,根据依赖任务确定目标任务是否满足执行条件的一种实现方式如下,该步骤可以包括:
确定所述依赖任务是否全部完成。其中,该步骤的一种实现方式已在上文进行详述,在此不再赘述。
在确定所述依赖任务全部完成且当前时刻达到所述目标任务的执行时间的情况下,确定所述目标任务满足执行条件。
作为示例,该目标任务的执行时间为固定时间,如,该目标任务的执行时间为18:00,则在确定目标任务的依赖任务全部完成后,若当前时刻尚未达到18:00,则该目标任务处于等待执行状态,直到当前时刻达到18:00时,确定该目标任务满足执行条件。示例地,可以通过队列Delayed Queue存储依赖任务全部完成的目标任务,从而可以基于该队列实现对其中的任务的执行时间的监控。
由此,通过上文所述方案,可以对目标任务的依赖任务是否完成进行检查,同时也可以对目标任务的执行时间进行时间检查,从而可以有效保证确定出的目标任务是否满足执行条件的结果的准确性,为目标任务的准确调度提供准确的数据支持。
在步骤33中,在确定目标任务满足执行条件的情况下,向控制器发送指示目标任务满足执行条件的确认消息。
由此,通过上述技术方案,通过触发事件触发对目标任务是否满足执行条件进行检查,从而可以一定程度上提高工作流调度的实时性和效率。并且,在本公开实施例中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,即通过任务依赖图对整个数据链路中的任务之间的依赖关系进行表征,从而便于快速且准确地的确定出目标任务对应的依赖任务,并且可以保证确定出的依赖任务的全面性,进一步提高工作流调度的效率,并且可以简化各任务之间的依赖管理,并且可以支持跨部门协作下的数据回溯和重跑任务,进一步提高分布式工作流调度方法的准确性,并且有效拓宽该方法的适用范围。
可选地,在另一应用场景下,目标任务的执行不仅依赖于分布式工作流之中的流转数据,还可能依赖于从外部接口获得的数据,因此,本公开还提供以下实施例,以对外部数据进行检查,保证目标任务调度执行的准确性。
示例地,所述目标任务依赖于所述分布式工作流对应的数据之外的目标数据,所述依赖任务中包含探针任务,用于查询所述目标数据,在本公开中通过对外部的目标数据设置探针的方式,以对该目标数据进行查询,确定该目标数据是否就绪。
相应地,所述确定所述依赖任务是否全部完成,可以包括:
间隔预设时段执行所述探针任务,并记录所述探针任务的执行次数。
其中,该预设时段可以根据实际使用场景进行设置,本公开对此不进行限定。示例地,可以通过sensor探针实现探针任务进行数据查询,该探针任务的执行次数初始为0,每执行一次该执行次数进行加一操作。
在查询到所述探针任务对应的目标数据存在的情况下,确定所述探针任务完成;
在未查询到探针任务对应的目标数据,且所述执行次数达到预设次数的情况下,结束所述探针任务,并确定所述探针任务未完成。其中,该预设次数可以根据实际使用场景进行设置,本公开对此不进行限定。
示例地,该探针任务可以基于HDFS(Hadoop分布式文件系统)或者Hive分区表进行数据查询,从而确定是否存在目标数据。
由此,通过上述技术方案,可以确定目标任务所依赖的外部数据是否就绪,从而可以保证确定出的目标任务是否满足执行条件的判定结果的准确性,从而可以提高任务调度的准确性,避免出现在外部数据缺失的情况下执行目标任务对分布式工作流调度系统的影响,保证调度系统的稳定性。
本公开还提供一种分布式工作流调度装置,如图4所示,所述装置100包括:
获取模块101,用于获取触发事件,所述触发事件用于触发执行目标任务;
第一发送模块102,用于向目标依赖检查模块发送所述触发事件,以由所述目标依赖检查模块根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件,其中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
第一确定模块103,用于在接收到指示所述目标任务满足执行条件的确认消息的情况下,确定用于执行所述目标任务的目标执行模块;
第二发送模块104,用于向所述目标执行模块发送所述目标任务,以由所述目标执行模块执行所述目标任务。
可选地,所述第一确定模块包括:
第一确定子模块,用于根据所述目标任务的操作类型和/或资源占用状态,确定所述目标任务对应的模块类型;
第二确定子模块,用于从属于所述模块类型的执行模块中确定所述目标执行模块。
可选地,所述装置还包括:
监测模块,用于监测所述分布式工作流中每一依赖检查模块的运行状态;
存储模块,用于在所述目标依赖检查模块的运行状态为异常状态的情况下,存储所述目标依赖检查模块的任务数据信息;
第二确定模块,用于在控制所述目标依赖检查模块重启失败的情况下,从运行状态为就绪状态的其他依赖检查模块中确定新的目标依赖检测模块;
第三发送模块,用于向所述新的目标依赖检测模块发送所述任务数据信息,以由所述新的目标依赖检测模块继续根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件。
可选地,所述装置还包括:
第三确定模块,用于确定满足执行条件的候选任务的数量;
第四确定模块,用于在所述数量与正在执行的任务的数量之和超过并发数的情况下,将按照任务优先级由高至低排序前M的候选任务确定为待执行任务,其中,M为小于或等于所述并发数与所述正在执行的任务的数量之差的正整数;
所述第一确定模块在所述目标任务属于所述待执行任务的情况下,确定用于执行所述目标任务的目标执行模块。
可选地,所述第一确定模块包括:
第三确定子模块,用于确定目标任务的目标任务类型;
第四确定子模块,用于在处于运行状态的、所述目标任务类型的任务数量小于所述目标任务类型对应的任务并发数的情况下,确定用于执行所述目标任务的目标执行模块。
本公开还提供一种分布式工作流调度装置,如图5所述,所述装置200包括:
第五确定模块201,用于在接收到触发事件的情况下,根据任务依赖图确定目标任务对应的依赖任务,其中,所述触发事件用于触发执行所述目标任务,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
第六确定模块202,用于根据所述依赖任务确定所述目标任务是否满足执行条件;
第四发送模块203,用于在确定所述目标任务满足执行条件的情况下,向控制器发送指示所述目标任务满足执行条件的确认消息。
可选地,所述第六确定模块包括:
第五确定子模块,用于确定所述依赖任务是否全部完成;
第六确定子模块,用于在确定所述依赖任务全部完成且当前时刻达到所述目标任务的执行时间的情况下,确定所述目标任务满足执行条件。
可选地,所述目标任务依赖于所述分布式工作流对应的数据之外的目标数据,所述依赖任务中包含探针任务,用于查询所述目标数据;
所述第五确定子模块包括:
执行子模块,用于间隔预设时段执行所述探针任务,并记录所述探针任务的执行次数;
第七确定子模块,用于在查询到所述探针任务对应的目标数据存在的情况下,确定所述探针任务完成;
待处理子模块,用于在未查询到探针任务对应的目标数据,且所述执行次数达到预设次数的情况下,结束所述探针任务,并确定所述探针任务未完成。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备600的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取触发事件,所述触发事件用于触发执行目标任务;向目标依赖检查模块发送所述触发事件,以由所述目标依赖检查模块根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件,其中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;在接收到指示所述目标任务满足执行条件的确认消息的情况下,确定用于执行所述目标任务的目标执行模块;向所述目标执行模块发送所述目标任务,以由所述目标执行模块执行所述目标任务。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:在接收到触发事件的情况下,根据任务依赖图确定目标任务对应的依赖任务,其中,所述触发事件用于触发执行所述目标任务,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;根据所述依赖任务确定所述目标任务是否满足执行条件;在确定所述目标任务满足执行条件的情况下,向控制器发送指示所述目标任务满足执行条件的确认消息。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“获取触发事件,所述触发事件用于触发执行目标任务的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,示例1提供了一种分布式工作流调度方法,其中,所述方法包括:
获取触发事件,所述触发事件用于触发执行目标任务;
向目标依赖检查模块发送所述触发事件,以由所述目标依赖检查模块根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件,其中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
在接收到指示所述目标任务满足执行条件的确认消息的情况下,确定用于执行所述目标任务的目标执行模块;
向所述目标执行模块发送所述目标任务,以由所述目标执行模块执行所述目标任务。
根据本公开的一个或多个实施例,示例2提供了示例1的方法,其中,所述确定用于执行所述目标任务的目标执行模块,包括:
根据所述目标任务的操作类型和/或资源占用状态,确定所述目标任务对应的模块类型;
从属于所述模块类型的执行模块中确定所述目标执行模块。
根据本公开的一个或多个实施例,示例3提供了示例1的方法,其中,所述方法还包括:
监测所述分布式工作流中每一依赖检查模块的运行状态;
在所述目标依赖检查模块的运行状态为异常状态的情况下,存储所述目标依赖检查模块的任务数据信息;
在控制所述目标依赖检查模块重启失败的情况下,从运行状态为就绪状态的其他依赖检查模块中确定新的目标依赖检测模块;
向所述新的目标依赖检测模块发送所述任务数据信息,以由所述新的目标依赖检测模块继续根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件。
根据本公开的一个或多个实施例,示例4提供了示例1的方法,其中,所述方法还包括:
确定满足执行条件的候选任务的数量;
在所述数量与正在执行的任务的数量之和超过并发数的情况下,将按照任务优先级由高至低排序前M的候选任务确定为待执行任务,其中,M为小于或等于所述并发数与所述正在执行的任务的数量之差的正整数;
在所述目标任务属于所述待执行任务的情况下,执行所述确定用于执行所述目标任务的目标执行模块的步骤。
根据本公开的一个或多个实施例,示例5提供了示例1的方法,其中,所述确定用于执行所述目标任务的目标执行模块,包括:
确定目标任务的目标任务类型;
在处于运行状态的、所述目标任务类型的任务数量小于所述目标任务类型对应的任务并发数的情况下,确定用于执行所述目标任务的目标执行模块。
根据本公开的一个或多个实施例,示例6提供了一种分布式工作流调度方法,其中,所述方法包括:
在接收到触发事件的情况下,根据任务依赖图确定目标任务对应的依赖任务,其中,所述触发事件用于触发执行所述目标任务,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
根据所述依赖任务确定所述目标任务是否满足执行条件;
在确定所述目标任务满足执行条件的情况下,向控制器发送指示所述目标任务满足执行条件的确认消息。
根据本公开的一个或多个实施例,示例7提供了示例6的方法,其中,所述根据所述依赖任务确定所述目标任务是否满足执行条件,包括:
确定所述依赖任务是否全部完成;
在确定所述依赖任务全部完成且当前时刻达到所述目标任务的执行时间的情况下,确定所述目标任务满足执行条件。
根据本公开的一个或多个实施例,示例8提供了示例7的方法,其中,所述目标任务依赖于所述分布式工作流对应的数据之外的目标数据,所述依赖任务中包含探针任务,用于查询所述目标数据;
所述确定所述依赖任务是否全部完成,包括:
间隔预设时段执行所述探针任务,并记录所述探针任务的执行次数;
在查询到所述探针任务对应的目标数据存在的情况下,确定所述探针任务完成;
在未查询到探针任务对应的目标数据,且所述执行次数达到预设次数的情况下,结束所述探针任务,并确定所述探针任务未完成。
根据本公开的一个或多个实施例,示例9提供了一种分布式工作流调度装置,其中,所述装置包括:
获取模块,用于获取触发事件,所述触发事件用于触发执行目标任务;
第一发送模块,用于向目标依赖检查模块发送所述触发事件,以由所述目标依赖检查模块根据任务依赖图确定所述目标任务对应的依赖任务,并根据所述依赖任务确定所述目标任务是否满足执行条件,其中,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
第一确定模块,用于在接收到指示所述目标任务满足执行条件的确认消息的情况下,确定用于执行所述目标任务的目标执行模块;
第二发送模块,用于向所述目标执行模块发送所述目标任务,以由所述目标执行模块执行所述目标任务。
根据本公开的一个或多个实施例,示例10提供了一种分布式工作流调度装置,其中,所述装置包括:
第五确定模块,用于在接收到触发事件的情况下,根据任务依赖图确定目标任务对应的依赖任务,其中,所述触发事件用于触发执行所述目标任务,所述任务依赖图中包括分布式工作流中的所有任务以及所述任务之间的依赖关系,所述目标任务为所述分布式工作流中的任一任务;
第六确定模块,用于根据所述依赖任务确定所述目标任务是否满足执行条件;
第四发送模块,用于在确定所述目标任务满足执行条件的情况下,向控制器发送指示所述目标任务满足执行条件的确认消息。
根据本公开的一个或多个实施例,示例11提供了一种分布式工作流调度系统,其中,所述系统包括:
控制器,用于执行示例1-5中任一示例所述方法的步骤;
多个依赖检查模块,与所述控制器建立通信连接,用于执行示例6-8中任一示例所述方法的步骤;
多个执行模块,与所述控制器建立通信连接,用于执行由所述控制器发送的任务。
根据本公开的一个或多个实施例,示例12提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现示例1-8中任一示例所述方法的步骤。
根据本公开的一个或多个实施例,示例13提供了一种电子设备,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现示例1-8中任一示例所述方法的步骤。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。