一种分布式锁的实现方法、装置、系统、设备及存储介质转让专利

申请号 : CN202310821843.7

文献号 : CN116560864B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李丰启

申请人 : 苏州浪潮智能科技有限公司

摘要 :

本发明公开了一种分布式锁的实现方法、装置、系统、设备及存储介质,涉及分布式系统技术领域,旨在解决由于传统的集中式锁无法有效适用分布式系统,从而导致系统运行不稳定的问题,所述方法应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,包括:当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;将所述锁信息保存至本地内存;将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。

权利要求 :

1.一种分布式锁的实现方法,其特征在于,应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,所述分布式系统中的每一服务节点均与所述分布式数据库建立有通信连接关系,所述方法包括:当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;

将所述锁信息保存至本地内存;

将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存;

对所述分布式数据库进行监控;

当监控到所述变更信息时,根据所述变更信息确定目标锁信息;

将所述目标锁信息从所述分布式数据库同步至所述本地内存;

其中,所述将所述目标锁信息从所述分布式数据库同步至所述本地内存,包括:将所述目标锁信息从所述分布式数据库实时同步至本地缓存;

当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。

2.根据权利要求1所述的方法,其特征在于,还包括:当接收到第二客户端发送的关于逻辑单元号的读写指令时,在所述本地内存中读取所述锁信息;

根据所述锁信息判断所述第二客户端是否具有对所述逻辑单元号的操作权限;

若是,则执行所述读写指令;

若否,则拒绝所述读写指令。

3.根据权利要求2所述的方法,其特征在于,所述根据所述锁信息判断所述第二客户端是否具有对所述逻辑单元号的操作权限,包括:根据所述锁信息确定第一客户端信息;

根据所述读写指令确定第二客户端信息;

判断所述第一客户端信息与所述第二客户端信息是否一致;

若是,则确定所述第二客户端具有所述操作权限;

若否,则确定所述第二客户端不具有所述操作权限。

4.根据权利要求1所述的方法,其特征在于,所述当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息之前,还包括:接收所述第一客户端发送的连接请求;

根据所述连接请求与所述第一客户端建立通信连接;

通过所述通信连接接收所述锁指令。

5.根据权利要求4所述的方法,其特征在于,所述根据所述连接请求与所述第一客户端建立通信连接,包括:根据所述连接请求,通过以太网小型计算机系统接口与所述第一客户端建立所述通信连接。

6.根据权利要求1所述的方法,其特征在于,所述当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息之后,还包括:根据所述锁信息生成指令响应信息;

将所述指令响应信息反馈至所述第一客户端。

7.根据权利要求1所述的方法,其特征在于,还包括:当监控到关于所述锁信息的变更操作时,确定变更后的锁信息;

将所述变更后的锁信息保存至所述本地内存;

将所述变更后的锁信息从所述本地内存同步至所述分布式数据库。

8.根据权利要求7所述的方法,其特征在于,所述变更操作包括增加锁操作、删除锁操作、修改锁操作中的一种或多种。

9.根据权利要求1所述的方法,其特征在于,当所述服务节点为新增节点时,所述方法还包括:将所述分布式数据库中的存储信息同步至本地内存。

10.根据权利要求1所述的方法,其特征在于,所述分布式数据库为分布式键值数据库。

11.一种分布式锁的实现方法,其特征在于,应用于客户端,所述方法包括:当接收到关于逻辑单元号的处理请求时,根据所述处理请求与服务节点建立通信连接;其中,所述服务节点为所述逻辑单元号所属的分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库;所述分布式系统中的每一服务节点均与所述分布式数据库建立有通信连接关系;

通过所述通信连接发送锁指令至所述服务节点,以使所述服务节点根据所述锁指令生成锁信息保存至本地内存,并同步至所述分布式数据库,使得其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存;

其中,所述服务节点还用于对所述分布式数据库进行监控;当监控到所述变更信息时,根据所述变更信息确定目标锁信息;将所述目标锁信息从所述分布式数据库实时同步至本地缓存;当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。

12.根据权利要求11所述的方法,其特征在于,所述根据所述处理请求与服务节点建立通信连接,包括:根据所述处理请求向所述服务节点发送连接请求,以使所述服务节点响应所述连接请求与所述客户端建立所述通信连接。

13.根据权利要求11所述的方法,其特征在于,还包括:当接收到所述服务节点的故障信息时,向所述分布式系统中的任一其他服务节点发起重连请求,以使所述其他服务节点利用本地内存中的最新锁信息对所述客户端进行权限校验。

14.一种分布式锁的实现系统,其特征在于,包括客户端和分布式系统,所述分布式系统中部署有分布式数据库;所述分布式系统中的每一服务节点均与所述分布式数据库建立有通信连接关系;

所述客户端,用于向所述服务节点发送锁指令;

所述分布式系统中的任一服务节点,用于根据所述锁指令生成锁信息;将所述锁信息保存至本地内存;将所述锁信息从所述本地内存同步至所述分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存;以及,对所述分布式数据库进行监控;当监控到所述变更信息时,根据所述变更信息确定目标锁信息;将所述目标锁信息从所述分布式数据库实时同步至本地缓存;当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。

15.一种分布式锁的实现装置,其特征在于,应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,所述分布式系统中的每一服务节点均与所述分布式数据库建立有通信连接关系,所述装置包括:生成模块,用于当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;

保存模块,用于将所述锁信息保存至本地内存;

同步模块,用于将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存;

监控模块,用于对所述分布式数据库进行监控;

确定模块,用于当监控到所述变更信息时,根据所述变更信息确定目标锁信息;

目标同步模块,用于将所述目标锁信息从所述分布式数据库同步至所述本地内存;

其中,所述目标同步模块包括:

缓存同步单元,用于将所述目标锁信息从所述分布式数据库实时同步至本地缓存;

内存同步单元,用于当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。

16.一种分布式锁的实现装置,其特征在于,应用于客户端,所述装置包括:建立模块,用于当接收到关于逻辑单元号的处理请求时,根据所述处理请求与服务节点建立通信连接;其中,所述服务节点为所述逻辑单元号所属的分布式系统中的任一服务节点,所述分布式系统中均部署有分布式数据库;所述分布式系统中的每一服务节点均与所述分布式数据库建立有通信连接关系;

发送模块,用于通过所述通信连接发送锁指令至所述服务节点,以使所述服务节点根据所述锁指令生成锁信息保存至本地内存,并同步至所述分布式数据库,使得其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存;

