一种分布式工作流调度的方法和装置与流程

文档序号:12719082阅读:254来源:国知局
一种分布式工作流调度的方法和装置与流程

本发明涉及计算机网络技术领域,尤其涉及一种分布式工作流调度技术。



背景技术:

现有的工作流管理系统中,所有工作流的作业均在一台主机以多线程形式执行,其弊端在于面对大量大规模工作流的执行请求时,受执行主机单机资源(CPU、内存与磁盘)大小有限的影响,无法及时响应请求,即在作业处理规模与资源层面均不具备良好的可扩展性;并且现实中工作流作业间的依赖关系也不仅只是顺序依赖,往往会包含更复杂的依赖关系,而且现有的工作流调度系统不能实现将工作流中的调度和执行逻辑分开,以及将工作流中的调度和资源管理逻辑分开。

因此,如何提供一种分布式工作流调度技术成为本领域技术人员亟需解决的技术问题之一。



技术实现要素:

本发明的目的是提供一种分布式工作流调度的方法和装置。

根据本发明的一个方面,提供一种分布式工作流调度的方法,其中,该方法包括以下步骤:

a.获取用户提供的作业执行指令、工作流拓扑关系以及作业间的依赖关系;

b.基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点;

c.通过资源管理模块确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块;

d.由已获取所述资源的所述资源管理模块通过资源调度代理发送启动指令,以启动远程作业执行模块执行所述作业执行指令。

优选地,所述作业间的依赖关系包括以下至少任一项:

顺序依赖;

数据依赖;

选择依赖;

并行执行。

优选地,所述步骤b包括:

构建工作流执行对象;

所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点;

根据已准备就绪的所述节点构建对应的作业执行对象以记录所述节点的工作状态,其中,所述工作流执行对象包括所有作业执行对象列表,所述所有作业执行对象列表中包括所有的作业执行对象。

优选地,所述步骤b还包括:

所述作业执行对象获取并记录所述远程作业执行模块发送的与所述作业执行指令对应的节点的作业执行状态;

当所述节点的所述作业执行状态为执行结束状态时,所述作业执行对象指示与所述节点对应的所述远程作业执行模块退出。

优选地,所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已执行结束的节点,并指示所述资源管理模块回收所述已执行结束的节点对应的资源。

优选地,该方法还包括:

由所述资源管理模块根据所述节点所需要的资源配额的大小将至少一种资源配额划分为不同种类的资源配额,其中,每种资源配额分别与工作流对应的所述集群资源调度系统中应用的一个作业相对应,同一种类资源配额中的每份资源分别与所述种类资源配额对应作业的一个任务相对应;

通过所述资源管理模块记录每个工作流中的每种资源配额及其所分别对应的所述集群资源调度系统中应用的作业。

优选地,所述步骤c还包括:

通过所述资源管理模块遍历所述所有作业执行对象列表以检测是否存在节点的增减;

将增减的所述节点所要求的资源配额与所述每个工作流中的每种资源配额分别进行比较,获得比较结果;

根据所述比较结果决定向所述集群资源调度系统对应的应用添加新的作业或者更新已添加作业的任务并发数量。

优选地,所述步骤b中通过检查以下至少任一项以查找与所述作业执行指令对应的节点:

上游节点是否运行完成;

所述作业间的依赖关系是否满足;

所述节点是否被设定为跳过;

所述节点是否为终态。

根据本发明的另一个方面,还提供了一种分布式工作流调度的调度装置,其中,该调度装置包括:

第一获取装置,用于获取用户提供的作业执行指令、工作流拓扑关系以及作业间的依赖关系;

第二获取装置,用于基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点;

确定装置,用于通过资源管理模块确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块;

执行装置,用于由已获取所述资源的所述资源管理模块通过资源调度代理发送启动指令,以启动远程作业执行模块执行所述作业执行指令。

优选地,所述作业间的依赖关系包括以下至少任一项:

顺序依赖;

数据依赖;

选择依赖;

并行执行。

优选地,所述第二获取装置包括:

第一构建单元,用于构建工作流执行对象;

查找单元,用于所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点;

第二构建单元,用于根据已准备就绪的所述节点构建对应的作业执行对象以记录所述节点的工作状态,其中,所述工作流执行对象包括所有作业执行对象列表,所述所有作业执行对象列表中包括所有的作业执行对象。

优选地,所述第二获取装置还用于:

所述作业执行对象获取并记录所述远程作业执行模块发送的与所述作业执行指令对应的节点的作业执行状态;

当所述节点的所述作业执行状态为执行结束状态时,所述作业执行对象指示与所述节点对应的所述远程作业执行模块退出。

优选地,所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已执行结束的节点,并指示所述资源管理模块回收所述已执行结束的节点对应的资源。

优选地,该调度装置还包括:

划分装置,用于由所述资源管理模块根据所述节点所需要的资源配额的大小将至少一种所述资源配额划分为不同种类的资源配额,其中,每种资源配额分别与工作流对应的所述集群资源调度系统中应用的一个作业相对应,同一种类资源配额中的每份资源配额分别与所述种类资源配额对应作业的一个任务相对应;

记录装置,用于通过所述资源管理模块记录每个工作流中的每种资源配额及其所分别对应的所述集群资源调度系统中应用的作业。

优选地,所述确定装置还包括:

检测单元,用于通过所述资源管理模块遍历所述所有作业执行对象列表以检测是否存在节点的增减;

