CN112051993A - 状态机模板的生成及任务处理方法、装置、介质及设备 - Google Patents
状态机模板的生成及任务处理方法、装置、介质及设备 Download PDFInfo
- Publication number
- CN112051993A CN112051993A CN202010827095.XA CN202010827095A CN112051993A CN 112051993 A CN112051993 A CN 112051993A CN 202010827095 A CN202010827095 A CN 202010827095A CN 112051993 A CN112051993 A CN 112051993A
- Authority
- CN
- China
- Prior art keywords
- node
- state
- state node
- task
- sub
- 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.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 24
- 238000012545 processing Methods 0.000 claims abstract description 102
- 238000000034 method Methods 0.000 claims abstract description 60
- 238000004590 computer program Methods 0.000 claims description 14
- 230000004083 survival effect Effects 0.000 claims description 11
- 238000006243 chemical reaction Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 6
- 238000012546 transfer Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 58
- 238000010586 diagram Methods 0.000 description 32
- 230000008569 process Effects 0.000 description 30
- 238000007726 management method Methods 0.000 description 17
- 238000013515 script Methods 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 238000003058 natural language processing Methods 0.000 description 7
- 238000012015 optical character recognition Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000012800 visualization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- 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
-
- 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
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请的实施例提供了一种状态机模板的生成及任务处理方法、装置、介质及设备。该任务处理方法包括:获取待处理任务对应的状态机模板,该待处理任务可以来自于云服务器,该状态机模板是根据与待处理任务相关联的至少一个功能组件生成的;解析状态机模板得到具有执行顺序的至少一个状态节点;从起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据目标状态节点的输入数据执行目标状态节点对应的功能,并将目标状态节点的输出数据发送给目标状态节点的下游节点作为下游节点的输入数据;在目标状态节点为结束节点时,确定待处理任务处理完成。本申请实施例的技术方案实现了对待处理任务各个状态的有效控制。
Description
技术领域
本申请涉及计算机及通信技术领域,具体而言,涉及一种状态机模板的生成及任务处理方法、装置、介质及设备。
背景技术
目前,在需要发布一个任务或者服务时,通常是需要开发人员针对待发布的任务或者服务来编写任务代码,这种方式不仅对开发人员的专业能力要求较高,而且开发效率较低。同时,在执行任务时,也难以实现对任务在执行过程中各阶段的有效控制。
发明内容
本申请的实施例提供了一种状态机模板的生成及任务处理方法、装置、介质及设备,进而至少在一定程度上可以提高任务或服务的编排生成效率,并且实现了对待处理任务各个状态的有效控制。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种基于状态机的任务处理方法,包括:获取待处理任务对应的状态机模板,所述状态机模板是根据与所述待处理任务相关联的至少一个功能组件生成的;解析所述状态机模板得到具有执行顺序的至少一个状态节点,所述状态节点与所述功能组件一一对应,所述至少一个状态节点包含起始节点;从所述起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,并将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据;在所述目标状态节点为结束节点时,确定所述待处理任务处理完成。
根据本申请实施例的一个方面,提供了一种状态机模板的生成方法,包括:显示状态机模板的编辑界面,所述编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域;在所述模板编排区域内显示从所述功能组件选择区域内选择并拖拽至所述模板编排区域内的至少一个功能组件,以及针对所述至少一个功能组件设置的逻辑关系;在所述状态机模板代码区域内显示状态机模板代码,所述状态机模板代码是根据所述至少一个功能组件之间的逻辑关系对所述至少一个功能组件分别对应的代码进行编排得到的;根据所述状态机模板代码生成状态机模板,所述状态机模板用于发布为待处理任务或包含调用接口的服务。
根据本申请实施例的一个方面,提供了一种基于状态机的任务处理装置,包括:获取单元,配置为获取待处理任务对应的状态机模板,所述状态机模板是根据与所述待处理任务相关联的至少一个功能组件生成的;解析单元,配置为解析所述状态机模板得到具有执行顺序的至少一个状态节点,所述状态节点与所述功能组件一一对应,所述至少一个状态节点包含起始节点;处理单元,配置为从所述起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,并将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据;确定单元,配置为在所述目标状态节点为结束节点时,确定所述待处理任务处理完成。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括任务类型的状态节点;所述处理单元配置为:在执行所述任务类型的状态节点时,根据所述任务类型的状态节点中指定字段所指示的组件服务所支持的协议类型,将所述输入数据转换为所述协议类型对应的数据,得到转换数据;通过所述组件服务所支持的协议将所述转换数据传送给所述组件服务,并获取所述组件服务对所述转换数据的处理结果;基于所述处理结果生成所述任务类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,所述处理单元配置为:若所述目标状态节点是传递类型的状态节点或任务类型的状态节点,则直接将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括循环类型的状态节点;所述处理单元配置为:在执行循环类型的状态节点时,获取所述循环类型的状态节点解析得到的循环开始子状态节点、循环体子状态节点和循环结束子状态节点;若执行所述循环开始子状态节点确定满足循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环体子状态节点,若确定不满足所述循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环结束子状态节点;在执行所述循环体子状态节点之后,将所述循环体子状态节点的输出数据发送给所述循环结束子状态节点进行处理;若执行所述循环结束子状态节点确定循环未结束,将所述循环结束子状态节点的输出数据发送给所述循环开始子状态节点,若确定循环结束,则将所述循环结束子状态节点的输出数据作为所述循环类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括选择类型的状态节点;所述处理单元配置为:在执行选择类型的状态节点时,获取所述选择类型的状态节点解析得到的选择开始子状态节点、选择体子状态节点和选择结束子状态节点;若执行所述选择开始子状态节点确定满足选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择体子状态节点,若确定不满足所述选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择结束子状态节点;在执行所述选择体子状态节点之后,将所述选择体子状态节点的输出数据发送给所述选择结束子状态节点进行处理;执行所述选择结束子状态节点,将所述选择结束子状态节点的输出数据作为所述选择类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括并行类型的状态节点;所述处理单元配置为:在执行并行类型的状态节点时,获取所述并行类型的状态节点解析得到的并行开始子状态节点、并行处理子状态节点和并行结束子状态节点;执行所述并行开始子状态节点,将所述并行开始子状态节点的输出数据发送给所述并行处理子状态节点;在执行所述并行处理子状态节点之后,将所述并行处理子状态节点的输出数据发送给所述并行结束子状态节点进行处理;执行所述并行结束子状态节点以对所述并行处理子状态节点的输出数据进行整合,将整合得到的数据作为所述并行类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,若所述目标状态节点没有下游节点,或者所述目标状态节点为成功状态节点或失败状态节点,则确定所述目标状态节点为所述结束节点。
在本申请的一些实施例中,基于前述方案,所述获取单元还配置为:在获取待处理任务对应的状态机模板之前,接收任务调度器发送的任务调度指令,所述任务调度指令用于对任务列表中存储的指定任务进行调度,根据所述任务调度指令获取所述待处理任务。
在本申请的一些实施例中,基于前述方案,所述基于状态机的任务处理装置还包括:发送单元,配置为在所述获取单元接收任务调度器发送的任务调度指令之前,向所述任务调度器发送注册请求,所述注册请求中包含有本任务执行器的网络地址,在向所述任务调度器注册成功之后,周期性向所述任务调度器发送心跳消息,所述心跳消息中包含有如下至少一个信息:本任务执行器的负载情况和本任务执行器的存活状态。
在本申请的一些实施例中,基于前述方案,所述任务列表存储于数据库中,在有多个任务调度器的情况下,所述多个任务调度器通过分布式锁的方式获取针对所述任务列表的调度权限;所述任务列表中存储的任务具有开始时间信息,所述任务调度器在访问所述任务列表时,根据所述任务列表中各个任务的开始时间确定对任务执行器的调度时机。
根据本申请实施例的一个方面,提供了一种状态机模板的生成装置,包括:第一显示单元,配置为显示状态机模板的编辑界面,所述编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域;第二显示单元,配置为在所述模板编排区域内显示从所述功能组件选择区域内选择并拖拽至所述模板编排区域内的至少一个功能组件,以及针对所述至少一个功能组件设置的逻辑关系;第三显示单元,配置为在所述状态机模板代码区域内显示状态机模板代码,所述状态机模板代码是根据所述至少一个功能组件之间的逻辑关系对所述至少一个功能组件分别对应的代码进行编排得到的;生成单元,配置为根据所述状态机模板代码生成状态机模板,所述状态机模板用于发布为待处理任务或包含调用接口的服务。
在本申请的一些实施例中,基于前述方案,所述的状态机模板的生成装置还包括:接收单元,配置为接收功能组件的注册请求,所述注册请求用于注册指定功能组件;存储单元,配置为将所述指定功能组件存储至功能组件列表中,并显示在所述功能组件选择区域内。
根据本申请实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的基于状态机的任务处理方法,或实现如上述实施例中所述的状态机模板的生成方法。
根据本申请实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述实施例中所述的基于状态机的任务处理方法,或实现如上述实施例中所述的状态机模板的生成方法。
根据本申请实施例的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实施例中提供的基于状态机的任务处理方法,或实现如上述实施例中所述的状态机模板的生成方法。
在本申请的一些实施例所提供的技术方案中,通过显示状态机模板的编辑界面,并在该界面中的目标编排区域内显示选择并拖拽至模板编排区域内的至少一个功能组件,以及针对所述至少一个功能组件设置的逻辑关系,然后根据选择的至少一个功能组件之间的逻辑关系对这至少一个功能组件分别对应的代码进行编排生成并显示状态机模板代码,进而根据状态机模板代码生成状态机模板,使得能够通过可视化拖拽的方式来编排状态机模板,不需要通过写代码的方式调用不同的服务来发布任务或服务,提高了任务或服务的编排生成效率。
在本申请的一些实施例所提供的技术方案中,在获取到待处理任务对应的状态机模板之后,解析状态机模板得到具有执行顺序的至少一个状态节点,然后从起始节点开始依次执行这至少一个状态节点,对于当前执行的目标状态节点,根据目标状态节点的输入数据执行目标状态节点对应的功能,并将目标状态节点的输出数据发送给目标状态节点的下游节点作为下游节点的输入数据,在目标状态节点为结束节点时,确定待处理任务处理完成。可见,在本申请实施例的技术方案中,可以通过状态机模板来表征待处理任务,并可以通过解析状态机模板来保证任务按照逻辑顺序正常执行,实现了对待处理任务各个状态的有效控制。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示出了对视频进行处理的状态机的流程图;
图2示出了可以应用本申请实施例的技术方案的示例性***架构的示意图;
图3示出了根据本申请的一个实施例的状态机模板的生成方法的流程图;
图4示出了根据本申请的一个实施例的基于状态机的任务处理方法的流程图;
图5示出了根据本申请的一个实施例的状态机模板的编辑界面的示意图;
图6示出根据本申请的一个实施例的基于状态机的任务处理***的架构图;
图7示出了根据本申请的一个实施例的组件注册、编排的流程图;
图8A示出了根据本申请的一个实施例的并发组件对应的代码结构示意图;
图8B示出了根据本申请的一个实施例的task类型的组件对应的一种代码结构示意图;
图8C示出了根据本申请的一个实施例的task类型的组件对应的一种代码结构示意图;
图8D示出了根据本申请的一个实施例的状态机模板的编辑界面的示意图;
图9示出了根据本申请的一个实施例的任务列表的示意图;
图10示出了根据本申请的一个实施例的调度器与执行器交互过程示意图;
图11示出了根据本申请的一个实施例的调度器调度执行器的流程图;
图12示出了根据本申请的一个实施例的执行器的处理过程示意图;
图13示出了根据本申请的一个实施例的执行器执行一个状态节点的流程图;
图14示出了根据本申请的一个实施例的循环类型的状态节点的处理流程图;
图15示出了根据本申请的一个实施例的选择类型的状态节点的处理流程图;
图16示出了根据本申请的一个实施例的并行类型的状态节点的处理流程图;
图17示出了根据本申请的一个实施例的基于状态机的任务处理装置的框图;
图18示出了根据本申请的一个实施例的状态机模板的生成装置的框图;
图19示出了适于用来实现本申请实施例的电子设备的计算机***的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
在本申请的实施例中,状态机是用于描述有限个状态以及在这些状态之间的转移和动作等行为的模型。状态机的每一个步骤也称之为状态,状态会根据输入来执行相应的操作,并将输出传递给下一个状态。比如状态的类型可以包括:Task(任务)、Pass(传递)、Wait(等待)、Choice(选择)、Parallel(并行)、Foreach(循环)等;其中Task类型是最常用的状态,用来描述执行一些工作,比如执行本地脚本、调用各种云服务等。
状态机模版是通过代码语言(如Json或YAML语言)描述整个状态机的流程。
在状态机的一个示例中,如图1所示是对视频进行处理的状态机,其中该状态机可以包括如下几个Task类型的状态:预处理、视频截帧、OCR(Optical CharacterRecognition,光学字符识别)识别、音频转文字、NLP(Natural Language Processing,自然语言处理)、合并存储等。
其中,预处理可以是调用云函数(Serverless Cloud Function,简称SCF)服务来对视频进行诸如视频镜头分割、特征提取等处理;音频转文字可以是通过调用语音识别服务,如ASR(Automatic Speech Recognition,自动语音识别技术)来识别语音;视频截帧可以是通过调用视频处理服务,如MPS(Media Processing Service,简称视频处理服务)来截取视频帧等;OCR识别即为识别出视频帧中包含的文字内容;NLP可以是调用自然语言处理服务来实现对识别到的文字内容(包含语音识别得到的文字内容和OCR识别得到的文字内容)进行处理;合并存储即是将NLP处理后得到的结果存储至数据库中。
在本申请的一个实施例中,图1中所示的云函数服务、语音识别服务、视频处理服务、自然语言处理服务等都可以是通过云计算(Cloud Computing)的方式来实现的,云计算是将计算任务分布在大量计算机构成的资源池上,使各种应用***能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”,“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取、按需使用、随时扩展、按使用付费。
作为云计算的基础能力提供商,会建立云计算资源池,云计算资源池简称云平台,一般称为IaaS(Infrastructure as a Service,基础设施即服务)平台,在云计算资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作***)、存储设备、网络设备。
按照逻辑功能划分,在IaaS层上可以部署PaaS(Platform as a Service,平台即服务)层,PaaS层之上再部署SaaS(Software as a Service,软件即服务)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、***器等。
图1中所示的合并存储可以是将NLP处理后得到的结果存储至云存储(CloudStorage)中,云存储是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储***(以下简称存储***)是指通过集群应用、网格技术以及分布存储文件***等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储***。
目前,存储***的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件***上,文件***将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity)等额外的信息,文件***将每个对象分别写入该逻辑卷的物理存储空间,且文件***会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件***能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储***为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(Redundant Array of Independent Disk,简称RAID)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
图2示出了可以应用本申请实施例的技术方案的示例性***架构的示意图。
如图2所示,***架构200可以包括终端设备201、管理服务器202、调度器203和执行器204。管理服务器202可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备201可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端设备201以及管理服务器202可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。调度器203用于从管理服务器202获取待执行任务,并调度执行器204处理任务,其中,调度器203和执行器204的数量仅为示意,根据实现需要,可以具有任意数目的调度器203和执行器204。
在本申请的一个实施例中,终端设备201可以显示状态机模板的编辑界面,该编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域,用户可以通过拖拽操作、选择操作等将功能组件选择区域内的功能组件拖拽至模板编排区域,并且对拖拽至模板编排区域的功能组件设置逻辑关系,模板编排区域会显示拖拽至该区域的功能组件及用户针对这些功能组件设置的逻辑关系。状态机模板代码区域内会显示状态机模板代码,该状态机模板代码是根据用户针对拖拽至模板编排区域内的功能组件设置的逻辑关系对这些功能组件分别对应的代码进行编码得到的。需要说明的是,生成状态机模板代码的过程可以是在终端设备201中完成的,也可以是终端设备201将用户拖拽至模板编排区域内的功能组件和针对这些功能组件设置的逻辑关系发送给管理服务器202,由管理服务器202生成并返回给终端设备201进行显示的。
在用户编排结束之后,可以根据状态机模板代码生成状态机模板,然后终端设备201可以将生成的状态机模板发布为待处理任务或包含调用接口的服务,并发送给管理服务器202。
在本申请的一个实施例中,调度器203可以从管理服务器202获取到待处理任务对应的状态机模板,然后发送给选定的执行器204,执行器204在获取到待处理任务对应的状态机模板之后,解析状态机模板得到具有执行顺序的至少一个状态节点,这里的状态节点是与生成状态机模板时选择的功能组件对应的,然后执行器204从起始节点开始依次执行这些状态节点,其中,在执行任意一个状态节点时,根据该状态节点的输入数据执行该状态节点对应的功能,并将该状态节点的输出数据发送给该状态节点的下游节点作为下游节点的输入数据,直至遍历到结束节点时,确定待处理任务处理完成。
可见,图2所示实施例的技术方案使得能够通过可视化拖拽的方式来编排状态机模板,不需要通过写代码的方式调用不同的服务来发布任务或服务,提高了任务或服务的编排生成效率。并且可以通过状态机模板来表征待处理任务,并可以通过解析状态机模板来保证任务按照逻辑顺序正常执行,实现了对待处理任务各个状态的有效控制。
以下对本申请实施例的技术方案的实现细节进行详细阐述:
图3示出了根据本申请的一个实施例的状态机模板的生成方法的流程图,该状态机模板的生成方法可以由具有计算处理功能的设备来执行,比如可以由图2中所示的终端设备201来执行。参照图3所示,该状态机模板的生成方法至少包括步骤S310至步骤S340,详细介绍如下:
在步骤S310中,显示状态机模板的编辑界面,该编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域。
在本申请的一个实施例中,功能组件选择区域用于显示待选择的功能组件,功能组件可以包括流程组件、服务组件、脚本组件等。流程组件用于控制编排流程,比如可以包括选择组件、循环组件、并发组件、成功组件、失败组件等。服务组件用于执行具体业务功能的后台服务,比如人脸识别算法服务、道路交通查询服务等。脚本组件的主体是一段脚本代码(比如python脚本代码),一般用于执行一些简单的功能,如对上下游节点的请求或响应参数进行加工处理等。
需要说明的是,组件提供的服务可以是原子服务,即每个组件仅提供单一功能,并且可以对外提供可调用的接口。
在本申请的一个实施例中,用户也可以注册功能组件,比如用户可以发起针对指定功能组件的注册请求,如果注册成功,那么可以将注册的指定功能组件存储至功能组件列表中,并显示在功能组件选择区域内。
在本申请的一个实施例中,模板编排区域用于显示用户选择的功能组件以及针对功能组件设置的逻辑关系,比如用户可以将功能组件从功能组件选择区域拖拽至模板编排区域,进而模板编排区域可以显示用户拖拽进来的功能组件,并且可以显示用户设置的逻辑关系。该逻辑关系可以是组件之间的先后执行顺序关系、嵌套关系(如循环、选择)等。
在本申请的一个实施例中,状态机模板代码区域用于显示状态机模板代码,该状态机模板代码是根据用户选择的功能组件以及针对功能组件设置的逻辑关系生成的。具体地,每个功能组件都对应有代码,那么可以根据用户针对功能组件设置的逻辑关系将功能组件对应的代码进行编排,以得到状态机模板代码。
在步骤S320中,在模板编排区域内显示从功能组件选择区域内选择并拖拽至模板编排区域内的至少一个功能组件,以及针对至少一个功能组件设置的逻辑关系。
在本申请的一个实施例中,用户在将功能组件从功能组件选择区域拖拽至模板编排区域中之后,可以添加用于表示功能组件之间的逻辑关系(如嵌套、先后执行顺序)的标识(比如带有箭头的曲线等),以此来设置功能组件之间的逻辑关系。可选地,用于表示功能组件之间的逻辑关系的标识可以是预设好的,每种标识用于表征一种逻辑关系,这样可以便于用户通过选择标识来表征对应的逻辑关系。
在步骤S330中,在状态机模板代码区域内显示状态机模板代码,该状态机模板代码是根据至少一个功能组件之间的逻辑关系对至少一个功能组件分别对应的代码进行编排得到的。
在本申请的一个实施例中,生成状态机模板代码的过程可以是在终端设备中完成的,比如终端设备中存储有各个功能组件对应的代码,并且具有代码编排的功能,那么终端设备可以直接根据选择的功能组件及功能组件之间的逻辑关系来进行编排处理。当然,生成状态机模板代码的过程也可以是终端设备将用户拖拽至模板编排区域内的功能组件和针对这些功能组件设置的逻辑关系发送给服务端,由服务端生成并返回给终端设备进行显示的。
在步骤S340中,根据状态机模板代码生成状态机模板,该状态机模板用于发布为待处理任务或包含调用接口的服务。
在本申请的一个实施例中,对于需要在某个时间点执行某个任务的状态机模板,则可以将其发布为待处理任务,那么在相应的时间点即可调度执行器来执行该任务。对于能够作为某个服务的状态机模板,比如可以作为人脸识别服务、语音识别服务、OCR识别服务等的状态机模板,那么可以将其发布为包含有调用接口的服务,以便于被其它程序进行调用。
图3所示实施例的技术方案使得能够通过可视化拖拽的方式来编排状态机模板,不需要通过写代码的方式调用不同的服务来发布任务或服务,提高了任务或服务的编排生成效率。
图4示出了根据本申请的一个实施例的基于状态机的任务处理方法的流程图,该基于状态机的任务处理方法可以由具有计算处理功能的设备来执行,比如可以由图2中所示的执行器204来执行。参照图4所示,该基于状态机的任务处理方法至少包括步骤S410至步骤S440,详细介绍如下:
在步骤S410中,获取待处理任务对应的状态机模板,该状态机模板是根据与待处理任务相关联的至少一个功能组件生成的。
在本申请的一个实施例中,状态机模板的生成过程参照前述实施例的技术方案。简单来说,状态机模板是通过对与待处理任务相关联的至少一个功能组件的代码进行编排之后生成的。
在本申请的一个实施例中,任务执行器获取待处理任务对应的状态机模板的过程可以是先接收任务调度器发送的任务调度指令,该任务调度指令用于对任务列表中存储的指定任务进行调度,然后任务执行器根据该任务调度指令获取待处理任务,并读取对应的状态机模板。
在本申请的一个实施例中,各个任务执行器在启动时可以向任务调度器发送注册请求,该注册请求中可以包含有任务执行器的网络地址。当任务执行器注册成功之后,任务执行器可以周期性地向任务调度器发送心跳消息,该心跳消息中包含有如下至少一个信息:任务执行器的负载情况和任务执行器的存活状态。这些信息可以便于任务调度器选择相应的任务执行器来对待处理任务进行处理,比如任务调度器可以优先调度负载较小的任务执行器来执行任务,并且在根据存活状态确定某个执行器失去连接之后,可以将该执行器处理的任务调度给其它执行器处理。
在本申请的一个实施例中,任务列表可以存储于数据库中,如果有多个任务调度器,那么为了避免一个任务被多个任务调度器重复调度,这多个任务调度器可以通过分布式锁的方式获取针对任务列表的调度权限,进而保证同一时间只有一个任务调度器来访问任务列表,当获取到调度权限的任务调度器调度完成之后,可以释放该分布式锁。
在本申请的一个实施例中,任务列表中存储的任务还可以具有开始时间信息,那么任务调度器可以根据任务列表中各个任务的开始时间确定对任务执行器的调度时机,实现了任务的定时启动执行。
继续参照图4所示,在步骤S420中,解析状态机模板得到具有执行顺序的至少一个状态节点,该状态节点与前述的功能组件一一对应,该至少一个状态节点包含起始节点。
在本申请的一个实施例中,状态节点可以包括:Task节点、Pass节点、Wait节点、Choice节点、Parallel节点、Foreach节点、Success节点、Fail节点等。其中不同的节点对应于不同的功能组件,比如选择组件对应的状态节点即为Choice节点、循环组件对应的状态节点即为Foreach节点、并发组件对应的状态节点即为Parallel节点、成功组件对应的状态节点即为Success节点、失败组件对应的状态节点即为Fail节点、任务组件(或称之为服务组件)对应的状态节点即为Task节点、传递组件对应的状态节点即为Pass节点等。起始节点是状态机模板解析得到的至少一个状态节点中需要最先执行的状态节点。
在步骤S430中,从起始节点开始依次执行至少一个状态节点,其中,对于当前执行的目标状态节点,根据目标状态节点的输入数据执行目标状态节点对应的功能,并将目标状态节点的输出数据发送给目标状态节点的下游节点作为下游节点的输入数据。
在本申请的一个实施例中,如果是任务类型的状态节点,那么在执行任务类型的状态节点时,可以根据任务类型的状态节点中指定字段所指示的组件服务所支持的协议类型,然后将输入数据转换为协议类型对应的数据,得到转换数据,进而通过组件服务所支持的协议将转换数据传送给组件服务,并获取组件服务对转换数据的处理结果,然后基于处理结果生成任务类型的状态节点的输出数据。可选地,任务类型的状态节点中指定字段可以是用于指示需要调用的组件服务的字段,比如该字段可以是“resource”字段。如果需要调用的组件服务支持http的Json协议,那么可以将输入数据转换为Json数据,然后通过HTTP的GET或POST的方式将Json数据传送给组件服务;如果需要调用的组件服务支持http的pb协议(即protobuf,是一种数据传输协议),那么可以将输入数据转换为pb数据,然后通过HTTP请求将pb数据传送给组件服务;如果需要调用的组件服务支持gRPC的pb协议,那么可以将输入数据转换为pb数据,然后通过gRPC连接后将pb数据传送给组件服务。
在本申请的一个实施例中,如果是传递类型的状态节点或任务类型的状态节点,那么这些节点在得到输出数据之后,直接将输出数据发送给下游节点。
在本申请的一个实施例中,如果是循环类型的状态节点,那么在执行循环类型的状态节点时,获取循环类型的状态节点解析得到的循环开始子状态节点、循环体子状态节点和循环结束子状态节点。然后执行循环开始子状态节点,若执行循环开始子状态节点确定满足循环条件,则将循环开始子状态节点的输出数据发送给循环体子状态节点,若确定不满足循环条件,则将循环开始子状态节点的输出数据发送给循环结束子状态节点。而在执行循环体子状态节点之后,直接将循环体子状态节点的输出数据发送给循环结束子状态节点进行处理。在执行循环结束子状态节点时,若确定循环未结束,则将循环结束子状态节点的输出数据发送给循环开始子状态节点,若确定循环结束,则将循环结束子状态节点的输出数据作为循环类型的状态节点的输出数据。
需要说明的是,循环体子状态节点即为循环过程中循环内部的处理过程,其实质上也可以是Task节点、Pass节点、Wait节点、Choice节点、Parallel节点、Foreach节点等。
在本申请的一个实施例中,如果是选择类型的状态节点,那么在执行选择类型的状态节点时,可以获取选择类型的状态节点解析得到的选择开始子状态节点、选择体子状态节点和选择结束子状态节点。然后执行选择开始子状态节点,若执行选择开始子状态节点确定满足选择条件,则将选择开始子状态节点的输出数据发送给选择体子状态节点,若确定不满足选择条件,则将选择开始子状态节点的输出数据发送给选择结束子状态节点。而在执行选择体子状态节点之后,直接将选择体子状态节点的输出数据发送给选择结束子状态节点进行处理。在执行选择结束子状态节点时,将选择结束子状态节点的输出数据作为选择类型的状态节点的输出数据。
需要说明的是,选择体子状态节点即为选择过程中满足条件之后执行的一个处理过程,其实质上也可以是Task节点、Pass节点、Wait节点、Choice节点、Parallel节点、Foreach节点等。
在本申请的一个实施例中,如果是并行类型的状态节点,那么在执行并行类型的状态节点时,可以获取并行类型的状态节点解析得到的并行开始子状态节点、并行处理子状态节点和并行结束子状态节点。然后执行并行开始子状态节点,将并行开始子状态节点的输出数据发送给并行处理子状态节点,在执行并行处理子状态节点之后,将并行处理子状态节点的输出数据发送给并行结束子状态节点进行处理。在执行并行结束子状态节点时,对并行处理子状态节点的输出数据进行整合,然后将整合得到的数据作为并行类型的状态节点的输出数据。
需要说明的是,并行处理子状态节点即为并行处理的几个节点,其实质上也可以是Task节点、Pass节点、Wait节点、Choice节点、Parallel节点、Foreach节点等。
继续参照图4所示,在步骤S440中,在目标状态节点为结束节点时,确定待处理任务处理完成。
在本申请的一个实施例中,如果当前执行的目标状态节点没有下游节点,或者当前执行的目标状态节点为成功状态节点或失败状态节点,则可以确定目标状态节点为结束节点。
图4所示实施例的技术方案可以通过状态机模板来表征待处理任务,并可以通过解析状态机模板来保证任务按照逻辑顺序正常执行,实现了对待处理任务各个状态的有效控制。
以下结合图5至图对本申请实施例的技术方案的实现细节进行详细阐述:
如图5所示,在本申请的一个实施例中,状态机模板的编辑界面中包含有功能组件选择区域501、模板编排区域502和状态机模板代码区域503。功能组件选择区域501中显示有可拖拽的组件列表,当将功能组件拖拽至模板编排区域502中之后,可以点击刷新按钮505,进而会根据模板编排区域502中编排的流程图生成状态机模板代码,并显示在状态机模板代码区域503内。当然,在本申请的其它实施例中,也可以自动刷新来生成状态机模板代码,比如可以按照预定周期进行刷新,或者只要模板编排区域502中的流程图发生变化,就自动更新状态机模板代码区域503内的代码。
继续参照图5所示,编辑界面上还包含有功能选项区域506,该区域中包含有组件管理选项、模板管理选项、服务管理选项和任务管理选项。其中,组件管理用来集成各类可调用的功能组件,丰富编排引擎的能力,功能组件可以看作是一个Web服务接口、一个算法服务的接口等。因此组件管理主要存储组件的协议、参数和调用方式等信息。在状态机模板中,Task节点会调用其它的组件,在这种情况下可以在Task节点对应的代码中使用resource字段来唯一描述一个执行任务。一个示例如下:“resource:sdk:json:qcloud:ocr:GeneralAccurateOCR”,该组件可以由接口录入,也在***页面上填写相应信息进行导入。
模版管理的核心功能是对状态机模版进行编排,前端支持拖拽或直接编写状态流程语言,建立模版后就可以选择相应模版创建任务或服务。编排后的状态机模板通过界面上的按钮504进行发布或保存,其中,可以将状态机模板发布为任务或者服务,因此就有了任务管理和服务管理。
任务管理用于管理发布的任务(该任务可以是分布式任务),其可以长时间运行,并且在执行器发送故障时,可以将任务调度到其它执行器继续运行。服务管理用于管理发布的服务,这些服务可以当作是一个Web服务,并可以通过API(Application ProgrammingInterface,应用程序接口)直接调用。
在本申请的一个实施例中,图5所示的界面对应的***架构如图6所示,主要包括:API网关601、编排***602、周边***603、存储***604。API网关601用于提供API接口与其它应用进行交互。编排***602主要用于实现状态机模板的生成、任务或服务的发布,以及由调度器调度执行器来处理任务或服务。周边***603可以向编排***602提供IoT(Internet of Things,物联网)设备信息、算法服务、数据服务、订阅服务等。存储***604可以实现各种存储服务,比如TKE(Tencent Kubernetes Engine,腾讯云容器服务)、MySQL、Redis、COS(Chip Operating System,片内操作***)、ELK(Elasticsearch(一种搜索服务器)、Logstash(应用程序日志、事件的传输、处理、管理和搜索的平台)、Kibana(一个开源的分析和可视化平台))等。
基于上述***架构,如图7所示为根据本申请的一个实施例的组件注册、编排的流程图,包括如下步骤:
步骤S701,用户向组件服务发起注册请求。其中组件服务可以是组件管理对应的服务。具体地,用户可以在计算机上发起针对某个组件的注册请求,该注册请求中包含有用户需要注册的组件信息。
在本申请的一个实施例中,组件可以包括流程组件、服务组件、脚本组件等。流程组件用于控制编排流程,比如可以包括选择组件、循环组件、并发组件、成功组件、失败组件等。脚本组件的主体是一段脚本代码(比如python脚本代码),一般用于执行一些简单的功能,如对上下游节点的请求或响应参数进行加工处理等。服务组件用于执行具体业务功能的后台服务,比如人脸识别算法服务、道路交通查询服务等。如果用户注册的是服务组件,那么服务组件必须提供http或grpc的接口,在进行注册时,需要提供服务名、接口URI(Uniform Resource Identifier,统一资源标识符)、请求响应参数描述、调用协议(比如http、grpc等,如果协议为grpc需提供protobuf的协议内容)、请求数据格式(比如json、pb等)、调用方式(比如GET、POST等)、调用地址等信息。
步骤S702,组件服务向用户返回注册结果。
在本申请的一个实施例中,如果组件服务确定注册成功,那么向用户返回注册成功的结果;如果注册失败,那么向用户返回注册失败的结果。需要说明的是步骤S702是可选步骤,在本申请的其它实施例中,也可以不向用户返回注册结果。
步骤S703,组件服务从Web控制台获取组件列表。
在本申请的一个实施例中,组件服务从Web控制台获取组件列表之后,可以显示在界面上供用户选择。具体地,后台可以提供组件列表接口给到前端用户页面。
步骤S704,用户拖拽编排组件,生成模板代码。
在本申请的一个实施例中,用户可以在组件列表中选择需要的组件,并拖拽至模板编排区域中进行编排处理,在这个过程中,***会生成对应的状态机模板代码。
在本申请的一个实施例中,对于流程组件而言,在拖拽时可以直接根据语法生成代码,比如并发组件(parallel)对应生成的代码如图8A所示,其中,图8A中的代码段801a表示组件类型为“并发”类型;代码段802a表示并发组件中分支节点的名称;代码段803a表示罗列分支节点;代码段804a表示执行一个步骤,在该步骤中执行一个类型为“task”的节点,该节点是分支节点1的第1个节点;代码段805a表示执行一个步骤,在该步骤中执行一个类型为“task”的节点,该节点是分支节点2的第1个节点。
其它的流程组件,比如循环(foreach)、选择(choice)、成功(success)及失败(fail)也一样,也可直接根据约定语法进行生成。
在本申请的一个实施例中,服务组件和脚本组件本意都是执行一个具体任务,所以在可以将其描述为task类型,并通过组件服务返回的组件接口调用信息生成包含五段式的resource描述节点。具体如图8B所示,其中,图8B中的代码段801b表示组件类型为“task”类型;代码段802b表示任务名称是“人脸属性识别服务”;代码段803b通过“resource”字段来唯一描述一个执行任务,“resource”字段后面的内容为需要调用的执行任务的接口信息;代码段804b表示通过inputMappings进行输入数据的映射,即将源数据(即source,也即输入数据)映射为目标数据(即target),然后传递给“resource”字段所描述的执行任务;代码段805b表示通过outputMappings进行输出数据的映射,即将源数据(即source,也即“resource”字段所描述的执行任务所输出的数据)映射为目标数据(即target),然后传递给下游节点。
需要说明的是,本申请的实施例不对状态机模版的描述语言和语法进行限定,比如可以把上述同样的task表示成图8C所示的Json语法的形式,也一样可以达到模版状态机描述目的。如图8C所示,代码段801c表示定义一个名称为“face-attribute(人脸属性)”的函数;代码段802c为函数体部分,其中定义了类型(Type)为“task”、注释(Comment)为“人脸属性识别服务”,并且通过“resource”字段来唯一描述一个执行任务,“resource”字段后面的内容为需要调用的执行任务的接口信息。
因此在具体实现时,可以根据场景需要不同的描述语言和语法。
继续参照图7:
步骤S705,Web控制台向模板服务发送保存状态机模板的指令。
在本申请的一个实施例中,如果用户编排结束,并选择保存或发布状态机模板,那么可以通过模板服务保存状态机模板。其中,模板服务可以是模板管理对应的服务。
步骤S706,Web控制台向用户返回处理结果。具体可以向用户返回保存状态机模板成功或失败的结果。需要说明的是步骤S706是可选步骤,在本申请的其它实施例中,也可以不向用户返回结果。
图5和图8D分别示出了两个状态机模板的示例,以下分别进行说明:
如图5所示,模板编排区域502内的组件都是服务组件和脚本组件,各组件的执行顺序是按照箭头从上到下,那么在状态机模板代码区域503中也依次显示各组件对应的代码。即依次显示task任务“机动车监控设备”对应的代码5051、“创建抓拍库1”对应的代码5052、“中台版人车检测跟踪服务1”对应的代码5053、“车辆属性识别请求组包”对应的代码5054、“机动车属性识别服务”对应的代码5055、“车辆属性识别结果处理”对应的代码5056和“车辆告警”对应的代码5057。其中,在图5中,代码段5058中的“version”表示版本号;“timeout”表示期望在给定时间内返回结果;“vars”用于定义变量;“steps”表示开始执行下面的步骤。其它各个代码段的描述可参照前述针对图8A和图8B部分的说明,其中前面未进行说明的代码段“desc”表示描述信息。
如图8D所示,模板编排区域内不仅包含有task类型的组件(即脚本组件和服务组件)而且还包含流程组件,即循环(foreach)组件,循环组件的主体内又包含有task类型的组件,即“人脸识别”、“人体信息识别”组件。那么状态机模板代码区域内显示的代码是根据组件的逻辑关系对各组件对应的代码进行编排得到的。具体,先显示task任务“图片流”对应的代码801d,然后显示foreach任务对应的代码802d,最后显示task任务“存储组件”对应的代码803d。其中,在foreach任务对应的代码802d中的“iterationMapping”定义了将每次循环的结果进行合并处理,同时在代码802d中的循环体中还定义了两个“task”类型的任务“人脸识别”和“人体信息识别”。其它各个代码段的描述可参照前述针对图5、图8A和图8B部分的说明。
“车辆属性识别请求组包”对应的代码5054、“机动车属性识别服务”对应的代码5055、“车辆属性识别结果处理”对应的代码5056和“车辆告警”对应的代码5057。其中,在图5中,代码段5058中的“version”表示版本号;“timeout”表示期望在给定时间内返回结果;“vars”用于定义变量;“steps”表示开始执行下面的步骤。其它各个代码段的描述可参照前述针对图8A和图8B部分的说明,其中前面未进行说明的代码段“desc”表示降序排序。
在本申请的一个实施例中,当对状态机模板进行编排之后,可以将状态机模板发布为任务或服务,图9所示为发布的任务列表,该列表中可以显示对应任务的相关信息,比如任务描述、对应的状态机模板、修改人、修改时间、任务状态、操作信息(比如可以暂停、删除、启动任务,实现了对任务的有效控制)等。
在本申请的一个实施例中,当需要启动任务列表中的某个任务时,任务会被调度器调度到执行器(即执行引擎)中进行执行。如图10所示,为了保证调度器对执行器的有效调度,执行器在启动时,需要将自己的IP等信息注册到调度器,直到注册成功后调度器才可能给它分配任务执行。在注册成功之后,执行器可以周期性(如15秒为一个周期)向调度器发送心跳消息,以向调度器告知自己的存活情况和当前的负载情况。调度器会存储执行器的IP、当前负载值、执行器注册时间、执行器最后心跳时间、执行器存活状态等,如下表1,其中存活状态为“0”可以表示已断开连接,存活状态为“1”可以表示还处于连接状态。当然,也可以用存活状态为“1”表示已断开连接,存活状态为“0”表示还处于连接状态。
表1
在本申请的一个实施例中,如果某个执行器连续有3次(数值仅为示例)心跳失败,相当于执行器和调度器失联,此时执行器内部会停止执行;而调度器没有收到执行器的心跳,则会将当前执行器的任务重新调度分配给其它执行器继续执行,由此保证任务的及时处理,避免任务中断。具体如图10所示,如果执行任务A和任务B的执行器失联,那么调度器会将任务A和任务B调度给其它的执行器进行处理。
在本申请的一个实施例中,为了实现调度器的高可用性,可以同时启动多个调度器同时运行。但是为了防止同一个任务被多个调度器同时重复调度,如图10所示,可以引入Redis进行分布式锁操作。具体地,调度器在需要进行调度时,需要先抢到分布式锁,确保此刻只有一个调度器能够获取到调度权限,然后再从MySQL中加载最新的待调度任务列表来进行调度,当调度完成之后再释放分布式锁。具体流程如图11所示,包括如下步骤:
步骤S1101,调度器的守护线程向Redis抢分布式锁。
在本申请的一个实施例中,调度器可以判断待执行任务是否需要立刻调度执行,如果是则进行调度,否则等待调度器的守护线程轮询任务列表判断满足执行条件后进行调度。具体地,守护线程默认每5秒(数值仅为示例)扫描一次。除了实时调度外,定时调度的判断条件则为判断任务开始时间是否大于当前时间;周期性调度任务的判断条件是判断当前时刻是否为任务需要执行的时间段。
步骤S1102,调度器成功获取到分布式锁。
步骤S1103,调度器从MySQL中获取任务列表。
步骤S1104,MySQL向调度器返回任务列表。
步骤S1105,调度器调度执行器执行任务。
在本申请的一个实施例中,调度器通过执行器发送的心跳消息可以知道当前存在几个可用的执行器以及它们的负载情况,然后将满足调度条件的任务调度到负载值较低的执行器进行执行。
步骤S1106,执行器向调度器返回调度情况。
步骤S1107,调度器向MySQL中更新任务的调度状态。
步骤S1108,调度器完成调度后向Redis发送释放分布式锁的信息。
步骤S1109,Redis向调度器返回释放完成的状态。该步骤为可选步骤,在本申请的其它实施例中,Redis也可以不向调度器返回释放完成的状态信息。
需要说明的是,除了采用Redis分布式锁的方式之外,本申请的实施例也可以采用zookeeper(是一个开放源码的分布式应用程序协调服务)等其它方式来保证同一时间仅有一个调度器获取到调取权限。并且存储任务列表的数据库也可以是其它类型的数据库。
在本申请的一个实施例中,执行器的执行过程如图12所示,具体包括如下步骤:
步骤S1201,调度器向执行器发送调度指令。
步骤S1202,执行器向调度器发送心跳消息,同步任务状态和负载情况等。需要说明的是,该步骤可以是一直进行的。
步骤S1203,执行器从模板服务中获取任务的状态机模板。
步骤S1204,模板服务向执行器返回状态机模板。
步骤S1205,执行器解析状态机模板。
在本申请的一个实施例中,执行器解析的主要工作是解析状态机模版的每一个状态节点到内存数据结构,可以用Node结构表示一个状态节点的信息。解析过程最关键的是找到模版状态机的起始节点,以及数据结构中每个节点的下游节点数组。需要说明的是,下游节点数组中可能只包含有一个下游节点,但是也可能包含多个下游节点(比如下游节点是多个并行类型的节点)。
步骤S1206,执行器获取模板依赖的组件接口描述。
步骤S1207,组件服务返回调度情况。
步骤S1208,执行器执行状态机,完成任务的执行。
在本申请的一个实施例中,执行器的主要工作流程是:获取状态机模板和当前状态节点。起始节点即为初始步骤,每个节点都是接收输入数据执行当前状态后,更新任务状态,并发送给下游节点。具体流程如图13所示,主要包括如下步骤:
步骤S1301,接收输入数据。
步骤S1302,检查任务状态。
步骤S1303,输入映射。
在本申请的一个实施例中,输入映射用于处理inputMappings的逻辑,即将输入的Json数据通过inputMappings的JsonPath描述组装成目标Json,然后传递给当前状态的run()方法运行。
步骤S1304,执行run()。
在本申请的一个实施例中,只有task类型的节点才需要执行run()方法。这个方法会根据task的resource字段描述的组件服务获取组件的协议和调用信息,然后组装请求进行调用。
其中,如果resource字段描述的组件服务支持http的Json协议,则将inputMappings组装好的Json数据通过HTTP的GET或POST的方式请求组件服务;如果resource字段描述的组件服务支持http的pb协议,则需要将组装好的Json数据转成pb数据后再进行HTTP请求;如果resource字段描述的组件服务支持grpc的pb协议,则需要将组装好的Json数据转成pb数据后,通过grpc连接后进行数据发送。
步骤S1305,输出映射。
在本申请的一个实施例中,输出映射用于处理outputMappings的逻辑,将run()方法返回的Json通过outputMappings的JsonPath描述组装成目标Json,在更新任务状态和步骤信息后,传递给下游状态节点。
步骤S1306,更新步骤。
步骤S1307,发送给下游节点,然后由下游节点执行步骤S1301。
在本申请的一个实施例中,将数据发送给下游节点时有不同的情况,对于task节点或pass节点,在处理完之后直接发送给下一个节点即可。
如果是循环类型的状态节点,那么在解析时,会构造出一个foreach-start状态节点和一个foreach-end状态节点,那么循环状态里面的步骤就可以放在它们中间,这样就可以用start和end来控制流程。具体如图14所示,foreach-start状态节点的逻辑是判断循环条件是否满足,满足则将数据发给foreach里面的状态节点,不满足则发送到foreach-end状态节点。foreach里面的状态节点全部执行完成之后,会把数据发送给foreach-end状态节点,foreach-end状态节点的逻辑是判断循环是否结束,如果结束则发送给foreach的下游状态节点,否则发送给foreach-start状态节点。
如果是选择类型的状态节点,那么在解析时,会构造出一个choice-start状态节点和一个choice-end状态节点,那么选择状态里面的步骤就可以放在它们中间,这样就可以用start和end来控制流程。具体如图15所示,choice-start状态节点的逻辑是判断是否满足选择条件,满足则将数据发送给choice里面的状态节点;若不满足,则将数据直接发送给choice-end状态节点。choice里面的状态节点全部执行完成之后,会把数据发送给choice-end状态节点,choice-end比较简单,直接将数据传给choice的下游状态节点。
如果是并行类型的状态节点,那么在解析时,会构造出一个parallel-start状态节点和一个parallel-end状态节点,那么并行状态里面的步骤就可以放在它们中间,这样就可以用start和end来控制流程。具体如图16所示,parallel-start状态节点的逻辑是将数据分发给多个parallel里面的状态节点。parallel里面的状态节点全部执行完成之后,会把数据发送给parallel-end状态节点,parallel-end状态节点的逻辑则是等待多路数据完成后合并成数组,然后发给parallel的下游状态节点。
如果是success状态节点或fail状态节点,则不需要发送给下游状态节点,直接标记任务状态为成功或失败后。
如果走到最后一个状态节点,也就是没有下游节点的节点,则不需要发送给下游状态节点,直接标记任务成功完成。
本申请上述实施例的技术方案使得可以通过拖拽原子服务组件来完成不同业务流程的状态机模板,不需要通过写代码调用不同服务来完成这个过程,提高了任务或服务的编排生成效率。同时发布的任务支持定时启动执行、周期性的执行,而且任务可以被调度到不同的执行器去执行,保证了分布式的横向扩展性。此外,可以通过解析状态机模板来保证任务按照逻辑顺序正常执行,实现了对待处理任务各个状态的有效控制。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的基于状态机的任务处理方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的基于状态机的任务处理方法的实施例。
图17示出了根据本申请的一个实施例的基于状态机的任务处理装置的框图,该基于状态机的任务处理装置可以设置在具有计算处理功能的设备内,比如可以设置在图2中所示的执行器204内。
参照图17所示,根据本申请的一个实施例的基于状态机的任务处理装置1700,包括:获取单元1702、解析单元1704、处理单元1706和确定单元1708。
其中,获取单元1702配置为获取待处理任务对应的状态机模板,所述状态机模板是根据与所述待处理任务相关联的至少一个功能组件生成的;解析单元1704配置为解析所述状态机模板得到具有执行顺序的至少一个状态节点,所述状态节点与所述功能组件一一对应,所述至少一个状态节点包含起始节点;处理单元1706配置为从所述起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,并将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据;确定单元1708配置为在所述目标状态节点为结束节点时,确定所述待处理任务处理完成。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括任务类型的状态节点;处理单元1706配置为:在执行所述任务类型的状态节点时,根据所述任务类型的状态节点中指定字段所指示的组件服务所支持的协议类型,将所述输入数据转换为所述协议类型对应的数据,得到转换数据;通过所述组件服务所支持的协议将所述转换数据传送给所述组件服务,并获取所述组件服务对所述转换数据的处理结果;基于所述处理结果生成所述任务类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,处理单元1706配置为:若所述目标状态节点是传递类型的状态节点或任务类型的状态节点,则直接将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括循环类型的状态节点;处理单元1706配置为:在执行循环类型的状态节点时,获取所述循环类型的状态节点解析得到的循环开始子状态节点、循环体子状态节点和循环结束子状态节点;若执行所述循环开始子状态节点确定满足循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环体子状态节点,若确定不满足所述循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环结束子状态节点;在执行所述循环体子状态节点之后,将所述循环体子状态节点的输出数据发送给所述循环结束子状态节点进行处理;若执行所述循环结束子状态节点确定循环未结束,将所述循环结束子状态节点的输出数据发送给所述循环开始子状态节点,若确定循环结束,则将所述循环结束子状态节点的输出数据作为所述循环类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括选择类型的状态节点;处理单元1706配置为:在执行选择类型的状态节点时,获取所述选择类型的状态节点解析得到的选择开始子状态节点、选择体子状态节点和选择结束子状态节点;若执行所述选择开始子状态节点确定满足选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择体子状态节点,若确定不满足所述选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择结束子状态节点;在执行所述选择体子状态节点之后,将所述选择体子状态节点的输出数据发送给所述选择结束子状态节点进行处理;执行所述选择结束子状态节点,将所述选择结束子状态节点的输出数据作为所述选择类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,所述至少一个状态节点包括并行类型的状态节点;处理单元1706配置为:在执行并行类型的状态节点时,获取所述并行类型的状态节点解析得到的并行开始子状态节点、并行处理子状态节点和并行结束子状态节点;执行所述并行开始子状态节点,将所述并行开始子状态节点的输出数据发送给所述并行处理子状态节点;在执行所述并行处理子状态节点之后,将所述并行处理子状态节点的输出数据发送给所述并行结束子状态节点进行处理;执行所述并行结束子状态节点以对所述并行处理子状态节点的输出数据进行整合,将整合得到的数据作为所述并行类型的状态节点的输出数据。
在本申请的一些实施例中,基于前述方案,若所述目标状态节点没有下游节点,或者所述目标状态节点为成功状态节点或失败状态节点,则确定所述目标状态节点为所述结束节点。
在本申请的一些实施例中,基于前述方案,获取单元1702还配置为:在获取待处理任务对应的状态机模板之前,接收任务调度器发送的任务调度指令,所述任务调度指令用于对任务列表中存储的指定任务进行调度,根据所述任务调度指令获取所述待处理任务。
在本申请的一些实施例中,基于前述方案,所述基于状态机的任务处理装置1700还包括:发送单元,配置为在所述获取单元接收任务调度器发送的任务调度指令之前,向所述任务调度器发送注册请求,所述注册请求中包含有本任务执行器的网络地址,在向所述任务调度器注册成功之后,周期性向所述任务调度器发送心跳消息,所述心跳消息中包含有如下至少一个信息:本任务执行器的负载情况和本任务执行器的存活状态。
在本申请的一些实施例中,基于前述方案,所述任务列表存储于数据库中,在有多个任务调度器的情况下,所述多个任务调度器通过分布式锁的方式获取针对所述任务列表的调度权限;所述任务列表中存储的任务具有开始时间信息,所述任务调度器在访问所述任务列表时,根据所述任务列表中各个任务的开始时间确定对任务执行器的调度时机。
图18示出了根据本申请的一个实施例的状态机模板的生成装置的框图,该状态机模板的生成装置可以设置在具有计算处理功能的设备内,比如可以设置在图2中所示的终端设备201内。
参照图18所示,根据本申请的一个实施例的状态机模板的生成装置1800,包括:第一显示单元1802、第二显示单元1804、第三显示单元1806和生成单元1808。
其中,第一显示单元1802配置为显示状态机模板的编辑界面,所述编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域;第二显示单元1804配置为在所述模板编排区域内显示从所述功能组件选择区域内选择并拖拽至所述模板编排区域内的至少一个功能组件,以及针对所述至少一个功能组件设置的逻辑关系;第三显示单元1806配置为在所述状态机模板代码区域内显示状态机模板代码,所述状态机模板代码是根据所述至少一个功能组件之间的逻辑关系对所述至少一个功能组件分别对应的代码进行编排得到的;生成单元1808配置为根据所述状态机模板代码生成状态机模板,所述状态机模板用于发布为待处理任务或包含调用接口的服务。
在本申请的一些实施例中,基于前述方案,所述的状态机模板的生成装置1800还包括:接收单元,配置为接收功能组件的注册请求,所述注册请求用于注册指定功能组件;存储单元,配置为将所述指定功能组件存储至功能组件列表中,并显示在所述功能组件选择区域内。
图19示出了适于用来实现本申请实施例的电子设备的计算机***的结构示意图。
需要说明的是,图19示出的电子设备的计算机***1900仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图19所示,计算机***1900包括中央处理单元(Central Processing Unit,CPU)1901,其可以根据存储在只读存储器(Read-Only Memory,ROM)1902中的程序或者从存储部分1908加载到随机访问存储器(Random Access Memory,RAM)1903中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1903中,还存储有***操作所需的各种程序和数据。CPU 1901、ROM 1902以及RAM 1903通过总线1904彼此相连。输入/输出(Input/Output,I/O)接口1905也连接至总线1904。
以下部件连接至I/O接口1905:包括键盘、鼠标等的输入部分1906;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1907;包括硬盘等的存储部分1908;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1909。通信部分1909经由诸如因特网的网络执行通信处理。驱动器1910也根据需要连接至I/O接口1905。可拆卸介质1911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1910上,以便于从其上读出的计算机程序根据需要被安装入存储部分1908。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1909从网络上被下载和安装,和/或从可拆卸介质1911被安装。在该计算机程序被中央处理单元(CPU)1901执行时,执行本申请的***中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (15)
1.一种基于状态机的任务处理方法,其特征在于,包括:
获取待处理任务对应的状态机模板,所述状态机模板是根据与所述待处理任务相关联的至少一个功能组件生成的;
解析所述状态机模板得到具有执行顺序的至少一个状态节点,所述状态节点与所述功能组件一一对应,所述至少一个状态节点包含起始节点;
从所述起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,并将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据;
在所述目标状态节点为结束节点时,确定所述待处理任务处理完成。
2.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,所述至少一个状态节点包括任务类型的状态节点;
对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,包括:
在执行所述任务类型的状态节点时,根据所述任务类型的状态节点中指定字段所指示的组件服务所支持的协议类型,将所述输入数据转换为所述协议类型对应的数据,得到转换数据;
通过所述组件服务所支持的协议将所述转换数据传送给所述组件服务,并获取所述组件服务对所述转换数据的处理结果;
基于所述处理结果生成所述任务类型的状态节点的输出数据。
3.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据,包括:
若所述目标状态节点是传递类型的状态节点或任务类型的状态节点,则直接将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点。
4.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,所述至少一个状态节点包括循环类型的状态节点;
对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,包括:
在执行循环类型的状态节点时,获取所述循环类型的状态节点解析得到的循环开始子状态节点、循环体子状态节点和循环结束子状态节点;
若执行所述循环开始子状态节点确定满足循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环体子状态节点,若确定不满足所述循环条件,则将所述循环开始子状态节点的输出数据发送给所述循环结束子状态节点;
在执行所述循环体子状态节点之后,将所述循环体子状态节点的输出数据发送给所述循环结束子状态节点进行处理;
若执行所述循环结束子状态节点确定循环未结束,将所述循环结束子状态节点的输出数据发送给所述循环开始子状态节点,若确定循环结束,则将所述循环结束子状态节点的输出数据作为所述循环类型的状态节点的输出数据。
5.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,所述至少一个状态节点包括选择类型的状态节点;
对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,包括:
在执行选择类型的状态节点时,获取所述选择类型的状态节点解析得到的选择开始子状态节点、选择体子状态节点和选择结束子状态节点;
若执行所述选择开始子状态节点确定满足选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择体子状态节点,若确定不满足所述选择条件,则将所述选择开始子状态节点的输出数据发送给所述选择结束子状态节点;
在执行所述选择体子状态节点之后,将所述选择体子状态节点的输出数据发送给所述选择结束子状态节点进行处理;
执行所述选择结束子状态节点,将所述选择结束子状态节点的输出数据作为所述选择类型的状态节点的输出数据。
6.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,所述至少一个状态节点包括并行类型的状态节点;
对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,包括:
在执行并行类型的状态节点时,获取所述并行类型的状态节点解析得到的并行开始子状态节点、并行处理子状态节点和并行结束子状态节点;
执行所述并行开始子状态节点,将所述并行开始子状态节点的输出数据发送给所述并行处理子状态节点;
在执行所述并行处理子状态节点之后,将所述并行处理子状态节点的输出数据发送给所述并行结束子状态节点进行处理;
执行所述并行结束子状态节点以对所述并行处理子状态节点的输出数据进行整合,将整合得到的数据作为所述并行类型的状态节点的输出数据。
7.根据权利要求1所述的基于状态机的任务处理方法,其特征在于,若所述目标状态节点没有下游节点,或者所述目标状态节点为成功状态节点或失败状态节点,则确定所述目标状态节点为所述结束节点。
8.根据权利要求1至7中任一项所述的基于状态机的任务处理方法,其特征在于,在获取待处理任务对应的状态机模板之前,所述方法还包括:
接收任务调度器发送的任务调度指令,所述任务调度指令用于对任务列表中存储的指定任务进行调度;
根据所述任务调度指令确定所述待处理任务。
9.根据权利要求8所述的基于状态机的任务处理方法,其特征在于,在接收任务调度器发送的任务调度指令之前,所述方法还包括:
向所述任务调度器发送注册请求,所述注册请求中包含有本任务执行器的网络地址;
在向所述任务调度器注册成功之后,周期性向所述任务调度器发送心跳消息,所述心跳消息中包含有如下至少一个信息:本任务执行器的负载情况和本任务执行器的存活状态。
10.根据权利要求8所述的基于状态机的任务处理方法,其特征在于,所述任务列表存储于数据库中,在有多个任务调度器的情况下,所述多个任务调度器通过分布式锁的方式获取针对所述任务列表的调度权限;
所述任务列表中存储的任务具有开始时间信息,所述任务调度器在访问所述任务列表时,根据所述任务列表中各个任务的开始时间确定对任务执行器的调度时机。
11.一种状态机模板的生成方法,其特征在于,包括:
显示状态机模板的编辑界面,所述编辑界面上包含有功能组件选择区域、模板编排区域和状态机模板代码区域;
在所述模板编排区域内显示从所述功能组件选择区域内选择并拖拽至所述模板编排区域内的至少一个功能组件,以及针对所述至少一个功能组件设置的逻辑关系;
在所述状态机模板代码区域内显示状态机模板代码,所述状态机模板代码是根据所述至少一个功能组件之间的逻辑关系对所述至少一个功能组件分别对应的代码进行编排得到的;
根据所述状态机模板代码生成状态机模板,所述状态机模板用于发布为待处理任务或包含调用接口的服务。
12.根据权利要求11所述的状态机模板的生成方法,其特征在于,还包括:
接收功能组件的注册请求,所述注册请求用于注册指定功能组件;
将所述指定功能组件存储至功能组件列表中,并显示在所述功能组件选择区域内。
13.一种基于状态机的任务处理装置,其特征在于,包括:
获取单元,配置为获取待处理任务对应的状态机模板,所述状态机模板是根据与所述待处理任务相关联的至少一个功能组件生成的;
解析单元,配置为解析所述状态机模板得到具有执行顺序的至少一个状态节点,所述状态节点与所述功能组件一一对应,所述至少一个状态节点包含起始节点;
处理单元,配置为从所述起始节点开始依次执行所述至少一个状态节点,其中,对于当前执行的目标状态节点,根据所述目标状态节点的输入数据执行所述目标状态节点对应的功能,并将所述目标状态节点的输出数据发送给所述目标状态节点的下游节点作为所述下游节点的输入数据;
确定单元,配置为在所述目标状态节点为结束节点时,确定所述待处理任务处理完成。
14.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至10中任一项所述的基于状态机的任务处理方法,或实现如权利要求11至12中任一项所述的状态机模板的生成方法。
15.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1至10中任一项所述的基于状态机的任务处理方法,或实现如权利要求11至12中任一项所述的状态机模板的生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010827095.XA CN112051993B (zh) | 2020-08-17 | 2020-08-17 | 状态机模板的生成及任务处理方法、装置、介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010827095.XA CN112051993B (zh) | 2020-08-17 | 2020-08-17 | 状态机模板的生成及任务处理方法、装置、介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112051993A true CN112051993A (zh) | 2020-12-08 |
CN112051993B CN112051993B (zh) | 2023-10-24 |
Family
ID=73600473
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010827095.XA Active CN112051993B (zh) | 2020-08-17 | 2020-08-17 | 状态机模板的生成及任务处理方法、装置、介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112051993B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631696A (zh) * | 2020-12-29 | 2021-04-09 | 智慧神州(北京)科技有限公司 | 服务的编排方法、编排装置、处理器与服务的编排*** |
CN112766750A (zh) * | 2021-01-25 | 2021-05-07 | 中国原子能科学研究院 | 任务模型的构建方法及*** |
CN112800741A (zh) * | 2021-01-29 | 2021-05-14 | 远光软件股份有限公司 | 任务执行方法、电子设备及存储介质 |
CN112804334A (zh) * | 2021-01-15 | 2021-05-14 | 京东方科技集团股份有限公司 | 分发及获取任务的方法、装置、存储介质、电子设备 |
CN113282355A (zh) * | 2021-05-18 | 2021-08-20 | Oppo广东移动通信有限公司 | 基于状态机的指令执行方法、装置、终端及存储介质 |
CN113312202A (zh) * | 2021-07-29 | 2021-08-27 | 太平金融科技服务(上海)有限公司 | 基于组件的故障处理逻辑生成方法、装置、设备和介质 |
CN114518908A (zh) * | 2022-02-17 | 2022-05-20 | 杭州网易云音乐科技有限公司 | 服务编排方法、介质、装置和计算设备 |
WO2022217939A1 (zh) * | 2021-04-17 | 2022-10-20 | 华为技术有限公司 | 驾驶控制指令生成方法、异构计算方法、相关装置及*** |
CN116450101A (zh) * | 2023-04-27 | 2023-07-18 | 睿珀智能科技有限公司 | 软件架构设计方法、***及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334545A (zh) * | 2017-12-27 | 2018-07-27 | 微梦创科网络科技(中国)有限公司 | 一种实现异步服务的方法及装置 |
GB201821182D0 (en) * | 2018-12-21 | 2019-02-06 | Imagination Tech Ltd | Scheduling tasks in a processor |
CN110728519A (zh) * | 2019-09-27 | 2020-01-24 | 支付宝(杭州)信息技术有限公司 | 拒付任务的处理方法、装置和服务器 |
CN110765099A (zh) * | 2019-09-06 | 2020-02-07 | 阿里巴巴集团控股有限公司 | 一种业务构建方法、装置及计算机设备 |
-
2020
- 2020-08-17 CN CN202010827095.XA patent/CN112051993B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108334545A (zh) * | 2017-12-27 | 2018-07-27 | 微梦创科网络科技(中国)有限公司 | 一种实现异步服务的方法及装置 |
GB201821182D0 (en) * | 2018-12-21 | 2019-02-06 | Imagination Tech Ltd | Scheduling tasks in a processor |
CN110765099A (zh) * | 2019-09-06 | 2020-02-07 | 阿里巴巴集团控股有限公司 | 一种业务构建方法、装置及计算机设备 |
CN110728519A (zh) * | 2019-09-27 | 2020-01-24 | 支付宝(杭州)信息技术有限公司 | 拒付任务的处理方法、装置和服务器 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631696A (zh) * | 2020-12-29 | 2021-04-09 | 智慧神州(北京)科技有限公司 | 服务的编排方法、编排装置、处理器与服务的编排*** |
CN112631696B (zh) * | 2020-12-29 | 2021-10-22 | 智慧神州(北京)科技有限公司 | 服务的编排方法、编排装置、处理器与服务的编排*** |
CN112804334A (zh) * | 2021-01-15 | 2021-05-14 | 京东方科技集团股份有限公司 | 分发及获取任务的方法、装置、存储介质、电子设备 |
CN112766750A (zh) * | 2021-01-25 | 2021-05-07 | 中国原子能科学研究院 | 任务模型的构建方法及*** |
CN112766750B (zh) * | 2021-01-25 | 2024-05-31 | 中国原子能科学研究院 | 任务模型的构建方法及*** |
CN112800741A (zh) * | 2021-01-29 | 2021-05-14 | 远光软件股份有限公司 | 任务执行方法、电子设备及存储介质 |
WO2022217939A1 (zh) * | 2021-04-17 | 2022-10-20 | 华为技术有限公司 | 驾驶控制指令生成方法、异构计算方法、相关装置及*** |
CN113282355A (zh) * | 2021-05-18 | 2021-08-20 | Oppo广东移动通信有限公司 | 基于状态机的指令执行方法、装置、终端及存储介质 |
CN113312202A (zh) * | 2021-07-29 | 2021-08-27 | 太平金融科技服务(上海)有限公司 | 基于组件的故障处理逻辑生成方法、装置、设备和介质 |
CN114518908A (zh) * | 2022-02-17 | 2022-05-20 | 杭州网易云音乐科技有限公司 | 服务编排方法、介质、装置和计算设备 |
CN114518908B (zh) * | 2022-02-17 | 2024-03-22 | 杭州网易云音乐科技有限公司 | 服务编排方法、介质、装置和计算设备 |
CN116450101A (zh) * | 2023-04-27 | 2023-07-18 | 睿珀智能科技有限公司 | 软件架构设计方法、***及设备 |
CN116450101B (zh) * | 2023-04-27 | 2024-04-09 | 睿珀智能科技有限公司 | 软件架构设计方法、***及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112051993B (zh) | 2023-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112051993B (zh) | 状态机模板的生成及任务处理方法、装置、介质及设备 | |
US11907732B2 (en) | Leveraging microservice containers to provide tenant isolation in a multi-tenant API gateway | |
US10637796B2 (en) | Linking instances within a cloud computing environment | |
CN108733476B (zh) | 一种执行多任务的方法和装置 | |
CA3000422C (en) | Workflow service using state transfer | |
US9600342B2 (en) | Managing parallel processes for application-level partitions | |
US10216491B2 (en) | Controlled availability of objects in a visual design tool for integration development | |
US11755337B2 (en) | Techniques for managing dependencies of an orchestration service | |
CN110244942B (zh) | 一种页面生成方法、装置及*** | |
CN108171473A (zh) | 一种数据分析处理***及数据分析处理方法 | |
US20170163752A1 (en) | Template-based event notifications | |
US11836519B2 (en) | Decoupled push-down execution generator | |
CN114064024A (zh) | 微应用的开发方法、装置、设备、存储介质及程序产品 | |
CN110908793A (zh) | 长时任务执行方法、装置、设备及可读存储介质 | |
CN114265680A (zh) | 一种海量数据处理方法、装置、电子设备及存储介质 | |
US10803413B1 (en) | Workflow service with translator | |
CN117076096A (zh) | 任务流程的执行方法、装置、计算机可读介质及电子设备 | |
US9787769B2 (en) | Power and network traffic optimization in communication synchronization | |
WO2021036987A1 (zh) | 一种实现运维监控的方法及装置 | |
CN115185841A (zh) | ***重构测试方法、装置、设备及存储介质 | |
CN112418796A (zh) | 子流程节点激活方法、装置、电子设备及存储介质 | |
US11689473B2 (en) | Pre-allocating resources with hierarchy-based constraints | |
CN116820278A (zh) | 应用于安全托管服务的数据交付方法、装置、设备及介质 | |
CN115934046A (zh) | 应用程序开发方法、装置、设备及存储介质 | |
CN118113275A (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 |