其中,所述服务节点还用于对所述分布式数据库进行监控;当监控到所述变更信息时,根据所述变更信息确定目标锁信息;将所述目标锁信息从所述分布式数据库实时同步至本地缓存;当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。

17.一种电子设备,其特征在于,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如权利要求1至13任一项所述的分布式锁的实现方法的步骤。

18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至13任一项所述的分布式锁的实现方法的步骤。

说明书 :

一种分布式锁的实现方法、装置、系统、设备及存储介质

技术领域

[0001] 本发明涉及分布式系统技术领域,特别涉及一种分布式锁的实现方法、装置、系统、设备及存储介质。

背景技术

[0002] 在云计算时代,新技术层出不穷,但超融合系统凭借其资源利用率高、可扩展性强、部署简单等优势在市场中的保有量越来越高。集群化的超融合系统为保证IO(Input/Output,输入/输出)性能的极致体验也做了诸多优化,比如客户端到服务端的负载均衡,同时为了保证集群节点故障时为用户带来无感的体验,当有部分节点故障时会进行节点故障转移,以上优化为用户使用超融合集群带来了良好体验,但同时也带来了挑战:传统的单节点的LUN(Logical Unit Number,逻辑单元号)锁不满足集群化超融合的功能需求,如PR锁(Perpetual Retention,一种永久保留的LUN锁)。
[0003] 传统的PR锁实现为单节点,这也就意味着当超融合集群在多个客户端连接多个服务端的负载均衡场景下以及集群节点发生故障转移的场景下无法使用。传统的单节点集中式PR锁信息保存在超融合节点内存中,意味着一旦客户端连接到其他服务节点后就无法获取到PR锁的信息,同时,在超融合集群中,LUN也是一个逻辑上分布式的概念,而PR锁是对整个LUN加锁,单节点集中式PR锁对分布式的LUN逻辑上也无法对应。以上问题就导致了集群环境下的超融合PR锁无法正常工作。
[0004] 因此,如何在分布式系统中实现分布式锁,保证系统的稳定运行是本领域技术人员亟需解决的技术问题。

发明内容

[0005] 本发明的目的是提供一种分布式锁的实现方法,该分布式锁的实现方法可以在分布式系统中实现分布式锁,有效地保证了系统的稳定运行;本发明的另一目的是提供另一种分布式锁的实现方法以及分布式锁的实现装置、系统、电子设备、计算机可读存储介质,同样具有上述有益效果。
[0006] 第一方面,本发明提供了一种分布式锁的实现方法,应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,所述方法包括:
[0007] 当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;
[0008] 将所述锁信息保存至本地内存;
[0009] 将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0010] 可选地,所述分布式锁的实现方法还包括:
[0011] 当接收到第二客户端发送的关于逻辑单元号的读写指令时,在所述本地内存中读取所述锁信息;
[0012] 根据所述锁信息判断所述第二客户端是否具有对所述逻辑单元号的操作权限;
[0013] 若是,则执行所述读写指令;
[0014] 若否,则拒绝所述读写指令。
[0015] 可选地,所述根据所述锁信息判断所述第二客户端是否具有对所述逻辑单元号的操作权限,包括:
[0016] 根据所述锁信息确定第一客户端信息;
[0017] 根据所述读写指令确定第二客户端信息;
[0018] 判断所述第一客户端信息与所述第二客户端信息是否一致;
[0019] 若是,则确定所述第二客户端具有所述操作权限;
[0020] 若否,则确定所述第二客户端不具有所述操作权限。
[0021] 可选地,所述分布式锁的实现方法还包括:
[0022] 对所述分布式数据库进行监控;
[0023] 当监控到所述变更信息时,根据所述变更信息确定目标锁信息;
[0024] 将所述目标锁信息从所述分布式数据库同步至所述本地内存。
[0025] 可选地,所述将所述目标锁信息从所述分布式数据库同步至所述本地内存,包括:
[0026] 将所述目标锁信息从所述分布式数据库同步至本地缓存;
[0027] 将所述目标锁信息从所述本地缓存同步至所述本地内存。
[0028] 可选地,所述将所述目标锁信息从所述分布式数据库同步至本地缓存,包括:
[0029] 将所述目标锁信息从所述分布式数据库实时同步至所述本地缓存;
[0030] 所述将所述目标锁信息从所述本地缓存同步至所述本地内存,包括:
[0031] 当接收到第二客户端发送的关于逻辑单元号的读写指令时,将所述目标锁信息从所述本地缓存同步至所述本地内存。
[0032] 可选地,所述当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息之前,还包括:
[0033] 接收所述第一客户端发送的连接请求;
[0034] 根据所述连接请求与所述第一客户端建立通信连接;
[0035] 通过所述通信连接接收所述锁指令。
[0036] 可选地,所述根据所述连接请求与所述第一客户端建立通信连接,包括:
[0037] 根据所述连接请求,通过以太网小型计算机系统接口与所述第一客户端建立所述通信连接。
[0038] 可选地,所述当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息之后,还包括:
[0039] 根据所述锁信息生成指令响应信息;
[0040] 将所述指令响应信息反馈至所述第一客户端。
[0041] 可选地,所述分布式锁的实现方法还包括:
[0042] 当监控到关于所述锁信息的变更操作时,确定变更后的锁信息;
[0043] 将所述变更后的锁信息保存至所述本地内存;
[0044] 将所述变更后的锁信息从所述本地内存同步至所述分布式数据库。
[0045] 可选地,所述变更操作包括增加锁操作、删除锁操作、修改锁操作中的一种或多种。
[0046] 可选地,当所述服务节点为新增节点时,所述分布式锁的实现方法还包括:
[0047] 将所述分布式数据库中的存储信息同步至本地内存。
[0048] 可选地,所述分布式数据库为分布式键值数据库。
[0049] 第二方面,本发明还公开了另一种分布式锁的实现方法,应用于客户端,所述方法包括:
[0050] 当接收到关于逻辑单元号的处理请求时,根据所述处理请求与服务节点建立通信连接;其中,所述服务节点为所述逻辑单元号所属的分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库;
[0051] 通过所述通信连接发送锁指令至所述服务节点,以使所述服务节点根据所述锁指令生成锁信息保存至本地内存,并同步至所述分布式数据库,使得其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0052] 可选地,所述根据所述处理请求与服务节点建立通信连接,包括:
[0053] 根据所述处理请求向所述服务节点发送连接请求,以使所述服务节点响应所述连接请求与所述客户端建立所述通信连接。
[0054] 可选地,所述分布式锁的实现方法还包括:
[0055] 当接收到所述服务节点的故障信息时,向所述分布式系统中的任一其他服务节点发起重连请求,以使所述其他服务节点利用本地内存中的最新锁信息对所述客户端进行权限校验。
[0056] 第三方面,本发明还公开了一种分布式锁的实现系统,包括客户端和分布式系统,所述分布式系统中部署有分布式数据库;
[0057] 所述客户端,用于向所述服务节点发送锁指令;
[0058] 所述服务节点,用于根据所述锁指令生成锁信息;将所述锁信息保存至本地内存;将所述锁信息从所述本地内存同步至所述分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0059] 第四方面,本发明还公开了一种分布式锁的实现装置,应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,所述装置包括:
[0060] 生成模块,用于当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;
[0061] 保存模块,用于将所述锁信息保存至本地内存;
[0062] 同步模块,用于将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0063] 第五方面,本发明还公开了另一种分布式锁的实现装置,应用于客户端,所述装置包括:
[0064] 建立模块,用于当接收到关于逻辑单元号的处理请求时,根据所述处理请求与服务节点建立通信连接;其中,所述服务节点为所述逻辑单元号所属的分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库;
[0065] 发送模块,用于通过所述通信连接发送锁指令至所述服务节点,以使所述服务节点根据所述锁指令生成锁信息保存至本地内存,并同步至所述分布式数据库,使得其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0066] 第六方面,本发明公开了一种电子设备,包括:
[0067] 存储器,用于存储计算机程序;
[0068] 处理器,用于执行所述计算机程序时实现如上所述的任意一种分布式锁的实现方法的步骤。
[0069] 第七方面,本发明公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的任意一种分布式锁的实现方法的步骤。
[0070] 本发明所提供的一种分布式锁的实现方法,应用于分布式系统中的任一服务节点,所述分布式系统中部署有分布式数据库,所述方法包括:当接收到第一客户端发送的锁指令时,根据所述锁指令生成锁信息;将所述锁信息保存至本地内存;将所述锁信息从所述本地内存同步至分布式数据库,以使其他各所述服务节点在监控到所述分布式数据库的变更信息时,将所述锁信息从所述分布式数据库同步至自身内存。
[0071] 应用本发明所提供的技术方案,具有如下技术效果:
[0072] 本发明所提供的分布式锁的实现方法,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0073] 在一种实施例中,提出了基于前置缓存的同步锁信息至各服务节点本地内存的实现方法,即先将最新锁信息从分布式数据库同步至本地缓存,再从本地缓存同步至本地内存,同时,设定高频的缓存同步操作和低频的内存同步操作,以尽可能的避免频繁的内存同步,从而有效降低了系统中读写性能的损耗。
[0074] 本发明还公开了另一种分布式锁的实现方法以及分布式锁的实现系统、装置、电子设备、计算机可读存储介质,同样具有上述技术效果,本发明在此不再赘述。

