CN106055322A - 一种流程调度方法及装置 - Google Patents

一种流程调度方法及装置 Download PDF

Info

Publication number
CN106055322A
CN106055322A CN201610361976.0A CN201610361976A CN106055322A CN 106055322 A CN106055322 A CN 106055322A CN 201610361976 A CN201610361976 A CN 201610361976A CN 106055322 A CN106055322 A CN 106055322A
Authority
CN
China
Prior art keywords
execution
scheduling
sub
task
executed
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.)
Pending
Application number
CN201610361976.0A
Other languages
English (en)
Inventor
周家晶
苗浩
冀乃庚
刘蓉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Unionpay Co Ltd
Original Assignee
China Unionpay Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Unionpay Co Ltd filed Critical China Unionpay Co Ltd
Priority to CN201610361976.0A priority Critical patent/CN106055322A/zh
Publication of CN106055322A publication Critical patent/CN106055322A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/22Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种流程调度方法及装置,该方法包括:获取第一任务在调度的第一流程中的第一执行状态信息;根据第一执行状态信息,确定第一任务在第一流程的待执行步骤;确定待执行步骤的执行语句为子执行单元调度语句后,调度由第一任务和第一流程构成的执行单元的子执行单元;获取子执行单元的第二执行状态信息,得到待执行步骤的执行结果。本发明实施例中,子执行单元至少包括第一流程的子流程,进而通过调度由第一任务和第一流程构成的执行单元的子执行单元,实现流程间调度处理。

Description