比较单元,用于将增减的所述节点所要求的资源配额与所述每个工作流中的每种资源配额分别进行比较,获得比较结果;

更新单元,用于根据所述比较结果决定向所述集群资源调度系统对应的应用添加新的作业或者更新已添加作业的任务并发数量。

优选地,所述第二获取装置通过检查以下至少任一项以查找与所述作业执行指令对应的节点:

上游节点是否运行完成;

所述作业间的依赖关系是否满足;

所述节点是否被设定为跳过;

所述节点是否为终点。

根据本发明的又一个方面,还提供了一种计算机设备,所述计算机设备包括:

一个或多个处理器;

存储器,用于存储一个或多个计算机程序;

当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。

与现有技术相比,本发明具有以下优点:

本发明基于集群资源调度系统实现工作流的分布式化运行,可以接受不同计算平台发起的资源邀约,快速分配约定资源以及按照指令使用与回收资源,同时对外提供良好的操作界面与用户接口,并且采用集群资源调度系统分离了工作流的调度与资源管理逻辑,降低了资源调度系统迭代对于工作流调度系统的影响。并且本发明可以基于作业间复杂的依赖关系遍历Flow(工作流)的拓扑,同时向集群资源调度系统发起资源的申请与回收指令,很好的分离了工作流中的调度逻辑与执行逻辑,实现了服务器装置调度和集群节点专职执行。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1示出根据本发明一个方面的一种分布式工作流调度的调度装置结构示意图;

图2示出通过调度装置1实现分布式工作流调度的系统W的整体架构示意图;

图3-a示出网络服务器(Web Server)的结构示意图;

图3-b示出执行服务器(Executor Server)的结构示意图;

图4示出根据本发明一个方面的一种分布式工作流调度的工作流的流程示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑等。

所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于个人电脑、笔记本电脑、平板电脑等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。

需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。

后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。

这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本发明的示例性实施例的目的。但是本发明可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。

应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。

应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。

这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。

还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。

下面结合附图对本发明作进一步详细描述。

图1示出根据本发明一个方面的一种分布式工作流调度的调度装置结构示意图。调度装置1包括:第一获取装置101、第二获取装置102、确定装置103和执行装置104。

在此,调度装置1例如位于前述计算机设备中,优选地,所述调度装置1位于网络设备中。在此,在调度装置1中,系统构建项目管理模块(ProjectManager)、工作流执行模块(FlowRunnerManager)和资源管理模块(ResourceManager),其中,所述ProjectManager用于启动单独线程用于管理所有Project拓扑关系的上传、解析与下载;所述FlowRunnerManager用于启动单独线程用于管理所有工作流(Flow)的执行实例;ResourceManager用于启动单独线程用于和集群资源调度系统,例如Normandy系统交互,管理资源的申请与回收。

其中,第一获取装置101获取用户提供的作业执行指令、工作流拓扑关系以及作业间的依赖关系。具体地,用户上传工作流拓扑描述后,调度装置1解析所述拓扑描述中隐含的工作流拓扑关系和作业间的依赖关系,然后存储至对应的数据库与Hadoop分布式文件系统(HDFS)中,当用户通过计算机设备发起执行工作流(Flow)的请求后,第一获取装置101获取用户发起的请求中的作业执行指令,以及自所述数据库中获取与所述Flow对应的拓扑关系和作业间的依赖关系,其中,第一获取装置101例如通过一次或者多次调用所述设备所提供的应用程序接口(API)或其他约定的通信方式,获取用户发起的作业执行指令。例如,用户上传工作流拓扑描述后,ProjectManager解析工作流拓扑关系,IKExpression解析作业间依赖关系,然后存储所述工作流拓扑关系和作业间的依赖关系至MySQL数据库,并基于唯一的项目标识(Project ID)插入ProjectManager中的Project队列,其中,IKExpression是一个采用逆波兰式算法结合指针栈优化的公式解析引擎,ProjectManager中包括Project队列,Project队列用于记录不同的Project信息;用户发起执行Flow的请求后,第一获取装置101获取用户发起的请求中的作业执行指令,并自所述MySQL数据库中获取与所述Flow对应的拓扑关系和作业间的依赖关系,以查找与所述作业执行指令对应的节点。

第二获取装置102基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点。具体地,第二获取装置102通过遍历的方式,例如,广度优先遍历(BFS),基于第一获取装置101获取的所述作业间的依赖关系遍历Flow的拓扑,查找与所述作业执行指令对应的所有节点,所述节点包括已准备就绪的可执行节点和已执行结束的不可执行节点,第二获取装置102获取所述所有节点中已经准备就绪的节点,形成对应的节点列表,其中第二获取装置102将获取的已准备就绪的节点依次放入所述节点列表中,并且不断移除所述节点列表中已经运行结束的节点,以实现所述节点列表的持续更新。其中,调度装置1可以基于作业间复杂的依赖关系遍历Flow的拓扑,所述作业间的依赖关系包括以下至少任一项:1)顺序依赖,例如,不同节点按照时间顺序进行顺序执行;2)数据依赖,例如,当前置节点运行完成后,还需检查某数据是否就绪,仅当两者均满足时,Node开始执行;3)选择依赖,预先设置执行条件,根据所述节点执行结束后满足的条件确定执行下游哪个Node;4)并行执行,工作流中上下游Node同时执行,例如,上游节点并未执行完毕,进行到某个进度时,下游节点也开始执行。

