CN113111099A - 一种环路检测方法、装置、电子设备与存储介质 - Google Patents
一种环路检测方法、装置、电子设备与存储介质 Download PDFInfo
- Publication number
- CN113111099A CN113111099A CN202110662248.4A CN202110662248A CN113111099A CN 113111099 A CN113111099 A CN 113111099A CN 202110662248 A CN202110662248 A CN 202110662248A CN 113111099 A CN113111099 A CN 113111099A
- Authority
- CN
- China
- Prior art keywords
- node
- candidate state
- target node
- state
- public
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本申请提供一种环路检测方法、装置、电子设备与存储介质。所述方法应用于分布式系统中的任一节点。该方法包括,根据相邻的下游节点的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递。其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态。响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识。响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
Description
技术领域
本申请一个或多个实施例涉及网络业务风险识别领域,尤其涉及一种环路检测方法、装置、电子设备与存储介质。
背景技术
在分布式系统中,执行并发事务的节点之间可能会发生数据依赖关系。如果发生数据依赖关系的若干节点出现环路,则可能对分布式系统性能造成影响。
例如,当分布式系统为分布式数据库系统时,如果系统中的节点A与节点B之间形成环路存在环路,则节点A需要依赖节点B执行事务之后的结果,节点B也需要依赖节点A执行事务之后的结果,这可能导致节点A与节点B之间出现死锁,难以正常执行事务。因此需要进行环路检测。
目前,在一些相关技术中,需要在某一节点中维护全局的依赖路径,然后通过该节点进行环路检测。这样操作一方面过分依赖单一节点,如果该节点被杀死,则不能正常进行环路检测;另一方面,需要在节点之间进行全局依赖路径的传递,导致节点维护和传递的信息量比较大,可能降低节点执行分布式事务的性能。而另外一些环路检测方法仅能针对单出度场景进行环路检测,无法应用在多出度场景中。其中,单出度是指节点仅可能依赖单个节点,或被单个节点依赖。多出度是指节点可能依赖多个节点,也可能被多个节点依赖。
发明内容
有鉴于此,本申请提出了一种环路检测方法。该方法可以应用于分布式系统中的任一目标节点。所述目标节点对应至少一条以所述目标节点为起点的依赖路径。所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系。所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识。所述公有标识用于在相邻的节点之间传递。所述私有标识用于指示与其对应的节点。所述方法可以包括,获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态。获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识。响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
在示出的一些实施例中,所述目标节点还维护了通知状态;所述通知状态包括指示通知该节点的下游节点更新候选状态的第一通知状态以及指示不通知该节点的下游节点更新候选状态的第二通知状态;所述根据所述相邻的下游节点的候选状态更新自身候选状态,包括:响应于所述目标节点的通知状态为第二通知状态,根据所述相邻的下游节点的候选状态更新自身候选状态;响应于所述目标节点为通知状态为第一通知状态,向所述相邻的下游节点发送通知消息,以使所述相邻的下游节点响应于自身为末梢节点,将候选状态更新为第二候选状态,或者,响应于自身为非末梢节点,将候选状态更新为第一候选状态;以及,根据所述相邻的下游节点的候选状态更新自身候选状态,并将所述目标节点的通知状态更新为第二通知状态。
在示出的一些实施例中,所述方法还包括:响应于建立依赖关系,将所述目标节点的通知状态更新为第一通知状态,以及将所述目标节点的候选状态更新为第一候选状态;响应于解除依赖关系,并且所述目标节点为末梢节点,将所述目标节点的候选状态更新为第二候选状态,以及将所述目标节点的通知状态更新为第二通知状态。
在示出的一些实施例中,所述目标节点还维护了标识来源信息;所述标识来源信息指示所述目标节点的公有标识的来源;所述方法还包括:将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识之后,更新所述目标节点的标识来源信息,以使该标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点。
在示出的一些实施例中,在获取相邻的下游节点的候选状态与公有标识之后,所述方法还包括:响应于所述相邻的下游节点的候选状态为第二候选状态,并且所述目标节点的标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识,以使所述目标节点的公有标识与私有标识大于所述相邻的下游节点的公有标识。
在示出的一些实施例中,所述增大所述目标节点的公有标识,包括:将所述目标节点的公有标识输入增大函数,得到增大后的公有标识;其中,所述增大函数用于使输出大于输入。
在示出的一些实施例中,所述方法还包括:响应于建立或解除依赖关系,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识。
在示出的一些实施例中,所述方法还包括:在确定所述目标节点对应的依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的依赖路径中存在环路。
在示出的一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述依赖路径上的各节点的私有标识向下游进行传递;所述方法还包括:响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高或最低的节点,确定为环路处理节点;以及,触发关闭所述环路处理节点以解除所述环路。
在示出的一些实施例中,所述方法还包括:响应于确定包含所述目标节点的依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在示出的一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
本申请还提出一种环路检测装置,应用于分布式系统中的任一目标节点;所述目标节点对应至少一条以所述目标节点为起点的依赖路径;所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识;所述公有标识用于在相邻的节点之间传递;所述私有标识用于指示与其对应的节点;所述装置包括:状态传递模块,获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态;标识传递模块,获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识;环路确定模块,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
本申请还提出一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如前述任一实施例示出的环路检测方法。
本申请还提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于使处理器执行如前述任一实施例示出的环路检测方法。
在本申请记载的方案中,第一,通过针对分布式系统中任一目标节点执行将所述目标节点的候选状态更新为其相邻的下游节点的候选状态的步骤,可以将各依赖路径中的终点的候选状态传递至依赖路径中的各节点。在本方案中,在依赖路径的终点存在下游节点的情形下,可以将该终点的候选状态置为第一候选状态,如此依赖路径中的各节点的候选状态经过传递后均为第一候选状态,而由于终点存在下游节点的依赖路径为环路,因此,通过针对分布式系统中任一目标节点执行将所述目标节点的候选状态更新为其相邻的下游节点的候选状态的步骤,可以使各节点维护的候选状态为第一候选状态时,准确指示其对应的依赖路径中存在环路。
第二,由于响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识,因此可以在路径中出传递较大的公有标识,而本方案中响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路,因此可以保证总是环路内对应公有标识最大的节点检测出环路,从而一方面,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测;另一方面,由于一条环路内只有一个最大节点,因此一个环路只有一个节点会被杀,本申请记载的方案不会杀死过多的节点。
第三,在候选状态与公有标识传递过程中,各节点只需要与其相邻节点之间进行消息传递,因此一方面各节点仅需维护与其直接相邻的节点的依赖关系,可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能;另一方面,可以在工作较严格的半异步网络下也可以实现环路检测。
第四,由于响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识,因此,只有在下游节点的候选状态为第一候选状态时才会传递其公有标识,从而可以达到传递第一候选状态的节点的公有标识,不会传递非第一候选状态的节点的公有标识的效果,进而避免处于环路下游位置的非第一候选状态的节点的公有标识传递到环内对环内的公有标识传递造成影响,影响环路检测,进而实现多出度环路检测。
附图说明
图1为本申请示出的一种依赖路径示意图;
图2为本申请示出的一种环路检测方法的方法流程图;
图3为本申请示出的一种候选状态更新方法流程图;
图4为本申请示出的一种环路检测方法流程示意图;
图5为本申请示出的一种依赖路径示意图;
图6a为本申请示出的一种节点候选状态维护与传递示意图;
图6b为本申请示出的一种节点候选状态维护与传递示意图;
图6c为本申请示出的一种节点候选状态维护与传递示意图;
图6d为本申请示出的一种节点候选状态维护与传递示意图;
图7a为本申请示出的一种节点公有标识维护与传递示意图;
图7b为本申请示出的一种节点公有标识维护与传递示意图;
图7c为本申请示出的一种节点公有标识维护与传递示意图;
图7d为本申请示出的一种节点公有标识维护与传递示意图;
图8为本申请示出的一种节点状态示意图;
图9为本申请示出的一种环路检测装置的结构示意图;
图10为本申请示出的一种电子设备的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施例并不代表与本申请一个或多个实施例相一致的所有实施例。相反,它们仅是与如所附权利要求书中所详述的、本申请一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
本申请以分布式系统为分布式数据库系统为例进行环路检测说明,其它类型的分布式系统可以参照分布式数据库系统。
请参见图1,图1为本申请示出的一种依赖路径示意图。
以下结合图1进行一些概念的介绍。
节点:是指执行分布式数据库事务的进程。节点可以来自于同一物理设备或不同的物理设备。如图1示出的节点A-F。
依赖关系:若节点A执行事务需要依赖节点B执行事务之后的结果,可以认为节点A依赖节点B,节点A与节点B具有依赖关系。依赖关系具有方向,A依赖B可以表示为A->B。
上游节点:依赖关系中需要依赖其它节点的节点。下游节点:依赖关系中被依赖的节点。在图1示出的节点A与节点B的依赖关系中,节点A为上游节点,节点B为下游节点。
末梢节点:没有下游节点的节点称为末梢节点。如图1中的节点B和节点F。
依赖路径:以某一节点为起点,按照所述起点的出度依赖关系,到末梢节点或者在某条路径中出现的某个节点为止形成的路径。所述依赖路径中相邻的两个节点之间具有依赖关系。依赖路径具有方向。
以图1中示出的节点A为例。节点A对应三条依赖路径。分别为A->B,
A->C->D->C和A->C->D->E->F。其中,第一条依赖路径的起点为节点A,终点为末梢节点B。第二条依赖路径的起点为节点A,终点为该路径中已经出现过的节点C。第三条依赖路径的起点为节点A,终点为末梢节点F。以节点E为例,节点E对应一条依赖路径,E->F。
依赖路径可以分为环路与非环路。其中,非环路是指终点为末梢节点的路径。如图1中的依赖路径A->B和A->C->D->E->F。
环路是指终点为在某条路径中出现的某个节点的路径。环路中存在两个节点相互依赖。如图1示出的环路A->C->D->C。其中,节点C依赖节点D,而节点D也依赖节点C,即节点C和D相互依赖,出现环路。
环内节点:处在环路内的节点。例如图1中的节点C、D。
环外节点:处在环路之外的点。例如图1中的节点A、B、E、F。其中节点E、F为处于环路下游的环外节点。
节点维护的候选状态,需要说明的是所述候选状态包括传递过程中的候选状态,与经过多次候选状态传递后稳定的候选状态。在传递过程中各节点的候选状态可以是经常变化的,因此不具有稳定的含义。
稳定的候选状态,可以是指经过多次候选状态更多后得到的不会变化的候选状态。稳定的候选状态,用于指示对应节点对应的至少一条依赖路径中是否存在环路。所述稳定的候选状态可以包括指示节点对应的至少一条依赖路径中存在环路的第一候选状态,以及,指示节点对应的至少一条依赖路径中不存在环路的第二候选状态。在一些实施例中,可以通过字符串TRUE指示所述第一候选状态,通过字符串FALSE指示所述第二候选状态。
当任一节点的候选状态为第一候选状态时,即可以说明以该节点为起点的依赖路径中存在环路。如图1中的A->C->D->C。节点A稳定的候选状态即为第一候选状态。对于与节点E来讲,其对应的依赖路径E->F为非环路,节点E和F稳定的候选状态为第二候选状态。这里需要说明的是,在本申请中如果任一节点对应的依赖路径既包括环路也包括非环路,其候选状态为第一候选状态。例如图1中的节点A对应的依赖路径中包括非环路A->B,以及环路A->C->D->C,其稳定的候选状态为第一候选状态。
节点维护的私有标识:可以用于唯一标识其对应的节点。
节点维护的公有标识:可以用于在相邻节点之间传递。所述公有标识的初始值与所述私有标识的初始值相同。
消息传递:是指具有依赖关系的上游节点与下游节点之间的数据传递。上游节点中可以维护与其相邻的下游节点的信息(例如,IP地址),通过该信息可以向其相邻的下游节点发送消息。所述下游节点也可以向上游节点返回消息。本申请中传递的消息可以包括候选状态,私有标识,公有标识,环路检测消息等。
有鉴于此,本申请提供了一种环路检测方法。该方法使系统中任一节点根据其相邻的下游节点的候选状态更新自身候选状态,以实现候选状态的维护与传递,使得任一节点的候选状态为第一候选状态可以表示该节点对应的依赖路径中存在环路。该方法还可以使系统中任一节点维护与其具有依赖关系的节点信息,通过与具有依赖关系的相邻节点进行信息交互,使得第一候选状态的节点的公有标识可以在依赖路径内进行传递,从而避免环外非第一候选状态的节点的公有标识传递至环内,对环路检测造成影响。该方法还可以响应于任意节点的私有标识等于其上游节点传递的公有标识,确定自身公有标识被传递一周,从而发现环路。
请参见图2,图2为本申请示出的一种环路检测方法的方法流程图。
如图2所示,所述方法可以包括:
S202,获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态。
S204,获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识。
S206,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
所述方法可以应用于分布式系统(以下简称系统)中的任一目标节点。即所述分布式系统的任一目标节点均会执行该方法。该系统可以包括相同或不同地址的多台电子设备。各电子设备可以配合执行分布式事务。本申请不限定电子设备的具体类型,以及所述系统的具体架构。以下以执行主体为分布式系统(以下简称系统)中的任一目标节点为例进行说明。
所述目标节点对应至少一条以所述目标节点为起点的依赖路径;所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识;所述候选状态包括指示所述目标节点对应的至少一条依赖路径中存在环路的第一候选状态;所述公有标识用于在相邻的节点之间传递;所述私有标识用于指示与其对应的节点。
在一些实施例中,在执行S202时,所述目标节点可以通过消息传递,向其相邻的下游节点发送获取候选状态请求。所述下游节点在接收到该请求后,可以将自身候选状态发送至目标节点。所述目标节点在获取到相邻的下游节点的候选状态后,可以根据所述相邻的下游节点的候选状态更新自身候选状态。
在一些实施例中,在更新自身候选状态时,可以根据以下规则:如果所述目标节点存在至少一个下游节点的候选状态为第一候选状态,则将自身候选状态更新为第一候选状态;反之,如果所述目标节点依赖的全部下游节点的候选状态为非第一候选状态,则将自身后续状态更新为非第一候选状态。
以图1为例。节点D可以获取相邻节点节点E与节点C的候选状态。假设节点E的候选状态为非第一候选状态,节点C的候选状态为第一候选状态,则节点D的候选状态更新为第一候选状态。假设节点C的候选状态也是非第一候选状态,则节点D的候选状态更新为非第一候选状态。
以此类推,所述目标节点的上游节点与所述目标节点之间也会进行候选状态传递,即路径中下游节点的候选状态将被向上传递。
当所述系统中任意具有依赖关系的两个节点之间均在周期性执行S202示出的步骤时,可以理解为各节点在传递终点的候选状态。
在本申请中可以存在一些候选状态维护机制,可以使依赖路径中的终点在具有下游节点的情形下,保证其候选状态为第一候选状态。比如,所述维护机制可以包括:节点周期性的检测是否具有下游节点,如果具有则将自身候选状态置为第一候选状态。由此可以使各依赖路径中终点在具有下游节点的情形下,保证其候选状态为第一候选状态。
如此当某一依赖路径的终点为路径中已经存在的节点时,由于该终点存在下游节点,其候选状态为第一候选状态,即通过周期性执行S202步骤,最终可以使该路径中各节点的候选状态为第一候选状态。
由于如果某一依赖路径的终点为路径中已经存在的节点,则可以说明该路径存在环路。可见,通过多次执行S202步骤,可以使依赖路径中各节点的候选状态与实际情形相符,即如果某一节点的候选状态为第一候选状态,则以该节点为起点的依赖路径中存在环路。
以图1为例。在图1中,对于节点A,其环路A->C->D->C的终点为节点C。而节点C存在下游节点D,则其候选状态为第一候选状态,经过多次执行S202之后,节点A、B、C对应的候选状态均第一候选状态。即各节点的候选状态与实际情形相符。
对于路径A->C->D->E->F,其中节点E依赖节点F。由于末梢节点F不存在下游节点,则经过多次执行S202之后,节点E和节点F的候选状态为非第一候选状态。而节点D既依赖节点E也依赖节点C,由于节点C的候选状态为第一候选状态,因此在更新节点D的候选状态时,根据更新规则可以将其候选状态更新为第一候选状态。
所述目标节点还可以执行S204-S206。在一些实施例中,在进行候选状态传递的过程中,所述目标节点还可以通过消息传递,向其相邻的下游节点发送候选状态与公有标识获取请求。所述下游节点可以响应于该请求向所述目标节点发送自身候选状态与公有标识。
所述目标节点可以通过接收的候选状态判断其相邻下游节点的候选状态是否为第一候选状态。如果所述下游节点的候选状态为第一候选状态,则可以说明以所述下游节点为起点的路径中存在环路,也即有必要判断所述下游节点对应的路径中是否存在环路,因此,可以将所述下游节点的公有标识与所述目标节点的公有标识进行比较,如果所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识。
在公有标识传递过程中,如果所述目标节点发现其私有标识等于获取的所述相邻的下游节点的公有标识,则可以确定自身公有标识(初始值等于自身私有标识)被传递一周,即所述目标节点对应的依赖路径中存在环路。
以图1为例,在经过多次S202后,节点A、C、D的候选状态为第一候选状态。节点E、F的候选状态为非第一候选状态。其中,节点D的公有标识大于节点C的公有标识。节点D的公有标识的初始值等于其私有标识。在执行S204时,当节点C获取节点D的公有标识后,由于节点D为第一候选状态,且节点C的公有标识小于节点D,则节点C的公有标识会本更新为节点D的公有标识。之后,当节点D获取到节点C的公有标识后,可以发现自身私有标识与节点C的公有标识相同,则可以确定自身对应的路径中存在环路。
本方案还可以应用于多出度场景中。以图1为例。在多出度场景中,由于各节点的依赖关系的复杂性,导致节点E的初始公有标识可能会大于节点D的公有标识。如果节点E的公有标识传递到环路C->D内,则节点C或节点D均不会发现自身私有标识与节点E的公有标识相同,即不会发现环路,造成环路检测失效。
在本方案中,在执行S204时,节点D在获取到节点E的候选状态和公有标识后,由于节点E经过多次执行S202后的候选状态为非第一候选状态,即不论节点E的公有标识为多少均不会传递到环路C->D内,即不会对节点C和节点D之间的公有标识传递造成影响,即本申请记载的方案在多出度场景中也可以进行环路检测。
在本申请记载的方案中,第一,通过针对分布式系统中任一目标节点执行将所述目标节点的候选状态更新为其相邻的下游节点的候选状态的步骤,可以将各依赖路径中的终点的候选状态传递至依赖路径中的各节点。在本方案中,在依赖路径的终点存在下游节点的情形下,可以将该终点的候选状态置为第一候选状态,如此依赖路径中的各节点的候选状态经过传递后均为第一候选状态,而由于终点存在下游节点的依赖路径为环路,因此,通过针对分布式系统中任一目标节点执行将所述目标节点的候选状态更新为其相邻的下游节点的候选状态的步骤,可以使各节点维护的候选状态为第一候选状态时,准确指示其对应的依赖路径中存在环路。
第二,由于响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识,因此可以在路径中出传递较大的公有标识,而本方案中响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路,因此可以保证总是环路内对应公有标识最大的节点检测出环路,从而一方面,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测;另一方面,由于一条环路内只有一个最大节点,因此一个环路只有一个节点会被杀,本申请记载的方案不会杀死过多的节点。
第三,在候选状态与公有标识传递过程中,各节点只需要与其相邻节点之间进行消息传递,因此一方面各节点仅需维护与其直接相邻的节点的依赖关系,可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能;另一方面,可以在工作较严格的半异步网络下也可以实现环路检测。
第四,由于响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识,因此,只有在下游节点的候选状态为第一候选状态时才会传递其公有标识,从而可以达到传递第一候选状态的节点的公有标识,不会传递非第一候选状态的节点的公有标识的效果,进而避免处于环路下游位置的非第一候选状态的节点的公有标识传递到环内对环内的公有标识传递造成影响,影响环路检测,进而实现多出度环路检测。
在一些实施例中,所述目标节点在发现环路的情形下,可以触发关闭所述目标节点以解除所述环路,确保顺利执行分布式事务。在一些实施例中,可以通过事务回滚,或释放所述目标节点的依赖关系等方式来解除所述环路。
在一些实施例中,目标节点还可以通过维护通知状态,控制下游节点候选状态的更新,可以使下游节点获得稳定的候选状态。
所述通知状态可以包括指示通知该节点的下游节点更新候选状态的第一通知状态以及指示不通知该节点的下游节点更新候选状态的第二通知状态。
在一些实施例中,在所述目标节点新建立依赖关系时,可以将所述目标节点的初始通知状态更新为第一通知状态,以及将所述目标节点的初始候选状态更新为第一候选状态。由此可以在新建立依赖关系后,重新更新目标节点和其下游节点的候选状态。
请参见图3,图3为本申请示出的一种候选状态更新方法流程图。
如图3所示,在执行S202时,目标节点在获取到其相邻下游节点的候选状态后,可以根据自身的通知状态进行候选状态更新。其中S302,可以响应于所述目标节点的通知状态为第二通知状态,根据所述相邻的下游节点的候选状态更新自身候选状态。S304,可以响应于所述目标节点为通知状态为第一通知状态,向所述相邻的下游节点发送通知消息,以使所述相邻的下游节点响应于自身为末梢节点,将候选状态更新为第二候选状态,或者,响应于自身为非末梢节点,将候选状态更新为第一候选状态;以及,将所述目标节点的候选状态更新为所述相邻的下游节点的当前的候选状态,并将所述目标节点的通知状态更新为第二通知状态。
以图1为例。假设节点D和节点C的依赖关系是新建立的,即节点D的通知状态为第一通知状态。节点D在新建立依赖关系后,首次获取其相邻节点C和节点E的候选状态后,可以响应于自身为第一通知状态,向节点C和节点E发送更新状态通知,使节点C和节点E可以更新自身候选状态,从而获取准确的候选状态。经过多次候选状态传递后,节点E稳定的候选状态可以与节点F相同,即为第二候选状态。
假设节点E和节点F之间的依赖关系也是新建立的,由于下游节点F不具有下游节点(为末梢节点),因此其候选状态为第二候选状态。
因为节点C和节点E均存在下游节点,由此节点C和节点E均可以更新为第一候选状态。之后节点C和节点E还可以将更新后的候选状态发送至节点D。节点D可以将自身候选状态更新为节点C和节点E的候选状态。完成候选状态更新后,节点D可以将自身通知状态更新为第二通知状态,以使节点D在后续获取到节点C和节点E的候选状态后,不对节点C和节点E的状态进行更新,使节点C的候选状态可以稳定保持第一候选状态,节点E的候选状态可以稳定保持第二候选状态。
在一些实施例中,所述目标节点在解除依赖关系时,也可以更新自身候选状态,以使自身候选状态与实际情形相符。在解除依赖关系时,如果所述目标节点为末梢节点(即不存在下游节点),则可以将自身候选状态更新为第二候选状态,以及将所述目标节点的通知状态更新为第二通知状态。如果所述目标节点存在下游节点,则可以不对自身候选状态进行更新。
在一些实施例中,所述目标节点可以维护了标识来源信息;所述标识来源信息指示所述目标节点的公有标识的来源。所述目标节点的标识来源信息初始值可以是自身节点序号。
在执行S202时,如果所述目标节点的候选状态被更新为其相邻的下游节点的候选状态,则可以更新所述目标节点的标识来源信息,以使该标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点。
以图1为例。假设节点E的候选状态在处于稳定之前的某一时刻为第一候选状态,并且节点E的公有状态大于节点D。此时节点D可以将节点E的公有标识设置为自身的公有标识,并将自身维护的标识来源信息更新为节点E的序号,以指示节点D的公有标识的来源为节点E。
在一些实施例中,为了适应依赖关系实时变化的情形,S202与S204可以是分别独立执行的步骤,此时即可能在依赖路径中的节点的候选状态没有达到稳定前进行公有标识的传递,导致处于下游的环外节点的公有标识传递至环内,对环路检测造成影响。
以图1为例。假设节点E的候选状态在处于稳定之前的某一时刻为第一候选状态,并且节点E的公有状态大于节点D。此时节点E的公有标识可以传递至环路C->D内,影响环路检测。
为了解决这一问题,在一些实施例中,目标节点在获取到其相邻的下游节点的候选状态后,可以响应于所述相邻的下游节点的候选状态为第二候选状态,并且所述目标节点的标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识,以使所述目标节点的公有标识与私有标识大于所述相邻的下游节点的公有标识。
以图1为例。假设节点E的公有标识已传递至节点D。经过多次候选状态传递后,节点E稳定的候选状态为第二候选状态。此时节点D可以响应于节点E为第二候选状态,并且通过标识来源信息确定节点E的公有标识已经传递至节点D时,可以在当前公有标识的基础上,增大公有标识,并将自身私有标识更新为增大后的公有标识,以使节点D的公有标识和私有标识均大于节点E,使得在环路内传递的公有标识是节点D的公有标识而非节点E的公有标识,从而使得即便节点E的公有标识传递至环内,也不会在环路内传递,不会对环路检测造成影响。
在一些实施例中,所述目标节点可以维护增大函数,用于增大公有标识。在增大公有标识时,所述目标节点可以将当前公有标识输入所述增大函数,得到增大后的公有标识。需要说明的是,本申请不对增大函数的具体类型进行限定。例如,所述增大函数可以是Inc函数。
在一些实施例中,由于在任意节点建立或解除依赖关系之后,原先的依赖路径已经发生变化,例如可能会形成新的环路,或者环路消失,为此需要重新进行公有标识的传递。在一些实施例中,可以响应于建立或解除依赖关系,可以增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识,从而可以为所述目标节点新生成公有标识与私有标识,覆盖掉之前已经开始传递的公有标识,从而环路内会重新传递更大的公有标识,而非之前的公有标识,从而时之前的公有标识不会对环路检测造成影响。
在一些实施例中,可以目标节点发现环路时,在环内发送环检测消息,进行环路二次确认,从而降低环路检测误检率,提升环路检测正确性。
请参见图4,图4为本申请示出的一种环路检测方法流程示意图。
如图4所示,可以执行S402,在确定包含所述目标节点的依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息。然后可以执行S404,响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的依赖路径中存在环路。
所述环检测消息可以包括所述目标节点的全局唯一的私有标识。
在本例中,如果所述目标节点处于环路中,则其发送的环检测消息一定会最终被传回所述目标节点,因此当所述目标节点接收到自身发送的环检测消息后,可以再次确定包含所述目标节点的依赖路径中存在环路,从而达到环路二次确认,从而降低环路检测误检率,提升环路检测正确性的效果。
在一些实施例中,通过所述环检测消息可以收集环路内各节点的私有标识信息,其中,所述私有标识为指示节点的优先级的全局唯一的节点标识,从而目标节点在收到检测消息后,可以关闭环路内优先级最高或最低的节点以解除环路。
在一些实施例中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,可以确定自身包括的公有标识是否与环检测消息包括的私有标识相同,如果确定自身的公有标识与所述目标节点的私有标识相同,可以确定自身处于环路内,然后可以将自身私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述依赖路径上的各节点的私有标识向下游进行传递。由此,所述环检测消息可以收集处于环路内的节点的私有标识。
在环检测消息传递的过程中,当所述目标节点接收到所述环检测消息后,可以获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高或最低的节点,确定为环路处理节点;以及,触发关闭所述环路处理节点以解除所述环路。由此即可将环路内优先级最高或最低的节点杀死以解除环路。
以下结合具体场景进行实施例说明。
请参见图5,图5为本申请示出的一种依赖路径示意图。所述依赖路径可以是在分布式数据库系统中生成的路径。该系统包括的节点可以用于执行数据库事务的事务进程;节点之间的依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WFG等待图中的路径。节点的深度可以是指锁等待深度。本例中进行环路检测即进行死锁检测。
图5示出的依赖路径包括A、B、C、D、E五个节点。以节点A为起点的依赖路径包括为A->B->D->C->A和A->B->D->E。在初始阶段,可以根据各节点死锁优先级,为各节点分配私有标识。其中优先级高的私有标识数值较大。各节点的公有标识等于各节点的私有标识。各节点还可以维护候选状态与通知状态。所述候选状态在达成稳定后,可以指示节点对应的依赖路径中是否存在环路。所述候选状态可以包括指示节点对应的依赖路径中存在环路的TRUE(T)状态,以及指示节点对应的依赖路径中不存在环路的FALSE(F)状态。所述通知状态用于指示是否通知下游节点进行候选状态更新。所述通知状态包括指示通知该节点的下游节点更新候选状态的TRUE(T)状态以及指示不通知该节点的下游节点更新候选状态的FALSE(F)状态。
各节点还维护了与其相邻的下游节点的依赖关系。各节点还维护的增大函数为INC(V)=V+1。其中V为输入,INV(V)为输出。各节点还维护了用于更新自身候选状态的命题M。如果节点存在至少一个下游节点的候选状态为T,则将自身候选状态更新为T,反之,如果节点依赖的全部下游节点的候选状态为F,则将自身后续状态更新为F。
图5示出的各节点可以进行候选状态维护与传递。
请参见图6a、图6b、图6c与图6d,图6a、图6b、图6c与图6d为本申请示出的一种节点候选状态维护与传递示意图。图示的各节点上半区域指示候选状态,下半区域指示通知状态。
如图6a所示,当任意两个节点之间建立依赖关系时,可以将上游节点的候选状态与通知状态更新为T,代表候选状态为第一候选状态,通知状态更新为第一通知状态。
如图5中的节点D与节点E建立依赖关系时,节点D的候选状态与通知状态更新为T。
如图6b所示,当任意两个节点之间解除依赖关系时,如果上游节点不存在下游节点(即出度为0),则将其候选状态与通知状态更新为F,代表候选状态为第二候选状态,通知状态更新为第二通知状态。如果上游节点存在下游节点(即出度大于0),可以不调整上游节点的候选状态与通知状态。
例如,假设节点E还依赖节点F,如果节点E与节点F解除依赖关系时,由于节点E不存在其它下游节点,则可以将候选状态与通知状态更新为F。
系统中任一目标节点可以周期性向其相邻下游节点发送候选状态获取请求,所述相邻下游节点可以将自身候选状态发送至所述目标节点。所述目标节点可以根据自身通知状态更新下游节点或自身的候选状态。
如图6c所示,当系统中任一目标节点接收到其下游节点的候选状态后,如果目标节点的通知状态为F,则不通知其下游节点进行候选状态更新,并且可以根据命题M更新自身候选状态,以完成候选状态的传递。
例如图5中的节点D,假设节点D通知状态为F,节点C的候选状态为T,节点E的候选状态为F。则当节点D获取到相邻下游节点C和节点E的候选状态后,不会对节点C和节点E的候选状态进行更新,并且根据命题M,节点D会将节点C的候选状态置为自身候选状态,完成候选状态传递。
如图6d所示,当系统中任一目标节点接收到其下游节点的候选状态后,如果目标节点的通知状态为T,则通知其下游节点进行候选状态更新。其中,如果下游节点为末梢节点(不具有下游节点,即出度为0),则将下游节点的候选状态和通知状态更新为F。如果下游节点为非末梢节点(即具有下游节点,即出度大于0),则将下游节点的候选状态和通知状态更新为T。所述目标节点可以根据命题M更新自身候选状态,并在候选状态更新后将自身通知状态置为F,使得其下游节点的候选状态可以趋于稳定。
例如图5中的节点D,假设节点D通知状态为T,则可以通知其相邻下游节点C与下游节点E进行候选状态更新。由此可以使下游节点获得准确的候选状态。之后节点D可以根据节点C与节点E更新后的候选状态,更新自身候选状态,并将通知状态置为F,使得节点C与节点E的候选状态可以保持稳定。
通过周期性执行图6a、图6b、图6c与图6d示出的候选状态维护与传递步骤,可以使依赖路径中各节点的候选状态与终点的候选状态一致,即如果终点为环路内的节点,其候选状态为第一候选状态,经过传递各节点的候选状态也均为第一候选状态,表示该依赖路径中存在环路。如果终点为末梢节点,其候选状态为第二候选状态,经过传递各节点的候选状态也均为第二候选状态,表示该依赖路径中不存在环路,与实际情形相符。
在进行候选状态维护与传递的过程中,图5示出的各节点还可以进行公有标识维护与传递。
请参见图7a、图7b、图7c与图7d,图7a、图7b、图7c与图7d为本申请示出的一种节点公有标识维护与传递示意图。
其中,图示节点A与节点B的左上区域指示公有标识,左下区域指示私有标识,右上指示候选状态,右下指示标识来源。
如图7a所示,当任意两个节点之间建立依赖关系时,可以将上游节点的当前公有标识V输入增大函数,得到增大后的公有标识INC(V)。然后可以将私有标识置为INC(V)并将信息来源标识为自身序号。
如图7b所示,当任意两个节点之间解除依赖关系时,可以将上游节点的当前公有标识输入增大函数,得到增大后的公有标识INC(V)。然后可以将私有标识置为INC(V)并将信息来源标识为自身序号。
系统中任一目标节点可以周期性向其相邻下游节点发送候选状态与公有标识获取请求,所述相邻下游节点可以将自身候选状态与公有标识发送至所述目标节点。所述目标节点可以根据下游节点的候选状态更新自身公有标识。
如图7c所示,当下游节点为第二候选状态,所述目标节点的公有标识与所述下游节点的公有标识相同,并且所述目标节点的来源标识为所述下游节点序号时,所述目标节点可以将自身公有标识和私有标识置为INC(V)并将信息来源标识为自身序号。由此可以避免已经传递到环路内的环外节点的公有标识被覆盖,从而避免该环外节点的公有标识对环路检测造成影响。
如图7d的所示,当下游节点为第一候选状态,并且所述目标节点的公有标识V小于所述下游节点的公有标识U时,所述目标节点可以将自身公有标识置为U,并将标识来源置为下游节点标识。由此可以完成公有标识传递。
在公有标识传递过程中,如果系统中任一目标节点发现接收的公有标识与自身私有标识相同,则可以说明自身公有标识被传递一周,即发现死锁。
请参见图8,图8为本申请示出的一种节点的候选状态和公有标识示意图。
如图8所示,经过如图6a、如图6b、如图6c与如图6d以及如图7a、如图7b、如图7c与如图7d示意的候选状态与公有标识维护和更新步骤后,图5示意的各节点维护的公有标识,私有标识与候选状态如下表1所示。
其中,环内节点A、B、C、D的候选状态为T,下游的环外节点E的候选状态为F。节点D在接收到其上游节点B传递的公有标识后,将识别出自身私有标识与节点B传递的公有标识,即可确定自身公有标识4被传递一周,即发现死锁。
在本例中,各节点只需维护与其直接相邻的节点的依赖关系,在各节点之间只需传递候选状态和公有标识信息,从而可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能。
发现死锁后,可以进行死锁复检步骤。
发现死锁的节点D可以发起环检测消息。所述消息中包括该节点D的私有标识4。所述处理节点可以将该消息发送至下游节点C。下游节点C在接收到该消息后,可以验证自身维护的公有标识是否为消息中携带的节点D的私有标识。经过公有标识传递,环内节点C的公有标识一定为4,因此节点C可以确定自身为环内节点,并将自身的私有标识3加入该消息内向自身下游节点发送。依次类推,当所述处理节点接收到所述环检测消息,并发现环检测消息内包含自身的私有标识,即可以确定环路真实存在,确定一定存在死锁。由此可以对死锁进行复检,避免误检测。
之后,节点D,可以从环检测消息中确定私有标识最小即优先级最低的节点并对该节点进行事务回滚,以及消除该节点的依赖关系等操作以解开死锁。由此可以啥时优先级最低的节点,打开死锁,避免存储事务阻塞。
与前述实施例相应的,本申请还提出一种环路检测装置。该装置可以应用于分布式系统中的任一目标节点;所述目标节点对应至少一条以所述目标节点为起点的依赖路径;所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识;所述公有标识用于在相邻的节点之间传递;所述私有标识用于指示与其对应的节点。
请参见图9,图9为本申请示出的一种环路检测装置的结构示意图。
如图9所示,所述装置90可以包括:
状态传递模块91,获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态;
标识传递模块92,获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识;
环路确定模块93,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
在示出的一些实施例中,所述目标节点还维护了通知状态;所述通知状态包括指示通知该节点的下游节点更新候选状态的第一通知状态以及指示不通知该节点的下游节点更新候选状态的第二通知状态;
所述状态传递模块91,用于:
响应于所述目标节点的通知状态为第二通知状态,根据所述相邻的下游节点的候选状态更新自身候选状态;
响应于所述目标节点为通知状态为第一通知状态,向所述相邻的下游节点发送通知消息,以使所述相邻的下游节点响应于自身为末梢节点,将候选状态更新为第二候选状态,或者,响应于自身为非末梢节点,将候选状态更新为第一候选状态;以及,根据所述相邻的下游节点的候选状态更新自身候选状态,并将所述目标节点的通知状态更新为第二通知状态。
在示出的一些实施例中,所述装置90还包括:
第一更新模块,响应于建立依赖关系,将所述目标节点的通知状态更新为第一通知状态,以及将所述目标节点的候选状态更新为第一候选状态;
响应于解除依赖关系,并且所述目标节点为末梢节点,将所述目标节点的候选状态更新为第二候选状态,以及将所述目标节点的通知状态更新为第二通知状态。
在示出的一些实施例中,所述目标节点还维护了标识来源信息;所述标识来源信息指示所述目标节点的公有标识的来源;所述装置90还包括:
第二更新模块,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识之后,更新所述目标节点的标识来源信息,以使该标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点。
在示出的一些实施例中,在获取相邻的下游节点的候选状态与公有标识之后,所述装置90还包括:
第一增大模块,响应于所述相邻的下游节点的候选状态为第二候选状态,并且所述目标节点的标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识,以使所述目标节点的公有标识与私有标识大于所述相邻的下游节点的公有标识。
在示出的一些实施例中,所述第一增大模块,用于:
将所述目标节点的公有标识输入增大函数,得到增大后的公有标识;
其中,所述增大函数用于使输出大于输入。
在示出的一些实施例中,所述装置90还包括:
第二增大模块,响应于建立或解除依赖关系,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识。
在示出的一些实施例中,所述装置90还包括:
环检测消息发送模块,在确定所述目标节点对应的依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的依赖路径中存在环路。
在示出的一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述依赖路径上的各节点的私有标识向下游进行传递;
所述装置90还包括:
环路处理节点确定模块,响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高或最低的节点,确定为环路处理节点;以及,
第一关闭模块,触发关闭所述环路处理节点以解除所述环路。
在示出的一些实施例中,所述装置90还包括:
第二关闭模块,响应于确定包含所述目标节点的依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在示出的一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
本申请示出的环路检测装置的实施例可以应用于电子设备上。相应地,本申请公开了一种电子设备,该设备可以包括:处理器。
用于存储处理器可执行指令的存储器。
其中,所述处理器被配置为调用所述存储器中存储的可执行指令,实现前述任一实施例示出的环路检测方法。
请参见图10,图10为本申请示出的一种电子设备的硬件结构示意图。
如图10所示,该电子设备可以包括用于执行指令的处理器,用于进行网络连接的网络接口,用于为处理器存储运行数据的内存,以及用于存储环路检测装置对应指令的非易失性存储器。
其中,所述装置的实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图10所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
可以理解的是,为了提升处理速度,环路检测装置对应指令也可以直接存储于内存中,在此不作限定。
本申请提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可以用于使处理器执行如前述任一实施例示出的环路检测方法。
本领域技术人员应明白,本申请一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本申请一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(可以包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请中记载的“和/或”表示至少具有两者中的其中一个,例如,“A和/或B”包括三种方案:A、B、以及“A和B”。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
所述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的行为或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本申请中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本申请中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本申请中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本申请中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理系统。通常,中央处理系统将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理系统以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及0xCD_00 ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本申请包含许多具体实施细节,但是这些不应被解释为限制任何公开的范围或所要求保护的范围,而是主要用于描述特定公开的具体实施例的特征。本申请内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,所述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (14)
1.一种环路检测方法,应用于分布式系统中的任一目标节点;所述目标节点对应至少一条以所述目标节点为起点的依赖路径;所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识;所述公有标识用于在相邻的节点之间传递;所述私有标识用于指示与其对应的节点;
所述方法包括:
获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态;
获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识;
响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
2.根据权利要求1所述的方法,所述目标节点还维护了通知状态;所述通知状态包括指示通知该节点的下游节点更新候选状态的第一通知状态以及指示不通知该节点的下游节点更新候选状态的第二通知状态;
所述根据所述相邻的下游节点的候选状态更新自身候选状态,包括:
响应于所述目标节点的通知状态为第二通知状态,根据所述相邻的下游节点的候选状态更新自身候选状态;
响应于所述目标节点为通知状态为第一通知状态,向所述相邻的下游节点发送通知消息,以使所述相邻的下游节点响应于自身为末梢节点,将候选状态更新为第二候选状态,或者,响应于自身为非末梢节点,将候选状态更新为第一候选状态;以及,根据所述相邻的下游节点的候选状态更新自身候选状态,并将所述目标节点的通知状态更新为第二通知状态。
3.根据权利要求2所述的方法,所述方法还包括:
响应于建立依赖关系,将所述目标节点的通知状态更新为第一通知状态,以及将所述目标节点的候选状态更新为第一候选状态;
响应于解除依赖关系,并且所述目标节点为末梢节点,将所述目标节点的候选状态更新为第二候选状态,以及将所述目标节点的通知状态更新为第二通知状态。
4.根据权利要求1所述的方法,所述目标节点还维护了标识来源信息;所述标识来源信息指示所述目标节点的公有标识的来源;
所述方法还包括:
将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识之后,更新所述目标节点的标识来源信息,以使该标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点。
5.根据权利要求4所述的方法,在获取相邻的下游节点的候选状态与公有标识之后,所述方法还包括:
响应于所述相邻的下游节点的候选状态为第二候选状态,并且所述目标节点的标识来源信息指示所述目标节点的公有标识的来源于所述相邻的下游节点,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识,以使所述目标节点的公有标识与私有标识大于所述相邻的下游节点的公有标识。
6.根据权利要求5所述的方法,所述增大所述目标节点的公有标识,包括:
将所述目标节点的公有标识输入增大函数,得到增大后的公有标识;
其中,所述增大函数用于使输出大于输入。
7.根据权利要求5或6所述的方法,还包括:
响应于建立或解除依赖关系,增大所述目标节点的公有标识,并将所述目标节点的私有标识更新为增大后的公有标识。
8.根据权利要求7所述的方法,还包括:
在确定所述目标节点对应的依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的依赖路径中存在环路。
9.根据权利要求8所述的方法,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述依赖路径上的各节点的私有标识向下游进行传递;
所述方法还包括:
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高或最低的节点,确定为环路处理节点;以及,
触发关闭所述环路处理节点以解除所述环路。
10.根据权利要求1所述的方法,所述方法还包括:
响应于确定包含所述目标节点的依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
11.根据权利要求1所述的方法,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
12.一种环路检测装置,应用于分布式系统中的任一目标节点;所述目标节点对应至少一条以所述目标节点为起点的依赖路径;所述依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了与所述目标节点对应的候选状态、公有标识与私有标识;所述公有标识用于在相邻的节点之间传递;所述私有标识用于指示与其对应的节点;
所述装置包括:
状态传递模块,获取相邻的下游节点的候选状态,并根据所述相邻的下游节点的候选状态更新自身候选状态,以由所述目标节点的上游节点根据所述目标节点更新后的候选状态更新自身候选状态,以使各依赖路径的终点的候选状态向前传递;其中,如果所述终点存在下游节点,则所述终点的候选状态为第一候选状态;
标识传递模块,获取相邻的下游节点的候选状态与公有标识,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的公有标识小于所述相邻的下游节点的公有标识,将所述目标节点的公有标识更新为所述相邻的下游节点的公有标识;
环路确定模块,响应于所述相邻的下游节点的候选状态为第一候选状态,并且所述目标节点的私有标识等于所述相邻的下游节点的公有标识,确定所述目标节点对应的依赖路径中存在环路。
13.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-11任一所述的环路检测方法。
14.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于使处理器执行如权利要求1-11任一所述的环路检测方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110662248.4A CN113111099B (zh) | 2021-06-15 | 2021-06-15 | 一种环路检测方法、装置、电子设备与存储介质 |
PCT/CN2022/093777 WO2022262515A1 (zh) | 2021-06-15 | 2022-05-19 | 环路检测的方法、装置、电子设备与存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110662248.4A CN113111099B (zh) | 2021-06-15 | 2021-06-15 | 一种环路检测方法、装置、电子设备与存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113111099A true CN113111099A (zh) | 2021-07-13 |
CN113111099B CN113111099B (zh) | 2021-08-24 |
Family
ID=76723546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110662248.4A Active CN113111099B (zh) | 2021-06-15 | 2021-06-15 | 一种环路检测方法、装置、电子设备与存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113111099B (zh) |
WO (1) | WO2022262515A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022262515A1 (zh) * | 2021-06-15 | 2022-12-22 | 北京奥星贝斯科技有限公司 | 环路检测的方法、装置、电子设备与存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100223235A1 (en) * | 2006-08-18 | 2010-09-02 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
CN105468508A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 代码检测方法及装置 |
CN105637485A (zh) * | 2014-12-16 | 2016-06-01 | 北京大学深圳研究生院 | 一种适用于广义模型的死锁检测方法 |
CN108337911A (zh) * | 2015-04-01 | 2018-07-27 | 起元技术有限责任公司 | 在分布式计算系统中处理数据库事务 |
CN109410603A (zh) * | 2018-12-18 | 2019-03-01 | 吉林化工学院 | 一种城市交通智能控制系统 |
CN110442459A (zh) * | 2019-07-04 | 2019-11-12 | 北京百度网讯科技有限公司 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
CN110968429A (zh) * | 2019-12-20 | 2020-04-07 | 北京百度网讯科技有限公司 | 一种有向图中的环路检测方法、装置、设备和存储介质 |
US20200226227A1 (en) * | 2019-01-14 | 2020-07-16 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
US20200301756A1 (en) * | 2019-03-19 | 2020-09-24 | International Business Machines Corporation | Deadlock resolution between distributed processes using process and aggregated information |
CN111722933A (zh) * | 2019-03-19 | 2020-09-29 | 国际商业机器公司 | 分布式进程之间的死锁解决 |
CN112087506A (zh) * | 2020-09-01 | 2020-12-15 | 北京字节跳动网络技术有限公司 | 一种集群节点管理方法、装置及计算机存储介质 |
CN112799606A (zh) * | 2021-04-08 | 2021-05-14 | 蚂蚁金服(杭州)网络技术有限公司 | Io请求的调度方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112994990B (zh) * | 2021-05-20 | 2021-07-30 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
CN113111099B (zh) * | 2021-06-15 | 2021-08-24 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
-
2021
- 2021-06-15 CN CN202110662248.4A patent/CN113111099B/zh active Active
-
2022
- 2022-05-19 WO PCT/CN2022/093777 patent/WO2022262515A1/zh unknown
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100223235A1 (en) * | 2006-08-18 | 2010-09-02 | Isilon Systems, Inc. | Systems and methods for providing nonlinear journaling |
CN105468508A (zh) * | 2014-09-04 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 代码检测方法及装置 |
CN105637485A (zh) * | 2014-12-16 | 2016-06-01 | 北京大学深圳研究生院 | 一种适用于广义模型的死锁检测方法 |
CN108337911A (zh) * | 2015-04-01 | 2018-07-27 | 起元技术有限责任公司 | 在分布式计算系统中处理数据库事务 |
CN109410603A (zh) * | 2018-12-18 | 2019-03-01 | 吉林化工学院 | 一种城市交通智能控制系统 |
US20200226227A1 (en) * | 2019-01-14 | 2020-07-16 | Microsoft Technology Licensing, Llc | Mapping software constructs to synchronous digital circuits that do not deadlock |
US20200301756A1 (en) * | 2019-03-19 | 2020-09-24 | International Business Machines Corporation | Deadlock resolution between distributed processes using process and aggregated information |
CN111722933A (zh) * | 2019-03-19 | 2020-09-29 | 国际商业机器公司 | 分布式进程之间的死锁解决 |
CN110442459A (zh) * | 2019-07-04 | 2019-11-12 | 北京百度网讯科技有限公司 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
CN110968429A (zh) * | 2019-12-20 | 2020-04-07 | 北京百度网讯科技有限公司 | 一种有向图中的环路检测方法、装置、设备和存储介质 |
CN112087506A (zh) * | 2020-09-01 | 2020-12-15 | 北京字节跳动网络技术有限公司 | 一种集群节点管理方法、装置及计算机存储介质 |
CN112799606A (zh) * | 2021-04-08 | 2021-05-14 | 蚂蚁金服(杭州)网络技术有限公司 | Io请求的调度方法及装置 |
Non-Patent Citations (2)
Title |
---|
VANDANA KATE,等: "A survey on distributed deadlock and distributed algorithms to detect and resolve deadlock", 《2016 SYMPOSIUM ON COLOSSAL DATA ANALYSIS AND NETWORKING (CDAN)》 * |
杨永: "分布式系统中死锁检测方法研究", 《中国博士学位论文全文数据库信息科技辑》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022262515A1 (zh) * | 2021-06-15 | 2022-12-22 | 北京奥星贝斯科技有限公司 | 环路检测的方法、装置、电子设备与存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2022262515A1 (zh) | 2022-12-22 |
CN113111099B (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9755895B2 (en) | System and method for configuration of link aggregation groups | |
WO2021135448A1 (zh) | 服务调用方法、装置、设备及介质 | |
CN111049696B (zh) | 用于区块链系统的节点管理的方法、节点和计算设备 | |
JP2020524434A (ja) | ブロックチェーン・ネットワークにおける高速伝搬のための方法及び特殊ネットワーク・ノード | |
CN112994990B (zh) | 一种环路检测方法、装置、电子设备与存储介质 | |
CN113111099B (zh) | 一种环路检测方法、装置、电子设备与存储介质 | |
CN109327544B (zh) | 一种领导节点的确定方法和装置 | |
CN110602108B (zh) | 基于区块链网络的数据通信方法、装置、设备及存储介质 | |
WO2022036764A1 (en) | Method and apparatus for protecting stateful service function paths | |
CN107547566B (zh) | 一种处理业务报文的方法及装置 | |
CN106559336B (zh) | 应用于sdn中的路径倒换方法、转发表项下发方法和装置 | |
KR20210104851A (ko) | 메쉬 네트워크 | |
KR102577432B1 (ko) | 블록체인 네트워크의 블록 합의 방법 및 장치 | |
US11063859B2 (en) | Packet processing method and network device | |
CN106789663B (zh) | 一种报文转发方法及装置 | |
US9270756B2 (en) | Enhancing active link utilization in serial attached SCSI topologies | |
CN112260971B (zh) | 网络设备系统的容错方法、装置、计算机设备和存储介质 | |
CN113098788B (zh) | 一种路由发布的方法及装置 | |
CN111404827B (zh) | 一种数据包处理方法、装置及电子设备和存储介质 | |
US11223709B2 (en) | Exchange, communication system, registration method, and program | |
Tian et al. | Thwarting traceback attack on Freenet | |
CN113067772A (zh) | 区块链网络间的交易转发方法 | |
WO2016201973A1 (zh) | 一种容灾方法、装置及通信系统 | |
CN114640553A (zh) | 一种报文处理方法及装置 | |
KR101812537B1 (ko) | 클라이언트 및 클라이언트의 동작 방법 |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210909 Address after: 100020 unit 02, 901, floor 9, unit 1, building 1, No.1, East Third Ring Middle Road, Chaoyang District, Beijing Patentee after: Beijing Aoxing Beisi Technology Co., Ltd Address before: 801-10, Section B, 8th floor, 556 Xixi Road, Xihu District, Hangzhou City, Zhejiang Province 310000 Patentee before: Ant financial (Hangzhou) Network Technology Co.,Ltd. |