一种流程调度方法及装置
技术领域
本发明涉及信息***处理技术领域,尤其涉及一种流程调度方法及装置。
背景技术
目前的流程调度控制主要由以下实现方式:(1)面向方面的程序编程(例如:Spring),将一组任务(步骤)进行流程控制管理;(2)使用脚本和配置文件的调度。
在上述实现方式中,单个任务对应流程的并发处理困难,且不能实现流程间的相互调度和并发调度。然而,在高性能***中,往往需要对一个任务进行流程间调度和并发处理,上述方案没有为该场景提供一个良好的解决方案。
综上,目前亟需一种流程调度方法,用于实现任务的流程间调度和并发处理。
发明内容
本发明实施例提供一种流程调度方法及装置,用于实现任务的流程间调度处理。
本发明实施例提供的一种流程调度方法,包括:
获取第一任务在调度的第一流程中的第一执行状态信息;
根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;
确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务和所述第一流程的子流程构成;
所述调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:
调度所述第一流程的子流程执行所述第一任务;
获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务的子任务和所述第一流程的子流程构成;
所述调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:
创建所述第一任务的多个子任务;
调度所述第一流程的多个子流程分别执行所述多个任务;
获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤之后,还包括:
更新所述第一执行状态信息;
确定所述待执行步骤的执行语句为异步等待执行语句后,中断所述第一流程的调度;
确定所述异步事件发生后,获取更新后的所述第一执行状态信息;
根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
较佳地,得到所述待执行步骤的执行结果之后,还包括:
根据所述待执行步骤的执行结果,结束所述第一流程的调度;
确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
较佳地,根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤,包括:
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤;或者,
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤。
本发明实施例提供一种流程调度装置,包括:
获取模块,用于获取第一任务在调度的第一流程中的第一执行状态信息;
处理模块,用于根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;以及确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
所述获取模块还用于,获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务和所述第一流程的子流程构成;
所述处理模块具体用于:调度所述第一流程的子流程执行所述第一任务;
所述获取模块具体用于:获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务的子任务和所述第一流程的子流程构成;
所述处理模块具体用于:
创建所述第一任务的多个子任务;
调度所述第一流程的多个子流程分别执行所述多个任务;
所述获取模块具体用于:
获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述处理模块还用于:
根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤之后,更新所述第一执行状态信息;
确定所述待执行步骤的执行语句为异步等待执行语句后,中断所述第一流程的调度;
所述获取模块还用于:
确定所述异步事件发生后,获取更新后的所述第一执行状态信息;
根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
较佳地,所述处理模块还用于:
根据所述待执行步骤的执行结果,结束所述第一流程的调度;
确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
较佳地,所述处理模块具体用于:
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤;或者,
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤。
本发明实施例中,获取第一任务在调度的第一流程中的第一执行状态信息;根据第一执行状态信息,确定第一任务在第一流程的待执行步骤;确定待执行步骤的执行语句为子执行单元调度语句后,调度由第一任务和第一流程构成的执行单元的子执行单元;获取子执行单元的第二执行状态信息,得到待执行步骤的执行结果。本发明实施例中,子执行单元至少包括第一流程的子流程,进而通过调度由第一任务和第一流程构成的执行单元的子执行单元,实现流程间调度处理。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种流程调度方法的流程示意图;
图2为本发明实施例中流程调度的执行逻辑示意图;
图3为本发明实施例提供的一种流程调度装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例中,流程指一种处理的逻辑顺序关系。任务是指期望实现的一个目标,任务可能需要经过多个流程调度。步骤指流程被分割为多个处理阶段,每个阶段称为一个步骤。其中,一个任务在一个流程的执行可以称为执行单元,即执行单元是任务和流程的二元组。
图1示例性的示出了本发明实施例提供的一种流程调度方法的流程,该流程可以由流程调度装置执行,该装置可以是服务器,也可以位于服务器内。
如图1所示,该流程的具体步骤包括:
步骤101,获取第一任务在调度的第一流程中的第一执行状态信息;
步骤102,根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;
步骤103,确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
步骤104,获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
根据上述内容可知,本发明实施例中,子执行单元至少包括第一流程的子流程,进而通过调度由第一任务和第一流程构成的执行单元的子执行单元,实现流程间调度处理。调度
具体地,步骤101中,所述第一执行状态信息包括以下任意一种:
所述第一任务在调度的所述第一流程中首次执行;
所述第一任务在调度的所述第一流程中已执行完第i个步骤;其中,1≤i≤M,M为所述第一流程中需要执行的步骤的个数。
在步骤102中,若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤,并将第一执行状态信息更新为执行至第一个步骤;若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤,并将第一执行状态信息更新为执行完第i个步骤,执行至第i+1个步骤。
需要说明的是,本发明实施例中,所述第一执行状态信息也可以为所述第一任务在调度的所述第一流程中已执行完毕,此时,可根据第一执行状态信息,直接结束第一流程的调度。
针对步骤103,若所述子执行单元由所述第一任务和所述第一流程的子流程构成,则调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:调度所述第一流程的子流程执行所述第一任务;获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
具体来说,上述子执行单元调度情形为子流程调度(CALL_SUB_FLOW),子流程调度的入参是新的流程,其目标是发起本任务在新流程的调度,等待新流程调度结束后,恢复本任务在本流程的调度。子流程调度,会新增当前执行单元(当前任务和当前流程)和新执行单元(当前任务和子流程)的父子关系。
例如:int ret=CALL_SUB_FLOW(get_db_connection);
其中get_db_connection是一个子流程。
针对步骤103,若子执行单元由所述第一任务的子任务和所述第一流程的子流程构成,则调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:创建所述第一任务的多个子任务;调度所述第一流程的多个子流程分别执行所述多个任务;获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
具体来说,上述子执行单元调度情形为子任务调度(CALL_SUB_TASK),子任务调度的入参是新任务(子任务)和新流程(子流程),其目标是异步发起新的任务和新流程(即新的执行单元),注意该调度是异步调度,此时新执行单元和当前执行单元处于并发执行状态。子任务调度,会新增当前执行单元(当前任务和当前流程)和新执行单元(子任务和子流程)的父子关系。
例如:CALL_SUB_TASK(signle_query,sub_task);
其中signle_query是一个子流程,sub_task是一个子任务。
进一步地,子任务调度一般需要和如下2个操作结合:
(1)等待子任务结束(SUB_TASKS_FINISH):会查看当前执行单元的所有子执行单元是否执行结束,若未完成则中断本流程调度,等待下次恢复。
例如:SUB_TASKS_FINISH();用于等待当前任务的所有子任务调度结束.
(2)调度结果查询(GET_RESULT):用于查看执行单元(任务和流程)的调度状态:1)任务是否结束,2)如果任务结束,获取其返回码。
例如:int ret=ACALL_RESULT(signle_query,sub_task);
用于查询任务sub_task在signle_query流程的处理状态。
下面给出一个子任务调度的示例:
在该示例中,当前执行单元中创建了多个子执行单元,并发起异步的子执行单元调度,子任务之间为并发状态,然后通过SUB_TASKS_FINISH查看所有子执行单元是否结束,如果未结束则中断本调度,等待下次调度。
本发明实施例中,子流程调度和子任务调度都会新增执行单元的父子关系。当一个执行单元结束(RETURN操作),则会查找它的父执行单元信息,如果存在,则恢复父执行单元的执行。
在步骤103中,若确定所述待执行步骤的执行语句为异步等待执行语句,则执行如下操作:中断所述第一流程的调度,确定所述异步事件发生后,获取更新后的所述第一执行状态信息;根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
上述过程即为异步调度过程,在流程调度中,出现某个处理步骤需要等待一个异步事件(例如,向网络中写入报文阻塞需要等待异步的可写事件,或者等待一个消息应答的可读事件)时,则中断本流程的调度。异步事件发生后,获取更新后的所述第一执行状态信息,确定上次执行完第i个步骤,执行至第i+1个步骤,此时,继续执行第i+1个步骤。
本发明实施例中,异步等待(WAIT),用于中断而不结束本流程的调度,例如:WAIT();
被中断的流程,恢复执行有如下途径:(1)外部异步处理***回调本流程;)(2)其他子流程调度本流程(同步调度、异步调度和调度结束后调度)。
下面给出一个异步调度的流程示例:
在该示例中,任务task执行流程a,而async_task是一个异步操作,如果该操作未完成,流程调度则调度WAIT,中断本次流程调度,当async_task异步操作出现变化,则回调任务task执行流程a来恢复流程调度。
进一步地,在步骤104中得到所述待执行步骤的执行结果之后,还包括:根据所述待执行步骤的执行结果,结束所述第一流程的调度;确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
本发明实施例可由如下具有不同功能的模块来执行,具体来说:
流程调度模块:负责流程内的执行逻辑,同一个任务在流程中只会是单线程执行,不存在并发,流程调度模块是本方案的核心模块,会与流程调度模块、调度管理模块和外部异步处理***模块交互;
调度管理模块:调度管理模块用于记录调度管理相关信息,这些信息包含:流程调度状态和流程间调度状态;
流程调度状态即为某任务在某个流程下的状态信息,包含如下内容:1)(该任务在该流程下)运行状态,即调度是否结束;2)(该任务在该流程下)如果已调度结束,则该流程的结束应答码是什么;3)(该任务在该流程下)所处的步骤;4)(该任务在该流程下的)临时数据。其数据存储如表1所示,其中任务和流程联合(执行单元)作为行记录的索引字段:
表1:数据存储示意
流程间调度状态用于记录流程调度的父子关系,需要注意的是这里的父子关系是执行单元(任务和流程)的父子关系,其记录形式类似表2,其中子任务和子流程联合作为行记录的索引字段:
表2:执行单元父子关系的记录形式
流程调度模块:负责调度任务执行流程,该模块用于实现流程的间调度(嵌套调度),该模块与流程管理模块、调度管理模块和流程调度模块交互。
流程管理模块:负责维护所有的流程,用于流程检索,例如维护流程名(也可以是流程内容地址等)到流程内容的映射关系,便于根据流程名检索流程内容,该模块提供查询服务,被流程调度模块和流程编译模块调度。
流程编译模块:是本方案的可选模块,负责将流程进行编译或预编译,提高流程执行的效率,负责将流程编译后存入流程管理模块。
外部异步处理***模块:负责与外部异步***协调,主要负责:(1)被流程调度模块调度进行异步行为操作;(2)当外部***异步事件发生时,通过流程调度模块,恢复或发起原执行单元的调度。
图2为本发明实施例中流程调度的执行逻辑示意图,下面结合图2对本发明实施例中流程调度的整体过程进行说明。
第1步:查询执行单元所处的状态,决定应该执行的流程步骤。通过访问调度管理模块,查询当前执行流程的执行状态:
(1)若为首次调度,则将本流程的第一个步骤设置为待执行步骤。
(2)若已执行结束,则退出本次调度;
(3)若执行步骤,并查看步骤类型:(3.1)若步骤类型为重复执行(Redo),则将该步骤设置为待执行步骤;(3.2)若步骤类型为单次执行(Do),则将该步的下个骤设置为待执行步骤。
第2步:进入待执行步骤进行执行。其执行流程如下:(1)访问调度管理模块修改当前执行单元的步骤为当前步骤;(2)每个步骤由一组逻辑语句执行,根据语句顺序进行执行,其中语句类型分为:流程调度语句和其他语句,流程调度语句由本方法提供,其他语句为本方法应用的宿主程序语言或脚本(例如本方法应用在C语言下,则其他语句为C语言),下面将流程调度语句的执行语句进行说明:
(2.1)步骤跳转语句(GOTO):
(2.1.1)将待执行步骤设置为语句指定的步骤;
(2.1.2),执行第2步;
(2.2)流程结束语句(RETURN):
(2.2.1)调度调度管理模块修改执行单元的执行状态为结束,并对应记录应答码;
(2.2.2)终止当前执行单元的执行(调度);
(2.2.3)查看调度管理模块,查找父执行单元,如果存在父执行单元,则发起父执行单元执行操作;
(2.3)子流程调度语句(CALL_SUB_FLOW):
(2.3.1)访问调度管理模块,记录当前执行单元(当前流程和当前任务)与子执行单元(子流程和当前任务)的父子关系;
(2.3.2)向流程调度模块发起执行,由流程调度模块发起对子执行单元的调度执行;
(2.3.3)访问调度管理模块,查看子执行单元状态,如果未完成,则暂停当前执行单元的执行(调度),如果已完成则返回子执行单元的返回值,并执行本步骤下条语句;
(2.4)子任务调度语句(CALL_SUB_TASK):
(2.4.1)访问调度管理模块,记录当前执行单元(当前流程和当前任务)与子执行单元(子流程和子任务)的父子关系;
(2.4.2)向流程调度模块发起执行,由流程调度模块发起对子执行单元的调度执行;
(2.4.3)执行本步骤下条语句;
(2.5)等待子任务结束(SUB_TASKS_FINISH):
(2.5.1)访问调度管理模块,查看当前执行单元的所有子执行单元是否都已经完成调度,如果没有全部结束,则暂停当前执行单元的执行(调度),如果全部结束,则执行本步骤下条语句;
(2.6)调度结果查询(GET_RESULT):
(2.6.1)访问调度管理模块,查看指定执行单元的执行应答码,并作为返回值返回;
(2.6.2)执行本步骤下条语句;
(2.7)异步等待(WAIT):
(2.7.1)暂停当前执行单元的执行(调度);
(2.8)临时数据存储(SET):
(2.8.1)访问调度管理模块,将临时数据存入对应执行单元;
(2.8.2)执行本步骤下条语句;
(2.9)临时数据获取(GET):
(2.9.1)访问调度管理模块,从对应执行单元获取临时数据;
(2.9.2)执行本步骤下条语句。
下面给出具体示例(分库数据查询),对本发明进行详细说明。
内容:将数据分片存储在多个数据库节点上,通过代理并发查询多个数据库等到查询结果。
该操作需要会使用到3个流程:shard_query(分库查询),single_query(单库查询),get_db_connection获取数据库连接。
结合该示例,可具体说明流程内调度、流程间调度、并发调度和异步调度,以及异步事件处理等是如何实现的。
(1)给出shard_query流程的伪代码描述:
shard_query分为6个步骤:shard_analysis分库分析、async_sub_tasks子任务异步调度、check_shard_query_ressult子任务结果检测、merge_and_response结果集合并、success成功处理、fail失败处理。
该处理流程(shard_query)过程:
第1步:访问调度管理模块查看当前执行单元是否已经结束,如果调度已经结束,则结束调度;若未结束,则查看最近使用的步骤,如果为首次执行,则执行步骤shard_analysis(首个步骤),即第2步;
如果最近步骤为shard_analysis,则执行async_sub_tasks,即第3步;
如果最近步骤为async_sub_tasks,则执行check_shard_query_ressult,即第4步;
如果最近步骤为check_shard_query_ressult,则执行check_shard_query_ressult,即第4步(因为check_shard_query_ressult的步骤类型是重复执行(Redo));
如果最近步骤为merge_and_response,则执行success,即第6步。
第2步:执行shard_analysis步骤:
告知调度管理模块当前执行单元使用步骤为shard_analysis;
进行分库分析,得到可能需要访问的后端数据库;
由于本步骤已执行完毕,执行下个步骤async_sub_tasks,即第3步;
第3步:执行async_sub_tasks步骤:
告知调度管理模块当前执行单元使用步骤为async_sub_tasks;
负责根据需要访问的数据列表,创建该查询任务的子任务,然后对每个子任务发起异步子任务调度(流程为single_query);
SUB_TASKS_FINISH()查看所有子流程是否执行结束,若未执行结束,则暂停当前执行单元的执行;
由于本步骤已执行完毕,执行下个步骤check_shard_query_ressult,即第4步。
第4步:执行check_shard_query_ressult步骤:
告知调度管理模块当前执行单元使用步骤为check_shard_query_ressult;
遍历所有子任务调度,并访问调度管理模块,查看子执行单元是应答码,判断是否所有子执行单元都处理成功;
若存在失败的子执行单元,则使用GOTO(fail),执行下个步骤fail,即第7步;
由于本步骤已执行完毕,执行下个步骤merge_and_response,即第5步。
第5步:执行merge_and_response步骤
告知调度管理模块当前执行单元使用步骤为merge_and_response;
进行结果集合并等操作;
由于本步骤已执行完毕,执行下个步骤success,即第6步。
第6步:执行success步骤:
告知调度管理模块当前执行单元使用步骤为success;
告知调度管理模块当前执行单元已执行结束,且应答码为SUCCESS;
结束本执行单元调度;
查看是否有父执行单元,如果有则需要去调度(在本例中父执行单元是流程shard_query和父任务,发起对该执行单元的调度后,父流程会在async_sub_tasks处恢复执行)。
第7步:执行fail步骤:
告知调度管理模块当前执行单元使用步骤为fail;
告知调度管理模块当前执行单元已执行结束,且应答码为FAIL;
结束本执行单元调度;
查看是否有父执行单元,如果有则需要去调度(在本例中父执行单元是流程shard_query和父任务,发起对该执行单元的调度后,父流程会在async_sub_tasks处恢复执行)。
上述过程中:第3步调度子流程的single_query是流程间异步调度,同时实现了并发调度控制,第4步GOTO是使用流程内调度。
(2)给出single_query流程的伪代码描述:
single_query分为5个步骤:get_connection分库分析、send_sql子任务异步调度、read_result子任务完成检测、success成功处理、fail失败处理。
该处理流程(single_query)过程:
第1步:访问调度管理模块查看当前执行单元是否已经结束,如果调度已经结束,则结束调度;若未结束,则查看最近使用的步骤,如果为首次执行,则执行步骤get_connection(首个步骤),即第2步;
如果步骤为get_connection,则执行get_connection,即第2步;
如果步骤为send_sql,则执行send_sql,即第3步;
如果步骤为read_result,则执行read_result,即第4步。
第2步:执行步骤get_connection:
告知调度管理模块当前执行单元使用步骤为get_connection;
发起子流程调度;
向调度管理模块查询,子流程调度是否结束,如果未结束,则暂停本执行单元调度,如已结束则执行下个步骤。
第3步:执行步骤send_sql:
告知调度管理模块当前执行单元使用步骤为send_sql;
其中write(sql,net)用于向网络通信写入数据,该操作可能因为网络等问题需要等待,即暂时不可写入网络;
如果发生了暂时不可写入网络,则通过WAIT,暂停本调度。当网络可写或出现异常时,将触发对本执行单元重新调度,即进入第1步。如果写入完毕,则进入下一步read_result步骤,即第4步;
向调度管理模块查询,子流程调度是否结束,如果未结束,则暂停本执行单元调度,如已结束则执行下个步骤。
第4步:执行步骤read_requslt:
告知调度管理模块当前执行单元使用步骤为send_sql;其中read(net)用于从网络通信读取数据,该操作可能因为网络等问题需要等待,即网络暂时不可读。
如果发生了暂时不可读,则通过WAIT,暂停本调度。当网络可读或出现异常时,将触发对本执行单元重新调度,即进入第1步。如果读完毕,则进入下一步success步骤,即第5步。如果读出现异常,则进入下一步fail步骤,即第6步。
第5步:执行success步骤:
告知调度管理模块当前执行单元使用步骤为success;
告知调度管理模块当前执行单元已执行结束,且应答码为SUCCESS;
结束本执行单元调度;
查看是否有父执行单元,如果有则需要去调度(在本例中父执行单元是流程shard_query和父任务,发起对该执行单元的调度后,父流程会在async_sub_tasks处恢复执行)。
第6步:执行fail步骤:
告知调度管理模块当前执行单元使用步骤为fail;
告知调度管理模块当前执行单元已执行结束,且应答码为FAIL;
结束本执行单元调度;
查看是否有父执行单元,如果有则需要去调度(在本例中父执行单元是流程shard_query和父任务,发起对该执行单元的调度后,父流程会在async_sub_tasks处恢复执行)。
流程get_db_connection可参照上述过程,此处不再赘述。
本发明实施例中,通过上述流程调度方法,可实现以下效果:(1)任务内的多并发处理;(2)流程间的嵌套调度,可以将复用度较高的调度逻辑,独立维护为一个子逻辑,以提高流程的复用程度,简化流程编写和管理成本;(3)将异步处理封装成与同步调度类似,易于理解,同时支持异步和同步的流程处理动作,以满足***的复杂调度模式。
本发明实施例中,获取第一任务在调度的第一流程中的第一执行状态信息;根据第一执行状态信息,确定第一任务在第一流程的待执行步骤;确定待执行步骤的执行语句为子执行单元调度语句后,调度由第一任务和第一流程构成的执行单元的子执行单元;获取子执行单元的第二执行状态信息,得到待执行步骤的执行结果。本发明实施例中,子执行单元至少包括第一流程的子流程,进而通过调度由第一任务和第一流程构成的执行单元的子执行单元,实现流程间调度处理。
本发明实施例中,获取第一任务在调度的第一流程中的第一执行状态信息;根据第一执行状态信息,确定第一任务在第一流程的待执行步骤,并更新第一执行状态信息;确定所述待执行步骤的执行语句为异步等待执行语句后,中断第一流程的调度;确定异步事件发生后,获取更新后的第一执行状态信息;根据更新后的第一执行状态信息,执行待执行步骤,并得到待执行步骤的执行结果。根据上述内容可知,本发明实施例中,确定存在异步事件后,中断第一流程的调度,等待异步事件发生后,恢复第一流程的调度,从而使得流程处理更符合处理逻辑。
图3示例性的示出了本发明实施例提供的一种流程调度装置的结构,该流程调度装置可以执行流程调度的流程,该装置可以是服务器,也可以位于服务器内。
如图3所示,该装置具体包括:
获取模块301,用于获取第一任务在调度的第一流程中的第一执行状态信息;
处理模块302,用于根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;以及确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
所述获取模块301还用于,获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务和所述第一流程的子流程构成;
所述处理模块302具体用于:调度所述第一流程的子流程执行所述第一任务;
所述获取模块301具体用于:获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
较佳地,所述子执行单元由所述第一任务的子任务和所述第一流程的子流程构成;
所述处理模块302具体用于:
创建所述第一任务的多个子任务;
调度所述第一流程的多个子流程分别执行所述多个任务;
所述获取模块301具体用于:
获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。较佳地,所述处理模块302还用于:
确定所述待执行步骤的执行语句为异步等待执行语句后,中断所述第一流程的调度;
所述获取模块301还用于:
根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤之后,更新所述第一执行状态信息;
确定所述异步事件发生后,获取更新后的所述第一执行状态信息;
根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
较佳地,所述处理模块302还用于:
根据所述待执行步骤的执行结果,结束所述第一流程的调度;
确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
较佳地,所述处理模块302具体用于:
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤;或者,
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤。
从上述内容可以看出:本发明实施例中,获取第一任务在调度的第一流程中的第一执行状态信息;根据第一执行状态信息,确定第一任务在第一流程的待执行步骤;确定待执行步骤的执行语句为子执行单元调度语句后,调度由第一任务和第一流程构成的执行单元的子执行单元;获取子执行单元的第二执行状态信息,得到待执行步骤的执行结果。本发明实施例中,子执行单元至少包括第一流程的子流程,进而通过调度由第一任务和第一流程构成的执行单元的子执行单元,实现流程间调度处理。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (12)