优选地,第二获取装置102包括:第一构建单元1021(未示出)、查找单元1022(未示出)和第二构建单元1023(未示出)。

其中,第一构建单元1021构建工作流执行对象(FlowRunner)。具体地,第一获取装置101获取用户提供的作业执行指令后,调度装置1构建与所述工作流对应的工作流执行对象FlowRunner,然后将所述FlowRunner的地址插入至FlowRunnerManager的FlowRunner队列,FlowRunner对象用于管理该Flow的执行实例,存在唯一的标识exec_id来标识一个执行实例,其中,所述FlowRunnerManager中包括FlowRunner队列,所述FlowRunner队列中存储有至少一个FlowRunner的地址,用于标识所述至少一个FlowRunner的位置,例如,所述FlowRunner队列中包括FlowRunner1,FlowRunner2,……FlowRunnerN所分别对应的地址。

所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系通过查找单元1022查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点。具体地,FlowRunner基于所述Flow拓扑关系与作业间的依赖关系定时轮询检查Flow拓扑关系中可运行的Node与子工作流(SubFlow),确定已经准备就绪的节点以及已经运行结束的节点。其中,查找单元1022对Flow拓扑关系中的Node或者SubFlow根据以下至少任一项进行检查,以查找与所述作业执行指令对应的节点:上游节点是否运行完成;所述作业间的依赖关系是否满足;所述节点是否被设定为跳过;所述节点是否为终态;例如,如果对于节点X来说,第一种情况:查找单元1022通过上述检查得知:其上游节点已经执行完成,并且作业间的依赖关系满足数据依赖、选择依赖或者顺序依赖,即:1)上游节点已经执行完成,并且预置的数据已经准备就绪-数据依赖,或者2)上游节点的输出结果决定了下游的执行节点为节点X-选择依赖,或者3)上有节点执行完成后,根据顺序即将执行节点X-顺序依赖,并且该节点未被设定为跳过以及该节点不是终态,则该节点被判定为已经准备就绪的节点,或者,第二种情况:查找单元1022通过上述检查得知:其上游节点已经执行至预定的进度,可以同时执行节点X,并且该节点未被设定为跳过以及该节点不是终态,则该节点被判定为已经准备就绪的节点。若查找单元1022查找发现节点Y为已经执行结束的节点,则,将节点Y判断为执行结束的节点。

第二构建单元1023根据已准备就绪的所述节点构建对应的作业执行对象(JobRunner)以记录所述节点的状态,其中,所述工作流执行对象包括所有作业执行对象(allJobRunner)列表,所述所有作业执行对象列表中包括所有的作业执行对象。具体地,FlowRunner通过查找单元1022查找到已经准备就绪的所述节点后,第二构建单元1023根据已准备就绪的所述节点构建对应的JobRunner,将所述JobRunner插入至FlowRunner中的allJobRunner列表中,并在所述allJobRunner列表添加已经准备就绪的Node,当FlowRunner通过查找单元1022查找到的Node为已经运行结束的Node时,从所述allJobRunner中移除已经运行结束的Node。其中,在作业执行指令所需要的资源被调度完成后,JobRunner对象启动指令指示远程作业执行模块执行所述作业执行指令,在作业执行指令的执行过程中,JobRunner对象基于自身状态对外展示用户指令的执行状态,在所述作业执行指令执行完成后,JobRunner对象发出退出指令指示远程作业执行模块退出,并标记Node为运行结束状态。

在此,调度装置1通过第一构建单元1021和第二构建单元1023分别构建了工作流执行对象(FlowRunner)和作业执行对象(JobRunner),在用户发出的作业执行指令时,JobRunner对象响应用户的作业执行指令请求,在所述作业执行指令的执行过程中,JobRunner记录节点的执行状态。FlowRunner全局掌控所述工作流(Flow)执行过程,从节点的JobRunner对象获取节点是否执行结束。

确定装置103通过资源管理模块(ResourceManager)确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块。具体地,ResourceManager定时遍历FlowRunnerManager中FlowRunner列表,针对每个FlowRunner向集群资源调度系统,例如,Normandy系统,添加唯一对应的应用,ResourceManager针对每个FlowRunner对象遍历其allJobRunner列表,确定已经准备就绪的所述Node需要的资源配额,然后所述集群资源调度系统从集群资源池中调度并分配对应的资源,推送至ResourceManager。在此,集群资源调度系统,例如Normandy系统,根据已准备就绪的所述节点所需要的资源配额,将该资源配额所对应的资源的位置提供至该资源管理模块,从而该资源管理模块可以根据该位置去使用对应的资源。并且,ResourceManager针对FlowRunner中已经运行结束的Node,向所述集群资源调度系统发起释放对应资源的请求,以进行集群资源的回收。

在此,调度装置1基于集群资源调度系统实现工作流的分布式化运行,可以接受不同计算平台发起的资源邀约,快速分配约定资源以及按照指令使用与回收资源,同时对外提供良好的操作界面与用户接口,并且采用集群资源调度系统分离了工作流的调度与资源管理逻辑,降低了资源调度系统迭代对于工作流调度系统的影响。

优选地,调度装置1还包括:划分装置105(未示出)和记录装置106(未示出)。