附图说明

[0075] 为了更清楚地说明现有技术和本发明实施例中的技术方案,下面将对现有技术和本发明实施例描述中需要使用的附图作简要的介绍。当然,下面有关本发明实施例的附图描述的仅仅是本发明中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本发明的保护范围。
[0076] 图1为本发明所提供的一种分布式锁的实现方法的流程示意图;
[0077] 图2为本发明所提供的另一种分布式锁的实现方法的流程示意图;
[0078] 图3为现有技术中的一种服务节点故障迁移之前的集中式锁的工作原理图;
[0079] 图4为现有技术中的一种服务节点故障迁移之后的集中式锁的工作原理图;
[0080] 图5为本发明所提供的一种分布式锁的实现方法的工作原理图;
[0081] 图6为本发明实施例所提供的一种分布式锁的功能示意图;
[0082] 图7为本发明所提供的一种分布式锁的实现系统的结构示意图;
[0083] 图8为本发明所提供的一种分布式锁的实现装置的结构示意图;
[0084] 图9为本发明所提供的另一种分布式锁的实现装置的结构示意图;
[0085] 图10为本发明所提供的一种电子设备的结构示意图。

具体实施方式

[0086] 本发明的核心是提供一种分布式锁的实现方法,该分布式锁的实现方法可以在分布式系统中实现分布式锁,有效地保证了系统的稳定运行;本发明的另一核心是提供另一种分布式锁的实现方法以及分布式锁的实现装置、系统、电子设备、计算机可读存储介质,同样具有上述有益效果。
[0087] 为了对本发明实施例中的技术方案进行更加清楚、完整地描述,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行介绍。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0088] 实施例一、本发明实施例提供了一种分布式锁的实现方法。
[0089] 请参考图1,图1为本发明所提供的一种分布式锁的实现方法的流程示意图,该分布式锁的实现方法应用于分布式系统中的任一服务节点,分布式系统中部署有分布式数据库,包括S101 S103。~
[0090] S101:当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息。
[0091] 首先,本发明实施例所提供的分布式锁的实现方法应用于分布式系统中的任一服务节点,该分布式系统具体可以为超融合集群系统,由众多服务节点(可以为服务器等设备)组成,用于为客户端提供各类服务。其中,分布式系统中部署有分布式数据库,用于实现分布式系统中所有服务节点的锁信息的同步,进而在分布式系统中实现分布式锁功能。在一种可能的实现方式中,上述分布式数据库可以为分布式键值数据库(ETCD数据库,一种开源的分布式统一键值存储数据库)。
[0092] 进一步,本步骤旨在实现锁信息的生成。具体而言,当某一客户端(即上述第一客户端)需要向分布式系统申请获取某项服务(如数据读写等)时,将会向分布式系统中的某一服务节点发送锁指令,以锁定分布式系统中的LUN,避免其他客户端与自身同时访问该LUN造成服务不可用的问题。那么,对于接收到该锁指令的服务节点而言,其将会根据该锁指令生成锁信息,也就是通过解析锁指令执行相应的锁操作,从而实现锁定功能,该操作结果即为上述锁信息。
[0093] S102:将锁信息保存至本地内存。
[0094] 本步骤旨在实现锁信息的保存,即将锁信息保存至本地内存。可以理解的是,通过将锁信息保存至本地内存,以便于在后续接收到其他客户端的锁指令时,可以通过查询本地内存的锁信息来对该客户端进行权限校验,避免其他客户端在锁定期间对分布式系统中的LUN执行其他操作,换而言之,在第一客户端锁定分布式系统的LUN的情况下,不允许其他客户端对该LUN执行任何操作。
[0095] S103:将锁信息从本地内存同步至分布式数据库,以使其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0096] 本步骤旨在实现锁信息由本地内存至分布式数据库的同步操作,即将锁信息从本地内存同步至分布式数据库。具体而言,在分布式系统实际运行过程中,对于其中的每一个服务节点,均可以对分布式数据库进行实时监控,由此,当某一服务节点将本地内存中的锁信息同步至分布式数据库时,其他服务节点必然将会监控到这一变更信息,此时,则可以启动同步线程,将分布式数据库中的锁信息同步至自身的本地内存,由此,实现锁信息在分布式系统中所有服务节点之间的实时同步,从而在分布式系统中实现了分布式锁功能。在此基础上,即便除第一客户端之外的其他客户端连接到分布式系统中的其他任一服务节点,或者故障迁移时第一客户端与其他客户端同时连接到了任一正常服务节点上,由于分布式系统中的每一个服务节点均记录有第一客户端的锁信息,必然会拒绝除第一客户端之外的任一客户端的锁指令或其他请求指令,而继续为第一客户端提供服务。
[0097] 可见,本发明实施例所提供的一种分布式锁的实现方法,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0098] 在上述实施例的基础上:
[0099] 在本发明的一个实施例中,该分布式锁的实现方法还可以包括如下步骤:
[0100] 当接收到第二客户端发送的关于逻辑单元号的读写指令时,在本地内存中读取锁信息;
[0101] 根据锁信息判断第二客户端是否具有对逻辑单元号的操作权限;
[0102] 若是,则执行读写指令;
[0103] 若否,则拒绝读写指令。
[0104] 如上所述,在分布式集群为第一客户端提供服务期间,或者故障迁移期间,可能会接收到其他客户端(即上述第二客户端)的服务请求,如关于LUN的读写指令,此时,可以优先从本地内存中读取最新的锁信息,从而利用该锁信息对第二客户端进行权限校验,也就是判断该第二客户端是否具有对LUN的操作权限,显然,如若具有操作权限,说明该第二客户端即第一客户端,此时则可以继续执行读写指令,反之,如若不具有操作权限,则说明第二客户端确实为除第一客户端之外的其他客户端,此时则直接拒绝接收到的读写指令即可。由此,即可保证在第一客户端锁定分布式系统的LUN的情况下,不允许其他客户端对该LUN执行任何操作。
[0105] 在本发明的一个实施例中,上述根据锁信息判断第二客户端是否具有对逻辑单元号的操作权限,可以包括如下步骤:
[0106] 根据锁信息确定第一客户端信息;
[0107] 根据读写指令确定第二客户端信息;
[0108] 判断第一客户端信息与第二客户端信息是否一致;
[0109] 若是,则确定第二客户端具有操作权限;
[0110] 若否,则确定第二客户端不具有操作权限。
[0111] 本发明实施例提供了一种基于锁信息对第二客户端进行权限校验的实现方法。首先,可以理解的是,锁信息是基于第一客户端发送的锁指令生成的,因此,该锁信息中必然包含有第一客户端的相关信息(即上述第一客户端信息,如ID号、标识符、IP地址等),而读写指令是由第二客户端发起,因此,该读写指令中也必然包含有第二客户端的相关信息(即上述第二客户端信息,信息内容同上),在此基础上,则可以根据锁信息确定第一客户端信息,并根据读写指令确定第二客户端信息;进一步,对第一客户端信息和第二客户端信息进行对比分析,以确定二者是否一致,显然,若二者一致,则说明第二客户端就是第一客户端,也就是确定第二客户端具有操作权限;若二者不一致,则说明第二客户端确实为除第一客户端之外的其他客户端,也就是第二客户端不具有操作权限。至此,实现对第二客户端的权限校验。
[0112] 在本发明的一个实施例中,该分布式锁的实现方法还可以包括如下步骤:
[0113] 对分布式数据库进行监控;
[0114] 当监控到变更信息时,根据变更信息确定目标锁信息;
[0115] 将目标锁信息从分布式数据库同步至本地内存。
[0116] 如上所述,在分布式系统的实际运行过程中,对于其中的每一个服务节点,均可以对分布式数据库进行实时监控,显而易见地,对于作为本实施例执行主体的服务节点,同样可以对分布式数据库进行实时监控,同样的,一旦监控到布式数据库的变更信息时,即可根据该变更信息确定发生变更的锁信息,即上述目标锁信息,此时,则可以将该目标锁信息由分布式数据库同步至本地内存,实现分布式系统中所有服务节点的锁信息实时同步。
[0117] 在本发明的一个实施例中,上述将目标锁信息从分布式数据库同步至本地内存,可以包括如下步骤:
[0118] 将目标锁信息从分布式数据库同步至本地缓存;
[0119] 将目标锁信息从本地缓存同步至本地内存。
[0120] 本发明实施例提供了一种将目标锁信息从分布式数据库同步至本地内存的实现方法。可以理解的是,为了保证对LUN加锁的有效性,每个客户端在对分布式系统中的服务节点进行读写操作之前,服务节点都会对其进行锁校验操作,也就是上述权限校验操作,然而,此操作则需要先将分布式数据库中的最新锁信息同步至本地内存后再执行,因为分布式数据库中所存储的锁信息才是最新的锁信息,但该过程对于分布式数据库的查询却是一个相对耗时的操作,并且,若每次读写操作之前都先执行内存同步操作,再执行读写操作,会极大影响其读写性能,甚至可能直接导致功能不可用。因此,为解决该技术问题,本发明实施例提出了基于前置缓存的锁信息同步方法。
[0121] 在实现过程中,在根据变更信息确定分布式数据库中发生变更的目标锁信息之后,可以先将目标锁信息从分布式数据库同步至本地缓存,然后再将目标锁信息从本地缓存同步至本地内存。需要说明的是,目标变更信息由分布式数据库至本地缓存的同步操作,相较于目标变更信息由本地缓存至本地内存的同步操作,需要更高的操作频率,即缓存同步操作为高频操作,内存同步操作为低频操作。
[0122] 更进一步地,在一种可能的实现方式中,上述将目标锁信息从分布式数据库同步至本地缓存,可以包括:将目标锁信息从分布式数据库实时同步至本地缓存;上述将目标锁信息从本地缓存同步至本地内存,可以包括:当接收到第二客户端发送的关于逻辑单元号的读写指令时,将目标锁信息从本地缓存同步至本地内存。
[0123] 具体而言,将从分布式数据库中获取到的目标锁信息进行实时的前置缓存,缓存后,并不会立即从本地缓存中将该目标锁信息更新到本地内存中,而是仅在使用前且本地内存确实需要更新时(此处,更新需要的时机即:接收到了第二客户端发送的关于逻辑单元号的读写指令,需要对分布式系统进行读写操作)才会从本地缓存中将本地内存更新。换而言之,本过程同步原则在于:本地缓存的更新要频繁,以保证本地缓存中的锁信息始终是最新的;本地内存的更新要尽量少,以做到非必要不更新、一次更新多次使用,由此,方可尽可能减少性能损耗。在此基础上,通过测试发现,该种实现方式不会造成读写性能的下降,符合预期,满足要求。
[0124] 在本发明的一个实施例中,上述当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息之前,还可以包括如下步骤:
[0125] 接收第一客户端发送的连接请求;
[0126] 根据连接请求与第一客户端建立通信连接;
[0127] 通过通信连接接收锁指令。
[0128] 本发明实施例提供了一种锁指令的获取方法。可以理解的是,分布式系统中的服务节点为众多客户端提供服务的前提在于,客户端与服务节点之间建立有通信连接关系,因此,当某一客户端需要向分布式系统申请获取某项服务时,可以先向其发起连接请求,对于接收到该连接请求的服务节点,则会响应该连接请求与第一客户端建立通信连接,由此,第一客户端则可以通过该通信连接向服务节点发送锁指令,从而实现服务节点对于锁指令的获取。
[0129] 在本发明的一个实施例中,上述根据连接请求与第一客户端建立通信连接,可以包括:根据连接请求,通过以太网小型计算机系统接口与第一客户端建立通信连接。
[0130] 本发明实施例提供了一种在服务节点与第一客户端之间建立通信连接的实现方法,即可以通过以太网小型计算机系统接口(iSCSI,Internet Small Computer System Interface)实现。一般而言,客户端中都设置有iSCSI接口,因此,可以通过该iSCSI接口实现服务节点与第一客户端之间的通信连接。
[0131] 在本发明的一个实施例中,上述当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息之后,还可以包括如下步骤:
[0132] 根据锁信息生成指令响应信息;
[0133] 将指令响应信息反馈至第一客户端。
[0134] 本发明实施例所提供的分布式锁的实现方法还可以进一步实现锁信息反馈功能。具体而言,服务节点在基于第一客户端发送的锁指令生成锁信息之后,可以基于该锁信息生成指令响应信息,也就是针对锁指令的响应信息,然后将该指令响应信息反馈至第一客户端,用于告知第一客户端当前锁指令的执行结果(锁定或未锁定)。
[0135] 在本发明的一个实施例中,该分布式锁的实现方法还可以包括如下步骤:
[0136] 当监控到关于锁信息的变更操作时,确定变更后的锁信息;
[0137] 将变更后的锁信息保存至本地内存;
[0138] 将变更后的锁信息从本地内存同步至分布式数据库。
[0139] 本发明实施例所提供的分布式锁的实现方法旨在实现分布式系统中锁信息的实时同步功能。可以理解的是,在分布式系统的实际运行过程中,客户端对于分布式系统中LUN的读写操作是实时变化的,故而可能随时涉及到关于锁信息的变更操作,如增加或者是删除等,此时,仍然需要保证锁信息的实时同步,以有效保证分布式系统中所有服务节点上锁信息的一致性。有基于此,在监控到关于锁信息的变更操作时,可以先确定变更后的锁信息,然后执行锁信息同步操作,即将变更后的锁信息保存至本地内存,再由本地内存同步至分布式数据库,以便于实现所有服务节点的锁信息同步。
[0140] 在本发明的一个实施例中,上述变更操作可以包括增加锁操作、删除锁操作、修改锁操作中的一种或多种。
[0141] 在本发明的一个实施例中,当服务节点为新增节点时,该分布式锁的实现方法还可以包括:将分布式数据库中的存储信息同步至本地内存。
[0142] 本发明实施例所提供的分布式锁的实现方法还可以进一步实现新增节点的锁信息同步功能。具体而言,对于作为本实施例执行主体的服务节点,如若其为分布式系统中的新增节点,在接入分布式系统之后,则可以将分布式数据库中的存储信息(主要为最新的锁信息)同步至本地内存。
[0143] 实施例二、本发明实施例提供了另一种分布式锁的实现方法。
[0144] 请参考图2,图2为本发明所提供的另一种分布式锁的实现方法的流程示意图,该分布式锁的实现方法应用于客户端,包括S201和S202。
[0145] S201:当接收到关于逻辑单元号的处理请求时,根据处理请求与服务节点建立通信连接;其中,服务节点为逻辑单元号所属的分布式系统中的任一服务节点,分布式系统中部署有分布式数据库;
[0146] S202:通过通信连接发送锁指令至服务节点,以使服务节点根据锁指令生成锁信息保存至本地内存,并同步至分布式数据库,使得其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0147] 需要说明的是,本发明实施例所提供的分布式锁的实现方法应用于客户端,在其与分布式系统进行信息交互时实现分布式锁功能,其中,分布式系统由众多服务节点组成,用于为客户端提供各类服务,并且,分布式系统中部署有分布式数据库,用于实现分布式系统中所有服务节点的锁信息的同步,进而在分布式系统中实现分布式锁功能。
[0148] 在实现过程中,当用户需要对分布式系统中的LUN进行相关操作(如读写操作)时,首先会通过客户端向其发起关于LUN的处理请求,使得客户端基于该处理请求与分布式系统中的某一服务节点建立通信连接;然后,通过该通信连接向服务节点发起锁指令以锁定LUN,避免其他客户端对LUN进行任意操。进一步,对于接收到锁指令的服务节点而言,其将会根据该锁指令生成锁信息保存至本地内存,并将该锁信息从本地内存同步至分布式数据库。与此同时,对于分布式系统中的每一个服务节点,均会对分布式数据库进行实时监控,由此,当某一服务节点将本地内存中的锁信息同步至分布式数据库时,其他服务节点必然将会监控到这一变更信息,此时,则可以启动同步线程,将分布式数据库中的锁信息同步至自身的本地内存,由此,实现锁信息在分布式系统中所有服务节点之间的实时同步,从而在分布式系统中实现了分布式锁功能。
[0149] 可见,本发明实施例所提供的一种分布式锁的实现方法,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0150] 在上述实施例的基础上:
[0151] 在本发明的一个实施例中,上述根据处理请求与服务节点建立通信连接,可以包括:根据处理请求向服务节点发送连接请求,以使服务节点响应连接请求与客户端建立通信连接。
[0152] 本发明实施例提供了一种在服务节点与客户端之间建立通信连接的实现方法。具体而言,在接收到关于逻辑单元号的处理请求之后,可以先根据该处理请求向服务节点发起连接请求,由此,服务节点即可响应该连接请求与客户端建立通信连接。
[0153] 在本发明的一个实施例中,该分布式锁的实现方法还可以包括:当接收到服务节点的故障信息时,向分布式系统中的任一其他服务节点发起重连请求,以使其他服务节点利用本地内存中的最新锁信息对客户端进行权限校验。
[0154] 本发明实施例所提供的分布式锁的实现方法还可以进一步实现节点故障时的迁移功能。具体的,对于已经与某服务节点建立连接进行业务处理的客户端,当其接收到关于该服务节点故障信息时,将会自动与该故障服务节点断开连接,此时,为保证客户端业务的正常进行,该客户端将会向分布式系统中的其他任一服务节点发起重连请求,以便于由新连接的服务节点继续为自身提供业务服务。进一步,对于接收到重连请求的服务节点而言,在对客户端继续提供业务服务之前,需要先对其进行权限校验,因此,可以在本地内存中读取最新的锁信息对其进行权限校验操作,当然,该本地内存中的最新锁信息是先从本地缓存中同步得到的。
[0155] 实施例三、本发明实施例提供了又一种分布式锁的实现方法(以超融合集群系统、PR锁、ETCD数据库为例)。
[0156] 首先,请参考图3,图3为现有技术中的一种服务节点故障迁移之前的集中式锁的工作原理图,客户端1与客户端2通过共享磁盘的模式都添加LUN作为磁盘,二者若同时写磁盘则会发生数据覆盖问题,导致LUN上的数据不可用,因此需要增加PR锁,以保证同一时间只能有一个客户端读写LUN。在开始初期,客户端1和客户端2都连接到了服务节点1,然后客户端1对LUN增加了排他写类型的PR锁,服务节点1收到客户端1的锁指令并进行处理,处理完成后服务节点1将LUN上的PR锁信息保存到本地内存中。在这种情况下,若客户端1与客户端2到服务节点1的连接不发生重连、服务节点1不发生故障,那么,只有客户端1可以对LUN写入,客户端2无法对LUN写入,PR锁正常工作。
[0157] 进一步,请参考图4,图4为现有技术中的一种服务节点故障迁移之后的集中式锁的工作原理图。在运行过程中,若服务节点1发生了故障下线,客户端1与客户端2会重新连接新的服务节点,假设此时连接到了服务节点3,重连到服务节点3后,理论上应该与发生重连之前的功能保持一致:即LUN上存在客户端1增加的排他写类型的PR锁,客户端1可以对LUN进行读写,客户端2无法对LUN进行读写,但是,此时真实的情况却是:服务节点3的本地内存中无PR锁信息,服务节点3在处理客户端1与客户端2的指令时在本地内存中查询不到为LUN上的PR锁,因此,服务节点3将会认为LUN上无PR锁,从而为客户端1和客户端2都返回可读写的响应,使得客户端1和客户端2都对LUN进行读写,导致PR锁失效,LUN上的数据被覆盖写入,数据不可用。同理,当客户端1和客户端2均衡的连接到不同的服务节点时、集群新增服务节点时等也会发生此种情况,从而导致PR锁失效。
[0158] 因此,为解决上述技术问题,本发明实施例提供了一种在分布式系统中实现分布式锁的技术方案。在本技术方案中,主要包括如下几个功能模块:锁指令处理模块、数据库同步模块、内存同步模块、锁缓存模块、数据库监听模块。各功能模块的功能如下:
[0159] (1)锁指令处理模块:
[0160] 当用户通过客户端使用PR锁功能时,客户端将会发送iSCSI PR锁指令,服务节点接收到iSCSI PR锁指令后交由锁指令处理模块进行处理。锁指令处理模块负责解析并处理客户端发送的iSCSI PR锁指令,然后将处理结果(也就是锁信息)返回给客户端,同时,将处理结果保存到本地内存中,以备后续使用。其中,iSCSI端口是服务节点与客户端暴露的接口,与传统的单节点集中式PR锁并无差别,保证了客户端使用体验的一致性。
[0161] (2)数据库同步模块:
[0162] 数据库同步模块负责将本地内存中的PR锁信息同步到ETCD数据库中,具体可以在所有iSCSI PR锁指令处理与下发IO校验命令的过程中,将本地内存中的PR锁信息同步到ETCD数据库中,最终实现ETCD数据库中保存有最新的PR锁信息。为达到该目的,需要保证ETCD数据库中的锁信息始终是正确的且是最新的,那么,则需要:
[0163] 第一、在接收处理客户端iSCSI PR锁指令的服务节点完成PR锁的注册、释放、上锁、解锁等所有操作之后,从该服务节点的本地内存中将PR锁的最终状态取出并保存至ETCD数据库中;
[0164] 第二、在获取、校验锁信息时,需要先从ETCD数据库中将最新的PR锁信息取出来并更新到服务节点的本地内存中。
[0165] 由此,即可保证本地内存中最终的PR锁信息与ETCD数据库中最终保存的PR锁信息完全一致,避免由于ETCD数据库中同步保存的PR锁信息与服务节点本地内存中的PR锁信息不一致导致的PR锁失效、获取不到PR锁的问题,同时也使单节点集中式的PR锁变成了集群式的PR锁:集群中的每个服务节点都会通过以上逻辑同步到数据库中最新的PR锁信息并保存到本地内存中。
[0166] (3)内存同步模块:
[0167] 内存同步模块用于将ETCD数据库中的PR锁信息在合适的时间同步到所有服务节点的本地内存中。在该内存同步模块中,可以始终认为本地内存中的PR锁信息为旧数据,ETCD数据库中的PR锁信息为新数据,那么,当需要更新本地内存中的PR锁信息时,可以始终使用ETCD数据库中的PR锁信息覆盖本地内存中的PR锁信息。
[0168] (4)锁缓存模块:
[0169] 为保证对LUN加锁的有效性,每个客户端在对服务节点进行IO操作之前,服务节点都会对其进行锁校验操作,然而,此操作需要先将ETCD数据库中的最新PR锁信息同步至本地内存后再执行,因为ETCD数据库中所存储的锁信息才是最新的锁信息,但该过程对于ETCD数据库的查询却是一个相对耗时的操作,并且,若每次IO操作之前都先执行内存同步操作,再执行IO操作,会极大影响其IO性能,甚至可能直接导致功能不可用。锁缓存模块则用于解决该技术问题。
[0170] 锁缓存模块用于将从ETCD数据库中获取到的PR锁信息进行前置缓存,缓存后,内存更新模块并不会立即从缓存中将PR锁信息更新到本地内存中,而是仅在使用前且本地内存确实需要更新时才会从缓存中将本地内存更新,此处,更新原则在于:缓存的更新要频繁,以保证缓存中的PR锁信息始终是最新的;本地内存的更新要尽量少,要做到非必要不更新、一次更新多次使用,以尽可能减少性能损耗。
[0171] (5)数据库监听模块:
[0172] 数据库监听模块负责监听ETCD数据库中PR锁的增删改等操作。当服务节点接收到客户端的PR锁指令后会处理,并将处理完成的结果保存到本地内存中,然后,数据库同步模块会获取该本地内存中的PR锁信息并保存到ETCD数据库中,此时,ETCD数据库监听模块就会监听到PR锁信息的变化并取出该PR锁信息,经锁缓存模块同步到集群中所有服务节点的缓存中,提前将PR锁信息从ETCD数据库缓存到集群各个服务节点的本地内存中,为后续使用做准备。
[0173] 综上,经过上述各个功能模块的紧密配合与处理,传统的单机集中式PR锁最终成为分布式PR锁,为集群化部署的超融合集群系统提供服务,且使用方式与传统单机式的无差别,用户无感知,同时对IO性能也无任何影响,有效地提升了超融合集群系统的功能。
[0174] 基于上述各功能模块,请参考图5,图5为本发明所提供的一种分布式锁的实现方法的工作原理图,该分布式锁的实现方法的实现流程可以包括:
[0175] (1)客户端发送iSCSI PR锁指令为LUN加锁,该指令为通用的iSCSI PR锁指令,客户端在使用分布式PR锁时不感知与传统PR锁的差异;
[0176] (2)超融合集群中的某个或多个服务节点会接收到客户端发送的iSCSI PR锁指令,并通过指令处理模块处理该指令,处理流程包括:解析PR锁指令、处理PR锁指令、为客户端返回处理结果、将处理结果保存到本地内存;
[0177] (3)数据库同步模块在锁指令处理模块将客户端的PR锁指令处理完成并保存到本地内存后,从本地内存中获取处理后的PR锁信息并将其同步到ETCD数据库中,由此可见,数据库同步模块会直接影响分布式PR锁信息的准确性,因此要求在PR锁的增减、删除、更新等所有操作完成后,再从本地内存中获取最新的PR锁信息并同步保存到ETCD数据库中;
[0178] (4)通过内存同步模块将ETCD数据库中的PR锁信息同步到超融合集群的各个服务节点的本地内存中,并且,在该过程中,当然,内存同步模块仅仅会在需要时将PR锁信息同步到本地内存中且保证一次同步,多次使用,最大程度的降低对IO性能的影响;
[0179] (5)通过锁缓存模块将从ETCD数据库中获取到的PR锁信息进行前置缓存,即发现PR锁信息有更新后立即更新到锁缓存模块,但内存更新模块并不会立即从缓存中将PR锁信息更新到本地内存中,而是仅在使用前且本地内存PR锁确实需要更新时才会从缓存中将本地内存更新,由此,即可将耗时的查询ETCD数据库的操作通过提前缓存的方式转换为不耗时的内存操作,后续内存同步模块只需要从缓存中获取PR锁信息再同步到服务节点的本地内存中,做到了对性能无任何影响;
[0180] (6)通过数据库监听模块监听ETCD数据库中PR锁的增删改等操作,当服务节点处理完客户端发送的iSCSI PR锁指令且保存到本地内存中后,数据库同步模块会将该PR锁信息同步到ETCD数据库中,此时,超融合集群中的所有服务节点通过数据库监听模块都可以获取到PR锁信息,并将该PR锁信息通过锁缓存模块缓存到集群系统中的所有服务节点上,以备后续使用;
[0181] (7)当超融合集群新增服务节点时,该新增服务节点可以通过以上步骤,将集群系统中已有的PR锁信息同步到本地内存中,保证客户端在连接新服务节点时PR锁有效。
[0182] 最后,请参考图6,图6为本发明实施例所提供的一种分布式锁的功能示意图。通过上述实现流程,实现了将锁信息实时同步至超融合集群中的所有服务节点上,至此实现了分布式锁功能。
[0183] 可见,本发明实施例所提供的一种分布式锁的实现方法,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0184] 实施例四、本发明实施例提供了一种分布式锁的实现系统。
[0185] 请参考图7,图7为本发明所提供的一种分布式锁的实现系统的结构示意图,该分布式锁的实现系统可以包括客户端100和分布式系统200,分布式系统200中部署有分布式数据库;
[0186] 客户端100,用于向服务节点201发送锁指令;
[0187] 服务节点201,用于根据锁指令生成锁信息;将锁信息保存至本地内存;将锁信息从本地内存同步至分布式数据库,以使其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0188] 可见,本发明实施例所提供的一种分布式锁的实现系统,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0189] 对于本发明实施例提供的系统的介绍请参照上述方法实施例,本发明在此不做赘述。
[0190] 实施例五、本发明实施例提供了一种分布式锁的实现装置。
[0191] 请参考图8,图8为本发明所提供的一种分布式锁的实现装置的结构示意图,该分布式锁的实现装置应用于分布式系统中的任一服务节点,分布式系统中部署有分布式数据库,包括:
[0192] 生成模块1,用于当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息;
[0193] 保存模块2,用于将锁信息保存至本地内存;
[0194] 同步模块3,用于将锁信息从本地内存同步至分布式数据库,以使其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0195] 可见,本发明实施例所提供的一种分布式锁的实现装置,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0196] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括:
[0197] 读取模块,用于当接收到第二客户端发送的关于逻辑单元号的读写指令时,在本地内存中读取锁信息;
[0198] 判断模块,用于根据锁信息判断第二客户端是否具有对逻辑单元号的操作权限;
[0199] 执行模块,用于若第二客户端具有对逻辑单元号的操作权限,则执行读写指令;
[0200] 拒绝模块,用于若第二客户端不具有对逻辑单元号的操作权限,则拒绝读写指令。
[0201] 在本发明的一个实施例中,上述判断模块可具体用于根据锁信息确定第一客户端信息;根据读写指令确定第二客户端信息;判断第一客户端信息与第二客户端信息是否一致;若是,则确定第二客户端具有操作权限;若否,则确定第二客户端不具有操作权限。
[0202] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括:
[0203] 监控模块,用于对分布式数据库进行监控;
[0204] 确定模块,用于当监控到变更信息时,根据变更信息确定目标锁信息;
[0205] 目标同步模块,用于将目标锁信息从分布式数据库同步至本地内存。
[0206] 在本发明的一个实施例中,上述目标同步模块可包括:
[0207] 缓存同步单元,用于将目标锁信息从分布式数据库同步至本地缓存;
[0208] 内存同步单元,用于将目标锁信息从本地缓存同步至本地内存。
[0209] 在本发明的一个实施例中,上述缓存同步单元可具体用于将目标锁信息从分布式数据库实时同步至本地缓存;上述内存同步单元可具体用于当接收到第二客户端发送的关于逻辑单元号的读写指令时,将目标锁信息从本地缓存同步至本地内存。
[0210] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括接收模块,用于在上述当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息之前,接收第一客户端发送的连接请求;根据连接请求与第一客户端建立通信连接;通过通信连接接收锁指令。
[0211] 在本发明的一个实施例中,上述接收模块可具体用于根据连接请求,通过以太网小型计算机系统接口与第一客户端建立通信连接。
[0212] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括反馈模块,用于在上述当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息之后,根据锁信息生成指令响应信息;将指令响应信息反馈至第一客户端。
[0213] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括变更同步模块,用于当监控到关于锁信息的变更操作时,确定变更后的锁信息;将变更后的锁信息保存至本地内存;将变更后的锁信息从本地内存同步至分布式数据库。
[0214] 在本发明的一个实施例中,上述变更操作可以包括增加锁操作、删除锁操作、修改锁操作中的一种或多种。
[0215] 在本发明的一个实施例中,当服务节点为新增节点时,该分布式锁的实现装置还可以包括新节点同步模块,用于将分布式数据库中的存储信息同步至本地内存。
[0216] 在本发明的一个实施例中,上述分布式数据库可以为分布式键值数据库。
[0217] 对于本发明实施例提供的装置的介绍请参照上述方法实施例,本发明在此不做赘述。
[0218] 实施例六、本发明实施例提供了另一种分布式锁的实现装置。
[0219] 请参考图9,图9为本发明所提供的另一种分布式锁的实现装置的结构示意图,该分布式锁的实现装置应用于应用于客户端,装置包括:
[0220] 建立模块4,用于当接收到关于逻辑单元号的处理请求时,根据处理请求与服务节点建立通信连接;其中,服务节点为逻辑单元号所属的分布式系统中的任一服务节点,分布式系统中部署有分布式数据库;
[0221] 发送模块5,用于通过通信连接发送锁指令至服务节点,以使服务节点根据锁指令生成锁信息保存至本地内存,并同步至分布式数据库,使得其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0222] 可见,本发明实施例所提供的一种分布式锁的实现装置,预先在分布式系统中部署分布式数据库,由此,当任一服务节点接收到客户端发起的锁指令时,在将基于锁指令生成的锁信息保存至本地内存的同时,也会将该锁信息实时同步至分布式数据库,同时,分布式系统中的每一个服务节点均对该分布式数据库进行监控,一旦监控到分布式数据库的变更信息,则会将其中最新的锁信息同步至自身内存,从而实现了分布式系统中所有服务节点对锁信息的实时同步,也就是在分布式系统中实现了将集中式锁转换为分布式锁,进而保证了分布式系统中锁功能的正常工作,保证了系统的稳定运行。
[0223] 在本发明的一个实施例中,上述建立模块4可具体用于根据处理请求向服务节点发送连接请求,以使服务节点响应连接请求与客户端建立通信连接。
[0224] 在本发明的一个实施例中,该分布式锁的实现装置还可以包括故障迁移模块,用于当接收到服务节点的故障信息时,向分布式系统中的任一其他服务节点发起重连请求,以使其他服务节点利用本地内存中的最新锁信息对客户端进行权限校验。
[0225] 对于本发明实施例提供的装置的介绍请参照上述方法实施例,本发明在此不做赘述。
[0226] 实施例七、本发明实施例提供了一种电子设备。
[0227] 请参考图10,图10为本发明所提供的一种电子设备的结构示意图,该电子设备可包括:
[0228] 存储器,用于存储计算机程序;
[0229] 处理器,用于执行计算机程序时可实现如上述任意一种分布式锁的实现方法的步骤。
[0230] 如图10所示,为电子设备的组成结构示意图,电子设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。
[0231] 在本发明实施例中,处理器10可以为中央处理器(Central Processing Unit,CPU)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。
[0232] 处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行分布式锁的实现方法的实施例中的操作。
[0233] 存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本发明实施例中,存储器11中至少存储有用于实现以下功能的程序:
[0234] 当接收到第一客户端发送的锁指令时,根据锁指令生成锁信息;
[0235] 将锁信息保存至本地内存;
[0236] 将锁信息从本地内存同步至分布式数据库,以使其他各服务节点在监控到分布式数据库的变更信息时,将锁信息从分布式数据库同步至自身内存。
[0237] 在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能所需的应用程序等;存储数据区可存储使用过程中所创建的数据。
[0238] 此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
[0239] 通信接口12可以为通信模块的接口,用于与其他设备或者系统连接。
[0240] 当然,需要说明的是,图10所示的结构并不构成对本发明实施例中电子设备的限定,在实际应用中电子设备可以包括比图10所示的更多或更少的部件,或者组合某些部件。
[0241] 实施例八、本发明实施例提供了一种计算机可读存储介质。
[0242] 本发明实施例所提供的计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如上述任意一种分布式锁的实现方法的步骤。
[0243] 该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read‑Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0244] 对于本发明实施例提供的计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不做赘述。
[0245] 说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0246] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0247] 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD‑ROM或技术领域内所公知的任意其它形式的存储介质中。
[0248] 以上对本发明所提供的技术方案进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明的保护范围内。