1.一种流程调度方法,其特征在于,包括:
获取第一任务在调度的第一流程中的第一执行状态信息;
根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;
确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
2.如权利要求1所述的方法,其特征在于,所述子执行单元由所述第一任务和所述第一流程的子流程构成;
所述调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:
调度所述第一流程的子流程执行所述第一任务;
获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
3.如权利要求1所述的方法,其特征在于,所述子执行单元由所述第一任务的子任务和所述第一流程的子流程构成;
所述调度由所述第一任务和所述第一流程构成的执行单元的子执行单元,包括:
创建所述第一任务的多个子任务;
调度所述第一流程的多个子流程分别执行所述多个任务;
获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
4.如权利要求1所述的方法,其特征在于,根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤之后,还包括:
更新所述第一执行状态信息;
确定所述待执行步骤的执行语句为异步等待执行语句后,中断所述第一流程的调度;
确定所述异步事件发生后,获取更新后的所述第一执行状态信息;
根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
5.如权利要求1-4中任一项所述的方法,其特征在于,得到所述待执行步骤的执行结果之后,还包括:
根据所述待执行步骤的执行结果,结束所述第一流程的调度;
确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
6.如权利要求1-4中任一项所述的方法,其特征在于,根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤,包括:
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤;或者,
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤。
7.一种流程调度装置,其特征在于,包括:
获取模块,用于获取第一任务在调度的第一流程中的第一执行状态信息;
处理模块,用于根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤;以及确定所述待执行步骤的执行语句为子执行单元调度语句后,调度由所述第一任务和所述第一流程构成的执行单元的子执行单元;所述子执行单元至少包括所述第一流程的子流程;
所述获取模块还用于,获取所述子执行单元的第二执行状态信息,得到所述待执行步骤的执行结果。
8.如权利要求7所述的装置,其特征在于,所述子执行单元由所述第一任务和所述第一流程的子流程构成;
所述处理模块具体用于:调度所述第一流程的子流程执行所述第一任务;
所述获取模块具体用于:获取所述第一任务在调度的第一流程的子流程中的第二执行状态信息;根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
9.如权利要求7所述的装置,其特征在于,所述子执行单元由所述第一任务的子任务和所述第一流程的子流程构成;
所述处理模块具体用于:
创建所述第一任务的多个子任务;
调度所述第一流程的多个子流程分别执行所述多个任务;
所述获取模块具体用于:
获取所述多个子任务在调度的所述多个子流程中的第二执行状态信息;
根据所述第二执行状态信息,得到所述待执行步骤的执行结果。
10.如权利要求7所述的装置,其特征在于,所述处理模块还用于:
根据所述第一执行状态信息,确定所述第一任务在第一流程的待执行步骤之后,更新所述第一执行状态信息;
确定所述待执行步骤的执行语句为异步等待执行语句后,中断所述第一流程的调度;
所述获取模块还用于:
确定所述异步事件发生后,获取更新后的所述第一执行状态信息;
根据更新后的所述第一执行状态信息,执行所述待执行步骤,并得到所述待执行步骤的执行结果。
11.如权利要求7-11中任一项所述的装置,其特征在于,所述处理模块还用于:
根据所述待执行步骤的执行结果,结束所述第一流程的调度;
确定由所述第一任务和所述第一流程构成的执行单元是否存在父执行单元,若存在,则调度所述父执行单元。
12.如权利要求7-11中任一项所述的装置,其特征在于,所述处理模块具体用于:
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中首次执行,则确定所述待执行步骤为所述第一流程中需要执行的第一个步骤;或者,
若所述第一执行状态信息为所述第一任务在调度的所述第一流程中已执行完第i个步骤,则确定所述待执行步骤为第i+1个步骤。
CN201610361976.0A 2016-05-26 2016-05-26 一种流程调度方法及装置 Pending CN106055322A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610361976.0A CN106055322A (zh) 2016-05-26 2016-05-26 一种流程调度方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610361976.0A CN106055322A (zh) 2016-05-26 2016-05-26 一种流程调度方法及装置