其中,划分装置105由所述资源管理模块(ResourceManager)根据所述节点所需要的资源配额的大小将至少一种资源配额划分为不同种类的资源配额,其中,每种资源配额分别与工作流对应的所述集群资源调度系统中应用的一个作业(Job)相对应,同一种类资源配额中的每份资源分别与所述种类资源配额对应作业的一个任务相对应。具体地,ResourceManager针对每个FlowRunner对象遍历其allJobRunner列表,对不同Node所要求的资源配额,按照资源配额的大小分为不同种类的资源配额,例如,allJobRunner列表中存在四个JobRunner,分别对应Node1、Node2、Node3、Node4,其中,Node1要求的资源配额为:3个CPU,128M内存,Node2要求的资源配额为:2个CPU,56M内存,Node3要求的资源配额为:2个CPU,56M内存,Node4要求的资源配额为:3个CPU,128M内存,Node5要求的资源配额为:2个CPU,56M内存,则Node1和Node4要求的资源配额大小相同都为3个CPU,128M内存,Node1和Node4要求的资源配额属于同一种资源配额,例如为资源配额A,则资源配额A中有2份资源;Node2、Node3和Node5要求的资源配额大小相同,都为2个CPU,56M内存,Node2、Node3和Node5要求的资源配额属于同一种资源配额,例如为资源配额B,则资源配额B中有3份资源。资源配额A和资源配额B分别对应集群资源调度系统,例如为Normandy系统,中所述Flow对应的应用下的一个作业(Job)。资源配额A中的一份资源与所述种类资源配额对应作业的一个任务(task)相对应。

记录装置106通过所述资源管理模块记录每个工作流中的每种资源配额及其所分别对应的所述集群资源调度系统中应用的作业。具体地,ResourceManager记录每个Flow不同种类的资源配额与所对应的作业(Job)的一一对应关系,以便ResourceManager检测到新节点或者减少的节点时根据所述新节点或者减少的节点的资源配额的种类进行后续操作,例如添加或者减少Job,或者增加或者减少Task并发数量。

优选地,确定装置103还包括:检测单元1031(未示出)、比较单元1032(未示出)和更新单元1033(未示出)。

其中,检测单元1031通过所述资源管理模块遍历所述所有作业执行对象列表以检测是否存在节点的增减。具体地,检测单元1031通过ResourceManager定时遍历allJobRunner列表,检测allJobRunner列表中是否增加或者减少了JobRunner,以判断是否存在节点的增减。

比较单元1032将增减的所述节点所要求的资源配额与所述每个工作流中的每种资源配额分别进行比较,获得比较结果。具体地,检测单元1031发现包含增加或者减少了一个Node,比较单元1032将该Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较,获得比较结果。

更新单元1033根据所述比较结果决定向所述集群资源调度系统对应的应用添加新的作业或者更新已添加作业的任务并发数量。具体地,当比较单元1032将增加的Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较后,当比较结果为所述Node要求的资源配额为一种新的资源配额时,向集群资源调度系统对应应用下添加一个新的Job,更新单元1033并将其Task并发置为1;当比较结果为所述Node要求的资源配额为ResourceManager中已经记录的资源配额时,更新单元1033将其对应Job的Task并发增加1;检测单元1031发现已有资源配额种类的Node减少N时,比较单元1032将减少的Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较,获得该种资源配额所对应的Job,然后更新单元1033将所述Job的Task并发减少N。

在此,集群资源调度系统根据Job的资源约束与对应的Task并发数量,从集群资源池中调度与分配资源,并推送至ResourceManager。

由已获取所述资源的所述资源管理模块通过资源调度代理发送启动指令,执行装置104启动远程作业执行模块执行所述作业执行指令。具体地,确定装置103通过资源管理模块确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块,ResourceManager接受集群资源调度系统分配的资源后,选择待运行的对应资源配额的Node绑定资源,产生集群资源调度系统中的Task进行执行。执行装置104由ResourceManager通过服务器端集群资源调度系统代理,例如,NormandyAgent,发送启动RemoteJobRunner指令后,本地NormandyAgent开始下载RemoteJobRunner与用户作业的运行环境,并启动RemoteJobRunner;RemoteJobRunner启动后与FlowRunner建立通信,获取其需要执行的Node信息,并执行该Node中描述的用户指令,即执行用户作业。

在此,调度装置1参照依赖关系遍历工作流的拓扑,同时向集群资源调度系统发起资源的申请与回收指令,很好的分离了工作流中的调度逻辑与执行逻辑,实现了服务器装置调度和集群节点专职执行。

优选地,第二获取装置102还用于:1)所述作业执行对象获取并记录所述远程作业执行模块发送的与所述作业执行指令对应的节点的作业执行状态。具体地,RemoeteJobRunner定时检查用户作业进程,依靠心跳向JobRunner汇报作业运行状态以供FlowRunner查看,JobRunner根据作业的运行状态回应心跳,其中包含相应的操作指令。2)当所述节点的所述作业执行状态为执行结束状态时,所述作业执行对象指示与所述节点对应的所述远程作业执行模块退出。具体地,RemoteJobRunner执行完成之后,通知JobRunner其已经完成作业执行指令的执行过程,JobRunner记录RemoteJobRunner的结束状态,JobRunner向RemoteJobRunner发送退出指令,指示RemoteJobRunner退出。

