CN110442459A - 分布式死锁检测方法及装置、计算机设备及可读介质 - Google Patents
分布式死锁检测方法及装置、计算机设备及可读介质 Download PDFInfo
- Publication number
- CN110442459A CN110442459A CN201910600116.1A CN201910600116A CN110442459A CN 110442459 A CN110442459 A CN 110442459A CN 201910600116 A CN201910600116 A CN 201910600116A CN 110442459 A CN110442459 A CN 110442459A
- Authority
- CN
- China
- Prior art keywords
- dependence
- distributed
- lock
- transaction
- local
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种分布式死锁检测方法及装置、计算机设备及可读介质。所述方法包括:在对应的局部数据库的本地获取分布式事务之间的依赖关系;向全局事务管理器发送所述分布式事务之间的依赖关系,以供所述全局事务管理器根据接收到的各局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。本发明的技术方案,能够对分布式数据库中的死锁进行有效检测,进而对死锁进行处理;与现有技术等待锁超时才能解锁相比,可以快速检测到死锁,进而可以快速解除死锁,从而能够减少死锁导致的分布式事务对应业务的阻塞时间,提高分布式数据库系统的并发处理性能。
Description
【技术领域】
本发明涉及计算机应用技术领域,尤其涉及一种分布式死锁检测方法及装置、计算机设备及可读介质。
【背景技术】
在分布式数据库系统中,数据库中的数据分别在不同的局部数据库中存储,由不同的数据库管理系统(Database Management System;DBMS)进行管理、在不同的机器上运行、由不同的操作系统支持、被不同的通信网络连接在一起。也就是说,分布式数据库在逻辑上是一个统一的整体,但在物理上是分别存储在不同的物理节点上。
分布式数据库中的分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式数据库的不同节点(如局部数据库)之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的局部数据库上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。分布式锁是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够保证原子性和对锁服务调用方的可见性。现有技术中通常采用分布式锁来管理分布式数据库中的分布式事务。但是,在分布式数据库中,会存在两个以上的事务进程并发执行,每个事务进程都在等待被其它的事务进程所占用的系统资源而不能继续运行,即导致任何一个事务进程都无法运行下去(即死循环),产生了死锁。
例如,现有技术中可以为每个分布式锁设置一个时间长度,发生死锁后,该分布式事务检测到所持有的锁超时后,会自动释放对该分布式锁的占有,这样,其他等待该分布式锁的事务就可以继续执行下去。但是,该方案会导致受影响的分布式事务对应业务的阻塞时间过长,降低系统的并发处理能力。
【发明内容】
本发明提供了一种分布式死锁检测方法及装置、计算机设备及可读介质,用于减少死锁导致的分布式事务对应业务的阻塞时间,提高分布式数据库系统的并发处理性能。
本发明提供一种分布式死锁检测方法,所述方法包括:
在对应的局部数据库的本地获取分布式事务之间的依赖关系;
向全局事务管理器发送所述分布式事务之间的依赖关系,以供所述全局事务管理器根据接收到的各局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
本发明还提供一种分布式死锁检测方法,所述方法包括:
接收各局部数据库侧的所述分布式事务之间的依赖关系;各所述分布式事务之间的依赖关系由对应的所述局部数据库在本地获取;
根据各所述局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
本发明提供一种分布式死锁检测装置,所述装置包括:
获取模块,用于在对应的局部数据库的本地获取分布式事务之间的依赖关系;
发送模块,用于向全局事务管理器发送所述分布式事务之间的依赖关系,以供所述全局事务管理器根据接收到的各局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
本发明还提供一种全局事务管理器,所述全局局事务管理器包括:
接收模块,用于接收各局部数据库侧的所述分布式事务之间的依赖关系;各所述分布式事务之间的依赖关系由对应的所述局部数据库在本地获取;
死锁检测模块,用于根据各所述局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
本发明提供一种分布式系统,所述分布式系统包括数个局部数据库,各所述局部数据库中设置有如上所述的分布式死锁检测装置,以及如上所述的全局事务管理器;各所述分布式死锁检测装置与所述全局事务管理器通信连接。
本发明还提供一种计算机设备,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上所述的分布式死锁检测方法。
本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的分布式死锁检测方法。
本发明的分布式死锁检测方法及装置、计算机设备及可读介质,通过在各局部数据库本地获取分布式事务之间的依赖关系,并分别发送至全局TM,由全局TM发送分布式事务之间的依赖关系进行死锁检测,能够对分布式数据库中的死锁进行有效检测,进而对死锁进行处理;与现有技术等待锁超时才能解锁相比,可以快速检测到死锁,进而可以快速解除死锁,从而能够减少死锁导致的分布式事务对应业务的阻塞时间,提高分布式数据库系统的并发处理性能。
【附图说明】
图1为本发明的分布式死锁检测方法实施例一的流程图。
图2为本发明提供的一种分布式数据库的系统示意图。
图3为本发明提供的一种在本地获取分布式事务之间的依赖关系的示意图。
图4为本发明中基于各锁依赖关系建立长链表的示意图。
图5为本发明的分布式死锁检测方法实施例二的流程图。
图6为本发明提供的一种分布式锁有向图。
图7为本发明的分布式死锁检测装置实施例的结构图。
图8为本发明的全局事务管理器实施例的结构图。
图9为本发明的计算机设备实施例的结构图。
图10为本发明提供的一种计算机设备的示例图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
图1为本发明的分布式死锁检测方法实施例一的流程图。如图1所示,本实施例的分布式死锁检测方法,具体可以包括如下步骤:
100、在对应的局部数据库本地获取分布式事务之间的依赖关系;
具体地,本实施例的分布式死锁检测方法的执行主体具体可以为局部数据库中设置的分布式死锁检测装置,具体地,也可以直接由局部数据库来执行。
如图2所示,为本发明提供的一种分布式数据库的系统示意图。如图2所示,本实施例的分布式数据库部署在多个机器上,在每个机器上相当于都部署了分布式数据库的一部分即局部数据库。如机器1上部署局部数据库1、机器2上部署局部数据库2、机器N上部署局部数据库N,本实施例中分布式数据库中包括N个局部数据库为例,该N的数值可以根据实际需求取任意整数。另外,如图2所示,为了便于管理各局部数据库,本实施例的分布式数据库还包括全局事务管理器(Transaction Manager;TM),以对分布式数据库中的各个局部数据库反馈的信息进行统一管理和处理;例如,可以分别接收各个局部数据库发送的死锁信息,还可以分别控制各个局部数据库进行死锁处理等等。其中该全局TM可以设置在任一机器上,能够保障该全局TM与各个分布式数据库通信即可。本实施例的局部数据库用于负责该局部的数据资源管理,因此,局部数据库也可以称之为局部资源管理器(Resouce Manager;RM)。
在每个局部数据库中,可以处理很多事务,且有些事务的处理依赖于其他事务,必须在其他事务处理完后才可以进行处理。因此,为了便于对各个事务处理的管理,还需要在局部数据库中记录有事务的依赖关系,且在局部数据库中还可以采用不同的符号标识来标识每个事务是本地事务还是分布式事务。其中单机事务访问操作的所有资源都限制在局部数据库中,而分布式事务操作访问的资源通常分布在所有的局部数据库中。如某个局部数据库中记录有:本地事务T1依赖于分布式事务X2,表示为T1->X2;还可以记录有本地事务T1依赖于本地事务T2,表示为T1->T2等等。但是,本实施例中,是从分布式数据库全局来检测分布式死锁,而分布式死锁发生在分布式事务之间的依赖关系出现死循环时。因此,本实施例中,首先需要在各局部数据库本地获取分布式事务之间的依赖关系。其中分布式事务之间的依赖关系具体指的是分布式事务之间因资源冲突产生的依赖关系。例如,在某个局部数据库中,在资源有限的情况下,分布式事务A的运行,要依赖于分布式事务B的运行,此时就认为分布式事务A和分布式事务B之间存在依赖关系A->B。
例如,该步骤的在本地获取分布式事务之间的依赖关系,具体可以包括如下两种实现方式:
第一种实现方式:建立本地的锁等待关系列表;并从锁等待关系列表中筛选出分布式事务之间的依赖关系。
例如,对于各个局部数据库,建立本地的锁等待关系列表,可以包括:搜索本地的各第一锁依赖关系;基于各第一锁依赖关系,挖掘潜在的第二锁依赖关系;将各第一锁依赖关系和第二锁依赖关系,存储一关系列表中,生成锁等待关系列表。
本实施例的第一锁依赖关系为显性的锁依赖关系,局部数据库可以直接在本地搜索获取到,该第一锁依赖关系具体指的是分布式事务之间直接的资源访问冲突产生的依赖关系。其次,基于各个第一锁等待关系,可以进一步从中挖掘潜在的、隐含的第二锁等待关系。该第二锁等待关系为分布式事务之间间接的资源访问冲突产生的依赖关系。例如T1->X2,X2->X3,可以挖掘出来T1->X3。采用类似的方式,可以基于搜索得到的所有第一锁等待关系,挖掘出所有可能的隐含的第二锁等待关系。然后将搜索得到的各个第一锁等待关系和挖掘出来的各个第二锁等待关系,一起存储在以关系列表中,作为锁等待关系列表。这样,该锁等待关系列表中包括了在该局部数据库本地获取到的所有的事务依赖关系。然后从锁等待关系列表中筛选出分布式事务之间的依赖关系,如X2->X3。
图3为本发明提供的一种在本地获取分布式事务之间的依赖关系的示意图。如图3所示,在局部数据库即RM1本地,如图1中RM1中最左侧列表所示,可以依次搜索到T3->X1、T1->T2、T2->T3、X1->T4、T5->X2和T4->T5等依赖关系。对于最先获得锁依赖关系是T3->X1,该T3->X1直接存入锁等待关系列表中;再继续获得T1->T2,此时可以在锁等待关系列表中寻找是否已经存在T1或T2,分别与其他事务的依赖关系;若没有,直接将T1->T2存入锁等待关系列表。然后按照同样的方式处理T2->T3,此时可以发现锁等待关系列表中存在与T1和T2相关的依赖关系,结合本依赖关系T2->T3,可以得到连续的逻辑依赖关系T1->T2->T3->X1,虽然T1和T2不是直接依赖于X1,但还可以挖掘出两个新的、隐含的依赖关系T1->X1,T2->X1;按照同样的方式依次处理X1->T4、T5->X2和T4->T5,可以挖掘出RM1的其他所有锁依赖关系,如T4->X2、T5->X2、X1->X2等,均存入锁等待关系列表。具体挖掘时,也可以基于在本地搜索的依赖关系建立依赖关系链条如T1->T2->T3->X1->T4->T5->X2,然后可以从中挖掘出所有的隐含的依赖关系。如图3中RM1中间列表仅示出了锁等待关系列表中的包括有分布式事务的依赖关系。之后,从锁等待关系列表中分析分布式事务的依赖关系;其中只要一方属于本地的事务,都不是分布式依赖关系,例如T1->T2,T2->T3完全是本地事务依赖关系,T1->X1、T2->X1、T4->X2、T5->X2等虽不是完全是本地事务依赖关系,但也包括有本地事务,按照此规则继续处理分词各个依赖关系,直到获取到分布式事务之间的依赖关系X1->X2,若图3中的RM1中最右侧列表所示。
第二种实现方式:搜索本地的各锁依赖关系;基于各锁依赖关系,建立长链表;其中该长链表中包括各锁依赖关系对应的节点标识以及各锁依赖关系的依赖方向;从长链表中挖掘出分布式事务之间的依赖关系。其中每个节点对应一个事务。
进一步可选地,基于各锁依赖关系,建立长链表,具体可以包括:基于各锁依赖关系,建立对应的片段链表,其中片段链表中包括对应的锁依赖关系中的两个节点标识,且在两个节点标识之间标识有对应的锁依赖关系的依赖方向;将各片段链表基于节点标识进行合并,生成长链表。
在该种实现方式种,建立以链表形式组织起来的有向图;例如在图3的RM2中,首先建立一个包括两个事务的节点的片段链表,节点T1指向节点X2;当读取T3->X1后,先在已有的链表中寻找值等于T3和X1的节点,结果没有找到,那么就需要新建一个片段链表,包含两个节点,T3指向X1;最后读取到X2->T3,这时在第一个片段链表种找到了X2,在第二个片段链表中找到了T3,需要进行片段链表合并,组成一个四个节点的长链表,即T1指向X2、X2指向T3、T3指向X1,具体实现流程图如图4所示。此时可以从长链表中挖掘出分布式事务之间的依赖关系X2->X1。
同理,在图3所示的RM1中,也可以采用第二种实现方式生成长链表,并基于长链表获取其中的分布式事务之间的依赖关系。在图3所示的RM2中,也可以采用第一种实现方式,建立本地的锁等待关系列表;并从锁等待关系列表中筛选出分布式事务之间的依赖关系,具体实现原理相同,在此不再赘述。
101、向全局TM发送分布式事务之间的依赖关系,以供全局TM根据接收到的各局部数据库侧的分布式事务之间的依赖关系,进行死锁检测。
本实施例中,在每个局部数据库的本地获取到分布式事务之间的依赖关系之后,局部数据库或者局部数据库中的分布式死锁检测装置,可以向全局TM发送分布式事务之间的依赖关系,以供全局TM根据各个局部数据库本地的分布式事务之间的依赖关系,进行死锁检测。
例如,在如图3所示的场景中,按照该步骤,RM1向全局TM发送分布式事务之间的依赖关系X1->X2,RM2向全局TM发送分布式事务之间的依赖关系X2->X1。此时全局TM可以发现X1<->X2,即分布式事务X1和分布式事务X2互相依赖,形成了分布式死锁,此时全局TM可以检测到该分布式死锁。具体地,在实际应用中,该全局TM接收到的各局部数据库发送的分布式事务之间的依赖关系后,还可以根据各局部数据库发送的分布式事务之间的依赖关系,建立分布式锁有向图,并基于分布式锁有向图,进行死锁检测。例如,可以遍历分布式锁有向图,寻找是否存在环路;若存在,确定存在分布式死锁;否则不存在死锁。
本实施例的分布式死锁检测方法,通过在各局部数据库本地获取分布式事务之间的依赖关系,并分别发送至全局TM,由全局TM发送分布式事务之间的依赖关系进行死锁检测,能够对分布式数据库中的死锁进行有效检测,进而对死锁进行处理;与现有技术等待锁超时才能解锁相比,可以快速检测到死锁,进而可以快速解除死锁,从而能够减少死锁导致的分布式事务对应业务的阻塞时间,提高分布式数据库系统的并发处理性能。
图5为本发明的分布式死锁检测方法实施例二的流程图。如图2所示,本实施例的分布式死锁检测方法,具体可以包括如下步骤:
S200、接收各局部数据库侧的分布式事务之间的依赖关系;各分布式事务之间的依赖关系由对应的局部数据库在本地获取;
S201、根据各局部数据库侧的分布式事务之间的依赖关系,进行死锁检测。
与上述图1所示实施例的不同的是,本实施例在全局TM侧描述本发明的技术方案。具体地,全局TM可以接收各局部数据库向发送分布式事务之间的依赖关系,或者全局TM也可以接收各局部数据库中设置的分布式死锁检测装置向全局TM发送的分布式事务之间的依赖关系。
具体地,全局TM接收到各个局部数据侧的分布式事务之间的依赖关系后,根据各局部数据库侧的分布式事务之间的依赖关系,从中寻找存在互斥的、导致死锁的事务的节点,实现死锁检测。
例如,该步骤S201,具体可以包括:根据各所述局部数据库发送的所述分布式事务之间的依赖关系,建立分布式锁有向图;基于分布式锁有向图,进行死锁检测。例如,可以遍历分布式锁有向图,寻找是否存在环路;若存在,确定存在分布式死锁。否则不存在分布式死锁。
例如图6为本发明提供的一种分布式锁有向图。从图6中可以看出,该分布式锁有向图中存在环路,如节点7和节点8之间存在环路;节点3、节点5和节点4之间存在环路;节点9、节点11和节点12之间存在环路;以及节点9、节点10和节点12之间存在环路等等。每一个环路都可以导致死循环,从而导致死锁。
通过上述方式,检测到死锁后,本发明还可以进一步从环路中获取一个牺牲(victim)事务节点;并通知各局部数据库回滚对应的牺牲事务,进行解锁处理。
本实施例中,选择victim事务节点有很多种方法,可以按照权重原则选择最不重要的分布式事务的节点,也可以按照时间顺序来选择最新的或者最旧的分布式事务的节点,还可以按照分布式事务所扫描的记录数选择影响记录数量最小的分布式事务的节点等等。例如可以获取环路中同时承载其他环路的事务的节点,作为牺牲事务的节点,或者从环路中获取对应的线程优先级最低的事务的节点,作为牺牲事务的节点,或者从环路中获取后续等待事务最多的事务的节点,作为牺牲事务的节点;或者按照时间先后顺序,从环路中获取最新或者最旧的事务的节点,作为牺牲事务的节点;或者从环路中获取影响记录数量最小的事务的节点,作为牺牲事务的节点等等。实际应用中,还可以采用其他策略,来选择牺牲事务的节点,并通知各局部数据库回滚对应的牺牲事务,从而进行解锁处理。
本实施例的分布式死锁检测方法,通过根据接收到的各局部数据库侧的分布式事务之间的依赖关系进行死锁检测,能够对分布式数据库中的死锁进行有效检测,进而对死锁进行处理;与现有技术等待锁超时才能解锁相比,可以快速检测到死锁,进而可以快速解除死锁,从而能够减少死锁导致的分布式事务对应业务的阻塞时间,提高分布式数据库系统的并发处理性能。
图7为本发明的分布式死锁检测装置实施例的结构图。如图7所示,本实施例的分布式死锁检测装置,具体可以包括:
获取模块10用于在对应的局部数据库的本地获取分布式事务之间的依赖关系;
发送模块11用于向全局事务管理器发送获取模块10获取的分布式事务之间的依赖关系,以供全局事务管理器根据接收到的各局部数据库侧的分布式事务之间的依赖关系,进行死锁检测。
本实施例的分布式死锁检测装置,通过采用上述模块实现分布式死锁检测的实现原理以及技术效果与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
进一步可选地,本实施例的分布式死锁检测装置中,其中获取模块10可以具体用于:
建立本地的锁等待关系列表;
从锁等待关系列表中筛选出分布式事务之间的依赖关系。
进一步可选地,该获取模块10用于:
搜索本地的各第一锁依赖关系;
基于各第一锁依赖关系,挖掘潜在的第二锁依赖关系;
将各第一锁依赖关系和第二锁依赖关系,存储一关系列表中,生成锁等待关系列表。
或者可选地,本实施例的分布式死锁检测装置中,其中获取模块10可以具体用于:
搜索本地的各锁依赖关系;
基于各锁依赖关系,建立长链表;长链表中包括各锁依赖关系对应的节点标识以及各锁依赖关系的依赖方向;
从长链表中挖掘出分布式事务之间的依赖关系。
进一步地,该获取模块10用于:
基于各锁依赖关系,建立对应的片段链表,其中片段链表中包括对应的锁依赖关系中的两个节点标识,且在两个节点标识之间标识有对应的锁依赖关系的依赖方向;
将各片段链表基于节点标识进行合并,生成长链表。
图8为本发明的全局事务管理器实施例的结构图。如图8所示,本实施例的全局事务管理器,具体可以包括:
接收模块20用于接收各局部数据库侧的分布式事务之间的依赖关系;各分布式事务之间的依赖关系由对应的局部数据库在本地获取;
死锁检测模块21用于根据接收模块20接收的各局部数据库侧的分布式事务之间的依赖关系,进行死锁检测。
进一步可选地,其中死锁检测模块21,具体用于:
根据各局部数据库发送的分布式事务之间的依赖关系,建立分布式锁有向图;
基于分布式锁有向图,进行死锁检测。
进一步可选地,其中死锁检测模块21,用于:
遍历分布式锁有向图,寻找是否存在环路;
若存在,确定存在分布式死锁;
进一步地,如图8所示,本实施例的全局事务管理器还包括:
获取模块22用于从死锁检测模块21检测的环路中获取一个牺牲事务节点;
通知模块23用于通知各局部数据库回滚获取模块22获取的牺牲事务节点对应的牺牲事务,进行解锁处理。
本实施例的全局事务管理器,通过采用上述模块实现分布式死锁检测的实现原理以及技术效果与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
本发明实施例中还可以提供一个分布式系统,该分布式系统包括数个局部数据库如N个,N可以为大于2的任意正整数。各局部数据库中设置有如上图7所示的分布式死锁检测装置,以及如上图8所示的全局事务管理器;各分布式死锁检测装置与全局事务管理器通信连接。例如,该分布式系统的结构图如图2所示。
图9为本发明的计算机设备实施例的结构图。如图9所示,本实施例的计算机设备,包括:一个或多个处理器30,以及存储器40,存储器40用于存储一个或多个程序,当存储器40中存储的一个或多个程序被一个或多个处理器30执行,使得一个或多个处理器30分别实现如上图1和图4所示实施例的分布式死锁检测方法。图9所示实施例中以包括多个处理器30为例。
例如,图10为本发明提供的一种计算机设备的示例图。图10示出了适于用来实现本发明实施方式的示例性计算机设备12a的框图。图10显示的计算机设备12a仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图10所示,计算机设备12a以通用计算设备的形式表现。计算机设备12a的组件可以包括但不限于:一个或者多个处理器16a,系统存储器28a,连接不同系统组件(包括系统存储器28a和处理器16a)的总线18a。
总线18a表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12a典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12a访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28a可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30a和/或高速缓存存储器32a。计算机设备12a可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34a可以用于读写不可移动的、非易失性磁介质(图10未显示,通常称为“硬盘驱动器”)。尽管图10中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18a相连。系统存储器28a可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明上述图1-图8各实施例的功能。
具有一组(至少一个)程序模块42a的程序/实用工具40a,可以存储在例如系统存储器28a中,这样的程序模块42a包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42a通常执行本发明所描述的上述图1-图8各实施例中的功能和/或方法。
计算机设备12a也可以与一个或多个外部设备14a(例如键盘、指向设备、显示器24a等)通信,还可与一个或者多个使得用户能与该计算机设备12a交互的设备通信,和/或与使得该计算机设备12a能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22a进行。并且,计算机设备12a还可以通过网络适配器20a与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20a通过总线18a与计算机设备12a的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12a使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理器16a通过运行存储在系统存储器28a中的程序,从而执行各种功能应用以及数据处理,例如实现上述实施例所示的分布式死锁检测方法。
本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例所示的分布式死锁检测方法。
本实施例的计算机可读介质可以包括上述图10所示实施例中的系统存储器28a中的RAM30a、和/或高速缓存存储器32a、和/或存储系统34a。
随着科技的发展,计算机程序的传播途径不再受限于有形介质,还可以直接从网络下载,或者采用其他方式获取。因此,本实施例中的计算机可读介质不仅可以包括有形的介质,还可以包括无形的介质。
本实施例的计算机可读介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (19)
1.一种分布式死锁检测方法,其特征在于,所述方法包括:
在对应的局部数据库的本地获取分布式事务之间的依赖关系;
向全局事务管理器发送所述分布式事务之间的依赖关系,以供所述全局事务管理器根据接收到的各局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
2.根据权利要求1所述的方法,其特征在于,在对应的局部数据库的本地获取分布式事务之间的依赖关系,包括:
建立本地的锁等待关系列表;
从所述锁等待关系列表中筛选出所述分布式事务之间的依赖关系。
3.根据权利要求2所述的方法,其特征在于,建立本地的锁等待关系列表,包括:
搜索本地的各第一锁依赖关系;
基于各所述第一锁依赖关系,挖掘潜在的第二锁依赖关系;
将各所述第一锁依赖关系和所述第二锁依赖关系,存储一关系列表中,生成所述锁等待关系列表。
4.根据权利要求1所述的方法,其特征在于,在对应的局部数据库的本地获取分布式事务之间的依赖关系,包括:
搜索本地的各锁依赖关系;
基于各所述锁依赖关系,建立长链表;所述长链表中包括各所述锁依赖关系对应的节点标识以及各所述锁依赖关系的依赖方向;
从所述长链表中挖掘出所述分布式事务之间的依赖关系。
5.根据权利要求4所述的方法,其特征在于,基于各所述锁依赖关系,建立长链表,包括:
基于各所述锁依赖关系,建立对应的片段链表,其中所述片段链表中包括对应的所述锁依赖关系中的两个节点标识,且在所述两个节点标识之间标识有对应的所述锁依赖关系的依赖方向;
将各所述片段链表基于节点标识进行合并,生成所述长链表。
6.一种分布式死锁检测方法,其特征在于,所述方法包括:
接收各局部数据库侧的所述分布式事务之间的依赖关系;各所述分布式事务之间的依赖关系由对应的所述局部数据库在本地获取;
根据各所述局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
7.根据权利要求6所述的方法,其特征在于,根据各所述局部数据库发送的所述分布式事务之间的依赖关系,进行死锁检测,包括:
根据各所述局部数据库发送的所述分布式事务之间的依赖关系,建立分布式锁有向图;
基于所述分布式锁有向图,进行死锁检测。
8.根据权利要求7所述的方法,其特征在于,基于所述分布式锁有向图,进行死锁检测,包括:
遍历所述分布式锁有向图,寻找是否存在环路;
若存在,确定存在分布式死锁;
进一步地,检测到所述分布式死锁之后,所述方法还包括:
从所述环路中获取一个牺牲事务节点;
通知各所述局部数据库回滚对应的所述牺牲事务,进行解锁处理。
9.一种分布式死锁检测装置,其特征在于,所述装置包括:
获取模块,用于在对应的局部数据库的本地获取分布式事务之间的依赖关系;
发送模块,用于向全局事务管理器发送所述分布式事务之间的依赖关系,以供所述全局事务管理器根据接收到的各局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
10.根据权利要求9所述的装置,其特征在于,所述获取模块,用于:
建立本地的锁等待关系列表;
从所述锁等待关系列表中筛选出所述分布式事务之间的依赖关系。
11.根据权利要求10所述的装置,其特征在于,所述获取模块,用于:
搜索本地的各第一锁依赖关系;
基于各所述第一锁依赖关系,挖掘潜在的第二锁依赖关系;
将各所述第一锁依赖关系和所述第二锁依赖关系,存储一关系列表中,生成所述锁等待关系列表。
12.根据权利要求9所述的装置,其特征在于,所述获取模块,用于:
搜索本地的各锁依赖关系;
基于各所述锁依赖关系,建立长链表;所述长链表中包括各所述锁依赖关系对应的节点标识以及各所述锁依赖关系的依赖方向;
从所述长链表中挖掘出所述分布式事务之间的依赖关系。
13.根据权利要求12所述的装置,其特征在于,所述获取模块,用于:
基于各所述锁依赖关系,建立对应的片段链表,其中所述片段链表中包括对应的所述锁依赖关系中的两个节点标识,且在所述两个节点标识之间标识有对应的所述锁依赖关系的依赖方向;
将各所述片段链表基于节点标识进行合并,生成所述长链表。
14.一种全局事务管理器,其特征在于,所述全局局事务管理器包括:
接收模块,用于接收各局部数据库侧的所述分布式事务之间的依赖关系;各所述分布式事务之间的依赖关系由对应的所述局部数据库在本地获取;
死锁检测模块,用于根据各所述局部数据库侧的所述分布式事务之间的依赖关系,进行死锁检测。
15.根据权利要求14所述的全局事务管理器,其特征在于,所述死锁检测模块,用于:
根据各所述局部数据库发送的所述分布式事务之间的依赖关系,建立分布式锁有向图;
基于所述分布式锁有向图,进行死锁检测。
16.根据权利要求15所述的全局事务管理器,其特征在于,所述死锁检测模块,用于:
遍历所述分布式锁有向图,寻找是否存在环路;
若存在,确定存在分布式死锁;
进一步地,所述全局事务管理器还包括:
获取模块,用于从所述环路中获取一个牺牲事务节点;
通知模块,用于通知各所述局部数据库回滚对应的所述牺牲事务,进行解锁处理。
17.一种分布式系统,所述分布式系统包括数个局部数据库,各所述局部数据库中设置有如上权利要求9-13任一所述的分布式死锁检测装置,以及如上权利要求14-16任一所述的全局事务管理器;各所述分布式死锁检测装置与所述全局事务管理器通信连接。
18.一种计算机设备,其特征在于,所述设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法,或者实现如权利要求6-8中任一所述的方法。
19.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的方法,或者实现如权利要求6-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910600116.1A CN110442459A (zh) | 2019-07-04 | 2019-07-04 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910600116.1A CN110442459A (zh) | 2019-07-04 | 2019-07-04 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110442459A true CN110442459A (zh) | 2019-11-12 |
Family
ID=68428574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910600116.1A Pending CN110442459A (zh) | 2019-07-04 | 2019-07-04 | 分布式死锁检测方法及装置、计算机设备及可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110442459A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835982A (zh) * | 2021-02-26 | 2021-05-25 | 浪潮云信息技术股份公司 | 一种基于分布式数据库的表锁实现方法 |
CN113052515A (zh) * | 2021-05-31 | 2021-06-29 | 南京百伦斯智能科技有限公司 | 一种基于数据并发处理的教学考评方法及系统 |
CN113111099A (zh) * | 2021-06-15 | 2021-07-13 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
CN114579669A (zh) * | 2022-05-06 | 2022-06-03 | 天津南大通用数据技术股份有限公司 | 基于探测消息传递的分布式数据库事务死锁检测解锁方法 |
WO2022237570A1 (zh) * | 2021-05-13 | 2022-11-17 | 华为技术有限公司 | 死锁检测方法、装置以及相关设备 |
CN117076147A (zh) * | 2023-10-13 | 2023-11-17 | 支付宝(杭州)信息技术有限公司 | 死锁检测方法、装置、设备和存储介质 |
-
2019
- 2019-07-04 CN CN201910600116.1A patent/CN110442459A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835982A (zh) * | 2021-02-26 | 2021-05-25 | 浪潮云信息技术股份公司 | 一种基于分布式数据库的表锁实现方法 |
CN112835982B (zh) * | 2021-02-26 | 2023-03-24 | 浪潮云信息技术股份公司 | 一种基于分布式数据库的表锁实现方法 |
WO2022237570A1 (zh) * | 2021-05-13 | 2022-11-17 | 华为技术有限公司 | 死锁检测方法、装置以及相关设备 |
CN113052515A (zh) * | 2021-05-31 | 2021-06-29 | 南京百伦斯智能科技有限公司 | 一种基于数据并发处理的教学考评方法及系统 |
CN113111099A (zh) * | 2021-06-15 | 2021-07-13 | 蚂蚁金服(杭州)网络技术有限公司 | 一种环路检测方法、装置、电子设备与存储介质 |
WO2022262515A1 (zh) * | 2021-06-15 | 2022-12-22 | 北京奥星贝斯科技有限公司 | 环路检测的方法、装置、电子设备与存储介质 |
CN114579669A (zh) * | 2022-05-06 | 2022-06-03 | 天津南大通用数据技术股份有限公司 | 基于探测消息传递的分布式数据库事务死锁检测解锁方法 |
CN117076147A (zh) * | 2023-10-13 | 2023-11-17 | 支付宝(杭州)信息技术有限公司 | 死锁检测方法、装置、设备和存储介质 |
CN117076147B (zh) * | 2023-10-13 | 2024-04-16 | 支付宝(杭州)信息技术有限公司 | 死锁检测方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110442459A (zh) | 分布式死锁检测方法及装置、计算机设备及可读介质 | |
CN101889266B (zh) | 事务存储器中的并行嵌套事务 | |
US6314460B1 (en) | Method and apparatus for analyzing a storage network based on incomplete information from multiple respective controllers | |
CN111049878B (zh) | 微服务调用链具象化的方法、装置、电子装置及存储介质 | |
US8533663B2 (en) | System and method for utilizing available best effort hardware mechanisms for supporting transactional memory | |
US20170154445A1 (en) | Method for processing graphs and information processing apparatus | |
US7606813B1 (en) | Model consolidation in a database schema | |
US9558474B2 (en) | Systems management operational workflow templates | |
CN102664746B (zh) | 用于分布式数据中心各分量的在全局上健全且一致的配置管理 | |
US7970737B2 (en) | Recovery administration of global transaction participants | |
KR20110124732A (ko) | 특정된 트랜젝션 콘텍스트에서의 소프트웨어의 조건부의 동적 인스트루먼테이션 | |
US20100235817A1 (en) | Fast and accurate data race detection for concurrent programs with asynchronous calls | |
US20200364183A1 (en) | Device and method for managing ledger data on blockchain | |
JPH11272484A (ja) | クライアント要求をディスパッチする装置及び方法 | |
CN102043826B (zh) | 事件处理的方法和装置 | |
US20120102075A1 (en) | Management of configuration data structures in multi-layer data models | |
CN102055779B (zh) | 生成高可用性组的方法、设备及系统 | |
EP1646940A2 (en) | Designing computer programs | |
US8103685B1 (en) | Methods and apparatus for capturing last discovery time of managed objects | |
CN111183622B (zh) | 区块链系统、信息共享方法及相关设备 | |
KR101681154B1 (ko) | 데이터 수집기 구축 방법, 이를 수행하는 데이터 수집기 구축 서버 및 이를 저장하는 기록매체 | |
CN110209744A (zh) | 基于联盟链的关系型数据库及其操作方法和装置 | |
CN114564854A (zh) | 支持fmea双向关系树的数据节点的操作方法及设备 | |
CN114610309A (zh) | 对象配置方法、装置、设备及存储介质 | |
Kawazu et al. | Two-phase deadlock detection algorithm in distributed databases |
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 |