Publications (1)

Publication Number Publication Date
CN106055322A true CN106055322A (zh) 2016-10-26

Family

ID=57174981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610361976.0A Pending CN106055322A (zh) 2016-05-26 2016-05-26 一种流程调度方法及装置

Country Status (1)

Country Link
CN (1) CN106055322A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341054A (zh) * 2017-06-29 2017-11-10 广州市百果园信息技术有限公司 任务执行方法、装置及计算机可读存储介质
US11544260B2 (en) 2018-03-29 2023-01-03 China Unionpay Co., Ltd. Transaction processing method and system, and server

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101097527A (zh) * 2006-06-27 2008-01-02 ***股份有限公司 一种应用进程的流程调度方法及***
CN101599010A (zh) * 2008-06-02 2009-12-09 国际商业机器公司 流程处理方法和装置
CN102004663A (zh) * 2009-09-02 2011-04-06 ***股份有限公司 一种多任务并发调度的***及方法
CN103426045A (zh) * 2012-05-22 2013-12-04 阿里巴巴集团控股有限公司 一种流程虚拟机的流转方法和装置
CN104361435A (zh) * 2014-10-29 2015-02-18 中国建设银行股份有限公司 一种业务流程管理方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101097527A (zh) * 2006-06-27 2008-01-02 ***股份有限公司 一种应用进程的流程调度方法及***
CN101599010A (zh) * 2008-06-02 2009-12-09 国际商业机器公司 流程处理方法和装置
CN102004663A (zh) * 2009-09-02 2011-04-06 ***股份有限公司 一种多任务并发调度的***及方法
CN103426045A (zh) * 2012-05-22 2013-12-04 阿里巴巴集团控股有限公司 一种流程虚拟机的流转方法和装置
CN104361435A (zh) * 2014-10-29 2015-02-18 中国建设银行股份有限公司 一种业务流程管理方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107341054A (zh) * 2017-06-29 2017-11-10 广州市百果园信息技术有限公司 任务执行方法、装置及计算机可读存储介质
CN107341054B (zh) * 2017-06-29 2020-06-16 广州市百果园信息技术有限公司 任务执行方法、装置及计算机可读存储介质
US11544260B2 (en) 2018-03-29 2023-01-03 China Unionpay Co., Ltd. Transaction processing method and system, and server