优选地,所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已执行结束的节点,并指示所述资源管理模块回收所述已执行结束的节点对应的资源。具体地,FlowRunner基于所述Flow拓扑关系与作业间的依赖关系定时轮询检查JobRunner中记录的与所述作业执行指令对应的节点,确定已经运行结束的节点,通知ResourceManager回收资源。ResourceManager向集群资源调度系统,例如为Normandy系统,发起释放对应资源的请求,以进行集群资源的回收。

以下将通过一个实例具体说明调度装置1的具体执行过程。

例如,图2示出通过调度装置1实现分布式工作流调度的系统W的整体架构,该系统使用Normandy系统实现工作流的分布式化运行,至少包括以下几个Server:网络服务器(WebServer)、执行服务器(ExecutorServer)、MySQL服务器(MySQLServer),图3-a和3-b分别示出WebServer和ExecutorServer的结构图。第一获取装置101自MySQL服务器获取用户提供的作业执行指令、工作流拓扑关系和作业间的依赖关系;第二获取装置102通过FlowRunner获取已准备就绪的节点;确定装置103通过ExecutorServer中的资源管理模块(ResourceManager)确定所述已准备就绪的节点所需要的资源配额,通过图2中的Normandy系统中的NormandyScheduler调度与所述集群资源配额对应的资源至ResourceManager,执行装置104通过图2中虚线框的区域实现所述作业执行指令的执行过程。

通过调度装置1实现分布式工作流调度的系统W按照Azkaban中对于工作流(Workflow)的抽象:Project、Flow与Node。其中Project描述了工作流的功能边界,由零或多个Flow组成;Flow是工作流中功能模块的抽象,由多个Node或Flow按照依赖关系组成结束Node仅有一个的拓扑(DAG);Node是工作流中最小的执行单位,其描述了对上游节点的依赖关系与自身执行指令。该结构抽象中,Flow的一次执行产生工作流的一个执行实例。调度装置1中的调度逻辑是指基于广度优先遍历(BFS)方式参照作业间的依赖关系遍历Flow的拓扑,同时向集群资源调度系统,例如,Normandy系统,发起资源的申请与回收指令,包括作业间依赖管理与资源管理两部分。

作业间依赖管理的核心是按照Flow拓扑结构与作业间依赖关系寻找可执行与执行结束的Node形成列表以供处理,由ExecutorServer完成。作业间依赖管理中作业间除顺序依赖关系外还包括:

数据依赖:前置节点运行完成后,还需检查某数据是否就绪,仅当两者均满足时,Node开始执行;

选择依赖:本Node依靠输出决定执行下游哪个Node;

并行执行:工作流中上下游Node同时执行。

资源管理是指依赖系统W的执行服务器(ExecutorServer)与集群资源调度系统Normandy Scheduler的交互,向Normandy系统发送申请与回收资源指令,系统W中进行资源管理的最小单位是Node。

调度逻辑中的详细过程包括:

系统W构建全局对象ProjectManager,启动单独线程用于管理所有Project拓扑的上传、解析与下载;构建位于ExecutorServer中的全局对象FlowRunnerManager,启动单独线程用于管理所有Flow的执行实例;构建全局对象ResourceManager,启动单独线程用于和Normandy系统交互,管理资源的申请与回收;

用户上传工作流拓扑描述后,ProjectManager解析该拓扑关系,使用IKExpression解析作业间依赖关系,然后存储两者至MySQL数据库和Hadoop分布式文件系统(HDFS),并基于唯一的Project ID插入ProjectManager中Project队列。

用户发起执行Flow的请求后,系统W构建位于ExecutorServer中的FlowRunner对象,插入FlowRunnerManager的FlowRunner队列。FlowRunner对象用于管理该Flow的执行实例,存在唯一的exec_id标识一个执行实例。

FlowRunner基于拓扑与依赖关系定时轮询检查Flow拓扑中可运行的Node与SubFlow,检查过程包括上游节点是否运行完成;上述依赖关系是否满足;该节点是否被人为设定跳过;该节点是否为终态。检查通过后向FlowRunner中allJobRunner列表追加已就绪Node,移除已经运行结束的Node。

ResourceManager定时遍历FlowRunnerManager对象中FlowRunner列表,针对每个FlowRunner向Normandy系统添加唯一对应的App,ResourceManager针对每个FlowRunner对象遍历其allJobRunner列表,根据Node所要求的资源配额进行分类,其中一种资源配额对应Normandy系统中该Flow对应App下的一个Job。

ResourceManager中记录每个Flow不同种类的资源配额所对应的Job,在其遍历allJobRunner列表时,发现包含一种新的资源配额的Node时,向Normandy系统对应App下添加一个新的Job,并将其Task并发置为1;发现已有资源配额种类的新的Node时,将其对应Job的Task并发增加1;发现已有资源配额种类的Node减少N时,将其对应Job的Task并发减少N。

Normandy系统根据Job的资源约束与Task并发要求,从集群资源池中调度与分配资源(Instance),并推送至系统W的ResourceManager。

ResourceManager接受Normandy系统分配的资源后,选择待运行的对应资源配额的Node绑定Instance产生Normandy系统中的Task进行执行。同时ResourceManager针对FlowRunner中已经运行结束的Node,向Normandy系统发起释放对应Instance的请求,以进行集群资源的回收。

