CN117170777A - 状态转移方法和相关设备 - Google Patents

状态转移方法和相关设备 Download PDF

Info

Publication number
CN117170777A
CN117170777A CN202311143284.5A CN202311143284A CN117170777A CN 117170777 A CN117170777 A CN 117170777A CN 202311143284 A CN202311143284 A CN 202311143284A CN 117170777 A CN117170777 A CN 117170777A
Authority
CN
China
Prior art keywords
state
state machine
task
node
machine node
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
CN202311143284.5A
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.)
Shanghai Bilibili Technology Co Ltd
Original Assignee
Shanghai Bilibili Technology 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 Shanghai Bilibili Technology Co Ltd filed Critical Shanghai Bilibili Technology Co Ltd
Priority to CN202311143284.5A priority Critical patent/CN117170777A/zh
Publication of CN117170777A publication Critical patent/CN117170777A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Hardware Redundancy (AREA)

Abstract

本申请实施例提供了一种状态转移方法,应用于包括多个状态机节点的分布式系统中;该方法包括:获取状态表和状态转移顺序;根据第一状态对第一状态机节点进行初始化;通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;根据第二状态对所述第二状态机节点进行初始化;通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。本申请实施例的技术方案可以跨状态机节点进行状态转移,从而可以在大规模分布式系统下精准控制复杂任务的状态执行和状态转移。

Description

