CN112994990B - 一种环路检测方法、装置、电子设备与存储介质 - Google Patents
一种环路检测方法、装置、电子设备与存储介质 Download PDFInfo
- Publication number
- CN112994990B CN112994990B CN202110550972.8A CN202110550972A CN112994990B CN 112994990 B CN112994990 B CN 112994990B CN 202110550972 A CN202110550972 A CN 202110550972A CN 112994990 B CN112994990 B CN 112994990B
- Authority
- CN
- China
- Prior art keywords
- node
- depth value
- target node
- target
- downstream
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 167
- 238000011144 upstream manufacturing Methods 0.000 claims abstract description 277
- 230000001419 dependent effect Effects 0.000 claims abstract description 128
- 230000004044 response Effects 0.000 claims abstract description 113
- 238000000034 method Methods 0.000 claims abstract description 76
- 230000006870 function Effects 0.000 claims description 54
- 238000012546 transfer Methods 0.000 claims description 47
- 238000012545 processing Methods 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 26
- 238000004364 calculation method Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 230000003247 decreasing effect Effects 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 12
- 230000008859 change Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000013102 re-test Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/08—Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
-
- 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
-
- 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/466—Transaction processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/18—Loop-free operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Environmental & Geological Engineering (AREA)
- Debugging And Monitoring (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种环路检测方法、装置、电子设备与存储介质。其中所述方法可以包括:更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值。接收所述目标节点的上游节点发送的深度值,并比较所述目标节点的深度值与其上游节点发送的深度值。响应于所述目标节点的深度值小于其上游节点发送的深度值,将所述目标节点的深度值更新为其上游节点发送的深度值,以传递两个节点中较大的深度值;以及,响应于所述目标节点的深度值等于其上游节点发送的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
Description
技术领域
本申请一个或多个实施例涉及网络业务风险识别领域,尤其涉及一种环路检测方法、装置、电子设备与存储介质。
背景技术
在分布式系统中,执行并发事务的节点之间可能会发生数据依赖关系。如果发生数据依赖关系的若干节点出现环路,则可能对分布式系统性能造成影响。
例如,当分布式系统是分布式数据库系统时,假设节点A需要依赖节点B执行事务之后的结果,如果节点A与节点B之间形成环路,则节点A需要依赖节点B执行事务之后的结果,节点B也需要依赖节点A执行事务之后的结果,这可能导致节点A与节点B都无法正常执行事务。因此需要进行环路检测。
在分布式数据库系统中,防止节点竞争资源通常会对节点加锁;因此,如果在分布式数据库中存在环路,就会造成死锁现象,可以理解的是,在分布式数据库系统中,环路检测也可称为死锁检测。
目前,在一些相关技术中,需要在节点中维护全局的依赖路径,然后通过该节点进行环路检测。这样操作一方面过分依赖单一节点,如果该节点被杀死,则不能正常进行环路检测;另一方面,需要在节点之间进行全局依赖路径的传递,导致节点维护和传递信息量比较大,可能降低节点执行分布式事务的性能。而另外一些环路检测方法仅能针对单出度场景进行环路检测,而无法应用在多出度场景中。
其中,单出度是指节点仅可能依赖单个节点,或被单个节点依赖。多出度是指节点可能依赖多个节点,也可能被多个节点依赖。
发明内容
有鉴于此,本申请第一方面提供了一种环路检测方法。该方法应用于分布式系统中的任一目标节点。所述分布式系统包括至少一条包含所述目标节点的数据依赖路径。所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系。所述目标节点维护了所述目标节点对应的深度值。所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。所述方法可以包括:更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
在一些实施例中,更新所述目标节点的下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:将所述目标节点的深度值发送至所述下游节点,以使所述下游节点响应于接收到所述目标节点的深度值,将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值;其中,所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。
在一些实施例中,所述第一关系函数用如下函数表征:P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
在一些实施例中,更新所述目标节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:获取所述目标节点的下游节点的深度值;将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值;其中,所述第二关系函数描述所述目标节点的深度值相对于其下游节点的深度值的递减关系;将所述目标节点的深度值更新为所述第二深度值。
在一些实施例中,所述第二关系函数用如下函数表征:Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
在一些实施例中,所述接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,包括:在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,直至所述第二检测时长超时。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;所述接收所述目标节点的上游节点发送的深度值,包括:接收所述目标节点的上游节点发送的深度值和公有标识;所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述方法还包括:在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递;所述方法还包括:响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,触发关闭所述环路处理节点以解除所述环路。
在一些实施例中,所述方法还包括:响应于确定出包含所述目标节点的数据依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
本申请第二方面还提出一种环路检测方法。应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;所述方法包括:更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值;接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;述节点的公有标识的初始值与私有标识的初始值相同;接收所述目标节点的上游节点发送的深度值,包括:接收所述目标节点的上游节点发送的深度值和公有标识;所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
本申请第三方面还提出一种环路检测装置;应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;所述装置包括:深度更新模块,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;深度传递与环路检测模块,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
本申请第四方面还提出一种环路检测装置;应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;所述装置包括:深度更新模块,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值;深度传递与环路检测模块,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
本申请第五方面还提出一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如前述任一实施例示出的环路检测方法。
本申请第六方面还提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于使处理器执行如前述任一实施例示出的环路检测方法。
在本申请第一方面和第三方面记载的方案中,第一,可以响应于所述目标节点的深度值小于其上游节点发送的深度值,可以将所述目标节点的深度值更新为其上游节点发送的深度值,以及,响应于所述目标节点的深度值等于其上游节点发送的深度值,确定包含所述目标节点的数据依赖路径中存在环路因此在相邻两个节点中将向下传递较大的深度。因此,可以保证总是环路径内对应深度最大或最小的节点检测出环路,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测。
第三,可以在进行深度传递之前,通过更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,可以使依赖路径中上游节点的深度值小于下游节点的深度值。因此在将较大深度值进行传递的方式,有助于避免将处于上游位置的环外节点的深度传递到环内对环路检测造成影响,从而可以实现多出度环路检测。
在本申请第二方面和第四方面记载的方案中,第一,可以响应于所述目标节点的深度值大于其上游节点发送的深度值,可以将所述目标节点的深度值更新为其上游节点发送的深度值,以及,响应于所述目标节点的深度值等于其上游节点发送的深度值,确定包含所述目标节点的数据依赖路径中存在环路因此在相邻两个节点中将向下传递较小的深度。因此,可以保证总是环路径内对应深度最小的节点检测出环路,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测。
第二,在深度更新与深度传递过程中,由于各节点只需要与其相邻节点之间进行深度传递,因此各节点仅需维护与其直接相邻的节点的依赖关系,从而可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能。
第三,可以在进行深度传递之前,通过更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值,可以使依赖路径中上游节点的深度值大于下游节点的深度值。因此在将较小深度值进行传递的方式中,有助于避免将处于上游位置的环外节点的深度传递到环内对环路检测造成影响,从而可以实现多出度环路检测。
附图说明
图1为本申请示出的一种依赖路径示意图;
图2为本申请示出的一种环路检测方法的方法流程图;
图3为本申请示出的一种更新深度的方法流程示意图;
图4为本申请示出的一种环路检测流程示意图;
图5为本申请示出的一种环路检测方法流程示意图;
图6a、6b、6c、6d分别为本申请示出的一种依赖路径示意图;
图7为本申请示出的一种环路检测装置的结构示意图;
图8为本申请示出的一种电子设备的硬件结构示意。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施例并不代表与本申请一个或多个实施例相一致的所有实施例。相反,它们仅是与如所附权利要求书中所详述的、本申请一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本申请示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本申请所描述的更多或更少。此外,本申请中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本申请中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
本申请以分布式系统为分布式数据库系统为例进行环路检测说明,其它类型的分布式系统可以参照分布式数据库系统。
请参见图1,图1为本申请示出的一种依赖路径示意图。
以下结合图1进行一些概念的介绍。
节点:是指执行分布式数据库事务的进程。节点可以来自于同一物理设备或不同的物理设备。如图1示出的节点A-G。
依赖关系:若节点A执行事务需要依赖节点B执行事务之后的结果,可以认为节点A依赖节点B,节点A与节点B具有依赖关系。依赖关系具有方向,A依赖B可以表示为A->B。例如,图1示出的节点A->B,节点D->C。在分布式数据库系统中可以并行存在至少一条依赖路径。
单出度:节点仅可能依赖单个节点,或被单个节点依赖。例如图1中的节点A、B、C、F、G。
多出度:节点可能依赖多个节点,也可能被多个节点依赖。例如图1所示,节点E依赖节点D和节点G,则节点E为多出度。
依赖路径:相邻的两个节点之间具有依赖关系的多个节点形成依赖路径。依赖路径具有方向。图1包括两条依赖路径。分别为F->E->D->C->A->B和F->E->G。其中,需依赖其它节点的节点称为上游节点。被其它节点依赖的节点被称为下游节点。
消息传递:由于节点中维护有其依赖的下游节点的信息,因此上游节点可以向下游节点发送消息。本申请中的消息可以是深度,私有标识,公有标识,环路检测消息等。
与节点对应的深度:可以表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。可以理解的是,当所述分布式系统为分布式数据库系统是所述深度可以指示节点的锁等待深度。其中,所述锁等待深度用于表征所述数据依赖路径上的起始节点与所述目标节点之间的锁等待路径长度。
环路径:形成两个节点相互依赖(在分布式数据库系统中即出现死锁)的路径。例如图1示出的节点B与节点D。其中,D->C->A->B,可以得出D间接依赖B,而B明显依赖D,可见,在B和D两个节点相互依赖,即会出现死锁。而由节点D->C->A->B形成的路径可以称为环路径。
环内节点:处在环路径内的节点。例如图1中的节点A、B、C、D。
环外节点:处在环路径之外的点。例如图1中的节点E、F、G。
有鉴于此,本申请提供了一种环路检测方法。该方法可以在各节点维护深度值,通过更新各节点的深度值,以使各节点的深度值小于其下游节点的深度值,使得依赖路径中的各节点的深度值可以近乎单调递增,使得在深度传递过程中,处于上游位置的环外节点的深度不会传递至环内对环路检测造成影响。以及在各节点内维护与其具有依赖关系的节点信息,通过具有依赖关系的相邻节点之间信息交互,实现在依赖路径中传递较大深度,并响应于任意节点的深度值等于其上游节点传递的所述上游节点的深度值,确定深度被传递一周,即发现环路。
请参见图2,图2为本申请示出的一种环路检测方法的方法流程图。
如图2所示,所述方法可以包括:
S202,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值。
S204,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值。
S206,响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
在所述方法中,第一,由于响应于所述目标节点的深度值小于其上游节点发送的深度值,将所述目标节点的深度值更新为其上游节点发送的深度值,以及,响应于所述目标节点的深度值等于其上游节点发送的深度值,确定包含所述目标节点的数据依赖路径中存在环路因此在相邻两个节点中将向下传递较大的深度,因此,可以保证总是环路径内对应深度最大的节点检测出环路,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测。
第二,在深度更新与深度传递过程中,由于各节点只需要与其相邻节点之间进行深度传递,因此各节点仅需维护与其直接相邻的节点的依赖关系,从而可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能。
第三,由于在进行深度传递之前,通过更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,可以使依赖路径中上游节点的深度值小于下游节点的深度值,因此在将较大深度值进行传递的方式中,有助于避免将处于上游位置的环外节点的深度传递到环内对环路检测造成影响,从而可以实现多出度环路检测。
所述方法可以应用于分布式系统(以下简称系统)中的任一目标节点。该系统可以包括分布在相同或不同地址的多台电子设备。各电子设备可以配合执行分布式事务。本申请不限定电子设备的具体类型,以及所述系统的具体架构。所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。
以下以执行主体为分布式系统(以下简称系统)中的任一目标节点为例进行说明。
在一些实施例中,在执行S202时,可以通过更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值。
请参见图3,图3为本申请示出的一种更新深度的方法流程示意图。
如图3所示,所述目标节点可以执行S302,通过消息传递等机制,将所述目标节点的深度值发送至所述下游节点。然后所述下游节点可以执行S304,在接收到所述目标节点的深度值后,可以将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值。
在一些实施例中,所述目标节点可以维护依赖关系。所述依赖关系表征上述目标节点依赖的下游节点。所述目标节点可以将自身深度信息打包为消息,并通过维护的依赖关系,将所述消息发送至其下游节点。其下游节点在接收到该消息后,可以解析出上述目标节点的深度值。
所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。可以理解的还是,可以描述所述递增关系的任一函数均是本申请保护的范围。
在一些实施例中,所述第一关系函数可以用如下函数表征:
P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
在该第一关系函数中,下有节点可以先向得到目标节点的深度值与N之和。然后再将得到的目标节点的深度值与N之和,与目标节点的下游节点的深度进行比较,输出二者较大值。由此可以一方面,可以保证目标节点的深度值比其下游节点的深度值小;另一方面,如果目标节点的深度值不发生变化,则其下游节点的深度值也不会发生变化。
在一些实施例中,在执行S202时,可以更新所述目标节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值。
在一些实施例中,可以通过消息传递等机制,获取其下游节点的深度值。然后可以将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值。之后可以将所述目标节点的深度值更新为所述第二深度值。
所述第二关系函数用如下函数表征:
Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
在该第二关系函数中,可以先向得到目标节点的下游节点的深度值与M之差。然后再将得到的下游节点的深度值与M之差,与目标节点的深度进行比较,输出二者较小值。由此可以一方面,可以保证目标节点的深度值比其下游节点的深度值小;另一方面,如果目标节点的下游节点的深度值不发生变化,则其深度值也不会发生变化。
在执行分布式任务过程中,各节点之间的依赖关系实时发生变化,各节点也在不断地进行深度更新,因此在进行深度传递时,可能在某一瞬间出现处于上游位置的环外节点的深度大于环内节点的深度的情形,由此可能导致环外节点的深度传递至环内,对环路检测造成影响。
为了解决该问题,在一些实施例中,可以在进行深度传递之前,在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
所述第一检测时长可以根据业务需求进行设定。例如,500毫秒。在一些实施例中,还可以在完成一次深度更新后设置等待时长,再执行下一次深度更新,从而控制节点运算数据量,降低节点运算负荷,提升节点性能。
在一些实施例中各目标节点可以在预设的第一检测时长内,周期性执行S302-S304。由于环外节点中上游节点与下游节点的关系单一,因此环外节点中上游节点的深度值通常小于下游节点的深度值,因此环外节点的深度值不会发生很大变化,而环内节点中,某一下游节点可能是其上游节点的上游节点,因此环内节点汇总上游节点的深度值可能大于下游节点的深度值,因此环内节点的深度值会不断增加。由于环内节点的深度不断增加,处于上游位置的环外节点的深度可能远小于环内节点的深度,从而有助于降低环外节点的深度传递至环内的概率,提升环路检测准确性。在一些实施例也可以设置执行次数以周期性执行深度更新的步骤。
在完成节点深度的更新后,可以执行S204-S206。
在本申请中所述分布式系统的各节点均会向其下游节点传递深度,因此,所述目标节点一定会接收到其上游节点发送的深度值。
所述目标节点在接收到深度之后,可以将自身深度值与其上游节点发送的深度值进行比较。如果自身深度值小于其上游节点发送的深度值,则说明自身深度值需要被更新,则可以将自身深度值更新为其上游节点发送的深度值,从而实现将两个节点中较大的深度值进行传递的效果。所述目标节点完成自身深度更新后,可以继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值。由此可以实现在依赖路径中传递较大深度的效果。
在一些实时例中,可以在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值。由此可以在依赖路径中不断的进行深度值传递,以适应更多的环路检测场景。例如环路中包括多个节点的场景。
响应于所述目标节点的深度值等于其上游节点发送的深度值,则可以确定所述目标节点的深度值被传递一圈,因此接口确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,响应于确定出包含所述目标节点的数据依赖路径中存在环路,可以触发关闭所述目标节点以解除所述环路,确保顺利执行分布式事务。在一些实施例中,可以通过事务回滚,或释放所述目标节点的依赖关系来解除所述环路。
请继续参见图1,图1中的各节点可以通过其维护的依赖关系,更新各节点下游节点的深度值,以使各节点的深度值小于其下游节点的深度值。
例如图1中环外节点E依赖环内节点D,通过深度更新的步骤,下游节点D的深度将大于上游节点E的深度。
完成深度更新后,各节点可以向下游节点传递深度,以使各节点在接收到上游节点传递的深度后,可以将自身深度值,更新为自身深度值与其上游节点发送的深度值中较大的深度值,完成较大深度值的传递,使得当任一节点发现其上游节点传递的深度与自身深度相同时,可以确定自身深度被传递一圈,则可以确定包含该节点的依赖路径中存在环路。
在进行深度传递时,由于节点E的深度较小,因此不会传入环路径内,对环路径内的深度传递造成影响。又由于环路径内一定存在最大深度,因此环内最大深度一定会在环内进行传递。由此,如果任一节点发现自身的深度与其上游节点的深度相同,则可以确定该节点的深度被传递了一圈,即包含该节点的依赖路径中存在环路。
在一些实施例中,可以为节点分配私有标识和公有标识;其中,公有标识的初始值可以等于私有标识的初始值。然后可以将较大的公有标识在环路内传递,并在任意节点发现接收到的公有标识与自身私有标识相同时,确定包含该节点的依赖路径中存在环路。由此可以使环路内私有标识最大的节点发现环路,从而可以通过配置节点的私有标识,灵活配置发现环路的节点。
当然,在一些实施例中,也可以将较小的公有标识在环路内传递,并在任意节点发现接收到的公有标识与自身私有标识相同时,确定包含该节点的依赖路径中存在环路。由此可以使环路内私有标识最小的节点发现环路。本申请中以传递较大公有标识为例进行说明。
在一些实施例中,系统中的各节点在传递深度时,还可以传递公有标识。在执行S204时,所述目标节点除了可以接收到上游节点发送的深度值外,还可以接收到其上游节点发送的公有标识。
请参见图4,图4为本申请示出的一种环路检测流程示意图。
如图4所示,在执行S206时,可以执行S402,响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小。然后执行S404,响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识。以及S406,响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
所述私有标识,可以是通过预设分配方法为各节点分配的私有标识。所述私有标识与各节点全局唯一对应。
在一些实施例中,所述私有标识可以表征进行环路处理的优先级。在一些实施例中可以按照节点优先级和依赖关系的产生时刻等信息为节点分配私有标识。其中,优先级越高,私有标识可以越大。
所述优先级,可以表征进行环路处理的节点的顺位。优先级越高,越先被杀死以解除环路。在一些实施例中可以通过以下至少一项确定所述优先级:节点处理事务的重要程度;节点处理事务的持续时间;节点持锁数量;用户自定义。由此可以从不同维度为节点确定合理的优先级。在确定优先级后,可以结合节点的生成时间、依赖关系等信息为节点分配唯一的私有标识。
所述公有标识,可以在节点之间传递。在进行传递之前,各节点的公有标识的初始值可以与私有标识的初始值相同。由此将公有标识进行传递,即是将私有标识进行传递。
在本例中,由于可以传递较大的公有标识,并且私有标识等于其上游节点发送的公有标识的节点可以发现环路,因此,环路内私有标识最大节点可能发现环路,而私有标识越大其优先级越高,从而可以实现由环内优先级最高的节点发现环路,在后续解除环路时通过杀死该节点,则可以将优先级最高的节点杀死。
在一些实施例中,可以在确定可能出现环路时,通过发现环路的目标节点在环内发送环检测消息,进行环路二次确认,从而降低环路检测误检率,提升环路检测正确性。
请参见图5,图5为本申请示出的一种环路检测方法流程示意图。
如图5所示,在执行S206时,可以执行S502,在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息。然后可以执行S504,响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
所述环检测消息可以包括所述目标节点的全局唯一的私有标识。
在本例中,如果所述目标节点处于环路经中,则其发送的环检测消息一定会最终被传回所述目标节点,因此当所述目标节点接收到自身发送的环检测消息后,可以再次确定包含所述目标节点的数据依赖路径中存在环路,从而达到环路二次确认,从而降低环路检测误检率,提升环路检测正确性的效果。
在一些实施例中,通过所述环检测消息收集环路内各节点的私有标识信息,其中,所述私有标识为指示节点的优先级的全局唯一的节点标识,从而目标节点在收到检测消息后,可以关闭环路内优先级最高最大的节点以解除环路。
所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,可以确定自身包括的公有标识是否与环检测消息包括的私有标识相同,如果确定自身的公有标识与所述目标节点的私有标识相同,可以确定自身处于环路内,然后可以将自身私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递。由此,所述环检测消息可以收集处于环路内的节点的私有标识。
在环检测消息传递的过程中,当所述目标节点接收到所述环检测消息后,可以获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,触发关闭所述环路处理节点以解除所述环路。由此即可将环路内优先级最高的节点杀死以解除环路。
以下结合具体场景进行实施例说明。
请参见图6a,图6a为本申请示出的一种依赖路径示意图。所述依赖路径可以是在分布式数据库系统中生成的依赖路径。该系统包括的节点可以用于执行数据库事务的事务进程;节点之间的数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WFG等待图中的路径。节点的深度可以是指锁等待深度。本例中进行环路检测即进行死锁检测。
各节点维护了其依赖的下游节点。各节点还维护的关系函数为P= MAX(DEPTH(A)+1,DEPTH(B))。其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值。
图6a示出的依赖路径包括A、B、C、D、E、F六个节点。其中依赖路径为F->E->D->C->A->B。在初始阶段,可以根据各节点优先级,为各节点分配私有标识。其中优先级高的私有标识数值较大。各节点的公有标识等于各节点的私有标识。各节点的初始深度可以置为0。
在进行环路检测时,所述系统可以先更新各节点的深度。在本例中,可以将执行该步骤的时长设置为500毫秒,执行该步骤的等待时长设置为10毫秒。由于环外节点中上游节点与下游节点的关系单一,因此环外节点中上游节点的深度值通常小于下游节点的深度值,因此环外节点的深度值不会发生很大变化,而环内节点中,某一下游节点可能是其上游节点的上游节点,因此环内节点汇总上游节点的深度值可能大于下游节点的深度值,因此环内节点的深度值会不断增加,从而通过多次执行该步骤后,可以使环内节点的深度远大于环外节点。由于环内节点的深度不断增加,处于上游位置的环外节点的深度可能远小于环内节点的深度,从而有助于降低环外节点的深度传递至环内的概率,提升环路检测准确性。
在更新深度时,系统中的各节点可以执行:确定是否具有下游节点。如果有,则进一步将自身深度发送至下游节点。该下游节点可以响应于接收到其上游节点发送的深度值,可以将自身深度与接收到的深度值输入维护的关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值。
其中,通过所述关系函数,下游节点可以确定自身深度值,是否小于其上游节点的深度与1之和,如果是,可以将自身深度值,更新为其上游节点的深度与1之和。从而保证上游节点的深度小于下游节点的深度。
多次执行该步骤之后,请参见图6b,图6b为本申请示出的一种依赖路径示意图。如图6b所示,环外节点F不存在上游节点,因此该节点的深度保持为0。环外节点E仅有上游节点F,其深度等于节点F的深度与1之和。因此节点E的深度保持为1。每进行一轮深度的更新,环内节点的深度都会被更新,从而导致环内节点的深度远大于环外节点。在多种执行深度更新步骤后,各节点的深度可能如图6b所示。其中节点D的深度为22,节点C的深度为23,节点B的深度为24,节点D的深度为25。
之后所述系统可执行深度传递与公有标识传递的步骤。在本例中,可以将执行该步骤的时长设置为500毫秒以多次执行该步骤,使深度和公有标识可以在依赖路径中完成传递。
各节点可以分别执行:将自身深度和公有标识发送至下游节点。下游节点在接收到其上游节点发送的深度和公有标识后,可以将自身深度与接收的深度比较。如果自身深度较小,则可以将自身深度更新为接收的深度,由此可以实现传递较大深度。
以图6b示出的节点E与节点D为例。节点E会将其深度值1发送至节点D,节点D可以将自身深度值22与接收的深度值1进行比较,由于22大于1,因此,可以不对自身深度进行更新。由此可以将较大深度进行传递。
以图6b示出的节点B与节点D为例。节点B会将其深度值25发送至节点D,节点D可以将自身深度值22与接收的深度值25进行比较,由于22小于25,因此,可以将自身深度更新为25。由此可以将较大深度进行传递。
在完成多轮深度传递之后,请参见图6c,图6c为本申请示出的一种依赖路径示意图。如图6c所示,完成多轮深度传递之后,环内节点的深度均为最大深度25。
之后各节点响应于自身深度与其上游节点的深度相同,可以将自身私有标识与接收的公有标识进行比较。如果自身私有标识不等于接收的共有标识,可以进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,以将较大的公有标识进行传递。
以图6b示出的节点C与节点D为例。节点D会将其公有标识4发送至节点C,由于节点C和节点D的深度一样,因此节点C可以将自身私有标识3与接收的公有标识4进行比较,由于4不等于3,因此,节点C可以进一步将自身可以将自身公有标识3与接收的公有标识4进行比较,由于3小于4,节点C可以将自身公有标识更新为4。由此可以将较大公有标识进行传递。
在进行多轮公有标识传递之后,请参见图6d,图6d为本申请示出的一种依赖路径示意图。如图6d所示,环内节点中的各公有标识最大公有标识4。
在进行公有标识传递过程中,响应于任意节点的深度与其上游节点的深度相同,并且所述任意节点的私有标识,与其上游节点的公有标识相同,确定包含所述任意节点的依赖路径出现死锁。如图6d所示,环内节点D的私有标识为4,在进行标识传递时,节点D将发现其自身私有标识与其上游节点B的公有标识相同,由此可以确定包含节点D的路径中可能存在死锁。由此,环内私有标识最大,优先级最高的节点将发现死锁。
可见本例中,各节点只需维护与其直接相邻的节点的依赖关系,在各节点之间只需传递深度和公有标识信息,从而可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能。
发现死锁后,可以进行死锁复检步骤。
发现死锁的节点D可以发起环检测消息。所述消息中包括该节点的私有标识4。所述处理节点可以将该消息发送至下游节点C。下游节点C在接收到该消息后,可以验证自身维护的公有标识是否为消息中携带的节点D的私有标识。经过公有标识传递,环内节点C的公有标识一定为4,因此节点C可以确定自身为环内节点,并将自身的私有标识3加入该消息内向自身下游节点发送。依次类推,当所述处理节点接收到所述环检测消息,并发现环检测消息内包含自身的私有标识,即可以确定环路径真实存在,确定一定存在死锁。由此可以对死锁进行复检,避免误检测。
如图6d,处理节点D可以发起环检测消息,并在再次接收到该环检测消息后,对死锁进行复检,降低了误检率。
之后,节点D,可以从环检测消息中确定私有标识最大即优先级最高的节点并对该节点进行事务回滚,以及消除该节点的依赖关系。由此可以关闭优先级最高的节点,打开死锁,避免存储事务阻塞。
本申请还提出一种环路检测方法。该方法可以应用于分布式系统中的任一目标节点.所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。所述方法可以包括:
更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值;
接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
该方法与前述环路检测方法的区别在于:完成节点深度更新后,上游节点的深度大于下游节点的深度,以及在进行深度传递时,以在相邻两个节点中向下传递较小的深度的方式,在各条依赖路径中进行深度传递。其它内容基本一致,以下不作详述。
在本方法中,第一,由于响应于所述目标节点的深度值大于其上游节点发送的深度值,将所述目标节点的深度值更新为其上游节点发送的深度值,以及,响应于所述目标节点的深度值等于其上游节点发送的深度值,确定包含所述目标节点的数据依赖路径中存在环路因此在相邻两个节点中将向下传递较小的深度,因此,可以保证总是环路径内对应深度最小的节点检测出环路,不会依赖单一节点进行环路检测,避免该节点被杀死后,无法继续进行环路检测。
第二,在深度更新与深度传递过程中,由于各节点只需要与其相邻节点之间进行深度传递,因此各节点仅需维护与其直接相邻的节点的依赖关系,从而可以避免节点维护全局的依赖路径,有助于减轻节点的工作量,提升节点执行事务的性能。
第三,由于在进行深度传递之前,通过更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值,可以使依赖路径中上游节点的深度值大于下游节点的深度值,因此在将较小深度值进行传递的方式中,有助于避免将处于上游位置的环外节点的深度传递到环内对环路检测造成影响,从而可以实现多出度环路检测。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
所述接收所述目标节点的上游节点发送的深度值,包括:
接收所述目标节点的上游节点发送的深度值和公有标识;
所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:
响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
由此可以使环路内私有标识最大的节点发现环路,从而通过为节点配置私有标识,可以实现灵活配置发现环路的节点。
在一些实施例中,所述更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
在一些实施例中,更新所述目标节点的下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
将所述目标节点的深度值发送至所述下游节点,以使所述下游节点响应于接收到所述目标节点的深度值,将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值;
其中,所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。
在一些实施例中,所述第一关系函数用如下函数表征:
P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
在一些实施例中,更新所述目标节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
获取所述目标节点的下游节点的深度值;
将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值;其中,所述第二关系函数描述所述目标节点的深度值相对于其下游节点的深度值的递减关系;
将所述目标节点的深度值更新为所述第二深度值。
在一些实施例中,所述第二关系函数用如下函数表征:
Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
在一些实施例中,所述接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,包括:
在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,直至所述第二检测时长超时。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
接收所述目标节点的上游节点发送的深度值,包括:
接收所述目标节点的上游节点发送的深度值和公有标识;
所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:
响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述方法还包括:
在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递;所述方法还包括:
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,
触发关闭所述环路处理节点以解除所述环路。
在一些实施例中,所述方法还包括:
响应于确定出包含所述目标节点的数据依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
与所述实施例相应的,本申请提出一种环路检测装置。该装置应用于分布式系统中的任一目标节点。所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。
请参见图7,图7为本申请示出的一种环路检测装置的结构示意图。
如图7所示,所述装置70包括:
深度更新模块71,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;
深度传递与环路检测模块72,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述深度更新模块71用于:
在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
在一些实施例中,所述深度更新模块71用于:
将所述目标节点的深度值发送至所述下游节点,以使所述下游节点响应于接收到所述目标节点的深度值,将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值;
其中,所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。
在一些实施例中,所述第一关系函数用如下函数表征:
P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
在一些实施例中,所述深度更新模块71用于:
获取所述目标节点的下游节点的深度值;
将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值;其中,所述第二关系函数描述所述目标节点的深度值相对于其下游节点的深度值的递减关系;
将所述目标节点的深度值更新为所述第二深度值。
在一些实施例中,所述第二关系函数用如下函数表征:
Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
在一些实施例中,所述深度传递与环路检测模块72用于:
在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,直至所述第二检测时长超时。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
所述深度传递与环路检测模块72用于:
接收所述目标节点的上游节点发送的深度值和公有标识;
响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述装置70还包括:
环检测模块,在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递;
所述装置70还包括:
第一环路解除模块,响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,
触发关闭所述环路处理节点以解除所述环路。
在一些实施例中,所述装置70还包括
第二环路解除模块73,响应于确定出包含所述目标节点的数据依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
与所述实施例相应的,本申请提出一种环路检测装置。该装置应用于分布式系统中的任一目标节点。所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度。
所述装置80包括:
深度更新模块81,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;
深度传递与环路检测模块82,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述深度更新模块81用于:
在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
在一些实施例中,所述深度更新模块81用于:
将所述目标节点的深度值发送至所述下游节点,以使所述下游节点响应于接收到所述目标节点的深度值,将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值;
其中,所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。
在一些实施例中,所述第一关系函数用如下函数表征:
P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
在一些实施例中,所述深度更新模块81用于:
获取所述目标节点的下游节点的深度值;
将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值;其中,所述第二关系函数描述所述目标节点的深度值相对于其下游节点的深度值的递减关系;
将所述目标节点的深度值更新为所述第二深度值。
在一些实施例中,所述第二关系函数用如下函数表征:
Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
在一些实施例中,所述深度传递与环路检测模块82用于:
在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,直至所述第二检测时长超时。
在一些实施例中,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
所述深度传递与环路检测模块82用于:
接收所述目标节点的上游节点发送的深度值和公有标识;
响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述装置80还包括:
环检测模块,在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
在一些实施例中,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递;所述装置80还包括:
第三环路解除模块,响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,
触发关闭所述环路处理节点以解除所述环路。
在一些实施例中,所述装置80还包括:
第四环路解除模块83,响应于确定出包含所述目标节点的数据依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
在一些实施例中,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
本申请示出的环路检测装置的实施例可以应用于电子设备上。相应地,本申请公开了一种电子设备,该设备可以包括:处理器。
用于存储处理器可执行指令的存储器。
其中,所述处理器被配置为调用所述存储器中存储的可执行指令,实现前述任一实施例示出的环路检测方法。
请参见图8,图8为本申请示出的一种电子设备的硬件结构示意图。
如图8所示,该电子设备可以包括用于执行指令的处理器,用于进行网络连接的网络接口,用于为处理器存储运行数据的内存,以及用于存储环路检测装置对应指令的非易失性存储器。
其中,所述装置的实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图8所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
可以理解的是,为了提升处理速度,环路检测装置对应指令也可以直接存储于内存中,在此不作限定。
本申请提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可以用于使处理器执行如前述任一实施例示出的环路检测方法。
本领域技术人员应明白,本申请一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本申请一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(可以包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请中记载的“和/或”表示至少具有两者中的其中一个,例如,“A和/或B”包括三种方案:A、B、以及“A和B”。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
所述对本申请特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的行为或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本申请中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本申请中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本申请中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
本申请中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理系统。通常,中央处理系统将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理系统以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏操纵台、全球定位系统(GPS)接收机、或例如通用串行总线(USB)闪存驱动器的便携式存储设备,仅举几例。
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如EPROM、EEPROM和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及0xCD_00 ROM和DVD-ROM盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
虽然本申请包含许多具体实施细节,但是这些不应被解释为限制任何公开的范围或所要求保护的范围,而是主要用于描述特定公开的具体实施例的特征。本申请内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,所述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
以上仅为本申请一个或多个实施例的较佳实施例而已,并不用以限制本申请一个或多个实施例,凡在本申请一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请一个或多个实施例保护的范围之内。
Claims (18)
1.一种环路检测方法,应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;
所述方法包括:
更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;
接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
2.根据权利要求1所述的方法,所述更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
在预设的第一检测时长内,周期性更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,直至所述第一检测时长超时。
3.根据权利要求1或2所述的方法,更新所述目标节点的下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
将所述目标节点的深度值发送至所述下游节点,以使所述下游节点响应于接收到所述目标节点的深度值,将所述目标节点的深度值和自身深度值输入预设的第一关系函数,得到第一深度值,并将自身深度值更新为所述第一深度值;
其中,所述第一关系函数描述所述目标节点的下游节点的深度值相对于所述目标节点的深度值的递增关系。
4.根据权利要求3所述的方法,所述第一关系函数用如下函数表征:
P= MAX(DEPTH(A)+N,DEPTH(B));其中,P表示计算得到第一深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述N为预设值。
5.根据权利要求1或2所述的方法,更新所述目标节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值,包括:
获取所述目标节点的下游节点的深度值;
将所述目标节点的深度值和其下游节点的深度值输入预设的第二关系函数,得到第二深度值;其中,所述第二关系函数描述所述目标节点的深度值相对于其下游节点的深度值的递减关系;
将所述目标节点的深度值更新为所述第二深度值。
6.根据权利要求5所述的方法,所述第二关系函数用如下函数表征:
Q= MIN(DEPTH(A),DEPTH(B)-M);其中,Q表示计算得到第二深度值;所述A表示所述数据依赖路径中的任一目标节点;所述B表示所述目标节点A在所述数据依赖路径中的下游节点;DEPTH(A)和DEPTH(B)分别表示所述节点A和节点B的深度值;所述M为预设值。
7.根据权利要求1所述的方法,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,包括:
在预设的第二检测时长内,周期性接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值,直至所述第二检测时长超时。
8.根据权利要求1或7所述的方法,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
所述接收所述目标节点的上游节点发送的深度值,包括:
接收所述目标节点的上游节点发送的深度值和公有标识;
所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
9.根据权利要求8所述的方法,所述方法还包括:
在确定包含所述目标节点的数据依赖路径中存在环路的情形下,所述目标节点进一步向所述目标节点的下游节点发送环检测消息;
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,确定包含所述目标节点的数据依赖路径中存在环路。
10.根据权利要求9所述的方法,所述私有标识为指示节点的优先级的全局唯一的节点标识;
其中,所述环检测消息包括所述目标节点的私有标识,所述目标节点的下游节点在收到所述环检测消息时,在确定自身的公有标识与所述目标节点的私有标识相同的情况下,将所述下游节点的私有标识添加至所述环检测消息中后继续将所述环检测消息向下游发送,以此类推,以将所述数据依赖路径上的各节点的私有标识向下游进行传递;
所述方法还包括:
响应于接收到由所述目标节点的上游节点发送的所述环检测消息,获取所述环检测消息中携带的各个节点的私有标识,并将所述各个节点的私有标识指示的优先级最高的节点,确定为环路处理节点;以及,
触发关闭所述环路处理节点以解除所述环路。
11.根据权利要求1所述的方法,所述方法还包括:
响应于确定出包含所述目标节点的数据依赖路径中存在环路,触发关闭所述目标节点以解除所述环路。
12.根据权利要求1所述的方法,所述分布式系统包括分布式数据库系统;所述节点包括用于执行数据库事务的事务进程;所述数据依赖路径包括基于所述分布式数据库系统中的各个事务进程之间的锁等待关系构建的WPG等待图中的路径。
13.一种环路检测方法;应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;
所述方法包括:
更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值;
接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
14.根据权利要求13所述的方法,所述目标节点还维护了与所述目标节点对应的私有标识和公有标识;其中,所述公有标识用于在节点之间传递;所述私有标识用于指示与其对应的节点;所述节点的公有标识的初始值与私有标识的初始值相同;
所述接收所述目标节点的上游节点发送的深度值,包括:
接收所述目标节点的上游节点发送的深度值和公有标识;
所述响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路,包括:
响应于所述目标节点的深度值等于其上游节点发送的深度值,比较所述目标节点的私有标识与其上游节点发送的公有标识的大小;
响应于所述目标节点的私有标识不等于其上游节点发送的公有标识,进一步比较所述目标节点的公有标识与其上游节点发送的公有标识的大小,如果所述目标节点的公有标识小于其上游节点发送的公有标识,将所述目标节点的公有标识更新为其上游节点发送的公有标识,以传递两个节点中较大的公有标识;
响应于所述目标节点的私有标识等于其上游节点发送的公有标识,确定包含所述目标节点的数据依赖路径中存在环路。
15.一种环路检测装置;应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;
所述装置包括:
深度更新模块,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值小于其下游节点的深度值;
深度传递与环路检测模块,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值小于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值小于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
16.一种环路检测装置;应用于分布式系统中的任一目标节点;所述分布式系统包括至少一条包含所述目标节点的数据依赖路径;所述数据依赖路径中的任意两个相邻的节点之间具有数据依赖关系;所述目标节点维护了所述目标节点对应的深度值;所述深度值表征所述数据依赖路径上的起始节点与所述目标节点之间的路径长度;
所述装置包括:
深度更新模块,更新所述目标节点或其下游节点的深度值,以使所述目标节点的深度值大于其下游节点的深度值;
深度传递与环路检测模块,接收所述目标节点的上游节点传递的所述上游节点的深度值,并响应于所述目标节点的深度值大于其上游节点的深度值,将所述目标节点的深度值更新为其上游节点的深度值,并继续将所述目标节点更新后的深度值传递给所述目标节点的下游节点,以使所述目标节点的下游节点在接收到所述目标节点传递的所述深度值时,响应于所述下游节点的深度值大于所述目标节点的深度值,将所述下游节点的深度值更新为所述目标节点的深度值;
响应于所述目标节点的深度值等于其上游节点传递的所述上游节点的深度值,确定包含所述目标节点的数据依赖路径中存在环路。
17.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-14任一所述的环路检测方法。
18.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于使处理器执行如权利要求1-14任一所述的环路检测方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110550972.8A CN112994990B (zh) | 2021-05-20 | 2021-05-20 | 一种环路检测方法、装置、电子设备与存储介质 |
US18/562,067 US20240241771A1 (en) | 2021-05-20 | 2022-05-07 | Loop detection method and apparatus, electronic device, and storage medium |
PCT/CN2022/091537 WO2022242477A1 (zh) | 2021-05-20 | 2022-05-07 | 环路检测的方法、装置、电子设备与存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110550972.8A CN112994990B (zh) | 2021-05-20 | 2021-05-20 | 一种环路检测方法、装置、电子设备与存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112994990A CN112994990A (zh) | 2021-06-18 |
CN112994990B true CN112994990B (zh) | 2021-07-30 |
Family
ID=76337701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110550972.8A Active CN112994990B (zh) | 2021-05-20 | 2021-05-20 | 一种环路检测方法、装置、电子设备与存储介质 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240241771A1 (zh) |
CN (1) | CN112994990B (zh) |
WO (1) | WO2022242477A1 (zh) |
Families Citing this family (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 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4096561A (en) * | 1976-10-04 | 1978-06-20 | Honeywell Information Systems Inc. | Apparatus for the multiple detection of interferences |
WO2006138469A2 (en) * | 2005-06-17 | 2006-12-28 | Industrial Defender, Inc. | Duration of alerts and scanning of large data stores |
CN101295266A (zh) * | 2008-06-05 | 2008-10-29 | 华为技术有限公司 | 检测和解除死锁的方法、装置和系统 |
CN103298054A (zh) * | 2013-06-04 | 2013-09-11 | 四川大学 | 一种基于节点深度的无线传感器网络分簇路由协议 |
CN103455368A (zh) * | 2013-08-27 | 2013-12-18 | 华为技术有限公司 | 一种死锁检测方法、节点及系统 |
CN103905318A (zh) * | 2014-04-04 | 2014-07-02 | 华为技术有限公司 | 发送、加载转发表项的方法、控制器和转发节点 |
CN104462288A (zh) * | 2014-11-27 | 2015-03-25 | 华为技术有限公司 | 一种路径相似度分析方法以及系统 |
CN106528388A (zh) * | 2016-10-21 | 2017-03-22 | 网易(杭州)网络有限公司 | 一种数据库检测方法和装置 |
CN106557371A (zh) * | 2016-10-26 | 2017-04-05 | 北京交通大学 | 一种基于边追踪的分布式系统死锁检测方法 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0202194A1 (fr) * | 1985-05-10 | 1986-11-20 | Asgalium S.A. | Détecteur de déplacement d'un objet |
US6334219B1 (en) * | 1994-09-26 | 2001-12-25 | Adc Telecommunications Inc. | Channel selection for a hybrid fiber coax network |
JP2004170152A (ja) * | 2002-11-18 | 2004-06-17 | Sysmex Corp | 試料分析装置およびそれに用いる気泡検知回路と気泡検知方法 |
US7246156B2 (en) * | 2003-06-09 | 2007-07-17 | Industrial Defender, Inc. | Method and computer program product for monitoring an industrial network |
EP1816475A1 (en) * | 2004-07-22 | 2007-08-08 | Bayer Schering Pharma Aktiengesellschaft | Use of cyanine dyes for the diagnosis of disease associated with angiogenesis |
US8769496B2 (en) * | 2010-08-13 | 2014-07-01 | Accenture Global Services Limited | Systems and methods for handling database deadlocks induced by database-centric applications |
CN102076049B (zh) * | 2010-12-10 | 2014-07-02 | 清华大学 | 基于势能场的能量平衡的路由方法 |
CN102761475B (zh) * | 2012-03-27 | 2015-08-05 | 西安交通大学 | 一种基于通道依赖关系图的片上互联网络容错路由方法 |
US9781043B2 (en) * | 2013-07-15 | 2017-10-03 | Netspeed Systems | Identification of internal dependencies within system components for evaluating potential protocol level deadlocks |
CN106707740A (zh) * | 2017-03-09 | 2017-05-24 | 西安电子科技大学 | 基于积分分离pid的数字电源环路补偿器的设计方法 |
CN106920162B (zh) * | 2017-03-14 | 2021-01-29 | 西京学院 | 一种基于并行环路检测的虚开增值税专用发票检测方法 |
CN107809781B (zh) * | 2017-11-02 | 2020-02-18 | 中国科学院声学研究所 | 一种负载均衡的无环路路由选择方法 |
CN109391526B (zh) * | 2018-11-27 | 2020-12-18 | 锐捷网络股份有限公司 | 一种网络环路的检测方法及装置 |
CN112994990B (zh) * | 2021-05-20 | 2021-07-30 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
-
2021
- 2021-05-20 CN CN202110550972.8A patent/CN112994990B/zh active Active
-
2022
- 2022-05-07 WO PCT/CN2022/091537 patent/WO2022242477A1/zh active Application Filing
- 2022-05-07 US US18/562,067 patent/US20240241771A1/en active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4096561A (en) * | 1976-10-04 | 1978-06-20 | Honeywell Information Systems Inc. | Apparatus for the multiple detection of interferences |
WO2006138469A2 (en) * | 2005-06-17 | 2006-12-28 | Industrial Defender, Inc. | Duration of alerts and scanning of large data stores |
CN101295266A (zh) * | 2008-06-05 | 2008-10-29 | 华为技术有限公司 | 检测和解除死锁的方法、装置和系统 |
CN103298054A (zh) * | 2013-06-04 | 2013-09-11 | 四川大学 | 一种基于节点深度的无线传感器网络分簇路由协议 |
CN103455368A (zh) * | 2013-08-27 | 2013-12-18 | 华为技术有限公司 | 一种死锁检测方法、节点及系统 |
CN103905318A (zh) * | 2014-04-04 | 2014-07-02 | 华为技术有限公司 | 发送、加载转发表项的方法、控制器和转发节点 |
CN104462288A (zh) * | 2014-11-27 | 2015-03-25 | 华为技术有限公司 | 一种路径相似度分析方法以及系统 |
CN106528388A (zh) * | 2016-10-21 | 2017-03-22 | 网易(杭州)网络有限公司 | 一种数据库检测方法和装置 |
CN106557371A (zh) * | 2016-10-26 | 2017-04-05 | 北京交通大学 | 一种基于边追踪的分布式系统死锁检测方法 |
Non-Patent Citations (3)
Title |
---|
《A Multi-agent System for Dynamic Path Planning》;Marcelo Cardoso Silva等;《 IEEE Xplore》;20101231;全文 * |
分布式系统死锁的Petri网分析;李春强等;《微机发展》;20030510(第05期);全文 * |
移动Agent系统的一种分布式死锁检测方案;孟学军等;《小型微型计算机系统》;20070221(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
WO2022242477A1 (zh) | 2022-11-24 |
US20240241771A1 (en) | 2024-07-18 |
CN112994990A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391320B (zh) | 一种共识方法及装置 | |
CN112994990B (zh) | 一种环路检测方法、装置、电子设备与存储介质 | |
JP6929497B2 (ja) | クロスブロックチェーンインタラクション方法、装置、システム、および電子デバイス | |
CN111782275B (zh) | 基于区块链的交易处理方法及装置、电子设备 | |
CN111259078A (zh) | 区块链共识方法、装置、计算机设备和存储介质 | |
JP2020524434A (ja) | ブロックチェーン・ネットワークにおける高速伝搬のための方法及び特殊ネットワーク・ノード | |
US20210233068A1 (en) | Settlement system, settlement method, user device, and settlement program | |
US20220158836A1 (en) | Fork Processing Method And Blockchain Node | |
CN111258723B (zh) | 分布式系统的事务处理方法、装置、系统、介质及设备 | |
CN111049696B (zh) | 用于区块链系统的节点管理的方法、节点和计算设备 | |
US20200235987A1 (en) | Mesh network | |
CN114679457A (zh) | 一种区块链中的节点分组方法及区块链节点 | |
Hirt et al. | Multi-threshold asynchronous reliable broadcast and consensus | |
US20240208353A1 (en) | Electric vehicle charging management and client device | |
CN113111099B (zh) | 一种环路检测方法、装置、电子设备与存储介质 | |
US11063859B2 (en) | Packet processing method and network device | |
CN111628997A (zh) | 一种防止攻击方法及装置 | |
CN116127511A (zh) | 一种隐私计算方法、装置、设备及介质 | |
CN110876852B (zh) | 微服务的网络游戏数据处理方法及系统 | |
CN110162415B (zh) | 用于处理数据请求的方法、服务器、装置及存储介质 | |
Kampa | An introduction to asynchronous binary byzantine consenus | |
CN113779155B (zh) | 区块链交易处理方法、装置及设备 | |
CN115914371B (zh) | 实例启动和报文转发方法及装置 | |
CN117097658A (zh) | 一种AutoSAR的PDUR模块的CAN信号路由转发替代方法及系统 | |
CN115237637A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210908 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. |