系统W的执行逻辑是指用户构建的Node所描述的作业在集群节点中的执行与监控过程,其由系统W中RemoteJobRunner与Normandy系统中Normandy Agent共同完成。RemoteJobRunner负责监控与管理用户作业,Normandy Agent用于准备RemoteJobRunner的运行环境并启动、监控RemoteJobRunner运行。

执行逻辑的详细过程包括:

集群节点中的本地NormandyAgent接受到系统W ResourceMnanager通过Server端NormandyAgent发送的启动RemoteJobRunner指令后,本地NormandyAgent开始下载RemoteJobRunner与用户作业的运行环境,并启动RemoteJobRunner;RemoteJobRunner启动后与系统W中FlowRunner建立通信,获取其需要执行的Node信息,并执行该Node中描述的用户指令,即执行用户作业;RemoeteJobRunner定时检查用户作业进程,依靠心跳向JobRunner汇报作业运行状态,JobRunner根据作业的运行状态回应心跳,其中包含相应的操作指令;JobRunner发现作业结束时,会要求RemoteJobRunner退出,并通知ResourceManager回收资源。

图4示出根据本发明一个方面的一种分布式工作流调度的工作流的流程示意图。

其中,在步骤S401中,调度装置1获取用户提供的作业执行指令、工作流拓扑关系以及作业间的依赖关系。具体地,用户上传工作流拓扑描述后,调度装置1解析所述拓扑描述中隐含的工作流拓扑关系和作业间的依赖关系,然后存储至对应的数据库与Hadoop分布式文件系统(HDFS)中,当用户通过计算机设备发起执行工作流(Flow)的请求后,在步骤S401中,调度装置1获取用户发起的请求中的作业执行指令,以及自所述数据库中获取与所述Flow对应的拓扑关系和作业间的依赖关系,其中,在步骤S401中,调度装置1例如通过一次或者多次调用所述设备所提供的应用程序接口(API)或其他约定的通信方式,获取用户发起的作业执行指令。例如,用户上传工作流拓扑描述后,ProjectManager解析工作流拓扑关系,IKExpression解析作业间依赖关系,然后存储所述工作流拓扑关系和作业间的依赖关系至MySQL数据库,并基于唯一的项目标识(Project ID)插入ProjectManager中的Project队列,其中,IKExpression是一个采用逆波兰式算法结合指针栈优化的公式解析引擎,ProjectManager中包括Project队列,Project队列用于记录不同的Project信息;用户发起执行Flow的请求后,在步骤S401中,调度装置1获取用户发起的请求中的作业执行指令,并自所述MySQL数据库中获取与所述Flow对应的拓扑关系和作业间的依赖关系,以查找与所述作业执行指令对应的节点。

在步骤S402中,调度装置1基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点。具体地,在步骤S402中,调度装置1通过遍历的方式,例如,广度优先遍历(BFS),基于获取的所述作业间的依赖关系遍历Flow的拓扑,查找与所述作业执行指令对应的所有节点,所述节点包括已准备就绪的可执行节点和已执行结束的不可执行节点,在步骤S402中,调度装置1获取所述所有节点中已经准备就绪的节点,形成对应的节点列表,其中在步骤S402中,调度装置1将获取的已准备就绪的节点依次放入所述节点列表中,并且不断移除所述节点列表中已经运行结束的节点,以实现所述节点列表的持续更新。其中,调度装置1可以基于作业间复杂的依赖关系遍历Flow的拓扑,所述作业间的依赖关系包括以下至少任一项:1)顺序依赖,例如,不同节点按照时间顺序进行顺序执行;2)数据依赖,例如,当前置节点运行完成后,还需检查某数据是否就绪,仅当两者均满足时,Node开始执行;3)选择依赖,预先设置执行条件,根据所述节点执行结束后满足的条件确定执行下游哪个Node;4)并行执行,工作流中上下游Node同时执行,例如,上游节点并未执行完毕,进行到某个进度时,下游节点也开始执行。

优选地,步骤S402包括:子步骤S4021(未示出)、子步骤S4022(未示出)和子步骤S4023(未示出)。

其中,在子步骤S4021中,调度装置1构建工作流执行对象(FlowRunner)。具体地,在子步骤S4021中,调度装置1获取用户提供的作业执行指令后,调度装置1构建与所述工作流对应的工作流执行对象FlowRunner,然后将所述FlowRunner的地址插入至FlowRunnerManager的FlowRunner队列,FlowRunner对象用于管理该Flow的执行实例,存在唯一的标识exec_id来标识一个执行实例,其中,所述FlowRunnerManager中包括FlowRunner队列,所述FlowRunner队列中存储有至少一个FlowRunner的地址,用于标识所述至少一个FlowRunner的位置,例如,所述FlowRunner队列中包括FlowRunner1,FlowRunner2,……FlowRunnerN所分别对应的地址。

