CN116594752A - 流程调度方法、装置、设备、介质和程序产品 - Google Patents
流程调度方法、装置、设备、介质和程序产品 Download PDFInfo
- Publication number
- CN116594752A CN116594752A CN202310611401.XA CN202310611401A CN116594752A CN 116594752 A CN116594752 A CN 116594752A CN 202310611401 A CN202310611401 A CN 202310611401A CN 116594752 A CN116594752 A CN 116594752A
- Authority
- CN
- China
- Prior art keywords
- flow
- distributed
- node
- execution
- context
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 169
- 230000008569 process Effects 0.000 claims description 91
- 238000004590 computer program Methods 0.000 claims description 19
- 238000012544 monitoring process Methods 0.000 claims description 8
- 238000011084 recovery Methods 0.000 claims description 7
- 230000004044 response Effects 0.000 claims description 7
- 125000002015 acyclic group Chemical group 0.000 claims description 5
- 230000000903 blocking effect Effects 0.000 claims description 4
- 230000002085 persistent effect Effects 0.000 claims description 4
- 235000019580 granularity Nutrition 0.000 description 27
- 238000010586 diagram Methods 0.000 description 13
- 230000015654 memory Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 238000004891 communication Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000001960 triggered effect Effects 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000006378 damage Effects 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001483 mobilizing effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开提供了一种流程调度方法、装置、设备、存储介质和程序产品,可以应用于云计算技术领域。该流程调度方法应用于流程调度平台中,流程调度平台用于调度分布式系统中的多个分布式实例资源,多个分布式实例至少包括第一分布式实例,该方法包括:响应于流程执行请求,获取流程上下文,其中,流程上下文包括多个流程分支,流程分支包括多个流程节点;按照流程分支编排流程上下文,得到多个流程执行模型,流程执行模型包括按照队列排布的流程任务;将流程上下文发送至第一分布式实例的本地缓存;以及按照多个流程执行模型中按照队列排布的流程任务,指导第一分布式实例获取本地缓存中的流程上下文,并使第一分布式实例基于流程节点执行流程任务。
Description
技术领域
本公开涉及云计算技术领域,具体地涉及一种流程调度方法、装置、设备、介质和程序产品。
背景技术
目前流行的流程调度执行方案并非由一个服务或系统解决,一个流程中存在多个任务,这些任务的执行可以是基于流程节点的调度由多个服务或者系统协同完成,以实现资源的充分利用。
但是,由于上述执行方案是分布式的,所以流程节点存在散点执行的情况,即流程中的任务的执行分布在不同的分布式实例中执行,导致需要大量的数据库操作和分布式锁去同步流程和流程节点的状态,保证流程的正确调度和状态的准确,如果存在大量流程执行,就会存在多次查询数据库,对数据库造成压力,并且,分布式锁同步状态造成执行效率低下易错,排查错误困难,难以充分发挥分布式技术的优势。
发明内容
鉴于上述问题,本公开提供了提高流程执行效率和正确度的流程调度方法、装置、设备、介质和程序产品。
根据本公开的第一个方面,提供了一种流程调度方法,所述流程调度方法应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例,所述方法包括:响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点;按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务;将所述流程上下文发送至所述第一分布式实例的本地缓存;以及按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
根据本公开的实施例,其中,所述按照所述流程分支编排所述流程上下文,得到多个流程执行模型,包括:遍历所述流程上下文,判断所述流程上下文中的当前节点是否存在父节点;在所述当前节点不存在父节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中;在所述当前节点存在父节点的情况下,判断所述当前节点的父节点是否具有大于一个的子节点;在所述当前节点的父节点具有大于一个的子节点的情况下,判断所述当前节点是否为所述当前节点的父节点的子节点列表中的第一个节点;在所述当前节点是所述当前节点的父节点的节点列表中的第一个节点的情况下,将所述当前节点加入到所述父节点所在的队列中;在所述当前节点不是所述当前节点的父节点的节点列表中的第一个节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中,其中,一个所述队列中的节点的执行逻辑由一个线程执行,所述队列和所述线程是一一对应的,或者所述队列和所述线程是多对一的。
根据本公开的实施例,其中,所述多个流程执行模型是以有向无环图的形式关联的。
根据本公开的实施例,其中,在所述响应于流程执行请求,获取流程上下文后,所述按照所述流程分支编排所述流程上下文,得到多个流程执行模型前,还包括:建立流程状态树,所述流程状态树与所述流程上下文存在一致的树状结构,所述流程状态树的树节点是所述流程节点的节点状态。
根据本公开的实施例,其中,所述按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务,包括:基于所述流程任务更新所述流程状态树的节点状态;基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件;在所述执行模型满足预设的流程断点条件的情况下,阻塞所述执行模型;以及在触发于预设的流程恢复条件的情况下,恢复所述执行模型。
根据本公开的实施例,其中,所述基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件,包括:判断所述节点状态为执行中的所述流程任务是否超时;以及在所述节点状态为执行中的所述流程任务超时的情况下,判定所述执行模型满足预设的断点条件。
根据本公开的实施例,其中,所述在触发于预设的流程恢复条件的情况下,恢复所述执行模型,包括:接收执行结果,所述执行结果包括流程主键和任务主键;基于所述流程主键和所述任务主键定位所述第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述分布式系统还包括:分布式缓存,所述基于所述流程主键和所述任务主键定位所述第一分布式实例,包括:基于所述流程主键和所述任务主键查询所述分布式缓存,得到所述第一分布式实例的地址,其中,所述第一分布式实例的地址是在开始执行所述执行模型时缓存的;所述基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务,包括:判断所述第一分布式实例是否可用;在所述第一分布式实例可用的情况下,判断所述第一分布式实例的本地缓存中是否存在所述流程上下文;在所述第一分布式实例的本地缓存中存在所述流程上下文,转发所述执行结果至第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述多个分布式实例还包括第二分布式实例,在所述判断所述第一分布式实例是否可用后,或者在所述判断所述第一分布式实例的本地缓存中是否存在所述流程上下文后,所述方法还包括:在所述第一分布式实例不可用的情况下,或者在所述第一分布式实例的本地缓存中不存在所述流程上下文的情况下,获取所述流程上下文;按照所述流程分支编排所述流程上下文;将所述流程上下文发送至所述第二分布式实例的本地缓存;以及基于所述执行结果恢复所述流程执行模型在所述第二分布式实例上的任务。
根据本公开的实施例,其中,在所述接收执行结果后,还包括:基于所述流程主键和所述任务主键,将所述执行结果持久化至数据库中。
根据本公开的实施例,其中,所述流程上下文包括多个不同逻辑颗粒度的流程节点,所述不同逻辑颗粒度的流程节点的上下文关系,包括小逻辑颗粒度的流程节点嵌套大逻辑颗粒度的流程节点作为子节点。
本公开的第二个方面,提供了一种流程调度装置,所述流程调度装置应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例,所述装置包括:流程获取模块,用于响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点;执行模型编排模块,用于按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务;流程上下文发送模块,用于将所述流程上下文发送至所述第一分布式实例的本地缓存;以及调度指导模块,用于按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
根据本公开的实施例,其中,所述执行模型编排模块,用于遍历所述流程上下文,判断所述流程上下文中的当前节点是否存在父节点;在所述当前节点不存在父节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中;在所述当前节点存在父节点的情况下,判断所述当前节点的父节点是否具有大于一个的子节点;在所述当前节点的父节点具有大于一个的子节点的情况下,判断所述当前节点是否为所述当前节点的父节点的子节点列表中的第一个节点;在所述当前节点是所述当前节点的父节点的节点列表中的第一个节点的情况下,将所述当前节点加入到所述父节点所在的队列中;在所述当前节点不是所述当前节点的父节点的节点列表中的第一个节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中,其中,一个所述队列中的节点的执行逻辑由一个线程执行,所述队列和所述线程是一一对应的,或者所述队列和所述线程是多对一的。
根据本公开的实施例,其中,所述多个流程执行模型是以有向无环图的形式关联的。
根据本公开的实施例,其中,所述装置还包括流程状态树建立模块,用于建立流程状态树,所述流程状态树与所述流程上下文存在一致的树状结构,所述流程状态树的树节点是所述流程节点的节点状态。
根据本公开的实施例,其中,所述调度指导模块,用于基于所述流程任务更新所述流程状态树的节点状态;基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件;在所述执行模型满足预设的流程断点条件的情况下,阻塞所述执行模型;以及在触发于预设的流程恢复条件的情况下,恢复所述执行模型。
根据本公开的实施例,其中,所述调度指导模块,用于判断所述节点状态为执行中的所述流程任务是否超时;以及在所述节点状态为执行中的所述流程任务超时的情况下,判定所述执行模型满足预设的断点条件。
根据本公开的实施例,其中,所述调度指导模块,用于接收执行结果,所述执行结果包括流程主键和任务主键;基于所述流程主键和所述任务主键定位所述第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述分布式系统还包括:分布式缓存,所述调度指导模块,用于基于所述流程主键和所述任务主键查询所述分布式缓存,得到所述第一分布式实例的地址,其中,所述第一分布式实例的地址是在开始执行所述执行模型时缓存的;所述基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务,包括:判断所述第一分布式实例是否可用;在所述第一分布式实例可用的情况下,判断所述第一分布式实例的本地缓存中是否存在所述流程上下文;在所述第一分布式实例的本地缓存中存在所述流程上下文,转发所述执行结果至第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述调度指导模块,用于在所述第一分布式实例不可用的情况下,或者在所述第一分布式实例的本地缓存中不存在所述流程上下文的情况下,获取所述流程上下文;按照所述流程分支编排所述流程上下文;将所述流程上下文发送至所述第二分布式实例的本地缓存;以及基于所述执行结果恢复所述流程执行模型在所述第二分布式实例上的任务。
根据本公开的实施例,其中,所述调度指导模块,用于基于所述流程主键和所述任务主键,将所述执行结果持久化至数据库中。
根据本公开的实施例,其中,所述流程上下文包括多个不同逻辑颗粒度的流程节点,所述不同逻辑颗粒度的流程节点的上下文关系,包括小逻辑颗粒度的流程节点嵌套大逻辑颗粒度的流程节点作为子节点。
本公开的第三个方面,提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述流程调度方法。
本公开的第四个方面,还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述流程调度方法。
本公开的第五个方面,还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述流程调度方法。
在本公开的实施例中,通过将同一流程中的不同的流程节点进行编排后,放入同一分布式实例中处理,而非由不同的分布式实例执行,可以无需使用大量的数据库操作,避免多次查询数据库的操作,降低数据库的读取压力;并且,还能避免使用分布式锁去同步流程和流程的任务状态,保证高执行效率,有利于后期错误排查,充分发挥了分布式技术的优势。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的流程调度方法的应用场景图;
图2示意性示出了根据本公开实施例的流程调度方法的流程图;
图3示意性示出了根据本公开实施例的流程编排方法的流程图;;
图4示意性示出了根据本公开实施例的流程指导方法的流程图;
图5示意性示出了根据本公开实施例的流程断点恢复方法的流程图;
图6示意性示出了根据本公开实施例的另一种流程断点恢复方法的流程图;
图7示意性示出了根据本公开实施例的另一种流程断点恢复方法的流程图;
图8示意性示出了根据本公开实施例的不同逻辑层次的流程节点示意图;
图9示意性示出了根据本公开实施例的一种由多个不同的分布式实例异步执行流程方法的多端流程图;
图10示意性示出了根据本公开实施例的流程调度装置的结构框图;以及
图11示意性示出了根据本公开实施例的适于实现流程调度方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
现有技术中流行的流程调度平台并不满足于靠一个服务或者系统解决流程中所有任务的执行,而是由多个服务或者系统协同完成流程任务的调度,实现资源的充分利用,但这样会面临如下的场景:1)在外部服务或系统返回执行结果前如何控制流程在当前任务断点等待,等执行结果返回后再执行当前任务的下一个任务。2)外部服务或系统通过何种方式向流程调度返回执行结果。3)流程调度平台在收到外部服务或系统返回的执行结果后如何精准定位到当前在等待的断点任务并恢复流程的执行。
目前为应对以上的场景,现有技术中采用的做法是:1)流程任务生成业务主键并携带业务主键请求外部系统后,将流程任务的状态置为“执行中”,把任务状态持久化在数据库或者缓存中间件,流程调度平台完成当前任务的执行并返回2)外部系统执行流程任务后,把执行结果和业务主键写到消息中间件,流程调度平台消费消息中间件的消息。3)流程调度平台消费执行结果后,通过执行结果中携带的业务主键,找到断点的流程任务,把断点的流程的状态置为“已执行”,通过流程关系表找到当前断点的流程任务的下一个或多个任务,执行当前任务的下一个或多个任务。
由于调度是分布式的,所以流程任务存在散点执行的情况,即流程中的任务的执行分布在不同的分布式实例执行,导致需要大量的数据库操作和分布式锁去同步流水线和流水线任务的状态,保证流程的正确调度和状态的准确,如果存在大量流水线执行,就会存在多次查询数据库,对数据库造成压力,分布式锁同步状态造成执行效率低下易错,排查错误困难,没有充分发挥分布式技术的优势。
为了解决现有技术中存在的技术问题,本公开的实施例提供了一种流程调度方法,所述流程调度方法应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例,所述方法包括:响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点;按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务;将所述流程上下文发送至所述第一分布式实例的本地缓存;以及按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
在本公开的实施例中,通过将同一流程中的不同的流程节点进行编排后,放入同一分布式实例中处理,而非由不同的分布式实例执行,可以无需使用大量的数据库操作,避免多次查询数据库的操作,降低数据库的读取压力;并且,还能避免使用分布式锁去同步流程和流程的任务状态,保证高执行效率,有利于后期错误排查,充分发挥了分布式技术的优势。
图1示意性示出了根据本公开实施例的流程调度方法的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103、网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的流程调度方法一般可以由服务器105执行。相应地,本公开实施例所提供的流程调度装置一般可以设置于服务器105中。本公开实施例所提供的流程调度方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的流程调度装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图9对公开实施例的流程调度方法进行详细描述。
图2示意性示出了根据本公开实施例的流程调度方法的流程图。
如图2所示,该实施例的流程调度方法包括操作S210~操作S240,该流程调度方法可以由服务器105执行。
在本公开的实施例中,所述流程调度方法应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例。
在操作S210中,响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点。
具体的,一个流程是由多个小的任务按照一定的业务逻辑组成的,流程可以是例如:调度执行工作流、流程审批工作流以及任务调度流。流程调度(包括流程断点恢复)的前提在于流程上下文,该流程上下文实质上是流程任务和任务连线(或称任务之间的执行逻辑),该流程上下文是一种树状结构的数据,一般来说,当节点是最小颗粒度时,流程节点对应一个流程任务。由于是树状结构,该树状结构便包括多个分支,一个分支是链式的,其上包括多个流程节点。
根据本公开的实施例,其中,所述流程上下文包括多个不同逻辑颗粒度的流程节点,所述不同逻辑颗粒度的流程节点的上下文关系,包括小逻辑颗粒度的流程节点嵌套大逻辑颗粒度的流程节点作为子节点。
当然,流程节点也不仅仅对应为最细颗粒度的流程任务,一个流程节点也可以是多个任务组成,形成逻辑意义上的较大的流程节点,例如,一个请假流程可以拆分为多个部门责任人审批的流程任务,对此审批的流程任务作为最细颗粒度的流程节点,将多个流程任务打包后的请假流程也可以作为一个颗粒度流程节点。图8示意性示出了根据本公开实施例的不同逻辑层次的流程节点示意图。如图8所示,该图仅示意性示出了不同的颗粒度流程节点,并未示出为完成一个完整流程,流程节点之间所需要的连线。其中,该不同逻辑颗粒度(或称逻辑层次)的流程节点示意图包括三级层次的节点,由高到低分别是PipelineState、StageState以及StepState,该,其中PipelineState、StageState以及StepState上均包括其自身颗粒度的流程数据;等级最低的StepState节点对应流程任务。在一些特殊的场景中,在StepState节点下还可以嵌套颗粒度较大的PipelineState节点或者StepState节点。
在本公开的实施例中,流程上下文中的流程节点可以是不同逻辑颗粒度的,并且不同的逻辑颗粒度之间,可以低层级节点下嵌套高层级节点,使得流程上下文中流程节点可以自由组合,例如在建立流程上下文时,可以通过现有的流程上下文形成新的流程上下文。
根据本公开的实施例,其中,在所述响应于流程执行请求,获取流程上下文后,所述按照所述流程分支编排所述流程上下文,得到多个流程执行模型前,还包括:建立流程状态树,所述流程状态树与所述流程上下文存在一致的树状结构,所述流程状态树的树节点是所述流程节点的节点状态。
结合图8所示,其中PipelineState、StageState以及StepState上均除了包括其自身颗粒度的流程数据,还包括相应的节点状态,该状态是该节点的执行状态,包括例如执行成功和执行失败,当然成功和失败属于较为简单的节点状态,在此基础上,还可以在节点状态的属性上增加时态的概念,包括例如等待(waiting)、运行(doing)以及完成(done)等执行状态,其中,等待(waiting)是指该流程节点对应的流程任务处于等待状态;运行(doing)是指该流程节点对应的流程任务处于执行状态;完成(done)是指该流程节点对应的流程任务处于完成状态。综上所述,节点状态又能引出多个不同的结果,即运行时失败、运行时成功、完成失败等等不同的。时态是节点状态的一个属性,是状态机的一个补充和增强,所有节点都通用,因为流程节点在修改状态前后可能还要做一些初始化或销毁的操作,为了适配流程调度的各种复杂的场景和流程调度平台的扩展性,所以引入了时态的概念,使得流程的处理能够面对不同的复杂场景。
在操作S220中,按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务。
可以理解的是,队列的特点在于队列的执行是先入先出的线性执行逻辑,即仅一条执行逻辑。
根据本公开的实施例,其中,所述多个流程执行模型是以有向无环图的形式关联的。
具体的,执行模型是以DAG(有向无环图)的形式关联。有向无环图按照数学上的定义,是一个没有有向循环的、有限的有向图,由于DAG具有序列化的特性,可被用于表示事件之间的依赖关系和管理任务之间的调度,是计算机领域中常用是数据结构,天然支持流程调度这种数据结构。在流程执行的过程中,调度所使用的多个执行模型需要避免产生回路。
在操作S230中,将所述流程上下文发送至所述第一分布式实例的本地缓存。
具体的,对于一个流程的整体而言,该流程上所有的流程任务原则上应保证在同一分布式实例中执行。换句话说,在上述操作S230中,按照该原则,只要原执行的分布式实例未出现事故导致不可用,那么整个流程保证仅在原分布式实例中执行。因此,先关的流程上下文数据仅需发送至第一分布式实例中存储。
需要说明的是,流程调度平台中不储存流程上下文,该数据仅在用于执行任务的分布式实例的本地缓存中存储。
在操作S240中,按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
在本公开的实施例中,通过将同一流程中的不同的流程节点进行编排后,放入同一分布式实例中处理,而非由不同的分布式实例执行,可以无需使用大量的数据库操作,避免多次查询数据库的操作,降低数据库的读取压力;并且,还能避免使用分布式锁去同步流程和流程的任务状态,保证高执行效率,有利于后期错误排查,充分发挥了分布式技术的优势。
需要说明的是,按照以上所述的队列中不存在一个以上分支的原则,该流程编排的逻辑具体如下所示:
图3示意性示出了根据本公开实施例的流程编排方法的流程图。
如图3所示,该实施例的流程编排方法包括操作S310~操作S360,该操作S310~操作S360至少可以执行上述操作S220。
在操作S310中,遍历所述流程上下文,判断所述流程上下文中的当前节点是否存在父节点。
在操作S320中,在所述当前节点不存在父节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中。
在操作S330中,在所述当前节点存在父节点的情况下,判断所述当前节点的父节点是否具有大于一个的子节点。
在操作S340中,在所述当前节点的父节点具有大于一个的子节点的情况下,判断所述当前节点是否为所述当前节点的父节点的子节点列表中的第一个节点。
在操作S350中,在所述当前节点是所述当前节点的父节点的节点列表中的第一个节点的情况下,将所述当前节点加入到所述父节点所在的队列中。
在操作S360中,在所述当前节点不是所述当前节点的父节点的节点列表中的第一个节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中,其中,一个所述队列中的节点的执行逻辑由一个线程执行,所述队列和所述线程是一一对应的,或者所述队列和所述线程是多对一的。
具体的,在构建完流程上下文和/或流程状态树后,还需要构建流程执行模型,执行模型与流程上下文不同,流程上下文和流程状态树分别存储的是流程的数据和节点的执行状态。流程执行模型是多个的,一个流程执行模型对应一个或多个执行线程(或称container),线程数是可以自定义的,执行线程按照队列的形式分别执行流程节点对应的流程任务,也就是说,执行线程的作用就是遍历和执行节点队列的节点,而构建流程执行模型的过程主要是把流程的节点根据一定的算法分配到不同线程中的过程。
执行模型主要是串联流程中各个任务的关系和确定任务执行的顺序,快速定位当前任务的下一个任务,流程调度平台根据流程的上下文,根据流程节点的关系构建执行模型,流程调度平台只需启动container线程实现节点间的顺序。
在本公开的实施例中,在一个分布式实例中,最小的调动维度是执行线程,将流程上下文编排成为多个执行队列,且一个执行队列中所有节点的逻辑公用一个执行线程,这样可以增加线程的复用度,无需占用过多线程资源。
流程上下文创建后,流程就可以按照执行模型实现分布式的调度和执行,当流程任务需要向外部系统发送执行请求后,当前流程任务处于等待状态,等待外部服务或系统的执行结果返回,而流程整体上处于断点等待的状态。外部服务或系统执行任务后通知(回调或通过消息中间件)流程调度平台,流程调度平台指导执行当前任务的下一个或多个任务,恢复当前流程的执行。
图4示意性示出了根据本公开实施例的流程指导方法的流程图。
如图4所示,该实施例的流程指导方法包括操作S410~操作S440,该操作S410~操作S440至少可以执行上述操作S240。
在操作S410中,基于所述流程任务更新所述流程状态树的节点状态。
具体的,在运行执行模型的过程中,记录流程节点的执行状态,由最小颗粒度的流程任务更新,例如,waiting、doing以及done。
在操作S420中,基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件。
根据本公开的实施例,其中,所述基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件,包括:判断所述节点状态为执行中的所述流程任务是否超时;以及在所述节点状态为执行中的所述流程任务超时的情况下,判定所述执行模型满足预设的断点条件。
由于流程任务向外部系统发送执行请求,所需的时间开销较长(一部分的流程需要分布式系统以外的外部系统执行,一般而言,外部系统的时间开销较大)。因此,通过超时机制判断是否任务超时,超时则判定为满足断点条件以阻塞任务。
在操作S430中,在所述执行模型满足预设的流程断点条件的情况下,阻塞所述执行模型。
具体的,向外部系统发送执行请求时参数带上流程主键和任务主键,用来后面恢复流程的执行,发送执行请求后,更新流程上下文中当前流程任务的状态为的“运行中”,并把状态持久化到数据库,流程调度平台阻塞当前流程往下执行,流程的其它任务的状态都是“未执行(waiting)”,等待外部系统的执行结果通知。
在操作S440中,在触发于预设的流程恢复条件的情况下,恢复所述执行模型。
在本公开的实施例中,通过监控流程状态树的状态信息,判断是否触发断点条件,在发生断点情况下,及时阻塞执行的模型,保证资源的高可用,并在触发到恢复条件下,保证流程正常执行。
图5示意性示出了根据本公开实施例的流程断点恢复方法的流程图。
如图5所示,该实施例的流程断点恢复方法包括操作S510~操作S530,该操作S510~操作S530至少可以执行上述操作S440。
在操作S510中,接收执行结果,所述执行结果包括流程主键和任务主键。
根据本公开的实施例,其中,在所述接收执行结果后,还包括:基于所述流程主键和所述任务主键,将所述执行结果持久化至数据库中。
具体的,通过将执行结果持久化到数据库中,保证充足的时间来确定原有分布式实例或者新的分布式实例。
在操作S520中,基于所述流程主键和所述任务主键定位所述第一分布式实例。
具体的,可以依靠分布式服务注册中心查询分布式实例的地址,进而定位分布式实例,其中,分布式服务注册中心可以用于管理分布式系统中管理分布式实例地址,分布式服务注册中心可以是设置于集群上的。
在操作S530中,基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
具体的,流程调度平台收到外部系统通知的执行结果(执行结果带上流程主键和任务主键)后,根据任务主键把执行结果和执行状态持久化到数据库,经过智能寻址的过程,确定流程执行的分布式实例,更新流程上下文的任务的执行状态,唤醒流程往下执行,流程断点和流程恢复的配合,共同完成流程中所有任务的执行,等所有组件执行完后,再根据流程上下文任务的执行状态计算流程的执行结果。
图6示意性示出了根据本公开实施例的另一种流程断点恢复方法的流程图。
如图6所示,该实施例的流程断点恢复方法包括操作S610~操作S650,该操作S610至少可以执行上述操作S520,该操作S620~操作S650至少可以执行上述操作S530。
根据本公开的实施例,所述分布式系统包括分布式缓存。
在操作S610中,基于所述流程主键和所述任务主键查询所述分布式缓存,得到所述第一分布式实例的地址,其中,所述第一分布式实例的地址是在开始执行所述执行模型时缓存的。
具体的,分布式系统是由多个实例组成,而每个实例都具有流程执行的能力,外部系统返回执行结果(执行结果带流程主键和任务主键)后,要保证智能和精准定位流程上下文所在的分布式实例,就要通过智能寻址。智能寻址借助了分布式服务注册中心用来中管理剩余的任务跑到那个分布式实例中和分布式缓存实现。
在操作S620中,判断所述第一分布式实例是否可用。
在操作S630中,在所述第一分布式实例可用的情况下,判断所述第一分布式实例的本地缓存中是否存在所述流程上下文。
在操作S640中,在所述第一分布式实例的本地缓存中存在所述流程上下文,转发所述执行结果至第一分布式实例。
在操作S650中,基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
其中,通过执行结果中的流程主键和任务主键可以直接定位。
具体的,流程调度平台的实例收到异步返回的执行结果后,通过流程主键从分布式缓存中找到流程上下文所在的分布式实例地址IP,再通过分布式服务注册中心将执行结果精准转发到流程执行的实例,实现流程任务的断点恢复。
在本公开的实施例中,在断点发生后,优先判断原有的第一分布式实例是否还能使用,在能使用的情况下,判断对应的缓存中是否还存在原来的流程上下文数据,在存在的情况下,通过执行结果定位具体的流程任务,无需从头再执行该流程。
可以理解的是,当流程执行的分布式实例故障不可对外服务,则在该实例执行的流程就不能正确地被执行,这就要结合流程重建来解决布式流程调度平台的高可用问题。
图7示意性示出了根据本公开实施例的另一种流程断点恢复方法的流程图。
如图7所示,该实施例的流程断点恢复方法包括操作S710~操作S740,该操作S710~操作S740可以执行于上述操作S620后,或者该操作S710~操作S740可以执行于上述操作S630后。
根据本公开的实施例,其中,所述多个分布式实例还包括第二分布式实例。
在操作S710中,在所述第一分布式实例不可用的情况下,或者在所述第一分布式实例的本地缓存中不存在所述流程上下文的情况下,获取所述流程上下文。
具体的,通过智能寻址,找到流程执行实例,转发前通过服务注册中心判断实例不可用,则触发本地流程重建再断点恢复,如果流程之前是该实例执行,但由于该实例重启过,之前缓存的上下文都没有了,也会触发重建。
在操作S720中,按照所述流程分支编排所述流程上下文。
在操作S730中,将所述流程上下文发送至所述第二分布式实例的本地缓存。
在操作S740中,基于所述执行结果恢复所述流程执行模型在所述第二分布式实例上的任务。
可以理解的是,在第一分布式实例不可用或未缓存有流程上下文的情况下,再由流程调度平台再从数据库中获取流程相关的上下文进行编排后,再找到其他任意一个分布式实例进行执行处理,再执行步骤是通过流程主键和任务主键进行定位之前断点所在的流程任务,由该断点所在的流程任务再一次开始执行。
在本公开的实施例中,在断点发生后,原有的第一分布式实例不可用时,或者原有的第一分布式实例对应的本地缓存未存有流程上下文的时候,切换执行的分布式实例,重新从对该流程上下文进行编排,并发送至第二分布式实例的本地缓存,通过执行结果定位具体的流程任务,无需从头再执行该流程。
图9示意性示出了根据本公开实施例的一种由多个不同的分布式实例异步执行流程方法的多端流程图。
如图9所示,主要包括流程重建、智能寻址和断点恢复三个方面。该流程主要包括以下步骤:
首先,由分布式实例1中的消费消息从缓存中获取流程执行实例;
由分布式实例1判断是否本地执行;
在非本地执行的情况下,通过注册中心查询目标实例是否可用;
在本地执行的情况下,判断本地是否存在上下文;
存在,则执行断点恢复;
不存在,则执行流程重建,通过非本地执行转发到目标实例(分布式实例2)中。
基于上述流程调度方法,本公开还提供了一种流程调度装置。以下将结合图10对该装置进行详细描述。
图10示意性示出了根据本公开实施例的流程调度装置的结构框图。
如图10所示,该实施例的流程调度装置1000包括流程获取模块1010、执行模型编排模块1020、流程上下文发送模块1030和调度指导模块1040。
流程获取模块1010用于响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点。在一实施例中,流程获取模块1010可以用于执行前文描述的操作S210,在此不再赘述。
执行模型编排模块1020用于按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务。在一实施例中,执行模型编排模块1020可以用于执行前文描述的操作S220,在此不再赘述。
流程上下文发送模块1030用于将所述流程上下文发送至所述第一分布式实例的本地缓存。在一实施例中,流程上下文发送模块1030可以用于执行前文描述的操作S230,在此不再赘述。
调度指导模块1040用于按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。在一实施例中,调度指导模块1040可以用于执行前文描述的操作S240,在此不再赘述。
在本公开的实施例中,通过将同一流程中的不同的流程节点进行编排后,放入同一分布式实例中处理,而非由不同的分布式实例执行,可以无需使用大量的数据库操作,避免多次查询数据库的操作,降低数据库的读取压力;并且,还能避免使用分布式锁去同步流程和流程的任务状态,保证高执行效率,有利于后期错误排查,充分发挥了分布式技术的优势。
根据本公开的实施例,其中,所述执行模型编排模块,用于遍历所述流程上下文,判断所述流程上下文中的当前节点是否存在父节点;在所述当前节点不存在父节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中;在所述当前节点存在父节点的情况下,判断所述当前节点的父节点是否具有大于一个的子节点;在所述当前节点的父节点具有大于一个的子节点的情况下,判断所述当前节点是否为所述当前节点的父节点的子节点列表中的第一个节点;在所述当前节点是所述当前节点的父节点的节点列表中的第一个节点的情况下,将所述当前节点加入到所述父节点所在的队列中;在所述当前节点不是所述当前节点的父节点的节点列表中的第一个节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中,其中,一个所述队列中的节点的执行逻辑由一个线程执行,所述队列和所述线程是一一对应的,或者所述队列和所述线程是多对一的。
根据本公开的实施例,其中,所述多个流程执行模型是以有向无环图的形式关联的。
根据本公开的实施例,其中,所述装置还包括流程状态树建立模块,用于建立流程状态树,所述流程状态树与所述流程上下文存在一致的树状结构,所述流程状态树的树节点是所述流程节点的节点状态。
根据本公开的实施例,其中,所述调度指导模块,用于基于所述流程任务更新所述流程状态树的节点状态;基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件;在所述执行模型满足预设的流程断点条件的情况下,阻塞所述执行模型;以及在触发于预设的流程恢复条件的情况下,恢复所述执行模型。
根据本公开的实施例,其中,所述调度指导模块,用于判断所述节点状态为执行中的所述流程任务是否超时;以及在所述节点状态为执行中的所述流程任务超时的情况下,判定所述执行模型满足预设的断点条件。
根据本公开的实施例,其中,所述调度指导模块,用于接收执行结果,所述执行结果包括流程主键和任务主键;基于所述流程主键和所述任务主键定位所述第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述分布式系统还包括:分布式缓存,所述调度指导模块,用于基于所述流程主键和所述任务主键查询所述分布式缓存,得到所述第一分布式实例的地址,其中,所述第一分布式实例的地址是在开始执行所述执行模型时缓存的;所述基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务,包括:判断所述第一分布式实例是否可用;在所述第一分布式实例可用的情况下,判断所述第一分布式实例的本地缓存中是否存在所述流程上下文;在所述第一分布式实例的本地缓存中存在所述流程上下文,转发所述执行结果至第一分布式实例;以及基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
根据本公开的实施例,其中,所述调度指导模块,用于在所述第一分布式实例不可用的情况下,或者在所述第一分布式实例的本地缓存中不存在所述流程上下文的情况下,获取所述流程上下文;按照所述流程分支编排所述流程上下文;将所述流程上下文发送至所述第二分布式实例的本地缓存;以及基于所述执行结果恢复所述流程执行模型在所述第二分布式实例上的任务。
根据本公开的实施例,其中,所述调度指导模块,用于基于所述流程主键和所述任务主键,将所述执行结果持久化至数据库中。
根据本公开的实施例,其中,所述流程上下文包括多个不同逻辑颗粒度的流程节点,所述不同逻辑颗粒度的流程节点的上下文关系,包括小逻辑颗粒度的流程节点嵌套大逻辑颗粒度的流程节点作为子节点。
根据本公开的实施例,流程获取模块1010、执行模型编排模块1020、流程上下文发送模块1030和调度指导模块1040中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,流程获取模块1010、执行模型编排模块1020、流程上下文发送模块1030和调度指导模块1040中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,流程获取模块1010、执行模型编排模块1020、流程上下文发送模块1030和调度指导模块1040中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图11示意性示出了根据本公开实施例的适于实现流程调度方法的电子设备的方框图。
如图11所示,根据本公开实施例的电子设备1100包括处理器1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。处理器1101例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1101还可以包括用于缓存用途的板载存储器。处理器1101可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1103中,存储有电子设备1100操作所需的各种程序和数据。处理器1101、ROM 1102以及RAM 1103通过总线1104彼此相连。处理器1101通过执行ROM 1102和/或RAM1103中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1102和RAM 1103以外的一个或多个存储器中。处理器1101也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备1100还可以包括输入/输出(I/O)接口1105,输入/输出(I/O)接口1105也连接至总线1104。电子设备1100还可以包括连接至I/O接口1105的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1102和/或RAM 1103和/或ROM 1102和RAM 1103以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器1101执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1109被下载和安装,和/或从可拆卸介质1111被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被处理器1101执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (15)
1.一种流程调度方法,所述流程调度方法应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例,
所述方法包括:
响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点;
按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务;
将所述流程上下文发送至所述第一分布式实例的本地缓存;以及
按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
2.根据权利要求1所述的方法,其中,所述按照所述流程分支编排所述流程上下文,得到多个流程执行模型,包括:
遍历所述流程上下文,判断所述流程上下文中的当前节点是否存在父节点;
在所述当前节点不存在父节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中;
在所述当前节点存在父节点的情况下,判断所述当前节点的父节点是否具有大于一个的子节点;
在所述当前节点的父节点具有大于一个的子节点的情况下,判断所述当前节点是否为所述当前节点的父节点的子节点列表中的第一个节点;
在所述当前节点是所述当前节点的父节点的节点列表中的第一个节点的情况下,将所述当前节点加入到所述父节点所在的队列中;
在所述当前节点不是所述当前节点的父节点的节点列表中的第一个节点的情况下,建立新队列,并将所述当前节点加入到所述新队列中,
其中,一个所述队列中的节点的执行逻辑由一个线程执行,所述队列和所述线程是一一对应的,或者所述队列和所述线程是多对一的。
3.根据权利要求1或2所述的方法,其中,所述多个流程执行模型是以有向无环图的形式关联的。
4.根据权利要求1所述的方法,其中,在所述响应于流程执行请求,获取流程上下文后,所述按照所述流程分支编排所述流程上下文,得到多个流程执行模型前,
还包括:
建立流程状态树,所述流程状态树与所述流程上下文存在一致的树状结构,所述流程状态树的树节点是所述流程节点的节点状态。
5.根据权利要求4所述的方法,其中,所述按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务,包括:
基于所述流程任务更新所述流程状态树的节点状态;
基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件;
在所述执行模型满足预设的流程断点条件的情况下,阻塞所述执行模型;以及
在触发于预设的流程恢复条件的情况下,恢复所述执行模型。
6.根据权利要求5所述的方法,其中,所述基于所述流程状态树中的所述节点状态,监控所述执行模型是否满足预设的断点条件,包括:
判断所述节点状态为执行中的所述流程任务是否超时;以及
在所述节点状态为执行中的所述流程任务超时的情况下,判定所述执行模型满足预设的断点条件。
7.根据权利要求5所述的方法,其中,所述在触发于预设的流程恢复条件的情况下,恢复所述执行模型,包括:
接收执行结果,所述执行结果包括流程主键和任务主键;
基于所述流程主键和所述任务主键定位所述第一分布式实例;以及
基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
8.根据权利要求7所述的方法,其中,所述分布式系统还包括:分布式缓存,
所述基于所述流程主键和所述任务主键定位所述第一分布式实例,包括:
基于所述流程主键和所述任务主键查询所述分布式缓存,得到所述第一分布式实例的地址,其中,所述第一分布式实例的地址是在开始执行所述执行模型时缓存的;
所述基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务,包括:
判断所述第一分布式实例是否可用;
在所述第一分布式实例可用的情况下,判断所述第一分布式实例的本地缓存中是否存在所述流程上下文;
在所述第一分布式实例的本地缓存中存在所述流程上下文,转发所述执行结果至第一分布式实例;以及
基于所述执行结果恢复所述流程执行模型在所述第一分布式实例上的任务。
9.根据权利要求8所述的方法,其中,所述多个分布式实例还包括第二分布式实例,
在所述判断所述第一分布式实例是否可用后,或者在所述判断所述第一分布式实例的本地缓存中是否存在所述流程上下文后,所述方法还包括:
在所述第一分布式实例不可用的情况下,或者在所述第一分布式实例的本地缓存中不存在所述流程上下文的情况下,获取所述流程上下文;
按照所述流程分支编排所述流程上下文;
将所述流程上下文发送至所述第二分布式实例的本地缓存;以及
基于所述执行结果恢复所述流程执行模型在所述第二分布式实例上的任务。
10.根据权利要求7~9任一项所述的方法,其中,在所述接收执行结果后,还包括:
基于所述流程主键和所述任务主键,将所述执行结果持久化至数据库中。
11.根据权利要求1、2、4、5、6、7、8以及9任一项所述的方法,其中,所述流程上下文包括多个不同逻辑颗粒度的流程节点,所述不同逻辑颗粒度的流程节点的上下文关系,包括小逻辑颗粒度的流程节点嵌套大逻辑颗粒度的流程节点作为子节点。
12.一种流程调度装置,所述流程调度装置应用于流程调度平台中,所述流程调度平台用于调度分布式系统中的多个分布式实例资源,所述多个分布式实例至少包括第一分布式实例,
所述装置包括:
流程获取模块,用于响应于流程执行请求,获取流程上下文,其中,所述流程上下文包括多个流程分支,所述流程分支包括多个流程节点;
执行模型编排模块,用于按照所述流程分支编排所述流程上下文,得到多个流程执行模型,所述流程执行模型包括按照队列排布的流程任务;
流程上下文发送模块,用于将所述流程上下文发送至所述第一分布式实例的本地缓存;以及
调度指导模块,用于按照所述多个流程执行模型中按照队列排布的流程任务,指导所述第一分布式实例获取所述本地缓存中的所述流程上下文,并使所述第一分布式实例基于所述流程节点执行流程任务。
13.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~11中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~11中任一项所述的方法。
15.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310611401.XA CN116594752A (zh) | 2023-05-26 | 2023-05-26 | 流程调度方法、装置、设备、介质和程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310611401.XA CN116594752A (zh) | 2023-05-26 | 2023-05-26 | 流程调度方法、装置、设备、介质和程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116594752A true CN116594752A (zh) | 2023-08-15 |
Family
ID=87598957
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310611401.XA Pending CN116594752A (zh) | 2023-05-26 | 2023-05-26 | 流程调度方法、装置、设备、介质和程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116594752A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667362A (zh) * | 2024-01-31 | 2024-03-08 | 上海朋熙半导体有限公司 | 一种流程引擎调度方法、系统、设备及可读介质 |
-
2023
- 2023-05-26 CN CN202310611401.XA patent/CN116594752A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667362A (zh) * | 2024-01-31 | 2024-03-08 | 上海朋熙半导体有限公司 | 一种流程引擎调度方法、系统、设备及可读介质 |
CN117667362B (zh) * | 2024-01-31 | 2024-04-30 | 上海朋熙半导体有限公司 | 一种流程引擎调度方法、系统、设备及可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107479990B (zh) | 一种分布式软件服务系统 | |
CN108920222B (zh) | 一种基于规则引擎的业务处理方法和装置 | |
EP1679602B1 (en) | Shared memory based monitoring for application servers | |
US9348709B2 (en) | Managing nodes in a distributed computing environment | |
US7792916B2 (en) | Management of cluster-wide resources with shared variables | |
US20200319935A1 (en) | System and method for automatically scaling a cluster based on metrics being monitored | |
CN109117252B (zh) | 基于容器的任务处理的方法、系统及容器集群管理系统 | |
US10122598B2 (en) | Subscription watch lists for event handling | |
US10498817B1 (en) | Performance tuning in distributed computing systems | |
CN110968603B (zh) | 一种数据访问方法及装置 | |
US9374417B1 (en) | Dynamic specification auditing for a distributed system | |
KR20110032222A (ko) | Emf 모델의 동기화 방법 및 시스템 | |
Cannella et al. | Adaptivity support for MPSoCs based on process migration in polyhedral process networks | |
CN116594752A (zh) | 流程调度方法、装置、设备、介质和程序产品 | |
US20190050266A1 (en) | Software application runtime having dynamic evaluation functions and parameters | |
CN116954944A (zh) | 基于内存网格的分布式数据流处理方法、装置及设备 | |
CN110908644A (zh) | 状态节点的配置方法、装置、计算机设备和存储介质 | |
US11115365B1 (en) | Messaging overflow service | |
US9059992B2 (en) | Distributed mobile enterprise application platform | |
CN115373886A (zh) | 服务群组容器停机方法、装置、计算机设备和存储介质 | |
CN115328608A (zh) | 一种Kubernetes容器垂直伸缩调节方法和装置 | |
US10701009B1 (en) | Message exchange filtering | |
US8762776B2 (en) | Recovering from a thread hang | |
CN112416980A (zh) | 数据业务处理方法、装置及设备 | |
CN113760569B (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 |