状态转移方法和相关设备
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种状态转移方法和相关设备。
背景技术
随着软件系统的不断发展,系统的复杂性不断增加。任务的执行需要分为多个状态,每个状态的动作(具体执行逻辑)各不相同,例如:TCP请求、数据库操作、视频处理、文件操作等。这些状态动作逻辑的执行和状态之间的转移,可以通过状态机来处理。状态机是一种数学计算模型,用于描述系统内的有限个状态以及系统在这些状态之间的转移和动作等。
当前的状态转移均在单一状态机内部。然而,分布式系统涉及多个状态机,无法跨状态机转移状态。
发明内容
本申请实施例提供一种状态转移方法、装置、电子设备、计算机可读存储介质,以解决或缓解上面提出的一项或更多项技术问题。
第一方面,本申请实施例提供了一种状态转移方法,应用于包括多个状态机节点的分布式系统中;所述方法包括:
获取状态表和状态转移顺序,所述状态表包括任务的多个状态;
根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一;
通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;
在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;
根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;
根据第二状态对所述第二状态机节点进行初始化;
通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
第二方面,本申请实施例提供了一种状态转移装置,所述装置包括:
获取模块,用于获取状态表和状态转移顺序,所述状态表包括任务的多个状态;
第一初始化模块,用于根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一;
第一执行模块,用于通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;
第一确定模块,用于在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;
第二确定模块,用于根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;
第二初始化模块,用于根据第二状态对所述第二状态机节点进行初始化;
第二执行模块,用于通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
第三方面,本申请实施例提供了一种电子设备,该电子设备包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,以使至少一个处理器能够执行上述分布式系统的故障处理方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储计算机指令,当计算机指令在计算机上运行时,上述各方面任一种实施方式中的方法被执行。
本申请实施例采用上述技术方案可以包括如下优势:
获取状态表和状态转移顺序,以确定任务对应的多个状态和状态之间的转移顺序。从多个状态机节点中选择第一状态机节点,并根据第一状态对第一状态机节点进行初始化。通过调用初始化后的第一状态机节点执行第一状态的动作逻辑。在第一状态的动作逻辑执行成功的情况下,确定第二状态并从多个状态机节点中选择第二状态机节点。根据第二状态对第二状态机节点进行初始化调用初始化后的第二状态机节点执行第二状态的动作逻辑。可知,本申请实施例可以跨状态机节点进行状态转移,从而可以在大规模分布式系统下精准控制复杂任务的状态执行和状态转移。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本申请进一步的方面、实施方式和特征将会是容易明白的。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
图1示意性示出了根据本申请一实施例的状态转移方法的运行环境图;
图2示意性示出了根据本申请另一实施例的状态转移方法的流程图;
图3示意性示出了图2中步骤S206的子步骤;
图4示意性示出了根据本申请另一实施例的状态转移方法的新增流程图;
图5示意性示出了根据本申请另一实施例的状态转移方法的新增流程图;
图6示意性示出了根据本申请另一实施例的状态转移方法的新增流程图;
图7示意性示出了根据本申请另一实施例的状态转移方法的新增流程图;
图8示意性示出了父任务和子任务的状态流转有向无环图;
图9示意性示出了示意性示出了根据本申请一实施例的状态转移方法的应用示例图;
图10示意性示出了根据本申请另一实施例的状态转移装置的框图;及
图11示意性示出了根据本申请另一实施例中的电子设备的硬件架构示意图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本申请的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
状态机:一种数学计算模型,用于表示系统的有限个状态以及系统在这些状态之间的转移和动作等。
状态:通过离散化,可以将一个系统分解成多个有限的状态。例如:门禁闸机可以划分为开启状态、关闭状态;电扇可以划分为关闭、一档、二档、三档等状态;红绿灯可以划分为红灯状态、绿灯状态、黄灯状态。
状态转移:一个状态接收输入后执行某些动作,然后进入另一个状态的过程。
动作逻辑:各个状态的具体执行逻辑。
执行成功:一个动作逻辑在预定时间内完成,并且达到了预期结果。
执行超时:一个动作逻辑在预定时间内未能完成。执行超时的原因可能包括:网络延迟、服务崩溃等。
执行失败:一个动作逻辑在执行过程出现了错误、异常或者没有达到预期结果。执行失败的原因可能包括程序错误、无效输入等。
TCP(Transmission Control Protocol,传输控制协议):是一种面向连接的、可靠的、基于字节流的传输层协议,可用于实现应用层协议(如HTTP、F TP、SMTP等)的可靠数据传输。
有向无环图(DAG,Directed Acyclic Graph):是一个无回路的有向图。在有向无环图中,从任意顶点出发无法经过若干条边回到该顶点。
为方便本领域技术人员理解本申请实施例提供的技术方案,下面对相关技术进行说明:
随着软件系统不断发展,系统复杂性不断增加。一个任务的执行需要分为多个状态,每个状态的动作逻辑各不相同。例如:TCP请求、数据库操作、视频处理、文件操作等。这些状态的执行和状态之间的转移,可以通过状态机来处理。
本申请人了解到,相关技术中的状态机还存在以下不足之处:
(1)在单一状态机内部,状态转移方法直接明确。然而,在包含多个状态机的分布式系统中,状态转移可能涉及到多个服务节点之间的通信,导致状态转移的复杂度大幅增加,很难找到明确的状态转移方法。
(2)缺少通用的状态数据持久化方式,无法适配不同类型的数据库(Dat abase,DB)。
(3)没有多层状态机解耦方案,由于木桶效应,最耗时的状态机动作会影响整体的性能。
为此,本申请实施例提供了一种状态转移的技术方案。在该技术方案中:(1)定义了标准化状态转移接口,该接口具有每个状态实例需要实现的全部接口功能,保证了接口的通用性和具体功能的差异性,并且接口可以跨进程通过网络交互;(2)由专门代理服务负责适配不同类型的数据库,并提供通用接口,状态机数据持久化时可以直接调用代理服务的通用接口;(3)父状态机增加一个“子任务”状态,该状态表示流转控制权由父状态机转移到子状态机,子状态机可以自定义状态表、转移条件、动作,子状态机会继承父状态机上下文。具体见后文。
图1示意性示出了根据本申请实施例所述状态转移方法的环境应用示意图。如图1所示,本申请实施例的分布式系统可以包括多个状态机节点、数据库和代理节点,其中:
每个状态机节点可以被配置为用于执行任务的一个或多个状态,以及用于将当前状态转移至下一个状态。
数据库可以被配置为:存储任务的状态值和状态机节点的数据等。
代理节点可以被配置为:接收根据状态机节点的请求,基于请求修改数据库中任务的状态值,以及用于从多个状态机节点中选择用于执行下一个状态的状态机节点。
图2示意性示出了根据本申请一实施例的状态转移方法的流程图。
如图2所示,该状态转移方法应用于包括多个状态机节点的分布式系统中,该状态转移方法可以包括步骤S200~S212,其中:
S200,获取状态表和状态转移顺序,所述状态表包括任务的多个状态。
状态表可以是任务需要执行的状态的集合。状态可以包括多个。以视频会议为例,对应的多个状态可以包括TCP请求、数据库操作、视频处理、文件操作等。以交通信号灯为例,对应的多个状态可以包括红灯状态、黄灯状态、绿灯状态。
状态转移顺序是任务中不同状态之间转移顺序。例如:从红灯状态转移至黄灯状态、从黄灯状态转移至绿灯状态等。
在本实施例中,通过获取任务的状态表和状态转移顺序,可以快速地确定任务对应哪些状态和这些状态的执行顺序。
在一种实施方式中,还可以获取任务的状态转移条件和状态流转有向无环图。其中,状态转移条件可以作为是否进行状态转移的判断依据,状态流转有向无环图可以直观地展示任务的状态以及状态之间的转移顺序。
S202,根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一。
在诸如具有大规模节点的分布式系统中,可以包括多个状态机节点,多个状态机节点可以通过网络和代理节点连接,从而通过共同协作完成任务状态的执行和转移。
当任务要执行一个状态(如第一状态)时,代理节点响应于该要执行的状态(第一状态)从多个状态机节点中选择第一状态机节点。选择方式可以是随机选择,也可以根据负载均衡算法选择,这样可以有效提高分布式系统的资源利用效率和整体性能。
在确定第一状态机节点后,可以根据第一状态对第一状态机节点进行初始化。初始化的目的是让第一状态机节点从特定状态(第一状态)开始执行,从而减少错误和不确定性。第一状态可以是任务当前需要执行的状态,可以通过任务的状态表确定。
在本实施例中,根据第一状态对第一状态机节点进行初始化,正确配置第一状态机节点,从而可以执行第一状态。
S204,通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑。
动作逻辑用于定义对应状态需要执行的特定操作或行为。例如:在门禁闸机中,当状态切换到“开启状态”的情况下,需要执行打开门的操作。
在本实施例中,通过调用已初始化的第一状态机节点执行第一状态对应的动作逻辑,高效地完成任务在当前状态下需要执行的特定操作,减少潜在的错误风险。
S206,在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点。
在本分布式系统中,状态转移可以不局限在单个状态机节点内部,例如在多个状态机节点中实现状态转移。
当前状态(第一状态)的动作逻辑执行的成功与否,可以作为状态转移条件之一。在第一状态的动作逻辑执行成功后,可以触发状态转移。从多个状态机节点中确定第二状态机节点,通过第二状态机节点进行状态之间的转换,从而实现预期的状态转移。
在一种实施方式中,状态转移条件还可以包括:外部输入、时间限制、特定条件、特定事件等。举例而言,当外部输入满足预设条件时,可以触发状态转移。外部输入可以是来自用户交互、其他系统等的数据。
在一种实施方式中,第二状态机节点和第一状态机节点可以是同一个状态机节点,在此情况下,相应的状态转移在单个状态机内部实现。
确定第二状态机节点的方式有多种,下面提供一个示例性的方案。
在一种实施方式中,所述步骤S206可以包括:
根据预先设置的负载均衡算法,从所述多个状态机节点中选择所述第二状态机节点。
负载均衡算法能够根据节点的负载情况进行合理的分配,实现每个节点相对均衡的负载,从而最大限定利用系统资源,减少单一节点的处理负担,进而提高系统的整体性能和响应速度。
在本实施例中,根据预先设置的负载均衡算法从多个状态机节点中选择第二状态机节点,合理利用分布式系统的资源,提高系统效率。
S208,根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态。
在本实施例中,通过预先获取的包括任务多个状态的状态表和状态转移顺序,可以快速确定第一状态之后的第二状态,从而实现预期的状态转移,减少错误的发生。
S210,根据第二状态对所述第二状态机节点进行初始化。
第二状态机节点可以是无状态的。根据第二状态初始化第二状态机节点,使得第二状态机节点从第二状态开始执行。对于任务整体而言,从执行第一状态转移到执行第二状态。对分布式系统而言,从第一状态机节点转移到第二状态机节点。可知,本实施例实现了跨状态机节点的状态转移,从而实现在分布式系统下精准控制复杂任务的状态执行和状态转移。
S212,通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
第二状态机节点已初始化意味着任务已经成功地从第一状态转移到第二状态(新状态)。第二状态机节点可以执行新状态的动作逻辑,从而可以实现状态之间的平稳转换和正确逻辑。
上述实施例示例性地介绍了在分布式系统中进行状态转移的技术方案。下面将对状态机节点做进一步介绍。
在一种实施方式中,如图1所示,每个状态机节点均配置有调度模块和执行模块,所述执行模块配置有通用转移接口,所述通用转移接口用于对接每个状态的实例,调度模块用于通过通用转移接口调用执行模块执行状态对应的动作逻辑。
对应地,步骤S204可以包括:
通过第一状态机节点中的调度模块调用对应的通用转移接口,以使对应的执行模块执行所述第一状态的动作逻辑。
在本实施例中,调度模块可以负责控制状态转移,执行模块可以负责执行状态的动作逻辑。其中,执行模块还可以提供通用转移接口。通用转移接口可以是自定义的标准化状态转移接口,该接口可以包括每个状态实例需要实现的全部接口功能,用于对接每个状态的实例。即,通用转移接口具备通用性,同时也能应对每个状态实例的具体功能需求。通用转移接口还可以跨进程通过网络交互。
更具体地,调度模块可以用于通过通用转移接口调用执行模块执行状态对应的动作逻辑。每个状态机节点的内部配置可以相同,可以通过第一状态机节点中的调度模块调用对应的通用转移接口,从而使对应的执行模块执行第一状态的动作逻辑,高效地完成任务在当前状态下需要执行的特定操作,减少潜在的错误风险。
在一种实施方式中,如图1所示,所述执行模块还配置有回调接口。
对应地,如图3所示,步骤S206可以包括:
S300,通过调用第一状态机节点的回调接口,请求代理节点修改数据库中任务的状态值。
S302,在所述状态值已修改的情况下,通过所述代理节点从所述多个状态机节点中确定所述第二状态机节点。
回调接口可以用于实现异步操作、事件驱动和定制化功能。在某个操作完成时,执行模块通过该回调接口可以调用代理节点执行相应的操作。在本实施例中,可以在第一状态的动作逻辑执行成功时,调用第一状态机节点的回调接口向代理节点发送修改请求。修改请求可以用于修改数据库中任务的状态值,例如:将“初始化”修改为“读数据”,将“读数据”修改为“写数据”。通过回调接口和代理节点实时更新数据库中任务的状态值,实现对任务状态的跟踪和即时反馈。
在代理节点成功修改状态值后,代理节点从多个状态机节点中选择第二状态机节点,以实现预期的状态转移。
上述实施例介绍了状态机节点的配置,以及状态机节点和代理节点的协同操作。
下面实施例将对状态机节点的初始化过程做示例性介绍。
在一种实施方式中,步骤S202可以包括:
在初始化所述第一状态机节点的过程中,将所述第一状态的状态名注册到路由表中。其中,在所述第一状态机节点的执行模块被调用的情况下,该被调用的执行模块根据所述状态名和所述路由表找到所述第一状态,并执行所述第一状态的动作逻辑。
在根据第一状态初始化第一状态机节点时,将第一状态的状态名作为Key(键)注册到路由表中。状态名可以作为状态的唯一标识。第一状态机节点的执行模块在被调用时,可以通过入参的状态名,从路由表中找到对应的状态并执行该状态的动作逻辑。
在本实施例中,通过将状态名注册到路由表中,执行模块被调用时可以快速准确地获得需要执行的状态和状态对应的动作逻辑,减少错误的发生,提高任务执行的效率。
上述实施例较多地介绍了状态机节点的执行模块,下面将对调用模块做进一步介绍。
在一种实施方式中,如图4所示,所述状态转移方法还可以包括:
S400,在所述多个状态机节点中的任一个当前状态机节点中,在执行当前状态对应的动作逻辑之前,将任务信息加入到调度模块的第一队列。
S402,在所述当前状态的动作逻辑执行成功的情况下,将所述任务信息从所述第一队列移除。
当前状态机节点是指正在执行任务当前状态的状态机节点,其可以是多个状态机节点中的任一个。
状态机节点的调度模块可以维护第一队列,第一队列可以是运行中队列(Running Queue),运行中队列可以用于保存正在执行或即将执行的当前状态对应的任务信息。运行中队列的队列长度可以在配置中心自行配置,运行中队列可以是先进先出队列。
运行中队列的队列数据可以通过调用代理节点的通用接口持久化存储到数据库中。由专门的代理节点负责适配不同类型的数据库,并提供通用接口,便于每个状态机节点的数据持久化存储。
在执行当前状态的动作逻辑前,把对应的任务信息存入到运行中队列,表示任务正在执行或即将执行。动作逻辑执行成功后,将任务信息从运行中队列移除,以通知系统该任务的当前状态已成功执行,进而为其他等待执行的任务状态分配资源和执行机会。在执行下一个状态的动作逻辑之前,可以将任务信息重新加入运行中队列。
在本实施例中,通过调度模块维护运行中队列,可以帮助状态机节点决定当前应该执行的任务,有效地分配系统资源和实现状态跟踪。
在一种实施方式中,如图5所示,所述状态转移方法还可以包括:
S500,在运行时间到达第一预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第一队列中移除;其中,所述运行时间为所述任务信息在所述第一队列中的存储时间。
S502,通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
如果任务信息在运行中队列的存储时间过长,说明任务当前状态的动作逻辑一直未能执行成功。为了释放资源和及时处理问题,在运行时间到达第一预设延迟时间的情况下,可以通过调度模块将任务信息从运行中队列中移除,并触发重新转移到当前状态的操作。当前状态机节点的调度模块通过通用转移接口调用对应的执行模块,重复执行当前状态的动作逻辑。
在本实施例中,通过将到达时间阈值的任务信息从运行中队列移除,可以及时地释放资源和避免阻塞。通过将任务重新转移至当前状态,重复执行当前状态的动作逻辑,可以有效发现并处理问题。
在一种实施方式中,由于不同状态的动作逻辑执行耗时不同,可以为不同状态设置不同延时时间阈值的运行中队列,从而更加灵活地管控不同状态的执行时间。
在一种实施方式中,可以为运行中队列分配一个定时器,用于定时扫描队列中是否存在到达第一预设延时时间的任务信息,并做相应处理。由于运行中队列是先进先出的队列(FIFO),定时器在扫描到第一个未达到第一预设延时时间的任务信息时停止本轮扫描,等待定时器的下一轮扫描,定时器每轮扫描的时间间隔可以自行配置。通过设置定时器,可以及时检测出超时任务和处理异常情况。
在一种实施方式中,任务信息可以包括任务的当前状态、当前状态的执行次数、任务标识、当前状态的重试次数等信息。通过上述任务信息可以实现任务状态的有效管理。
在一种实施方式中,所述状态转移方法还可以包括:在所述当前状态的执行次数超过预设执行阈值的情况下,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第一队列移除。
如果任务在当前状态的执行次数超过了预先配置的执行阈值后仍然没有成功执行,为了处理异常情况以及避免不受限制的重复执行所导致的其他问题,可以将对应的任务信息从运行中队列移除,并将其加入到第二队列中等待人工处理。第二队列可以是死信队列(Dead Letter Queue,DLQ),死信队列用于存储无法正常执行的任务的任务信息,以便后续进行人工分析、处理和干预,提高系统的稳定性和可靠性。死信队列的队列数据也可以通过调用代理节点的通用接口持久化存储到数据库中。
需要说明的是,任务信息不会同时存在于多个队列中,保证任务处理的一致性,简化任务的管理、监控和维护。
在一种实施方式中,如图6所示,所述状态转移方法还可以包括:
S600,在所述当前状态的动作逻辑执行失败的情况下,将所述任务信息加入到所述调度模块中的第三队列,并将所述任务信息从所述第一队列移除。
S602,在重试时间到达第二预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第三队列中移除;其中,所述重试时间表示所述任务信息在所述第三队列中的存储时间。
S604,通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
执行失败意味着当前状态的动作逻辑在执行过程可能出现了错误、异常或者没有达到预期结果。在此情况下,将任务信息从运行中队列移除,并将其加入到第三队列中。第三队列可以是重试队列(Retry Queue),重试队列用于存放处理失败的任务的任务信息,以便稍后重新尝试处理,提高处理失败的容错性。重试队列的队列数据可以通过调用代理节点的通用接口持久化存储到数据库中。
当任务信息在重试队列中的存储时间到达第二预设延迟时间,表示已到达对应任务当前状态的重试时间,则触发将任务重新转移到当前状态的操作。将任务信息从重试队列中移除,以释放资源和减少数据错误。通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑,提升当前状态执行的成功率。
在一种实施方式中,可以根据delayLevel(延迟等级)配置具有不同第二预设延迟时间的多个重试队列,将失败的不同任务信息按delayLevel存入不同的重试队列中,从而可以更加灵活地管控不同任务信息的重试时间。
在一种实施方式中,可以为重试队列分配一个定时器,用于定时扫描队列中是否存在到达第二预设延时时间的任务信息,并做相应处理。由于重试队列是先进先出的队列,定时器在扫描到第一个未达到第二预设延时时间的任务信息时停止本轮扫描,等待定时器的下一轮扫描,定时器每轮扫描的时间间隔可以自行配置。通过设置定时器,可以及时进行任务重试。
在一种实施方式中,在所述当前状态的重试次数超过预设重试阈值时,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第三队列中移除。
如果任务在当前状态的重试次数超过了预先配置的重试阈值后仍然没有成功执行,为了减少因不受限制的任务重试引发的系统问题,可以将对应的任务信息从重试队列中移除,并将其加入到死信队列中等待人工处理,从而提高系统的稳定性和可靠性。
在一种实施方式中,如果在执行当前状态的动作逻辑时服务中断(包括但不限于断电、异常重启等情况),则在运行中队列、重试队列中的任务信息到达时间阈值时,触发重新转移至当前状态的操作,执行当前状态的动作逻辑,从而提高系统的容错率和稳定性。
在一种实施方式中,如图7所示,所述状态转移方法还可以包括:
S700,通过调用所述当前状态机节点的执行模块,执行当前状态的动作逻辑并生成任务令牌。
S702,通过所述当前状态机节点的回调接口向代理节点发送调用请求,所述调用请求携带所述任务令牌,所述调用请求用于请求所述代理节点修改数据库中任务的状态值。
S704,通过所述当前状态机节点的调度模块接收所述代理节点返回的信息,所述信息包括错误信息,所述错误信息表示所述任务令牌已过期。
S706,在所述信息是错误信息的情况下,通过所述当前状态机节点的调度模块将所述任务信息加入到所述第三队列中。
当前状态机节点在执行当前状态的动作逻辑时,可以生成一个任务令牌(token),该任务令牌包括任务当前状态、任务唯一标识、随机数、过期时间等信息。其中,过期时间和运行中队列配置的第一预设延时时间相同。
在动作逻辑执行完成后,执行模块通过回调接口请求代理节点修改数据库中任务的状态值,请求中可以携带任务令牌。调度模块订阅代理节点返回的信息,如果返回的信息是错误信息,说明任务令牌已经过期,动作逻辑没有在第一预设延时时间内执行成功,即,执行成功但超时。在此情况下,调度模块将对应的任务信息加入到重试队列中,以便稍后重新尝试处理。
上述多个实施例介绍了调度模块通过维护第一、第二、第三队列实现对任务状态的跟踪和即时反馈。下面将对状态机节点如何实现多层状态流转做示例性介绍。
在可选的实施例中,所述状态表对应一个父任务,所述状态表包括所述父任务的多个状态;所述父任务包括多个子任务,每个子任务对应有子状态表、子状态转移顺序;其中,子任务的状态和所述父任务中的其他状态由不同状态机节点分开执行。
如图8所示,父任务可以是多个状态的集合。当父任务的多个状态需要并发执行时,可以将父任务中一个或多个状态视为子任务。每个子任务可以自定义对应的子任务执行状态表、子状态转移顺序、子状态转移条件和子状态动作逻辑。
一个父任务可能需要执行多个子任务(如100万)。如果不将父任务和子任务解耦,将全部任务都放在同一个状态机节点下执行,可能会因为子任务占用了大量的系统资源(如CPU、内存),影响父任务的并发执行能力。因此,可以将父任务和子任务解耦,解耦后的一个父任务状态机节点可以分配多个分布式子任务状态机节点执行,从而提高整体的并发能力。
具体的:可以在父任务的状态表中增加一个“子任务”状态,该状态表示状态流转的控制权由父状态机节点转移到子状态机节点。子状态机节点可以通过通用转移接口调用执行模块根据子任务的数量并发创建多个子任务流程,以执行子任务。“子任务”状态的转移条件可以设置为对应的一个或多个子任务均执行成功。
在本实施例中,通过解耦分开执行多层状态,缓解子任务影响父任务并发执行能力的问题,从而提高整体并发能力。
为了使得本申请更加容易理解,以下结合图9提供一个示例性应用。
S11,确定任务执行状态表(状态表)、状态转移顺序、状态转移条件,以及状态流转有向无环图。
S12,初始化状态机服务A(第一状态机节点)。
初始化操作包括将状态名作为Key注册到路由表中。
状态机服务分为调度模块和执行模块,调度模块负责控制状态转移,执行模块负责执行状态的动作逻辑并提供转移接口和回调接口。
S13,状态机服务A的调度模块通过转移接口调用执行模块执行对应状态的动作逻辑。
执行模块接口被调用时,通过入参的状态名在路由表中找到对应状态并执行该状态动作逻辑。
S14,动作逻辑执行成功后,状态机服务A通过回调接口请求代理服务修改状态机数据库。
S15,代理服务(代理节点)对数据库操作成功后,通过负载均衡算法选择下一个状态机服务(如状态机服务B)。
S16,代理服务通知状态机服务B的调度模块实现状态转移。
S17,通过状态机服务B的转移接口执行下一个状态(第二状态)的动作逻辑。
在该示例性应用中,(1)可以跨状态机节点进行状态转移,从而可以在大规模分布式系统下精准控制复杂任务的状态执行和状态转移;(2)定义了标准化状态转移接口,该接口具有每个状态实例需要实现的全部接口功能,保证了接口的通用性和具体功能的差异性,并且接口可以跨进程通过网络交互;(3)由专门代理服务负责适配不同类型的数据库,并提供通用接口,状态机数据持久化时可以直接调用代理服务的通用接口;(4)父状态机增加一个“子任务”状态,该状态表示流转控制权由父状态机转移到子状态机,子状态机可以自定义状态表、转移条件、动作,子状态机会继承父状态机上下文。
图10示出根据本申请一实施例的状态转移装置的结构框图。如图10所示,该状态转移装置1000可以:
获取模块1100,用于获取状态表和状态转移顺序,所述状态表包括任务的多个状态;
第一初始化模块1200,用于根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一;
第一执行模块1300,用于通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;
第一确定模块1400,用于在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;
第二确定模块1500,用于根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;
第二初始化模块1600,用于根据第二状态对所述第二状态机节点进行初始化;
第二执行模块1700,用于通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
作为一种实施方式,状态机节点配置有调度模块和执行模块,所述执行模块配置有通用转移接口,所述通用转移接口用于对接每个状态的实例,调度模块用于通过通用转移接口调用执行模块执行状态对应的动作逻辑;
对应地,所述第一执行模块1300还用于:
通过第一状态机节点中的调度模块调用对应的通用转移接口,以使对应的执行模块执行所述第一状态的动作逻辑。
作为一种实施方式,所述执行模块还配置有回调接口;
对应地,所述第一确定模块1400还用于:
通过调用第一状态机节点的回调接口,请求代理节点修改数据库中任务的状态值;
在所述状态值已修改的情况下,通过所述代理节点从所述多个状态机节点中确定所述第二状态机节点。
作为一种实施方式,所述第一确定模块1400还用于:
根据预先设置的负载均衡算法,通过所述代理节点从所述多个状态机节点中选择所述第二状态机节点。
作为一种实施方式,所述第一初始化模块1200还用于:
在初始化所述第一状态机节点的过程中,将所述第一状态的状态名注册到路由表中;
其中,在所述第一状态机节点的执行模块被调用的情况下,该被调用的执行模块根据所述状态名和所述路由表找到所述第一状态,并执行所述第一状态的动作逻辑。
作为一种实施方式,所述状态转移装置1000还用于:
在所述多个状态机节点中的任一个当前状态机节点中,在执行当前状态对应的动作逻辑之前,将任务信息加入到调度模块的第一队列;
在所述当前状态的动作逻辑执行成功的情况下,将所述任务信息从所述第一队列移除。
作为一种实施方式,所述状态转移装置1000还用于:
在运行时间到达第一预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第一队列中移除;其中,所述运行时间为所述任务信息在所述第一队列中的存储时间;
通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
作为一种实施方式,所述任务信息包括任务的当前状态、当前状态的执行次数、当前任务的重试次数、任务标识。
作为一种实施方式,所述状态转移装置1000还用于:
在所述当前状态的执行次数超过预设执行阈值的情况下,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第一队列移除。
作为一种实施方式,所述状态转移装置1000还用于:
在所述当前状态的动作逻辑执行失败的情况下,将所述任务信息加入到所述调度模块中的第三队列,并将所述任务信息从所述第一队列移除;
在重试时间到达第二预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第三队列中移除;其中,所述重试时间表示所述任务信息在所述第三队列中的存储时间;
通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
作为一种实施方式,所述状态转移装置1000还用于:
在所述当前状态的重试次数超过预设重试阈值时,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第三队列中移除。
作为一种实施方式,所述状态转移装置1000还用于:
通过调用所述当前状态机节点的执行模块,执行当前状态的动作逻辑并生成任务令牌;
通过所述当前状态机节点的回调接口向代理节点发送调用请求,所述调用请求携带所述任务令牌,所述调用请求用于请求所述代理节点修改数据库中任务的状态值;
通过所述当前状态机节点的调度模块接收所述代理节点返回的信息,所述信息包括错误信息,所述错误信息表示所述任务令牌已过期;
在所述信息是错误信息的情况下,通过所述当前状态机节点的调度模块将所述任务信息加入到所述第三队列中。
作为一种实施方式,所述状态表对应一个父任务,所述状态表包括所述父任务的多个状态;
所述父任务包括多个子任务,每个子任务对应有子状态表、子状态转移顺序;
其中,子任务的状态和所述父任务中的其他状态由不同状态机节点分开执行。
图11示出根据本申请一实施例的电子设备的结构框图。电子设备10000可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或多个服务器所组成的服务器集群)等。如图11所示,所述电子设备10000包括但不限于:可通过系统总线相互通信链接存储器1110、处理器1120、通信接口1130。其中:
存储器1110至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(如,SD或DX存储器)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一种实施方式中,存储器1110可以是电子设备10000的内部存储模块,例如该电子设备10000的硬盘或内存。在另一种实施方式中,存储器1110也可以是电子设备10000的外部存储设备,例如该电子设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(S ecure Digital,SD)卡,闪存卡(FlashCard)等。当然,存储器1110还可以既包括电子设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器1110通常用于存储安装于电子设备10000的操作系统和各类应用软件,例如状态转移方法的程序代码等。此外,存储器1110还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器1120在一种实施方式中可以是中央处理器(Central Processing Uni t,CPU)、控制器、微控制器、微处理器、或其他芯片。该处理器1120通常用于控制电子设备10000的总体操作,例如执行与电子设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器1120用于运行存储器1110中存储的程序代码或者处理数据。
通信接口1130可包括无线通信接口或有线通信接口,该通信接口1130通常用于在电子设备10000与其他电子设备之间建立通信链接。例如,通信接口1130用于通过网络将电子设备10000与外部终端相连,在电子设备10000与外部终端之间建立数据传输通道和通信链接等。网络可以是企业内部网(Intrane t)、互联网(Internet)、全球移动通讯系统(Global System of Mobile comm unication,简称为GSM)、宽带码分多址(Wideband CodeDivision Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图11仅示出了具有部件1110-1030的电子设备,但是应该理解的是,并不要求实施所有示出的部件,可以替代地实施更多或者更少的部件。
在本实施例中,存储于存储器1110中的状态转移方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(如处理器1120)所执行,以完成本申请实施例。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,其中,计算机程序被处理器执行时实现实施例中的状态转移方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEP ROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一种实施方式中,计算机可读存储介质可以是电子设备的内部存储单元,例如该电子设备的硬盘或内存。在另一种实施方式中,计算机可读存储介质也可以是电子设备的外部存储设备,例如该电子设备上配备的插接式硬盘,智能存储卡(S mart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Fla sh Card)等。当然,计算机可读存储介质还可以既包括电子设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于电子设备的操作系统和各类应用软件,例如实施例中状态转移方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的电子设备来实现,它们可以集中在单个的电子设备上,或者分布在多个电子设备所组成的网络上,可选地,它们可以用电子设备可执行的程序代码来实现,从而,可以将它们存储在存储装置中由电子设备来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
需要说明的是,以上仅为本申请的优选实施例,并非因此限制本申请的专利保护范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

Claims (16)

1.一种状态转移方法,其特征在于,应用于包括多个状态机节点的分布式系统中;所述方法包括:
获取状态表和状态转移顺序,所述状态表包括任务的多个状态;
根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一;
通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;
在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;
根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;
根据第二状态对所述第二状态机节点进行初始化;
通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
2.根据权利要求1所述的方法,其特征在于,状态机节点配置有调度模块和执行模块,所述执行模块配置有通用转移接口,所述通用转移接口用于对接每个状态的实例,调度模块用于通过通用转移接口调用执行模块执行状态对应的动作逻辑;
对应地,通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑,包括:
通过第一状态机节点中的调度模块调用对应的通用转移接口,以使对应的执行模块执行所述第一状态的动作逻辑。
3.根据权利要求2所述的方法,其特征在于,所述执行模块还配置有回调接口;对应地,从所述多个状态机节点中确定第二状态机节点,包括:
通过调用第一状态机节点的回调接口,请求代理节点修改数据库中任务的状态值;
在所述状态值已修改的情况下,通过所述代理节点从所述多个状态机节点中确定所述第二状态机节点。
4.根据权利要求3所述的方法,其特征在于,通过所述代理节点从所述多个状态机节点中确定所述第二状态机节点,包括:
根据预先设置的负载均衡算法,通过所述代理节点从所述多个状态机节点中选择所述第二状态机节点。
5.根据权利要求2所述的方法,其特征在于,所述根据第一状态对第一状态机节点进行初始化,包括:
在初始化所述第一状态机节点的过程中,将所述第一状态的状态名注册到路由表中;
其中,在所述第一状态机节点的执行模块被调用的情况下,该被调用的执行模块根据所述状态名和所述路由表找到所述第一状态,并执行所述第一状态的动作逻辑。
6.根据权利要求2至5任一项所述的方法,其特征在于,所述方法还包括:
在所述多个状态机节点中的任一个当前状态机节点中,在执行当前状态对应的动作逻辑之前,将任务信息加入到调度模块的第一队列;
在所述当前状态的动作逻辑执行成功的情况下,将所述任务信息从所述第一队列移除。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在运行时间到达第一预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第一队列中移除;其中,所述运行时间为所述任务信息在所述第一队列中的存储时间;
通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
8.根据权利要求6所述的方法,其特征在于,所述任务信息包括任务的当前状态、当前状态的执行次数、当前任务的重试次数、任务标识。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
在所述当前状态的执行次数超过预设执行阈值的情况下,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第一队列移除。
10.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述当前状态的动作逻辑执行失败的情况下,将所述任务信息加入到所述调度模块中的第三队列,并将所述任务信息从所述第一队列移除;
在重试时间到达第二预设延迟时间的情况下,通过所述调度模块将所述任务信息从所述第三队列中移除;其中,所述重试时间表示所述任务信息在所述第三队列中的存储时间;
通过调用所述当前状态机节点的调度模块,重复执行当前状态对应的动作逻辑。
11.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在所述当前状态的重试次数超过预设重试阈值时,将所述任务信息加入所述调度模块中的第二队列,并将所述任务信息从所述第三队列中移除。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
通过调用所述当前状态机节点的执行模块,执行当前状态的动作逻辑并生成任务令牌;
通过所述当前状态机节点的回调接口向代理节点发送调用请求,所述调用请求携带所述任务令牌,所述调用请求用于请求所述代理节点修改数据库中任务的状态值;
通过所述当前状态机节点的调度模块接收所述代理节点返回的信息,所述信息包括错误信息,所述错误信息表示所述任务令牌已过期;
在所述信息是错误信息的情况下,通过所述当前状态机节点的调度模块将所述任务信息加入到所述第三队列中。
13.根据权利要求1至5任一项所述的方法,其特征在于:
所述状态表对应一个父任务,所述状态表包括所述父任务的多个状态;
所述父任务包括多个子任务,每个子任务对应有子状态表、子状态转移顺序;
其中,子任务的状态和所述父任务中的其他状态由不同状态机节点分开执行。
14.一种状态转移装置,其特征在于,应用于包括多个状态机节点的分布式系统中,所述装置包括:
获取模块,用于获取状态表和状态转移顺序,所述状态表包括任务的多个状态;
第一初始化模块,用于根据第一状态对第一状态机节点进行初始化,所述第一状态机节点为所述多个状态机节点之一;
第一执行模块,用于通过调用已初始化的第一状态机节点执行所述第一状态的动作逻辑;
第一确定模块,用于在所述第一状态的动作逻辑执行成功的情况下,从所述多个状态机节点中确定第二状态机节点;
第二确定模块,用于根据所述状态表和所述状态转移顺序,确定所述第一状态之后的第二状态;
第二初始化模块,用于根据第二状态对所述第二状态机节点进行初始化;
第二执行模块,用于通过调用已初始化的第二状态机节点执行所述第二状态的动作逻辑。
15.一种电子设备,其特征在于,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;其中:
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至13中任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1至13中任一项所述的方法。
CN202311143284.5A 2023-09-05 2023-09-05 状态转移方法和相关设备 Pending CN117170777A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311143284.5A CN117170777A (zh) 2023-09-05 2023-09-05 状态转移方法和相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311143284.5A CN117170777A (zh) 2023-09-05 2023-09-05 状态转移方法和相关设备

Publications (1)

Publication Number Publication Date
CN117170777A true CN117170777A (zh) 2023-12-05

Family

ID=88929519

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311143284.5A Pending CN117170777A (zh) 2023-09-05 2023-09-05 状态转移方法和相关设备

Country Status (1)

Country Link
CN (1) CN117170777A (zh)

Similar Documents

Publication Publication Date Title
CN108124003B (zh) 网络管理设备连接处理方法、装置及系统
US8799906B2 (en) Processing a batched unit of work
WO2020024405A1 (zh) 基于分布式协调的测试方法、装置、服务器及存储介质
JP5710017B2 (ja) 電気通信ネットワークにおけるセル回復のための方法およびシステム
CN111835768B (zh) 一种用于处理安全事件的方法、装置、介质及计算机设备
US8732694B2 (en) Method and system for performing services in server and client of client/server architecture
CN107908488B (zh) 消息请求接口交互方法、装置、计算机设备及存储介质
EP2972824B1 (en) Computer system using in-service software upgrade
CN112346926A (zh) 资源状态监控方法、装置及电子设备
CN110333916B (zh) 请求消息处理方法、装置、计算机系统及可读存储介质
JP2002532777A (ja) オブジェクト指向リアルタイム・プロセス制御システムのためのタイムアウト・オブジェクト、およびその操作の方法
EP1322097A1 (en) A method and computer system for client server inter process communication
CN112068963B (zh) 一种嵌入式系统分布式调度系统
CN113986491A (zh) 一种基于cluster的Node.js多进程管理方法及系统
CN112600842A (zh) 集群shell方法、装置、电子设备及计算机可读存储介质
US6868437B1 (en) System and method for interprocess communication of remote procedure call messages utilizing shared memory
US10970098B2 (en) Methods for sharing input-output device for process automation on a computing machine and devices thereof
CN112559155A (zh) 批量作业处理方法、系统、计算机设备及可读存储介质
CN110413398B (zh) 任务调度方法、装置、计算机设备和存储介质
CN117170777A (zh) 状态转移方法和相关设备
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
CN113645260A (zh) 业务重试方法、装置、存储介质及电子设备
CN111694645A (zh) 分布式任务调度系统中任务处理方法及相关装置
US7573808B2 (en) Smart resync of data between a network management system and a network element
CN112612604B (zh) 基于Actor模型的任务调度方法、装置

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