所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系调度装置1在子步骤S4022中查找与所述作业执行指令对应的节点,获取已准备就绪的所述节点。具体地,FlowRunner基于所述Flow拓扑关系与作业间的依赖关系定时轮询检查Flow拓扑关系中可运行的Node与子工作流(SubFlow),确定已经准备就绪的节点以及已经运行结束的节点。其中,在子步骤S4022中,调度装置1对Flow拓扑关系中的Node或者SubFlow根据以下至少任一项进行检查,以查找与所述作业执行指令对应的节点:上游节点是否运行完成;所述作业间的依赖关系是否满足;所述节点是否被设定为跳过;所述节点是否为终态;例如,如果对于节点X来说,第一种情况:在子步骤S4022中,调度装置1通过上述检查得知:其上游节点已经执行完成,并且作业间的依赖关系满足数据依赖、选择依赖或者顺序依赖,即:1)上游节点已经执行完成,并且预置的数据已经准备就绪-数据依赖,或者2)上游节点的输出结果决定了下游的执行节点为节点X-选择依赖,或者3)上有节点执行完成后,根据顺序即将执行节点X-顺序依赖,并且该节点未被设定为跳过以及该节点不是终态,则该节点被判定为已经准备就绪的节点,或者,第二种情况:在子步骤S4022中,调度装置1通过上述检查得知:其上游节点已经执行至预定的进度,可以同时执行节点X,并且该节点未被设定为跳过以及该节点不是终态,则该节点被判定为已经准备就绪的节点。若在子步骤S4022中,调度装置1查找发现节点Y为已经执行结束的节点,则,将节点Y判断为执行结束的节点。

在子步骤S4023中,调度装置1根据已准备就绪的所述节点构建对应的作业执行对象(JobRunner)以记录所述节点的状态,其中,所述工作流执行对象包括所有作业执行对象(allJobRunner)列表,所述所有作业执行对象列表中包括所有的作业执行对象。具体地,FlowRunner通过调度装置1在子步骤S4021中查找到已经准备就绪的所述节点后,在子步骤S4023中,调度装置1根据已准备就绪的所述节点构建对应的JobRunner,将所述JobRunner插入至FlowRunner中的allJobRunner列表中,并在所述allJobRunner列表添加已经准备就绪的Node,当FlowRunner通过调度装置1在子步骤S4022中查找到的Node为已经运行结束的Node时,从所述allJobRunner中移除已经运行结束的Node。其中,在作业执行指令所需要的资源被调度完成后,JobRunner对象启动指令指示远程作业执行模块执行所述作业执行指令,在作业执行指令的执行过程中,JobRunner对象基于自身状态对外展示用户指令的执行状态,在所述作业执行指令执行完成后,JobRunner对象发出退出指令指示远程作业执行模块退出,并标记Node为运行结束状态。

在此,调度装置1通过子步骤S4021和子步骤S4023分别构建了工作流执行对象(FlowRunner)和作业执行对象(JobRunner),在用户发出的作业执行指令时,JobRunner对象响应用户的作业执行指令请求,在所述作业执行指令的执行过程中,JobRunner记录节点的执行状态。FlowRunner全局掌控所述工作流(Flow)执行过程,从节点的JobRunner对象获取节点是否执行结束。

在步骤S403中,调度装置1通过资源管理模块(ResourceManager)确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块。具体地,ResourceManager定时遍历FlowRunnerManager中FlowRunner列表,针对每个FlowRunner向集群资源调度系统,例如,Normandy系统,添加唯一对应的应用,ResourceManager针对每个FlowRunner对象遍历其allJobRunner列表,确定已经准备就绪的所述Node需要的资源配额,然后所述集群资源调度系统从集群资源池中调度并分配对应的资源,推送至ResourceManager。在此,集群资源调度系统,例如,Normandy系统,根据已准备就绪的所述节点所需要的资源配额,将该资源配额所对应的资源的位置提供至该资源管理模块,从而该资源管理模块可以根据该位置去使用对应的资源。并且,ResourceManager针对FlowRunner中已经运行结束的Node,向所述集群资源调度系统发起释放对应资源的请求,以进行集群资源的回收。

在此,调度装置1基于集群资源调度系统实现工作流的分布式化运行,可以接受不同计算平台发起的资源邀约,快速分配约定资源以及按照指令使用与回收资源,同时对外提供良好的操作界面与用户接口,并且采用集群资源调度系统分离了工作流的调度与资源管理逻辑,降低了资源调度系统迭代对于工作流调度系统的影响。

优选地,调度装置1还包括:步骤S405(未示出)和步骤S406(未示出)。

其中,在步骤S405中,调度装置1由所述资源管理模块(ResourceManager)根据所述节点所需要的资源配额的大小将至少一种资源配额划分为不同种类的资源配额,其中,每种资源配额分别与工作流对应的所述集群资源调度系统中应用的一个作业(Job)相对应,同一种类资源配额中的每份资源分别与所述种类资源配额对应作业的一个任务相对应。具体地,ResourceManager针对每个FlowRunner对象遍历其allJobRunner列表,对不同Node所要求的资源配额,按照资源配额的大小分为不同种类的资源配额,例如,allJobRunner列表中存在四个JobRunner,分别对应Node1、Node2、Node3、Node4,其中,Node1要求的资源配额为:3个CPU,128M内存,Node2要求的资源配额为:2个CPU,56M内存,Node3要求的资源配额为:2个CPU,56M内存,Node4要求的资源配额为:3个CPU,128M内存,Node5要求的资源配额为:2个CPU,56M内存,则Node1和Node4要求的资源配额大小相同都为3个CPU,128M内存,Node1和Node4要求的资源配额属于同一种资源配额,例如为资源配额A,则资源配额A中有2份资源;Node2、Node3和Node5要求的资源配额大小相同,都为2个CPU,56M内存,Node2、Node3和Node5要求的资源配额属于同一种资源配额,例如为资源配额B,则资源配额B中有3份资源。资源配额A和资源配额B分别对应集群资源调度系统,例如为Normandy系统,中所述Flow对应的应用下的一个作业(Job)。资源配额A中的一份资源与所述种类资源配额对应作业的一个任务(task)相对应。