Similar Documents

Publication Publication Date Title
CN108595157B (zh) 区块链数据的处理方法、装置、设备和存储介质
US9619430B2 (en) Active non-volatile memory post-processing
US9535754B1 (en) Dynamic provisioning of computing resources
CN111400011B (zh) 一种实时任务调度方法、***、设备及可读存储介质
CN110399184B (zh) 区块链中智能合约的执行方法及装置
US11269692B2 (en) Efficient sequencer for multiple concurrently-executing threads of execution
CN110162344B (zh) 一种隔离限流的方法、装置、计算机设备及可读存储介质
CN104065636A (zh) 数据处理方法和***
CN113157411B (zh) 一种基于Celery的可靠可配置任务***及装置
CN107179982B (zh) 一种跨进程调试方法和装置
CN111553652A (zh) 业务处理方法及装置
CN112860412B (zh) 业务数据处理方法、装置、电子设备及存储介质
CN106055322A (zh) 一种流程调度方法及装置
CN107391539B (zh) 事务处理方法、服务器和存储介质
CN110908644B (zh) 状态节点的配置方法、装置、计算机设备和存储介质
CN110706108B (zh) 在区块链中并发执行交易的方法和装置
CN117076096A (zh) 任务流程的执行方法、装置、计算机可读介质及电子设备
CN110825427A (zh) 一种代码管理方法、装置、服务器及存储介质
CN111538491B (zh) 数据事件处理方法、装置、设备和存储介质
CN114721801A (zh) 批量任务执行时间的动态调度方法及装置
CN114547206A (zh) 一种数据同步方法和数据同步***
US20090064141A1 (en) Efficient utilization of transactions in computing tasks
CN113760524A (zh) 任务执行方法和装置
CN117851011B (zh) 任务队列管理方法、装置、计算机设备及存储介质
CN112486421B (zh) 一种数据存储方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20161026