CN107402822B - 死锁处理方法及装置 - Google Patents
死锁处理方法及装置 Download PDFInfo
- Publication number
- CN107402822B CN107402822B CN201710544543.3A CN201710544543A CN107402822B CN 107402822 B CN107402822 B CN 107402822B CN 201710544543 A CN201710544543 A CN 201710544543A CN 107402822 B CN107402822 B CN 107402822B
- Authority
- CN
- China
- Prior art keywords
- resource
- request
- lock
- access
- lock information
- 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
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
技术领域
本公开涉及分布式锁技术领域,尤其涉及一种死锁处理方法及装置。
背景技术
在分布式系统中,每个节点都可以通过计算机网络访问分布式系统中共享的资源,为了保障分布式系统中资源访问的安全性,避免数据的一致性遭到破坏,由此产生了控制分布式系统中各节点访问同一资源的分布式锁。
目前,较为广泛使用的分布式锁有zookeeper分布式锁、memcached分布式锁以及redis分布式锁,该三种分布式锁针对死锁问题都提出了相应的解决方案,前者通过移除临时节点避免死锁,后两者则通过设置过期时间避免死锁。
然而,前者由于需要动态产生和销毁临时节点,性能开销较大,而后两者在过期时间内仍无法完全避免出现死锁。因此,如何简单、高效地避免死锁问题的发生亟待解决。
发明内容
为了解决上述技术问题,本公开的一个目的在于提供一种死锁处理方法及装置。
其中,本公开所采用的技术方案为:
一种死锁处理方法,包括:接收节点发起的资源访问请求,根据所述资源访问请求确定请求访问资源;根据所述请求访问资源由锁信息缓存中获取对应的锁信息,所述锁信息指示了所述请求访问资源对应的访问对象,所述访问对象包括节点及线程;通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态;如果是,根据所述资源访问请求确定的访问对象更改所述锁信息。
一种死锁处理装置,包括:访问请求接收模块,用于接收节点发起的资源访问请求,根据所述资源访问请求确定请求访问资源;锁信息获取模块,用于根据所述请求访问资源由锁信息缓存中获取对应的锁信息,所述锁信息指示了所述请求访问资源对应的访问对象,所述访问对象包括节点及线程;死锁判断模块,用于通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态;如果是,则通知锁信息更改模块;所述锁信息更改模块,用于根据所述资源访问请求确定的访问对象更改所述锁信息。
与现有技术相比,本公开具有以下有益效果:
通过接收节点发起的资源访问请求确定请求访问资源,在锁信息缓存中根据请求访问资源获取对应的锁信息,并通过监控判断锁信息指示的访问对象中节点的工作状态是否为离线状态,进而在该节点处于离线状态时根据资源访问请求确定的访问对象更改锁信息。
换而言之,当锁信息指示的访问对象中的节点处于离线状态时,表明该节点异常,此时通过主动更改锁信息,使得更改前锁信息指示的访问对象能够及时地释放请求访问资源,进而使得资源访问请求确定的访问对象能够对该请求访问资源进行访问,由此完全避免由于节点异常而出现的死锁,进而有效地保障了分布式系统中资源访问的安全性。
此外,通过服务器中配置的锁信息缓存,有效地避免了服务器死机重启时造成锁信息的丢失,进而充分地保证了分布式系统中资源访问的可靠性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并于说明书一起用于解释本公开的原理。
图1是根据本公开所涉及的实施环境的示意图;
图2是根据一示例性实施例示出的一种服务器的框图;
图3是根据一示例性实施例示出的一种死锁处理方法的流程图;
图4是图3对应实施例中步骤330在一个实施例的流程图;
图5是根据一示例性实施例示出的生成请求访问资源对应的锁信息步骤的流程图;
图6是根据一示例性实施例示出的另一种死锁处理方法的流程图;
图7是图6对应实施例中步骤530在一个实施例的流程图;
图8是图6对应实施例中步骤530在另一个实施例的流程图;
图9是图6对应实施例中步骤530在另一个实施例的流程图;
图10是根据一示例性实施例示出的一种死锁处理装置的框图;
图11是图10对应实施例中锁信息获取模块730在一个实施例的框图;
图12是根据一示例性实施例示出的锁信息生成模块810的框图;
图13是根据一示例性实施例示出的另一种死锁处理装置的框图;
图14是图13对应实施例中资源解锁模块930在一个实施例的框图;
图15是图13对应实施例中资源解锁模块930在另一个实施例的框图;
图16是图13对应实施例中资源解锁模块930在另一个实施例的框图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述,这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1为一种死锁处理方法所涉及的实施环境的示意图。该实施环境为一分布式系统,该分布式系统中部署了若干节点。
其中,节点可以是客户端100,也可以是服务器200。
客户端100又进一步地运行在智能手机、计算机、平板电脑、掌上电脑等终端设备。服务器200既可以是提供请求访问资源的节点,也可以是实现分布式锁下发的服务器。
节点将通过资源访问请求的发起向服务器申请请求访问资源对应的分布式锁,进而使得该分布式锁的持有者,即该节点的某个线程能够访问请求访问资源,以此保证分布式系统中资源共享的进行。
需要说明的是,分布式锁实质上是服务器为节点的某个线程分配的访问请求访问资源的访问权限。当服务器将该分布式锁下发至发起资源访问请求的节点,该节点的某个线程便获取到访问请求访问资源的访问权限,即该节点的某个线程成为请求访问资源对应的分布式锁的持有者。
图2是根据一示例性实施例示出的一种服务器200的框图。需要说明的是,该服务器200只是一个适配于本公开的示例,不能认为是提供了对本公开的使用范围的任何限制。该服务器200也不能解释为需要依赖于或者必须具有图2中示出的示例性的服务器200中的一个或者多个组件。
该服务器200的硬件结构可因配置或者性能的不同而产生较大的差异,如图2所示,服务器200包括:电源210、接口230、至少一存储介质250、以及至少一中央处理器(CPU,Central Processing Units)270。
其中,电源210用于为服务器200上的各硬件设备提供工作电压。
接口230包括至少一有线或无线网络接口231、至少一串并转换接口233、至少一输入输出接口235以及至少一USB接口237等,用于与外部设备通信。
存储介质250作为资源存储的载体,可以是随机存储介质、磁盘或者光盘等,其上所存储的资源包括操作系统251、应用程序253及数据255等,存储方式可以是短暂存储或者永久存储。其中,操作系统251用于管理与控制服务器200上的各硬件设备以及应用程序253,以实现中央处理器270对海量数据255的计算与处理,其可以是Windows ServerTM、MacOS XTM、UnixTM、LinuxTM、FreeBSDTM等。应用程序253是基于操作系统251之上完成至少一项特定工作的计算机程序,其可以包括至少一模块(图中未示出),每个模块都可以分别包含有对服务器200的一系列操作指令。数据255可以是存储于磁盘中的照片、图片等等。
中央处理器270可以包括一个或多个以上的处理器,并设置为通过总线与存储介质250通信,用于运算与处理存储介质250中的海量数据255。
如上面所详细描述的,适用本公开的服务器200将通过中央处理器270读取存储介质250中存储的一系列操作指令的形式来进行死锁处理,以使异常的节点及时释放请求访问资源。
此外,通过硬件电路或者硬件电路结合软件指令也能同样实现本公开,因此,实现本公开并不限于任何特定硬件电路、软件以及两者的组合。
请参阅图3,在一示例性实施例中,一种死锁处理方法适用于图1所示实施环境的服务器200,该种死锁处理方法可以由服务器200执行,可以包括以下步骤:
步骤310,接收节点发起的资源访问请求,根据资源访问请求确定请求访问资源。
对于节点而言,在分布式系统中请求访问共享的资源时,将针对请求访问的资源向服务器发起资源访问请求,以获取服务器下发的请求访问的资源对应的分布式锁,进而使得该节点的某个进程通过该分布式锁对请求访问的资源进行访问。
对于服务器而言,在节点发起资源访问请求之后,即可接收到该资源访问请求,进而根据该资源访问请求确定节点请求访问的资源,即请求访问资源,以利于后续为该请求访问资源分配对应的分布式锁。
进一步地,资源访问请求中还包含了访问对象的相关信息,根据该资源访问请求中包含的访问对象的相关信息即可确定访问对象。例如,访问对象的相关信息包括节点A和节点A的线程B,则该资源访问请求确定的访问对象即为节点A的线程B,即节点A的线程B请求访问请求访问资源。
步骤330,根据请求访问资源由锁信息缓存中获取对应的锁信息。
在允许发起资源访问请求的节点的某个线程对请求访问资源进行访问之前,首先需要确认该请求访问资源是否已被占用,即该请求访问资源是否已经被允许由该节点的其他线程或者其他节点的某个线程访问。
如前所述,为了控制分布式系统中各节点访问同一资源,服务器将为请求访问同一资源的各节点下发分布式锁,进而使得某个节点的某个线程通过分布式锁对请求访问资源进行访问,以此达到访问互斥的目的。
本实施例中,锁信息用于唯一地标识请求访问资源对应的分布式锁,通过该锁信息即可获知究竟是哪个节点的哪个线程被允许对请求访问资源进行访问,即,锁信息指示了请求访问资源对应的访问对象,亦即请求访问资源对应的分布式锁的持有者。
进一步地,服务器在下发分布式锁的同时,会对其所下发的分布式锁进行记录,即,将请求访问资源对应的访问对象进行记录。具体而言,将锁信息存储在服务器配置的锁信息缓存中。例如,该锁信息缓存可以是只读存储介质、随机存储介质、磁盘、闪存等等,在此并未加以限定。
由此,为了确认请求访问资源是否已被占用,需要由锁信息缓存中获取该请求访问资源对应的锁信息,进而通过该锁信息确认请求访问资源对应的分布式锁的持有者,即请求访问资源对应的访问对象。
如果锁信息缓存中存在该请求访问资源对应的锁信息,即表示该请求访问资源已被锁信息指示的访问对象访问,此时,只有锁信息指示的访问对象释放了该请求访问资源,该请求访问资源才可以再次被访问。
相对的,如果锁信息缓存中不存在该请求访问资源对应的锁信息,即表示未有任何节点的任何线程对该请求访问资源进行访问,此时,服务器将为该请求访问资源生成对应的分布式锁,并下发至发起资源访问请求的节点,以使该节点的某个线程通过该分布式锁对请求访问资源进行访问。
可以理解,由于没有任何节点的任何线程对该请求访问资源进行访问,死锁问题将不会出现,故而当未获取到请求访问资源对应的锁信息,则不需要跳转进入步骤350至步骤370,而是由服务器直接为请求访问资源分配对应的分布式锁,即生成请求访问资源对应的锁信息。
步骤350,通过对分布式系统中各节点工作状态的监控,判断锁信息指示的访问对象中节点的工作状态是否为离线状态。
如上所述,只有锁信息指示的访问对象释放了请求访问资源,资源访问请求确定的访问对象才可以对该请求访问资源进行访问。
可以理解,如果锁信息指示的访问对象中的节点异常,例如死机,则有可能无法及时地释放该请求访问资源,相应地,发起资源访问请求的节点可能会持续地等待该请求访问资源的释放,从而引发死锁问题。
由此,将对锁信息指示的访问对象中的节点进行异常检测,较优地,节点的异常检测通过监控节点的工作状态实现。其中,工作状态包括离线状态和在线状态。
例如,节点的异常检测以监控分布式系统中各节点的连接数进行,若连接数小于阈值,则认为节点的工作状态为离线状态,进而判定节点异常。又或者,节点的异常检测以监控分布式系统中各节点的网络速率进行监控,若网络速率小于阈值,则认为节点的工作状态为离线状态,进而判定节点异常。
如果锁信息指示的访问对象中的节点异常,此时,服务器将主动为该节点访问的请求访问资源进行解锁,以此实现请求访问资源的释放,从而有利于资源访问请求确定的访问对象对请求访问资源的访问,即跳转进入步骤370。
如果锁信息指示的访问对象中的节点正常,此时,发起资源访问请求的节点将继续等待请求访问资源被释放,即返回步骤330。
进一步地,根据实际应用场景的需要,服务器还可以返回一资源释放失败响应至发起资源访问请求的节点,以使节点获知资源访问请求失败,进而选择继续等待资源释放或者尝试进行其他资源访问。
步骤370,根据资源访问请求确定的访问对象更改锁信息。
其中,资源访问请求确定的访问对象包括发起资源访问请求的节点以及该节点的某个线程。
通过锁信息的更改,使得更改后的锁信息指示的访问对象变更为资源访问请求确定的访问对象,即发起资源访问请求的节点以及该节点的某个线程,亦即服务器中更新了请求访问资源对应的分布式锁,进而使得发起资源访问请求的节点的某个线程成为该分布式锁新的持有者,该节点的某个线程便可通过其所持有的分布式锁对请求访问资源进行访问。
换而言之,通过锁信息的更改,更改前锁信息指示的访问对象释放了该请求访问资源,同时,资源访问请求确定的访问对象占用了该请求访问资源。
需要说明的是,锁信息是以标识的形式指示请求访问资源对应的访问对象的。例如,锁信息包括节点A和线程B,则节点A和线程B即标识了请求访问资源对应的访问对象。
通过如上所述的过程,实现了资源访问请求过程中节点异常检测功能,即在锁信息指示的访问对象中的节点处于离线状态时,通过锁信息的更改能够及时地令更改前锁信息指示的访问对象释放请求访问资源,而将释放的请求访问资源分配给资源访问请求确定的访问对象,由此完全避免由于节点异常出现的死锁,进而有效地保障了分布式系统中资源访问的安全性。
此外,通过服务器配置的锁信息缓存,对锁信息进行备份并持久化存储,有效地避免了服务器死机重启后造成锁信息的丢失,进而充分保证了分布式系统中资源访问的可靠性。
请参阅图4,在一示例性实施例中,步骤330可以包括以下步骤:
步骤331,根据请求访问资源生成对应的锁键。
应当理解,分布式系统中部署了若干节点,每个节点上都包含了可供访问的若干资源,为了区别不同的资源,则需要对资源进行唯一地标识。
由此,为分布式系统中的每一资源生成对应的锁键,该资源对应的锁键即唯一地标识该资源。相应地,请求访问资源对应的锁键唯一地标识请求访问资源。
需要说明的是,锁键生成算法属于现有技术范畴,在此不再一一赘述。
步骤333,在锁信息缓存中关联查找锁键的锁值。
如前所述,锁信息指示了请求访问资源对应的访问对象。换而言之,锁信息指示了两方面的信息:请求访问资源和访问对象。
本实施例中,锁键用于唯一地标识请求访问资源,锁值则用于唯一地标识该请求访问资源对应的访问对象,并且锁键及其锁值关联存储在锁信息缓存中。
由此,在生成请求访问资源对应的锁键之后,即可在锁信息缓存中关联查找出该锁键的锁值,进而有利于后续获得请求访问资源对应的锁信息。
步骤335,如果关联查找到的锁值非空,则以锁键及其锁值作为请求访问资源对应的锁信息。
如果关联查找到的锁值非空,表明存在某个节点的某个线程访问了请求访问资源,即该请求访问资源已经被允许由锁值标识的访问对象进行访问,此时,便以锁键及其锁值作为请求访问资源对应的锁信息,以便后续对该锁信息指示的访问对象中的节点进行异常检测。
进一步地,在一示例性实施例中,步骤330还可以包括以下步骤:
如果未关联查找到锁值或者关联查找到的锁值为空,则跳转进入生成请求访问资源对应的锁信息步骤。
如果未关联查找到锁值或者关联查找到的锁值为空,表明没有任何节点的任何线程访问了请求访问资源,则资源访问请求确定的访问对象可以占用该请求访问资源。
具体而言,需要生成请求访问资源对应的锁信息,即为发起资源访问请求的节点下发该请求访问资源对应的分布式锁,以使该节点的某个线程通过该锁信息唯一标识地分布式锁对请求访问资源进行访问。
相应地,请参阅图5,在一示例性实施例中,生成请求访问资源对应的锁信息步骤可以包括以下步骤:
步骤411,根据资源访问请求确定的访问对象对锁键的锁值进行赋值。
在节点发起资源访问请求时,会将访问对象的相关信息一起上报至服务器,进而使得服务器获知究竟是哪个节点的哪个线程要访问请求访问资源。
即,访问对象的相关信息是指进行资源访问的节点和线程。例如,该相关信息包括发起资源访问请求的节点对应的标识,和/或,访问请求访问资源的线程对应的标识等等。
由此,可以根据资源访问请求中包含的访问对象的相关信息来确定访问对象,并根据该访问对象对锁值进行赋值。例如,资源访问请求确定的访问对象以节点标识001和线程标识1表示,则根据该访问对象赋值后的锁值即为0011。
步骤413,以锁键及赋值后的锁值作为请求访问资源对应的锁信息,并将锁键及赋值后的锁值关联存储至锁信息缓存中。
在生成请求访问资源对应的锁信息之后,即完成了为请求访问资源上锁的过程,进而下发该请求访问资源对应的分布式锁,使得发起资源访问请求的节点的某个线程成为该分布式锁的持有者,并通过该分布式锁对请求访问资源进行访问。
进一步地,服务器还将对该请求访问资源对应的分布式锁进行记录,具体地,将锁键及锁值关联存储至锁信息缓存中,以根据请求访问资源进行对应锁信息的获取,并由此形成锁信息的备份和持久化存储,进而有效地保证了分布式系统中资源访问的可靠性。
在一示例性实施例中,步骤350之前,如上所述的方法还可以包括以下步骤:
判断锁信息指示的访问对象是否区别于资源访问请求确定的访问对象。
如果锁信息指示的访问对象与资源访问请求确定的访问对象一致,则表明发起资源访问请求的节点的某个线程已经是请求访问资源对应的分布式锁的持有者,其可以通过持有的分布式锁继续对请求访问资源的访问。
否则,如果锁信息指示的访问对象与资源访问请求确定的访问对象不一致,则跳转进入步骤350。
请参阅图6,在一示例性实施例中,步骤370之后,如上所述的方法还可以包括以下步骤:
步骤510,接收节点针对请求访问资源发起的资源释放请求。
对于节点而言,在完成对请求访问资源的访问之后,将针对该请求访问资源向服务器发起资源释放请求。
对于服务器而言,在节点发起资源释放请求之后,便可接收到该资源释放请求,进而通过响应该资源释放请求对请求访问资源进行解锁,即释放该请求访问资源。
步骤530,通过响应资源释放请求对请求访问资源进行解锁。
具体地,请参阅图7,在一示例性实施例中,步骤530可以包括以下步骤:
步骤531,根据请求访问资源生成对应的锁键。
如前所述,分布式系统中部署了若干节点,每个节点上都包含了可供访问的若干资源,为了区别不同的资源,则需要对资源进行唯一地标识。
由此,为分布式系统中的每一资源生成对应的锁键,该资源对应的锁键即唯一地标识该资源。相应地,请求访问资源对应的锁键唯一地标识请求访问资源。
步骤533,在锁信息缓存中关联查找锁键的锁值。
如前所述,锁信息指示了请求访问资源对应的访问对象。换而言之,锁信息指示了两方面的信息:请求访问资源和访问对象。
本实施例中,锁键用于唯一地标识请求访问资源,锁值则用于唯一地标识该请求访问资源对应的访问对象,并且锁键及其锁值关联存储在锁信息缓存中。
由此,在生成请求访问资源对应的锁键之后,即可在锁信息缓存中关联查找出该锁键的锁值。
步骤535,如果未关联查找到锁值或者关联查找到的锁值为空,则请求访问资源解锁成功。
如果未关联查找到锁值或者关联查找到的锁值为空,表明没有任何节点的任何线程访问了请求访问资源,则请求访问资源解锁成功,即请求访问资源释放成功。
进一步地,请参阅图8,在一示例性实施例中,步骤530还可以包括以下步骤:
步骤631,如果关联查找到的锁值非空,则判断锁值指示的访问对象是否区别于资源释放请求确定的访问对象。
如果关联查找到的锁值非空,表明存在某个节点的某个线程访问了请求访问资源,即该请求访问资源已经被允许由锁值标识的访问对象进行访问,此时,需要判断资源释放请求确定的访问对象是否为锁值指示的访问对象,即分布式锁的持有者,因为只有分布式锁的持有者才能够向服务器申请解锁其自身所访问的请求访问资源。
如果相互区别,则表明资源释放请求确定的访问对象不是分布式锁的持有者,此时服务器不响应资源释放请求,即发起资源释放请求的节点请求释放请求访问资源失败。
如果二者保持一致,则发起资源释放请求的节点可以向服务器申请进行请求访问资源的解锁,即跳转进入步骤633。
步骤633,在锁信息缓存中对锁键及其锁值进行移除处理,请求访问资源解锁成功。
如果二者保持一致,则确认资源释放请求确定的访问对象正是分布式锁的持有者,即发起资源释放请求的节点能够向服务器申请对请求访问资源进行解锁。
具体地,对锁键及其锁值进行移除处理,所述移除处理包括但不限于:将锁键及其锁值由锁信息缓存中全部删除,或者,仅将锁键的锁值由锁信息缓存中清除,例如,将锁值赋值为空。
通过如此设置,避免了请求访问资源地误解锁,进一步有效地保证了分布式系统中资源访问的可靠性。
更进一步地,请参阅图9,在一示例性实施例中,步骤530还可以包括以下步骤:
步骤635,如果锁值指示的访问对象区别于资源释放请求确定的访问对象,则通过监控判断锁值指示的访问对象中节点的工作状态是否为离线状态。
可以理解,随着访问时间的增长,或者访问资源的增加,资源释放请求确定的访问对象并不能保证其所持有的分布式锁与请求访问资源对应。
基于此,在二者不对应时,即锁值指示的访问对象区别于资源释放请求确定的访问对象,服务器还将主动对锁值指示的访问对象中节点进行异常检测,以此避免出现死锁,同时也是进一步地确保非分布式锁的持有者错误地向服务器申请解锁请求访问资源。
具体地,节点的异常检测通过监控节点的工作状态实现。其中,工作状态包括离线状态和在线状态。
例如,节点的异常检测以监控分布式系统中各节点的连接数进行,若连接数小于阈值,则认为节点的工作状态为离线状态,进而判定节点异常。又或者,节点的异常检测以监控分布式系统中各节点的网络速率进行监控,若网络速率小于阈值,则认为节点的工作状态为离线状态,进而判定节点异常。
如果锁值指示的访问对象中的节点异常,此时,服务器将主动为该节点访问的请求访问资源进行解锁,以此实现请求访问资源的释放,即跳转进入步骤637。
如果锁信息指示的访问对象中的节点正常,此时,请求访问资源释放失败,从而进一步地保证了非分布式锁的持有者无法释放请求访问资源,避免请求访问资源的误解锁。
步骤637,在锁信息缓存中对锁键及其锁值进行移除处理,请求访问资源解锁成功。
具体地,对锁键及其锁值进行移除处理,所述移除处理包括但不限于:将锁键及其锁值由锁信息缓存中全部删除,或者,仅将锁键的锁值由锁信息缓存中清除,例如,将锁值赋值为空。
通过如此设置,避免了死锁问题的出现,进一步有效地保证了分布式系统中资源访问的安全性。
通过上述各实施例的相互配合,实现了分布式系统中同一资源的互斥访问,即不同节点之间以及同一节点中不同线程对同一资源的互斥访问,同时避免了节点异常时出现的死锁,有效地保证了分布式系统中资源访问的安全性和可靠性。
下述为本公开装置实施例,可以用于执行本公开所涉及的死锁处理方法。对于本公开装置实施例中未披露的细节,请参照本公开所涉及的死锁处理方法实施例。
请参阅图10,在一示例性实施例中,一种死锁处理装置700包括但不限于:访问请求接收模块710、锁信息获取模块730、死锁判断模块750和锁信息更改模块770。
其中,访问请求接收模块710用于接收节点发起的资源访问请求,根据资源访问请求确定请求访问资源。
锁信息获取模块730用于根据请求访问资源由锁信息缓存中获取对应的锁信息。锁信息指示了请求访问资源对应的访问对象,访问对象包括节点及线程。
死锁判断模块750用于通过对分布式系统中各节点工作状态的监控,判断锁信息指示的访问对象中节点的工作状态是否为离线状态。如果是,则通知锁信息更改模块。
锁信息更改模块770用于根据资源访问请求确定的访问对象更改锁信息。
请参阅图11,在一示例性实施例中,锁信息获取模块730包括但不限于:第一锁键生成单元731、第一锁值查找单元733和锁信息形成单元735。
其中,第一锁键生成单元731用于根据请求访问资源生成对应的锁键,通过锁键标识请求访问资源。
第一锁值查找单元733用于在锁信息缓存中关联查找锁键的锁值。
锁信息形成单元735用于如果关联查找到的锁值非空,则以锁键及其锁值作为请求访问资源对应的锁信息。
进一步地,在一示例性实施例中,锁信息获取模块730还包括但不限于:通知单元。
其中,通知单元用于如果未关联查找到锁值或者关联查找到的锁值为空,则通知锁信息生成模块。
相应地,请参阅图12,在一示例性实施例中,锁信息生成模块810包括但不限于:锁值赋值单元811和锁信息存储单元813。
其中,锁值赋值单元811用于根据资源访问请求确定的访问对象对锁键的锁值进行赋值。
锁信息存储单元813用于以锁键及赋值后的锁值作为请求访问资源对应的锁信息,并将锁键及赋值后的锁值关联存储至锁信息缓存中。
在一示例性实施例中,如上所述的装置700还包括但不限于:节点判断模块。
其中,节点判断模块用于判断锁信息指示的访问对象是否区别于资源访问请求确定的访问对象。
如果是,则通知死锁判断模块。
请参阅图13,在一示例性实施例中,如上所述的装置700还包括但不限于:释放请求接收模块910和资源解锁模块930。
其中,释放请求接收模块910用于接收节点针对请求访问资源发起的资源释放请求。
资源解锁模块930用于通过响应资源释放请求对请求访问资源进行解锁。
请参阅图14,在一示例性实施例中,资源解锁模块930包括但不限于:第二锁键生成单元931、第二锁值查找单元933和第一解锁单元935。
其中,第二锁键生成单元931用于根据请求访问资源生成对应的锁键。
第二锁值查找单元933用于在锁信息缓存中关联查找锁键的锁值,锁值被用于指示请求访问资源对应的访问对象,访问对象包括节点及线程。
第一解锁单元935用于如果未关联查找到锁值或者关联查找到的锁值为空,则请求访问资源解锁成功。
请参阅图15,在一示例性实施例中,资源解锁模块930还包括但不限于:节点判断单元1031和第二解锁单元1033。
其中,节点判断单元1031用于如果关联查找到的锁值非空,则判断锁值指示的访问对象是否区别于资源释放请求确定的访问对象。如果不是,则通知第二解锁单元1033。
第二解锁单元1033用于在锁信息缓存中对锁键及其锁值进行移除处理,请求访问资源解锁成功。
请参阅图16,在一示例性实施例中,资源解锁模块930还包括但不限于:死锁判断单元1035和第三解锁单元1037。
其中,死锁判断单元1035用于如果锁值指示的访问对象区别于资源释放请求确定的访问对象,则通过监控判断锁值指示的访问对象中节点的工作状态是否为离线状态。如果是,则通知第三解锁单元1037。
第三解锁单元1037用于在锁信息缓存中对锁键及其锁值进行移除处理,请求访问资源解锁成功。
需要说明的是,上述实施例所提供的死锁处理装置在进行死锁处理时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即死锁处理装置的内部结构将划分为不同的功能模块,以完成以上描述的全部或者部分功能。
另外,上述实施例所提供的死锁处理装置与死锁处理方法的实施例属于同一构思,其中各个模块执行操作的具体方式已经在方法实施例中进行了详细描述,此处不再赘述。
上述内容,仅为本公开的较佳示例性实施例,并非用于限制本公开的实施方案,本领域普通技术人员根据本公开的主要构思和精神,可以十分方便地进行相应的变通或修改,故本公开的保护范围应以权利要求书所要求的保护范围为准。
Claims (15)
1.一种死锁处理方法,其特征在于,包括:
接收节点发起的资源访问请求,根据所述资源访问请求确定请求访问资源;
根据所述请求访问资源由锁信息缓存中获取对应的锁信息,所述锁信息指示了所述请求访问资源对应的访问对象,所述访问对象包括节点及线程,所述锁信息包括用于标识所述请求访问资源的锁键和用于标识所述访问对象的锁值;
通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态;
如果是,根据所述资源访问请求确定的访问对象更改所述锁信息,将所述锁信息指示的访问对象由工作状态处于离线状态的节点更改为发起所述资源访问请求的节点。
2.如权利要求1所述的方法,其特征在于,所述根据所述请求访问资源由锁信息缓存中获取对应的锁信息,包括:
根据所述请求访问资源生成对应的锁键,通过所述锁键标识所述请求访问资源;
在所述锁信息缓存中关联查找所述锁键的锁值;
如果关联查找到的锁值非空,则以所述锁键及其锁值作为所述请求访问资源对应的锁信息。
3.如权利要求2所述的方法,其特征在于,所述根据所述请求访问资源由锁信息缓存中获取对应的锁信息,还包括:
如果未关联查找到所述锁值或者关联查找到的所述锁值为空,则跳转进入生成所述请求访问资源对应的锁信息步骤;
相应地,所述生成所述请求访问资源对应的锁信息,包括:
根据所述资源访问请求确定的访问对象对所述锁键的锁值进行赋值;
以所述锁键及赋值后的锁值作为所述请求访问资源对应的锁信息,并将所述锁键及赋值后的锁值关联存储至所述锁信息缓存中。
4.如权利要求1至3任意一项所述的方法,其特征在于,所述通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态之前,所述方法还包括:
判断所述锁信息指示的访问对象是否区别于所述资源访问请求确定的访问对象;
如果是,则跳转进入所述通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态步骤。
5.如权利要求4所述的方法,其特征在于,所述根据所述资源访问请求确定的访问对象更改所述锁信息之后,所述方法还包括:
接收所述节点针对所述请求访问资源发起的资源释放请求;
通过响应所述资源释放请求对所述请求访问资源进行解锁。
6.如权利要求5所述的方法,其特征在于,所述通过响应所述资源释放请求对所述请求访问资源进行解锁,包括:
根据所述请求访问资源生成对应的锁键;
在所述锁信息缓存中关联查找所述锁键的锁值,所述锁值被用于指示所述请求访问资源对应的访问对象,所述访问对象包括节点及线程;
如果未关联查找到所述锁值或者关联查找到的所述锁值为空,则所述请求访问资源解锁成功。
7.如权利要求6所述的方法,其特征在于,所述通过响应所述资源释放请求对所述请求访问资源进行解锁,还包括:
如果关联查找到的所述锁值非空,则判断所述锁值指示的访问对象是否区别于所述资源释放请求确定的访问对象;
如果不是,则在所述锁信息缓存中对所述锁键及其锁值进行移除处理,所述请求访问资源解锁成功。
8.如权利要求7所述的方法,其特征在于,所述通过响应所述资源释放请求对所述请求访问资源进行解锁,还包括:
如果所述锁值指示的访问对象区别于所述资源释放请求确定的访问对象,则通过所述监控判断所述锁值指示的访问对象中节点的工作状态是否为离线状态;
如果是,则在所述锁信息缓存中对所述锁键及其锁值进行移除处理,所述请求访问资源解锁成功。
9.一种死锁处理装置,其特征在于,包括:
访问请求接收模块,用于接收节点发起的资源访问请求,根据所述资源访问请求确定请求访问资源;
锁信息获取模块,用于根据所述请求访问资源由锁信息缓存中获取对应的锁信息,所述锁信息指示了所述请求访问资源对应的访问对象,所述访问对象包括节点及线程,所述锁信息包括用于标识所述请求访问资源的锁键和用于标识所述访问对象的锁值;
死锁判断模块,用于通过对分布式系统中各节点工作状态的监控,判断所述锁信息指示的访问对象中节点的工作状态是否为离线状态;如果是,则通知锁信息更改模块;
所述锁信息更改模块,用于根据所述资源访问请求确定的访问对象更改所述锁信息,将所述锁信息指示的访问对象由工作状态处于离线状态的节点更改为发起所述资源访问请求的节点。
10.如权利要求9所述的装置,其特征在于,所述锁信息获取模块包括:
第一锁键生成单元,用于根据所述请求访问资源生成对应的锁键,通过所述锁键标识所述请求访问资源;
第一锁值查找单元,用于在所述锁信息缓存中关联查找所述锁键的锁值;
锁信息形成单元,用于如果关联查找到的锁值非空,则以所述锁键及其锁值作为所述请求访问资源对应的锁信息。
11.如权利要求10所述的装置,其特征在于,所述锁信息获取模块还包括:
通知单元,用于如果未关联查找到所述锁值或者关联查找到的所述锁值为空,则通知锁信息生成模块;
相应地,所述锁信息生成模块包括:
锁值赋值单元,用于根据所述资源访问请求确定的访问对象对所述锁键的锁值进行赋值;
锁信息存储单元,用于以所述锁键及赋值后的锁值作为所述请求访问资源对应的锁信息,并将所述锁键及赋值后的锁值关联存储至所述锁信息缓存中。
12.如权利要求10至11任意一项所述的装置,其特征在于,所述装置还包括:
节点判断模块,用于判断所述锁信息指示的访问对象是否区别于所述资源访问请求确定的访问对象;如果是,则通知死锁判断模块。
13.如权利要求12所述的装置,其特征在于,所述装置还包括:
释放请求接收模块,用于接收所述节点针对所述请求访问资源发起的资源释放请求;
资源解锁模块,用于通过响应所述资源释放请求对所述请求访问资源进行解锁。
14.如权利要求13所述的装置,其特征在于,所述资源解锁模块包括:
第二锁键生成单元,用于根据所述请求访问资源生成对应的锁键;
第二锁值查找单元,用于在所述锁信息缓存中关联查找所述锁键的锁值,所述锁值被用于指示所述请求访问资源对应的访问对象,所述访问对象包括节点及线程;
第一解锁单元,用于如果未关联查找到所述锁值或者关联查找到的所述锁值为空,则所述请求访问资源解锁成功。
15.如权利要求14所述的装置,其特征在于,所述资源解锁模块还包括:
节点判断单元,用于如果关联查找到的所述锁值非空,则判断所述锁值指示的访问对象是否区别于所述资源释放请求确定的访问对象;如果不是,则通知第二解锁单元;
所述第二解锁单元,用于在所述锁信息缓存中对所述锁键及其锁值进行移除处理,所述请求访问资源解锁成功。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710544543.3A CN107402822B (zh) | 2017-07-06 | 2017-07-06 | 死锁处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710544543.3A CN107402822B (zh) | 2017-07-06 | 2017-07-06 | 死锁处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107402822A CN107402822A (zh) | 2017-11-28 |
CN107402822B true CN107402822B (zh) | 2018-09-11 |
Family
ID=60405447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710544543.3A Active CN107402822B (zh) | 2017-07-06 | 2017-07-06 | 死锁处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107402822B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628666B (zh) * | 2018-05-08 | 2023-11-14 | 腾讯科技(上海)有限公司 | 事务的处理方法、装置、存储介质及电子装置 |
CN110096231A (zh) * | 2019-04-25 | 2019-08-06 | 新华三云计算技术有限公司 | 磁盘锁的处理方法及装置 |
CN110445864B (zh) * | 2019-08-11 | 2022-04-08 | 西藏宁算科技集团有限公司 | 一种云计算环境下分布式锁的实现方法及系统 |
CN110633147B (zh) * | 2019-09-06 | 2022-08-19 | 苏州浪潮智能科技有限公司 | 一种操作系统进程管理的方法及装置 |
CN112463514A (zh) * | 2019-09-06 | 2021-03-09 | 北京京东尚科信息技术有限公司 | 分布式缓存集群的监测方法和装置 |
CN110659329A (zh) * | 2019-09-23 | 2020-01-07 | 上海艾融软件股份有限公司 | 一种数据处理方法、装置及电子设备 |
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207809B (zh) * | 2012-01-13 | 2017-07-07 | 金蝶软件(中国)有限公司 | 清除互斥锁的方法及系统 |
CN103248667B (zh) * | 2012-02-14 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 一种分布式系统的资源访问方法和系统 |
CN103731485A (zh) * | 2013-12-26 | 2014-04-16 | 华为技术有限公司 | 一种网络设备、集群存储系统及分布式锁管理方法 |
CN104702655B (zh) * | 2014-03-21 | 2018-04-27 | 杭州海康威视系统技术有限公司 | 云存储资源分配方法及其系统 |
US10237224B2 (en) * | 2014-04-21 | 2019-03-19 | Dropbox, Inc. | Context aware serialization |
CN104486328A (zh) * | 2014-12-10 | 2015-04-01 | 小米科技有限责任公司 | 访问控制方法和装置 |
CN106354565B (zh) * | 2016-09-21 | 2019-08-20 | 努比亚技术有限公司 | 一种分布式锁客户端及控制方法 |
CN106790694B (zh) * | 2017-02-21 | 2020-04-14 | 广州爱九游信息技术有限公司 | 分布式系统及分布式系统中目标对象的调度方法 |
-
2017
- 2017-07-06 CN CN201710544543.3A patent/CN107402822B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107402822A (zh) | 2017-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107402822B (zh) | 死锁处理方法及装置 | |
CN108234641B (zh) | 基于分布式一致性协议实现的数据读写方法及装置 | |
US9665450B2 (en) | Controlling access of clients to service in cluster environment | |
US10846185B2 (en) | Method for processing acquire lock request and server | |
KR20070049155A (ko) | 파일 서버 재초기화 장치, 방법 및 컴퓨터 프로그램 | |
CN111367659A (zh) | 一种Kubernetes中节点的资源管理方法、设备以及介质 | |
CN106802939B (zh) | 一种解决数据冲突的方法和系统 | |
CN109918187B (zh) | 任务调度方法、装置、设备和存储介质 | |
US20230281061A1 (en) | Multi-phase distributed task coordination | |
JP5559316B2 (ja) | コンピュータ実装多重リソース共有ロック | |
CN104461705A (zh) | 一种业务访问的方法及存储控制器、集群存储系统 | |
CN112540829A (zh) | 容器组驱逐方法、装置、节点设备及存储介质 | |
CN109313611B (zh) | 用于处理数据的设备和方法 | |
US8850440B2 (en) | Managing the processing of processing requests in a data processing system comprising a plurality of processing environments | |
CN112905322B (zh) | 资源加锁的方法、计算设备及计算机存储介质 | |
CN116263727A (zh) | 主备数据库集群及选主方法、计算设备及计算机存储介质 | |
CN108446337A (zh) | 一种锁资源控制权限迁移方法以及装置 | |
JP2009271858A (ja) | 計算機システム及びプログラム | |
US9374315B2 (en) | Spare resource election in a computing system | |
KR101233664B1 (ko) | 멀티 코어 시스템에서 메모리 셔플링을 이용한 메모리 해킹 방지 방법 및 장치 | |
US10608882B2 (en) | Token-based lightweight approach to manage the active-passive system topology in a distributed computing environment | |
US20150105019A1 (en) | Wireless communication device and wireless paring method thereof | |
JP6651836B2 (ja) | 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム | |
CN117056363B (zh) | 数据缓存方法、系统、设备以及存储介质 | |
CN111585802B (zh) | 一种窄带物联网的oam管理方法、装置、设备及存储介质 |
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 |