在步骤S406中,调度装置1通过所述资源管理模块记录每个工作流中的每种资源配额及其所分别对应的所述集群资源调度系统中应用的作业。具体地,ResourceManager记录每个Flow不同种类的资源配额与所对应的作业(Job)的一一对应关系,以便ResourceManager检测到新节点或者减少的节点时根据所述新节点或者减少的节点的资源配额的种类进行后续操作,例如添加或者减少Job,或者增加或者减少Task并发数量。

优选地,步骤S403还包括:子步骤S4031(未示出)、子步骤S4032(未示出)和子步骤S4033(未示出)。

其中,在子步骤S4031中,调度装置1通过所述资源管理模块遍历所述所有作业执行对象列表以检测是否存在节点的增减。具体地,在子步骤S4031中,调度装置1通过ResourceManager定时遍历allJobRunner列表,检测allJobRunner列表中是否增加或者减少了JobRunner,以判断是否存在节点的增减。

在子步骤S4032中,调度装置1将增减的所述节点所要求的资源配额与所述每个工作流中的每种资源配额分别进行比较,获得比较结果。具体地,在子步骤S4031中,调度装置1发现包含增加或者减少了一个Node,在子步骤S4032中,调度装置1将该Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较,获得比较结果。

在子步骤S4033中,调度装置1根据所述比较结果决定向所述集群资源调度系统对应的应用添加新的作业或者更新已添加作业的任务并发数量。具体地,当调度装置1在子步骤S4032中将增加的Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较后,当比较结果为所述Node要求的资源配额为一种新的资源配额时,向集群资源调度系统对应应用下添加一个新的Job,在子步骤S4033中,调度装置1并将其Task并发置为1;当比较结果为所述Node要求的资源配额为ResourceManager中已经记录的资源配额时,在子步骤S4033中,调度装置1将其对应Job的Task并发增加1;在子步骤S4031中,调度装置1发现已有资源配额种类的Node减少N时,在子步骤S4032中,调度装置1将减少的Node所要求的资源配额的种类与ResourceManager中已经记录的工作流中的资源配额种类进行比较,获得该种资源配额所对应的Job,然后在子步骤S4033中,调度装置1将所述Job的Task并发减少N。

在此,集群资源调度系统根据Job的资源约束与对应的Task并发数量,从集群资源池中调度与分配资源,并推送至ResourceManager。

由已获取所述资源的所述资源管理模块通过资源调度代理发送启动指令,在步骤S404中,调度装置1启动远程作业执行模块执行所述作业执行指令。具体地,在步骤S403中,调度装置1通过资源管理模块确定已准备就绪的所述节点所需要的资源配额,并通过集群资源调度系统调度与所述集群资源配额对应的资源至所述资源管理模块,ResourceManager接受集群资源调度系统分配的资源后,选择待运行的对应资源配额的Node绑定资源,产生集群资源调度系统中的Task进行执行。在步骤S404中,调度装置1由ResourceManager通过服务器端集群资源调度系统代理,例如,NormandyAgent,发送启动RemoteJobRunner指令后,本地NormandyAgent开始下载RemoteJobRunner与用户作业的运行环境,并启动RemoteJobRunner;RemoteJobRunner启动后与FlowRunner建立通信,获取其需要执行的Node信息,并执行该Node中描述的用户指令,即执行用户作业。

在此,调度装置1参照依赖关系遍历工作流的拓扑,同时向集群资源调度系统发起资源的申请与回收指令,很好的分离了工作流中的调度逻辑与执行逻辑,实现了服务器装置调度和集群节点专职执行。

优选地,在步骤S402中,调度装置1还用于:1)所述作业执行对象获取并记录所述远程作业执行模块发送的与所述作业执行指令对应的节点的作业执行状态。具体地,RemoeteJobRunner定时检查用户作业进程,依靠心跳向JobRunner汇报作业运行状态以供FlowRunner查看,JobRunner根据作业的运行状态回应心跳,其中包含相应的操作指令。2)当所述节点的所述作业执行状态为执行结束状态时,所述作业执行对象指示与所述节点对应的所述远程作业执行模块退出。具体地,RemoteJobRunner执行完成之后,通知JobRunner其已经完成作业执行指令的执行过程,JobRunner记录RemoteJobRunner的结束状态,JobRunner向RemoteJobRunner发送退出指令,指示RemoteJobRunner退出。

优选地,所述工作流执行对象基于所述工作流拓扑关系和所述作业间的依赖关系查找与所述作业执行指令对应的节点,获取已执行结束的节点,并指示所述资源管理模块回收所述已执行结束的节点对应的资源。具体地,FlowRunner基于所述Flow拓扑关系与作业间的依赖关系定时轮询检查JobRunner中记录的与所述作业执行指令对应的节点,确定已经运行结束的节点,通知ResourceManager回收资源。ResourceManager向集群资源调度系统,例如为Normandy系统,发起释放对应资源的请求,以进行集群资源的回收。

优选地,本发明还提供了一种计算机设备,该计算机设备包括一个或多个处理器和存储器,该存储器用于存储一个或多个计算机程序;当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如步骤S401至S406中任一项所述的操作。

需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,本发明的各个装置可采用专用集成电路(ASIC)或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1