一种分布式锁实现方法及系统
技术领域
本发明涉及区块链技术领域,具体涉及一种分布式锁实现方法及系统。
背景技术
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。
现在的分布式锁实现方式主要是基于Zookeeper、数据库等中心化方式,当这些中心化系统被恶意攻击时,提供的分布式锁服务失效,导致业务处理异常。比如,在基于Zookeeper实现分布式锁时,所采用的方案为:1)在Zookeeper指定节点(locks)下创建临时顺序节点;2)获取locks下所有子节点;3)对子节点按节点自增序号从小到大排序;4)判断本节点是不是第一个子节点,若是,则获取锁;若不是,则监听比该节点小的那个节点的删除事件;5)若监听事件生效,则回到第二步重新进行判断,直到获取到锁。Zookeeper使用基于raft的分布式一致性算法,当恶意的分布式zk节点攻击Zookeeper系统时,导致Zookeeper系统异常,分布式锁服务提供错误信息。
可见,现有技术的分布式锁的实现方法抗攻击能力差、可用性差。
发明内容
为解决现有技术中的问题,本发明实施例提供一种分布式锁实现方法及系统。
第一方面,本发明实施例提供一种分布式锁实现方法,包括:分布式部署的客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识;若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送预设反馈信息。
进一步地,所述方法还包括:若所述客户端在预设时间内未接收到所述区块链网络发送的与所述分布式锁交易信息对应的所述预设反馈信息,或所述客户端在预设时间内接收到所述预设反馈信息,但通过查询区块链网络发现当前相应的锁持有状态信息与所述预设反馈信息不一致,则向另一所述分布式锁服务节点再次发送所述分布式锁交易信息,重复上述过程,直至接收到所述预设反馈信息,且所述预设反馈信息与当前所述锁持有状态信息一致。
进一步地,所述分布式锁交易信息为获取锁交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络根据所述锁标识查看是否有客户端已经获取相应锁;若已经有客户端获取相应锁且正常使用,则向发送所述获取锁交易信息的所述客户端发送锁占用信息;若没有客户端获取相应锁,或有客户端获取相应锁但未正常使用,则变更锁持有者为发送所述分布式锁交易信息的所述客户端,并向所述客户端发送锁成功获取信息;其中,所述预设反馈信息包括所述锁占用信息或所述锁成功获取信息。
进一步地,所述分布式锁交易信息为释放锁交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络判断发送所述分布式锁交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,若是,则释放所述锁,并向所述客户端发送锁成功释放信息;若否,则向所述客户端发送错误信息;其中,所述预设反馈信息包括所述锁成功释放信息或所述错误信息。
进一步地,所述分布式锁交易信息为锁心跳交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络判断发送所述分布式锁交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,若是,则根据接收所述锁心跳交易信息的时间更新所述客户端的锁持有时间信息,并向所述客户端发送所述锁持有时间信息;若否,则向所述客户端发送错误信息;其中,所述预设反馈信息包括所述锁持有时间信息或所述错误信息。
进一步地,所述方法还包括:所述区块链网络获取所述客户端最后一次发送所述锁心跳交易信息距当前的时间间隔;通过将所述时间间隔与预设最大心跳间隔进行比较判断所述客户端是否正常使用锁。
进一步地,所述分布式锁交易信息为锁状态订阅信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:
若判断获知与所述锁标识对应的锁的持有者发生变更,所述区块链网络向所述客户端发送锁状态变更信息;其中,所述预设反馈信息包括所述锁状态变更信息;
所述方法还包括:判断是否接收到预设数量的所述分布式锁服务节点发送的所述预设反馈信息,且所述预设数量的所述分布式锁服务节点发送的所述预设反馈信息是否存在结果不一致的情况,若是,则通过查询区块链网络获取当前的锁持有状态信息,并将所述锁持有状态信息与占比较大的所述预设反馈信息进行一致性比对;若一致,则认为当前相应的锁持有状态信息与区块链网络发送的所述预设反馈信息一致;若不一致,则认为当前相应的锁持有状态信息与区块链网络发送的所述预设反馈信息不一致。
第二方面,本发明实施例提供一种分布式锁实现系统,该系统包括:分布式部署的客户端以及区块链网络,所述区块链网络包括预设数量的分布式锁服务节点,其中:所述客户端用于:向所述区块链网络中的任一所述分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识;所述区块链网络用于:若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送预设反馈信息。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如所述分布式锁实现方法中所述客户端或所述区块链网络所分别执行的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如所述分布式锁实现方法中所述客户端或所述区块链网络所分别执行的步骤。
本发明实施例提供的分布式锁实现方法及系统,通过将分布式锁服务节点构成区块链网络,并通过共识对分布式锁交易信息进行处理,即使一定量的分布式锁服务节点被攻击,区块链系统依旧提供高可用的锁服务能力,并可防止单点故障导致分布式锁服务不可用,由此提高了分布式锁服务的抗攻击能力和可用性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的分布式锁实现方法流程图;
图2是本发明一实施例提供的分布式锁实现方法中客户端的处理流程图;
图3是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约获取锁处理流程图;
图4是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约释放锁处理流程图;
图5是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约锁心跳处理流程图;
图6是本发明一实施例提供的分布式锁实现系统的结构示意图;
图7是本发明一实施例提供的分布式锁实现系统的原理示意图;
图8是本发明一实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明一实施例提供的分布式锁实现方法流程图。如图1所示,所述方法包括:
步骤101、分布式部署的客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识。
分布式部署的客户端是指分布式客户端集群中的任一客户端。所述区块链网络由预设数量的分布式锁服务节点构成。分布式部署的客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识。所述客户端标识用于区分不同客户端,所述锁标识用于区分不同分布式锁(可简称锁)。可以利用不同的符号、字段等表示不同的分布式锁交易信息。
步骤102、若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送预设反馈信息。
客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,实际上是将所述分布式锁交易信息发送至所述区块链网络。若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识处理,区块链网络上的各个分布式锁服务节点达到共识后,所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送所述预设反馈信息。
如果某个分布式锁服务节点为恶意节点或故障节点,则虽然这个节点投反对票,但由于大部分节点投同意票,共识最终成功并记账。
所述预设的共识算法可以为支持拜占庭容错的共识算法,也可为其他共识算法。
本发明实施例通过将分布式锁服务节点构成区块链网络,并通过共识对分布式锁交易信息进行处理,即使一定量的分布式锁服务节点被攻击,区块链系统依旧提供高可用的锁服务能力,并可防止单点故障导致分布式锁服务不可用,由此提高了分布式锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述方法还包括:若所述客户端在预设时间内未接收到所述区块链网络发送的与所述分布式锁交易信息对应的所述预设反馈信息,或所述客户端在预设时间内接收到所述预设反馈信息,但通过查询区块链网络发现当前的锁持有状态信息与所述预设反馈信息不一致,则向另一所述分布式锁服务节点再次发送所述分布式锁交易信息,重复上述过程,直至接收到所述预设反馈信息,且所述预设反馈信息与当前所述锁持有状态信息一致。
若接收所述分布式锁交易信息的分布式锁服务节点为恶意节点或故障节点,则接收到分布式锁交易信息后,可能不发起共识、区块链网络也不向客户端发送反馈信息,即所述客户端在预设时间内接收不到信息,也即未在预设时间内接收到所述预设反馈信息;也可能恶意节点或故障节点直接向客户端发送反馈信息,发送的反馈信息可能是所述预设反馈信息,也可能不是所述预设反馈信息。若发送的反馈信息不是所述预设反馈信息,则客户端不能在预设时间内接收到所述预设反馈信息。若发送的反馈信息是所述预设反馈信息,则客户端在预设时间内接收到所述预设反馈信息。
若所述客户端在预设时间内接收到所述预设反馈信息,则进一步通过查询区块链网络获取当前相应的锁持有状态信息,所述锁持有状态信息包括锁持有者、锁持有时间等,并判断所述当前相应的锁持有状态信息是否与所述预设反馈信息一致。
若当前相应的锁持有状态信息是否与所述预设反馈信息不一致或未在预设时间内接收到所述预设反馈信息,则表示接收所述分布式锁交易信息的所述分布式锁服务节点为恶意节点或故障节点,则向另一所述分布式锁服务节点再次发送所述分布式锁交易信息,重复上述过程,直至接收到所述预设反馈信息,且所述预设反馈信息与当前所述锁持有状态信息一致。
可以理解的,根据分布式锁交易信息的类型或性质不同,所述预设时间的时长可以不同。分布式锁交易信息可带有流水号。
举一个应用实例说明:
假设场景:区块链网络共有10个节点,分别是Node1、Node2、Node3……。假设区块链节点Node1被攻击,对于接收到的任何请求都会投拒绝票。
1)客户端A向Node1发送申请分布式锁命令,Node1返回无法获取锁。(Node1节点被攻击)
2)客户端A查询区块链网络发现锁是可用的,并非Node1返回的锁不可用。
3)客户端A向Node2发送申请分布式锁命令,Node2将交易发送至区块链网络进行共识。
4)只有Node1投反对票,其他节点投同意票,共识最终成功,记账。
5)通知客户端A成功获取分布式锁。
在上述实施例的基础上,本发明实施例通过在客户端在预设时间内未接收到区块链网络发送的与分布式锁交易信息对应的预设反馈信息,或客户端在预设时间内接收到预设反馈信息,但通过查询区块链网络发现当前相应的锁持有状态信息与预设反馈信息不一致时,向另一分布式锁服务节点再次发送分布式锁交易信息,进一步提高了分布式锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述分布式锁交易信息为获取锁交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络根据所述锁标识查看是否有客户端已经获取相应锁;若已经有客户端获取相应锁且正常使用,则向发送所述获取锁交易信息的所述客户端发送锁占用信息;若没有客户端获取相应锁,或有客户端获取相应锁但未正常使用,则变更锁持有者为发送所述分布式锁交易信息的所述客户端,并向所述客户端发送锁成功获取信息;其中,所述预设反馈信息包括所述锁占用信息或所述锁成功获取信息。
所述分布式锁交易信息为获取锁交易信息,表示此分布式锁交易信息用于发起获取锁交易。所述区块链网络接收到所述获取锁交易信息后,利用预设的智能合约对所述获取锁交易信息进行处理。
锁的相关交易信息可以记录在区块链的区块上。某个客户端获取锁后,区块链网络可在表示锁持有状态的区块条目中将锁标识与客户端标识对应存储。由此表示与所述客户端标识对应的客户端当前持有与所述锁标识对应的锁。
所述区块链网络根据所述锁标识查看是否有客户端已经获取相应锁;若已经有客户端获取相应锁,则进一步判断持有锁的客户端是否正常使用锁,也即锁是否被正常持有。若持有锁的客户端正常使用锁,则表明锁被占用,则区块链网络向发送获取锁交易信息的所述客户端发送锁占用信息,表示锁当前被占用,无法获取。若持有锁的客户端未正常使用锁,表明相应的客户端虽然持有锁,但并不需要使用锁,则变更锁持有者为发送所述获取锁交易信息的所述客户端,并向所述客户端发送锁成功获取信息。
若没有客户端获取相应锁,则直接变更锁持有者为发送所述获取锁交易信息的所述客户端,并向所述客户端发送锁成功获取信息。
其中,所述锁占用信息及所述锁成功获取信息均为所述预设反馈信息。所述相应的锁持有状态信息可以为锁持有者信息。
在上述实施例的基础上,本发明实施例通过区块链网络在接收到包含获取锁交易信息后,根据锁的使用情况向客户端反馈锁占用信息或锁成功获取信息,提高了获取锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述分布式锁交易信息为释放锁交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络判断发送所述分布式锁交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,若是,则释放所述锁,并向所述客户端发送锁成功释放信息;若否,则向所述客户端发送错误信息;其中,所述预设反馈信息包括所述锁成功释放信息或所述错误信息。
所述分布式锁交易信息为释放锁交易信息,表示此分布式锁交易信息用于发起释放锁交易。所述区块链网络接收到所述释放锁交易信息后,利用预设的智能合约对所述释放锁交易信息进行处理。
所述区块链网络判断发送所述释放锁交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,具体可以通过将发送所述释放锁交易信息的所述客户端的客户端标识与当前持有锁的客户端的客户端标识进行比较判断。若是,则表示发送所述释放锁交易信息的所述客户端当前持有锁,则根据所述释放锁交易信息中的所述锁标识释放相应锁,并向所述客户端发送锁成功释放信息;若否,则向所述客户端发送错误信息。
其中,所述锁成功释放信息及所述错误信息均为所述预设反馈信息。所述相应的锁持有状态信息可以为锁持有者信息。
在上述实施例的基础上,本发明实施例通过区块链网络在接收到包含释放锁交易信息后,通过判断客户端的锁持有情况向客户端发送锁成功释放信息或错误信息,提高了释放锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述分布式锁交易信息为锁心跳交易信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:所述区块链网络判断发送所述分布式锁交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,若是,则根据接收所述锁心跳交易信息的时间更新所述客户端的锁持有时间信息,并向所述客户端发送所述锁持有时间信息;若否,则向所述客户端发送错误信息;其中,所述预设反馈信息包括所述锁持有时间信息或所述错误信息。
客户端获取锁后,可按照设定的时间间隔向区块链网络发送锁心跳交易信息,用于表征正在正常使用锁。具体地,客户端可以通过在获取锁后启动锁心跳定时器发送所述锁心跳交易信息。
所述区块链网络在接收到锁心跳交易信息后,利用预设的智能合约对所述锁心跳交易信息进行处理。所述区块链网络判断发送所述锁心跳交易信息的所述客户端是否是当前与所述锁标识对应的锁的持有者,若是,则根据接收所述锁心跳交易信息的时间更新所述客户端的锁持有时间信息,并向所述客户端发送所述锁持有时间信息,所述锁持有时间信息可以为最后接收到所述锁心跳交易信息的时间;若否,则向所述客户端发送错误信息。
其中,所述锁持有时间信息和所述错误信息均为所述预设反馈信息。所述相应的锁持有状态信息可以为锁持有时间信息。
在上述实施例的基础上,本发明实施例通过区块链网络在接收到锁心跳交易信息后,通过判断客户端的锁持有情况向客户端发送锁持有时间信息或错误信息,提高了锁使用过程中的抗攻击能力和可用性。
进一步地,基于上述实施例,所述方法还包括:所述区块链网络获取所述客户端最后一次发送所述锁心跳交易信息距当前的时间间隔;通过将所述时间间隔与预设最大心跳间隔进行比较判断所述客户端是否正常使用锁。
如前所述,区块链网络接收到某个客户端发送的获取锁交易信息后,根据获取锁交易信息中的锁标识查看是否有客户端已经获取相应锁。若已经有客户端获取相应锁,则需要判断持有锁的客户端是否正常使用锁。由于客户端获取锁后会向区块链网络发送锁心跳交易信息,并且锁正常使用时发送锁心跳交易信息的间隔需要在预设最大心跳间隔内。因此,判断持有锁的客户端是否正常使用锁可以通过获取所述客户端最后一次发送所述锁心跳交易信息距当前的时间间隔,通过将所述时间间隔与预设最大心跳间隔进行比较,判断所述客户端是否正常使用锁。
若所述时间间隔不大于所述预设最大心跳间隔,则表示所述客户端正常使用锁;若所述时间间隔大于所述预设最大心跳间隔,则表示所述客户端未正常使用锁。
在上述实施例的基础上,本发明实施例通过根据接收锁心跳交易信息的时间间隔判断客户端是否正常使用锁,提高了锁使用是否正常判断的准确性,由此进一步提高了获取锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述分布式锁交易信息为锁状态订阅信息;所述区块链网络利用预设的智能合约对所述分布式锁交易信息进行处理包括:若判断获知与所述锁标识对应的锁的持有者发生变更,所述区块链网络向所述客户端发送锁状态变更信息;其中,所述预设反馈信息包括所述锁状态变更信息;所述方法还包括:判断是否接收到多个所述分布式锁服务节点发送的所述预设反馈信息,且所述多个所述分布式锁服务节点发送的所述预设反馈信息是否存在结果不一致的情况,若是,则通过查询区块链网络获取当前的锁持有状态信息,并将所述锁持有状态信息与占比较大的所述预设反馈信息进行一致性比对;若一致,则认为当前相应的锁持有状态信息与区块链网络发送的所述预设反馈信息一致;若不一致,则认为当前相应的锁持有状态信息与区块链网络发送的所述预设反馈信息不一致。
所述分布式锁交易信息为锁状态订阅信息,所述分布式锁交易信息中的锁标识表示了要订阅哪个分布式锁的状态信息。所述区块链网络接收到所述锁状态订阅信息后,利用预设的智能合约对所述锁状态订阅信息进行处理。若判断获知与所述锁标识对应的锁的持有者发生变更,所述区块链网络向发送所述锁状态订阅信息的所述客户端发送锁状态变更信息。可以理解的,客户端可以只发送一次所述锁状态订阅信息,而区块链网络在每次相应锁的状态发生变更后(更换持有者),均向所述客户端发送锁状态变更信息,实现一次订阅,多次使用。
其中,所述预设反馈信息包括所述锁状态变更信息。所述相应的锁持有状态信息可以为锁持有者信息。
可以设置为由预设数量个分布式节点对锁状态订阅信息进行事件通知,即向订阅锁状态的客户端发送相应分布式锁的状态变更信息。判断是否接收到预设数量的所述分布式锁服务节点发送的所述预设反馈信息,且所述预设数量的所述分布式锁服务节点发送的所述预设反馈信息是否存在结果不一致的情况,若是,则通过查询区块链网络获取当前的锁持有状态信息,并将所述锁持有状态信息与占比较大的所述预设反馈信息进行一致性比对。若发现所述锁持有状态信息与占比较大的所述预设反馈信息不一致,则客户端向另一所述分布式锁服务节点再次发送所述分布式锁交易信息,重复上述过程,直至接收到的预设数量的所述分布式锁服务节点的所述预设反馈信息一致或占比较大的所述预设反馈信息与当前所述锁持有状态信息一致。
在上述实施例的基础上,本发明实施例通过区块链网络在接收到锁状态订阅信息后,在相应锁的持有者发生变更后向客户端发送锁状态变更信息,并在接收的预设数量的分布式锁服务节点发送的预设反馈信息不一致时,将通过区块链网络查询获取的锁持有状态信息与占比较大的预设反馈信息进行一致性比对,进而判断区块链网络发送的预设反馈信息是否与当前的锁持有状态信息一致,进一步提高了锁监听过程中锁服务的抗攻击能力和可用性。
进一步地,基于上述实施例,所述方法还包括:所述区块链网络将所述分布式锁交易信息处理过程中产生的数据记录在区块上,并根据预设处理间隔通过数据归档的方式进行账本整理。
分布式锁交易信息处理过程中产生的数据需要记录到区块链区块上,随着时间推移,当分布式锁的历史数据存储无意义时,可通过数据归档方式进行账本整理,减少存储占用。
在上述实施例的基础上,本发明实施例通过根据预设处理间隔通过数据归档的方式进行账本整理,减少了存储占用,节约了空间。
图2是本发明一实施例提供的分布式锁实现方法中客户端的处理流程图。如图2所示,客户端的处理流程如下:
1)查询指定锁的持有者ID。其中锁名称可根据配置参数自定义,持有者ID要求每个客户端唯一。如果查询指定锁不存在,则直接报错,通过其他方式创建锁。如果持有者ID存在,则表示其他持有者获取锁,客户端需定时查询锁状态或设置锁状态监听。
2)如果成功获取锁,则开启锁心跳定时器,将获取锁的信息发送至区块链网络,进而执行相关业务数据。
3)业务执行完成后,将释放锁交易发送至区块链网络。停止锁心跳定时器。
图3是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约获取锁处理流程图。如图3所示,智能合约获取锁的处理流程如下:
1)客户端发起获取锁交易,经过共识后发送至智能合约。
2)智能合约检测是否有客户端获取该锁。
3)如果没有客户端获取该锁,则将获取锁ID设置为发起交易的客户端对应的持有者ID,并记录交易时间戳。
4)通知所有订阅“锁变更状态”的客户端,锁持有者变更。
5)如果有客户端已经获取该锁,判断最后一次锁心跳时间是否已经过期。
6)如果没有过期,则返回当前锁被占用。
7)如果过期,则重复步骤3)、步骤4)。
其中,智能合约维护锁持有者ID与更新锁状态时间的映射关系。
图4是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约释放锁处理流程图。如图4所示,智能合约释放锁的处理流程如下:
1)客户端发起释放锁交易,经过共识后发送至智能合约。
2)智能合约检测该客户端是否持有锁。
3)如果没有持有锁,则返回释放错误信息。
4)如果持有锁,则释放锁。
5)通知所有订阅“锁变更状态”的客户端,锁持有者变更。
图5是本发明一实施例提供的分布式锁实现方法中区块链网络智能合约锁心跳处理流程图。如图5所示,智能合约锁心跳的处理流程如下:
1)客户端发起释放锁交易,经过共识后发送至智能合约。
2)判断交易发起者ID与当前锁持有者ID是否相同。
3)如果相同,则更新锁持有者时间为锁心跳交易时间。
4)如果不同,则返回错误。
图6是本发明一实施例提供的分布式锁实现系统的结构示意图。如图6所示,所述系统包括:分布式部署的客户端1以及区块链网络2,所述区块链网络2包括预设数量的分布式锁服务节点3,其中:所述客户端1用于:向所述区块链网络2中的任一所述分布式锁服务节点3发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识;所述区块链网络2用于:若接收所述分布式锁交易信息的所述分布式锁服务节点3为正常节点,则所述区块链网络2通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端1发送预设反馈信息。。
本发明实施例通过将分布式锁服务节点构成区块链网络,并通过共识对分布式锁交易信息进行处理,即使一定量的分布式锁服务节点被攻击,区块链系统依旧提供高可用的锁服务能力,并可防止单点故障导致分布式锁服务不可用,由此提高了分布式锁服务的抗攻击能力和可用性。
图7是本发明一实施例提供的分布式锁实现系统的原理示意图。如图7所示,分布式锁实现系统由客户端、共识模块和智能合约模块组成,其中共识模块、智能合约模块属于区块链网络。各模块功能如下:
1)共识模块
支持拜占庭容错的共识:为保证系统高可用能力,使用防攻击能力较强的共识算法(拜占庭容错共识),保证数据一致性、抗攻击性。
2)客户端
构造、发起交易:负责构造获取锁、查询锁、释放锁交易,并将其发送至区块链网络。
管理锁心跳:在本客户端占用分布式锁期间,需要定时向区块链网络发送锁占用心跳包,保证系统不会因为超时而将锁释放。
3)智能合约模块
锁管理:负责处理锁查询、锁获取、锁释放命令。
超时检测:在某客户端持有锁期间的心跳检测。
事件通知:将锁状态变更通知相关客户端。
本发明实施例提供的分布式锁实现方法及系统,具有如下优点:
1)抗攻击能力强。采用支持拜占庭容错的共识算法,即使一定量的分布式锁服务节点被攻击,区块链系统依旧提供高可用的服务能力。
2)提高可用性,防单点故障。通过区块链集群方式实现分布式锁,防止单点故障导致分布式锁服务不可用。
本发明实施例提供的系统是用于上述方法的,具体功能可参照上述方法流程,此处不再赘述。
图8是本发明一实施例提供的电子设备的实体结构示意图。如图8所示,该电子设备可以包括:处理器(processor)810、通信接口(Communications Interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行如下方法:分布式部署的客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识;若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送预设反馈信息。
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:分布式部署的客户端向区块链网络中的任一分布式锁服务节点发送分布式锁交易信息,所述分布式锁交易信息包括客户端标识及锁标识;若接收所述分布式锁交易信息的所述分布式锁服务节点为正常节点,则所述区块链网络通过预设的共识算法对所述分布式锁交易信息进行共识后,利用预设的智能合约对所述分布式锁交易信息进行处理,处理完成后根据所述客户端标识向所述客户端发送预设反馈信息。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。