分布式计算环境下的锁定控制系统和方法转让专利

申请号 : CN201110177488.1

文献号 : CN102355473B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何冠宇

申请人 : 用友软件股份有限公司

摘要 :

本发明提供了一种分布式计算环境下的锁定控制系统,包括:多个计算节点和锁系统,锁系统由多个锁节点组成,其中,计算节点,用于根据计算任务检测计算节点内的锁信息,并根据检测结果向锁系统内对应的锁节点发送请求,以及根据锁节点反馈的处理状态信息更新计算节点维护的锁信息;锁节点,用于根据请求对相应的锁进行处理并向计算节点反馈处理状态信息,以及根据处理结果更新锁节点维护的锁信息。本发明还提供了一种分布式计算环境下的锁定控制方法。通过本发明的技术方案,使得系统的伸缩性变强,具有更好的性能和稳定性,并且没有特定数据库的依赖,具有更好的可移植性。

权利要求 :

1.一种分布式计算环境下的锁定控制系统,其特征在于,包括:多个计算节点和锁系统,所述锁系统由多个锁节点组成,其中,

所述计算节点,用于根据计算任务检测所述计算节点内的锁信息,并根据检测结果向所述锁系统内对应的锁节点发送请求,以及根据所述锁节点反馈的处理状态信息更新所述计算节点维护的锁信息;

所述锁节点,用于根据所述请求对相应的锁进行处理并向所述计算节点反馈处理状态信息,以及根据处理结果更新所述锁节点维护的锁信息,其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点同时拥有,所述排他锁只能被一个所述计算节点内的一个计算任务拥有;

其中,当所述计算节点需对一个资源进行锁定时,如果是请求对所述资源加所述共享锁,且检测出所述计算节点已为所述共享锁的拥有者,则所述计算节点对所述共享锁添加计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果是请求对所述资源加所述排他锁,且检测出对所述资源加锁请求对应的计算任务为所述排他锁的拥有者,则所述计算节点对所述排他锁添加计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果没有检测出所述计算节点拥有所述共享锁或所述排他锁,则所述计算节点向所述锁系统发送加锁请求;

当所述计算节点需对一个锁解锁时,若所述锁为所述共享锁,且检测出所述锁的拥有者是所述计算节点,则所述计算节点对所述锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求,若所述锁为排他锁,且检测出请求解锁的计算任务是所述排他锁的拥有者时,则所述计算节点对所述排他锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求;

当所述计算节点上一个计算任务结束时,如果检测出所述计算任务拥有所述共享锁,所述计算节点对所述共享锁进行减少计数,在所述计数为零时,则向所述锁系统发送释放锁请求,如果检测出所述计算任务拥有所述排他锁,则直接释放所述计算节点维护的锁信息,并向所述锁系统发送释放锁请求。

2.根据权利要求1所述的分布式计算环境下的锁定控制系统,其特征在于,当所述锁系统对应的锁节点收到的所述请求为加锁请求时,所述锁节点检测其维护的锁信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点拥有所述请求加的锁,则根据所述计算节点请求加的锁的类型进行加锁处理;

当所述锁系统对应的锁节点收到的所述请求为释放锁请求时,检测所述锁节点内的锁信息,如果请求释放的锁不被所述计算节点拥有,则返回解锁失败信息,如果请求释放的锁被所述计算节点拥有,则对所述请求释放的锁进行解锁处理,返回解锁成功信息。

3.根据权利要求2所述的分布式计算环境下的锁定控制系统,其特征在于,如果所述计算节点请求加的锁已被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点加入与所述请求加的锁对应的拥有者列表中,如果所述计算节点请求加的锁没有被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及所述计算节点根据返回的加锁成功信息在其维护的锁信息中加入新增的所述请求加的锁的信息;

如果所述计算节点请求释放的锁是共享锁,并且所述锁节点为所述计算节点解锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点从与所述释放的锁对应的共享拥有者列表中删除,如果所述计算节点请求释放的锁是排他锁,直接删除所述释放的锁对应的排他锁条目,以及所述计算节点根据返回的解锁成功信息在其维护的锁信息中删除所述请求释放的锁的信息。

4.根据权利要求1至3中任一项所述的分布式计算环境下的锁定控制系统,其特征在于,所述锁系统包括:选择装置,用于当所述计算节点向所述锁系统发送请求时,所述锁系统根据需锁定的或需释放的资源,按照特定的选择算法选择对所述请求进行服务的锁节点;

存储装置,用于保存每个所述锁节点维护的锁信息。

5.一种分布式计算环境下的锁定控制方法,多个计算节点通过网络构成所述分布式计算环境,其特征在于,包括:

步骤202,根据计算任务检测所述计算节点内的锁信息,并根据检测结果向锁系统内对应的锁节点发送请求,多个所述锁节点构成所述锁系统;

步骤204,所述锁系统内的锁节点根据所述请求对相应的锁进行处理并向所述计算节点反馈处理状态信息;

步骤206,根据处理结果更新所述锁节点维护的锁信息,以及根据反馈的处理状态信息更新所述计算节点维护的锁信息,

其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点同时拥有,所述排他锁只能被一个所述计算节点内的一个计算任务拥有;

其中,所述步骤202包括:当所述计算节点需对一个资源进行锁定时,如果是请求对所述资源加所述共享锁,且检测出所述计算节点已为所述共享锁的拥有者,则所述计算节点对所述共享锁添加计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果是请求对所述资源加所述排他锁,且检测出对所述资源加锁请求对应的计算任务为所述排他锁的拥有者,则所述计算节点对所述排他锁添加计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果没有检测出所述计算节点拥有所述共享锁或所述排他锁,则所述计算节点向所述锁系统发送加锁请求;

当所述计算节点需对一个锁解锁时,若所述锁为所述共享锁,且检测出所述锁的拥有者是所述计算节点,则所述计算节点对所述锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求,若所述锁为排他锁,且检测出请求解锁的计算任务是所述排他锁的拥有者时,则所述计算节点对所述排他锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求;

当所述计算节点上一个计算任务结束时,如果检测出所述计算任务拥有所述共享锁,所述计算节点对所述共享锁进行减少计数,在所述计数为零时,则向所述锁系统发送释放锁请求,如果检测出所述计算任务拥有所述排他锁,直接释放所述计算节点维护的锁信息,并则向所述锁系统发送释放锁请求。

6.根据权利要求5所述的分布式计算环境下的锁定控制方法,其特征在于,所述步骤

204包括:当所述锁系统对应的锁节点收到的所述请求为加锁请求时,检测所述锁节点内的锁信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点拥有所述请求加的锁,则根据所述计算节点请求加的锁的类型进行加锁处理;

当所述锁系统对应的锁节点收到的所述请求为释放锁请求时,检测所述锁节点内的锁信息,如果请求释放的锁不被所述计算节点拥有,则返回解锁失败信息,如果请求释放的锁被所述计算节点拥有,则对所述请求释放的锁进行解锁处理,返回解锁成功信息。

7.根据权利要求6所述的分布式计算环境下的锁定控制方法,其特征在于,所述步骤

206包括:如果所述计算节点请求加的锁已被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点加入与所述请求加的锁对应的拥有者列表中,如果所述计算节点请求加的锁没有被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及所述计算节点根据返回的加锁成功信息在其维护的锁信息中加入新增的所述请求加的锁的信息;

如果所述计算节点请求释放的锁是共享锁,并且所述锁节点为所述计算节点解锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点从与所述释放的锁对应的共享拥有者列表中删除,如果所述计算节点请求释放的锁是排他锁,直接删除所述释放的锁对应的排他锁条目。

8.根据权利要求5至7中任一项所述的分布式计算环境下的锁定控制方法,其特征在于,当所述计算节点向所述锁系统发送请求时,所述锁系统根据需锁定的或需释放的资源,按照特定的选择算法选择对所述请求进行服务的锁节点,每个所述锁节点将其维护的锁信息进行存储。

说明书 :

分布式计算环境下的锁定控制系统和方法

技术领域

[0001] 本发明涉及计算机技术领域,具体而言,涉及一种分布式计算环境下的锁定控制系统和方法。

背景技术

[0002] 多个计算节点通过网络(局域网/互联网)相互连通,形成分布式的计算环境,在具有资源协同的分布式环境中,都会涉及到对共同的资源的并发访问问题,例如并发的对一个文件的写或者对一个业务对象的修改,如果这些动作得不到锁控制,可能导致数据错误,例如文件被破坏、业务对象状态不对。
[0003] 在单一计算节点上通过传统的锁技术,例如java的synchronized、java.util.concurrent包中的锁机制或者操作系统提供的互斥技术,都能得到高效可靠的并发访问控制能力,传统的锁技术解决问题的边界在进程内部或者一个操作系统内部,因此在分布式环境上无能为力。现有的替代方案有以下三种。
[0004] 替代的方案之一是常采用数据库的锁技术,该技术是一种重量级的技术,而且不同的数据库的锁机制行为具有差异,不容易实现高效、具有良好可移植性的锁控制技术;
[0005] 替代方案之二是采用多节点投票的技术,一个计算节点尝试对某个资源加锁时,向所有节点进发送请求,表明它要对某个资源加锁,如果所有节点都同意,它加锁成功,如果存在不同意的节点,它加锁失败,这种方式各节点网络间交互频繁,每个节点都需要投入资源,若处理并发的加锁请求,对资源的开销比较大,不能适应高并发的加锁请求,实质上不利于系统的伸缩扩展,另外由于各个节点的状态可能发生变化,不同节点对资源锁定的状况认识可能不一致,例如节点崩溃容易导致垃圾锁遗留;
[0006] 替代方案之三是采用唯一的单点技术,所有的加锁请求都落在单点服务器上,资源锁定信息在内存维护,这种方式结构简单,维护方便,具有较高的性能,但是存在单点失效问题。
[0007] 因此,需要一种可以在分布式环境使用的锁控制技术,来解决控制对共享资源的并发访问所出现的问题。

发明内容

[0008] 鉴于现有锁技术的以上问题,本发明所要解决的技术问题在于,根据本发明的一个方面,提供一种分布式计算环境下的锁定控制系统,根据本发明的另一方面,提供一种分布式计算环境下的锁定控制方法,本发明的技术方案可以通过以下技术特征实现:
[0009] 一方面,本发明提供了一种在分布式计算环境下的锁定控制系统,可以包括:多个计算节点和锁系统,所述锁系统由多个锁节点组成,其中,所述计算节点,用于根据计算任务检测所述计算节点内的锁信息,并根据检测结果向所述锁系统内对应的锁节点发送请求,以及根据所述锁节点反馈的处理状态信息更新所述计算节点维护的锁信息;所述锁节点,用于根据所述请求对相应的锁进行处理并向所述计算节点反馈处理状态信息,以及根据处理结果更新所述锁节点维护的锁信息,其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点同时拥有,所述排他锁只能被一个所述计算节点内的一个计算任务拥有。
[0010] 在上述技术方案中,优选地,当所述计算节点需对一个资源进行锁定时,如果是请求对所述资源加所述共享锁,且检测出所述计算节点已为所述共享锁的拥有者,则所述计算节点对所述共享锁引用计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果是请求对所述资源加所述排他锁,且检测出对所述资源加锁请求对应的计算任务为所述排他锁的拥有者,则所述计算节点对所述排他锁引用计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果没有检测出所述计算节点拥有所述共享锁或所述排他锁,则所述计算节点向所述锁系统发送加锁请求;当所述计算节点需对一个锁解锁时,若所述锁为所述共享锁,且检测出所述锁的拥有者是所述计算节点,则所述计算节点对所述锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求,若所述锁为排他锁,且检测出请求解锁的计算任务是所述排他锁的拥有者时,则所述计算节点对所述排他锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求;当所述计算节点上一个计算任务结束时,如果检测出所述计算任务拥有所述共享锁,所述计算节点对所述共享锁进行减少计数,在所述计数为零时,则向所述锁系统发送释放锁请求,如果检测出所述计算任务拥有所述排他锁,直接释放所述计算节点维护的锁信息,并则向所述锁系统发送释放锁请求。
[0011] 在上述技术方案中,优选地,当所述锁系统对应的锁节点收到的所述请求为加锁请求时,所述锁节点检测其维护的锁信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点拥有所述请求加的锁,则根据所述计算节点请求加的锁的类型进行加锁处理;当所述锁系统对应的锁节点收到的所述请求为释放锁请求时,检测所述锁节点内的锁信息,如果请求释放的锁不被所述计算节点拥有,则返回解锁失败信息,如果请求释放的锁被所述计算节点拥有,则对所述请求释放的锁进行解锁处理,返回解锁成功信息。
[0012] 在上述技术方案中,优选地,如果所述计算节点请求加的锁已被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点加入与所述请求加的锁对应的拥有者列表中,如果所述计算节点请求加的锁没有被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及所述计算节点根据返回的加锁成功信息在其维护的锁信息中加入新增的所述请求加的锁的信息;如果所述计算节点请求释放的锁是共享锁,并且所述锁节点为所述计算节点解锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点从与所述释放的锁对应的共享拥有者列表中删除,如果所述计算节点请求释放的锁是排他锁,直接删除所述释放的锁对应的排他锁条目,以及所述计算节点根据返回的解锁成功信息在其维护的锁信息中删除所述请求释放的锁的信息。
[0013] 在上述技术方案中,优选地,所述锁系统还可以包括:选择装置,用于当所述计算节点向所述锁系统发送请求时,所述锁系统根据需锁定的或需释放的资源,按照特定的选择算法选择对所述请求进行服务的锁节点;存储装置,用于保存每个所述锁节点维护的锁信息。
[0014] 另一方面,本发明还提供了一种在分布式计算环境下的锁定控制方法,多个计算节点通过网络构成所述分布式计算环境,可以包括:步骤402,根据计算任务检测所述计算节点内的锁信息,并根据检测结果向锁系统内对应的锁节点发送请求,多个所述锁节点构成所述锁系统;步骤404,所述锁系统内的锁节点根据所述请求对相应的锁进行处理并向所述计算节点反馈处理状态信息;步骤406,根据处理结果更新所述锁节点维护的锁信息,以及根据反馈的处理状态信息更新所述计算节点维护的锁信息,其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点同时拥有,所述排他锁只能被一个所述计算节点内的一个计算任务拥有。
[0015] 在上述技术方案中,优选地,所述步骤402可以包括:当所述计算节点需对一个资源进行锁定时,如果是请求对所述资源加所述共享锁,且检测出所述计算节点已为所述共享锁的拥有者,则所述计算节点对所述共享锁引用计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果是请求对所述资源加所述排他锁,且检测出对所述资源加锁请求对应的计算任务为所述排他锁的拥有者,则所述计算节点对所述排他锁引用计数,为所述资源加锁成功,所述计算节点更新其维护的锁信息,如果没有检测出所述计算节点拥有所述共享锁或所述排他锁,则所述计算节点向所述锁系统发送加锁请求;当所述计算节点需对一个锁解锁时,若所述锁为所述共享锁,且检测出所述锁的拥有者是所述计算节点,则所述计算节点对所述锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求,若所述锁为排他锁,且检测出请求解锁的计算任务是所述排他锁的拥有者时,则所述计算节点对所述排他锁减少计数,并维护锁信息,当所述计数到达零时,则所述计算节点向所述锁系统发送释放锁请求;当所述计算节点上一个计算任务结束时,如果检测出所述计算任务拥有所述共享锁,所述计算节点对所述共享锁进行减少计数,在所述计数为零时,则向所述锁系统发送释放锁请求,如果检测出所述计算任务拥有所述排他锁,直接释放所述计算节点维护的锁信息,并则向所述锁系统发送释放锁请求。
[0016] 在上述技术方案中,优选地,所述步骤404可以包括:当所述锁系统对应的锁节点收到的所述请求为加锁请求时,检测所述锁节点内的锁信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点拥有所述计算节点请求加的锁,且所述请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点拥有所述请求加的锁,则根据所述计算节点请求加的锁的类型进行加锁处理;当所述锁系统对应的锁节点收到的所述请求为释放锁请求时,检测所述锁节点内的锁信息,如果请求释放的锁不被所述计算节点拥有,则返回解锁失败信息,如果请求释放的锁被所述计算节点拥有,则对所述请求释放的锁进行解锁处理,返回解锁成功信息。
[0017] 在上述技术方案中,优选地,所述步骤406可以包括:如果所述计算节点请求加的锁已被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点加入与所述请求加的锁对应的拥有者列表中,如果所述计算节点请求加的锁没有被其他计算节点拥有,并且所述锁节点为所述计算节点加锁成功,则所述锁节点在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及所述计算节点根据返回的加锁成功信息在其维护的锁信息中加入新增的所述请求加的锁的信息;如果所述计算节点请求释放的锁是共享锁,并且所述锁节点为所述计算节点解锁成功,则所述锁节点在其维护的锁信息中,将所述计算节点从与所述释放的锁对应的共享拥有者列表中删除,如果所述计算节点请求释放的锁是排他锁,直接删除所述释放的锁对应的排他锁条目。
[0018] 在上述技术方案中,优选地,当所述计算节点向所述锁系统发送请求时,所述锁系统根据需锁定的或需释放的资源,按照特定的选择算法选择对所述请求进行服务的锁节点,每个所述锁节点将其维护的锁信息进行存储。

附图说明

[0019] 图1示出了根据本发明的实施例的分布式计算环境下的锁定控制系统的框图;
[0020] 图2示出了根据本发明的又一实施例的分布式计算环境下的锁定控制系统的框图;
[0021] 图3示出了根据本发明的又一实施例的分布式计算环境下的锁定控制系统的示意图;
[0022] 图4示出了根据本发明的实施例的分布式计算环境下的锁定控制方法的流程图;
[0023] 图5示出了根据本发明的实施例的计算节点加锁的示意图;
[0024] 图6示出了根据本发明的实施例的计算节点释放锁的示意图;以及[0025] 图7示出了根据本发明的实施例的锁节点处理加锁服务的示意图。

具体实施方式

[0026] 为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
[0027] 在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
[0028] 图1示出了根据本发明的实施例的分布式计算环境下的锁控制系统的框图。图2示出了根据本发明的又一实施例的分布式计算环境下的锁控制系统的框图。该分布式计算环境下的锁控制系统100可以包括:多个计算节点102和锁系统104,锁系统104由多个锁节点1042组成,其中,计算节点102,用于根据计算任务检测计算节点102内的锁信息,并根据检测结果向锁系统104内对应的锁节点1042发送请求,以及根据锁节点1042反馈的处理状态信息更新计算节点维护的锁信息;锁节点1042,用于根据请求对相应的锁进行处理并向计算节点102反馈处理状态信息,以及根据处理结果更新锁节点1042维护的锁信息,其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点102同时拥有,所述排他锁只能被一个所述计算节点102内的一个计算任务拥有。
[0029] 在上述技术方案中,优选地,当计算节点102需对一个资源进行锁定时,如果是请求对资源加共享锁,且检测出计算节点102已为共享锁的拥有者,则计算节点102对共享锁引用计数,为资源加锁成功,计算节点102更新其维护的锁信息,如果是请求对资源加排他锁,且检测出对资源加锁请求对应的计算任务为排他锁的拥有者,则计算节点102对排他锁引用计数,为资源加锁成功,计算节点102更新其维护的锁信息,如果没有检测出计算节点102拥有共享锁或排他锁,则计算节点102向锁系统104发送加锁请求;当计算节点102需对一个锁解锁时,若锁为共享锁,且检测出锁的拥有者是计算节点102,则计算节点102对锁减少计数,并维护锁信息,当计数到达零时,则计算节点102向锁系统104发送释放锁请求,若锁为排他锁,且检测出请求解锁的计算任务是排他锁的拥有者时,则计算节点102对排他锁减少计数,并维护锁信息,当计数到达零时,则计算节点102向锁系统104发送释放锁请求;当计算节点102上一个计算任务结束时,如果检测出计算任务拥有共享锁,计算节点102对共享锁进行减少计数,在计数为零时,则向锁系统104发送释放锁请求,如果检测出计算任务拥有排他锁,直接释放计算节点102维护的锁信息,并则向锁系统104发送释放锁请求。
[0030] 在上述技术方案中,优选地,当锁系统104对应的锁节点1042收到的请求为加锁请求时,锁节点1042检测其维护的锁信息,如果已经有其他计算节点102拥有计算节点102请求加的锁,且请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点102拥有计算节点102请求加的锁,且请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点102拥有请求加的锁,则根据计算节点102请求加的锁的类型进行加锁处理;当锁系统104对应的锁节点1042收到的请求为释放锁请求时,检测锁节点1042内的锁信息,如果请求释放的锁不被计算节点102拥有,则返回解锁失败信息,如果请求释放的锁被计算节点102拥有,则对请求释放的锁进行解锁处理,返回解锁成功信息。
[0031] 在上述技术方案中,优选地,如果计算节点102请求加的锁已被其他计算节点102拥有,并且锁节点1042为计算节点102加锁成功,则锁节点1042在其维护的锁信息中,将计算节点102加入与请求加的锁对应的拥有者列表中,如果计算节点102请求加的锁没有被其他计算节点102拥有,并且锁节点1042为计算节点102加锁成功,则锁节点1042在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及计算节点102根据返回的加锁成功信息在其维护的锁信息中加入新增的请求加的锁的信息;如果计算节点102请求释放的锁是共享锁,并且锁节点1042为计算节点102解锁成功,则锁节点1042在其维护的锁信息中,将计算节点102从与释放的锁对应的共享拥有者列表中删除,如果计算节点102请求释放的锁是排他锁,直接删除释放的锁对应的排他锁条目,以及计算节点102根据返回的解锁成功信息在其维护的锁信息中删除请求释放的锁的信息。
[0032] 在上述技术方案中,优选地,如图2所示,锁系统104还可以包括:选择装置1044,用于当计算节点102向锁系统104发送请求时,锁系统104根据需锁定的或需释放的资源,按照特定的选择算法选择对请求进行服务的锁节点1042;存储装置1046,用于保存每个锁节点1042维护的锁信息。
[0033] 通过上述技术方案,使得系统的伸缩性强,针对每一个锁的加锁/释放,只请求单一的锁节点,没有锁节点直接的锁信息同步,系统效率得到提高。每个计算节点对其已经拥有的锁进行了本地维护,减少了对锁系统的请求,使系统具有更好的性能和稳定性,并且没有特定数据库的依赖,更加轻量级,具有更好的可移植性。
[0034] 图3示出了根据本发明的又一实施例的分布式计算环境下的锁定控制系统的示意图。
[0035] 构成分布式环境的各个计算节点304(例如图1和图2中的计算节点102),是运行在各个物理设备上的一组计算进程或者一组线程,一般来说多个进程或线程并发运行,协同工作。现代操作系统中,一般是多线程的。为了描述方便,把构成节点运算任务的进程或者线程,统一称为任务。
[0036] 对于锁系统302(例如图1和图2中的锁系统104),锁是一种控制资源访问的数据结构,一个锁的信息可以包括:锁定的目标资源、拥有锁的计算节点、锁的类型、加锁时间等信息。锁的类型包括共享锁、排他锁,共享锁是指能被多个节点同时拥有的锁,因此共享锁可能有多个计算节点同时拥有;排他锁是只能被一个节点拥有,在多任务系统,即使在一个节点内部也只能被一个任务所拥有。
[0037] 分布式计算环境下的锁定控制系统的节点中具有锁节点3024(例如图1和图2中的锁节点1042)和计算节点304,锁节点3024为分布式系统提供资源锁定服务,多个锁节点3024构成锁系统302,锁节点3024把它管理的锁持久化到持久化存储装置3022(例如图2中的存储装置1046)中,持久化存储装置3022能够被同一锁系统302中的其他锁节点访问,锁节点3024维护的锁的信息可以包括锁定的目标资源、拥有锁的计算节点、锁的类型、加锁时间等信息。计算节点304在其节点内部同时也维护了其拥有的锁信息,可以包括锁定的目标资源、拥有锁任务、锁的类型、锁的计数信息,对于共享锁,拥有该锁的任务可能有多个等。锁系统302和计算节点304之间通过严格定义的协议工作,使整个系统高效、可靠、并具有良好的伸缩性。
[0038] 下面结合附图对根据本发明实施例的在分布式计算环境下的锁定控制方法做详细的介绍。
[0039] 图4示出了根据本发明的实施例的分布式计算环境下的锁定控制方法的流程图。
[0040] 如图4所示,根据本发明的实施例的在分布式计算环境下的锁定控制方法,多个计算节点102通过网络构成分布式计算环境,可以包括:步骤402,根据计算任务检测计算节点102内的锁信息,并根据检测结果向锁系统104内对应的锁节点发送请求,多个锁节点构成锁系统104;步骤404,锁系统104内的锁节点根据请求对相应的锁进行处理,并向计算节点102反馈处理状态信息;步骤406,根据处理结果更新锁节点维护的锁信息,以及根据反馈的处理状态信息更新计算节点102维护的锁信息,其中,所述锁包括共享锁和排他锁,所述共享锁被多个所述计算节点102同时拥有,所述排他锁只能被一个所述计算节点102内的一个计算任务拥有。
[0041] 在上述技术方案中,优选地,步骤402可以包括:当计算节点102需对一个资源进行锁定时,如果是请求对资源加共享锁,且检测出计算节点102已为共享锁的拥有者,则计算节点102对共享锁引用计数,为资源加锁成功,计算节点102更新其维护的锁信息,如果是请求对资源加排他锁,且检测出对资源加锁请求对应的计算任务为排他锁的拥有者,则计算节点102对排他锁引用计数,为资源加锁成功,计算节点102更新其维护的锁信息,如果没有检测出计算节点102拥有共享锁或排他锁,则计算节点102向锁系统104发送加锁请求;当计算节点102需对一个锁解锁时,若锁为共享锁,且检测出锁的拥有者是计算节点102,则计算节点102对锁减少计数,并维护锁信息,当计数到达零时,则计算节点102向锁系统104发送释放锁请求,若锁为排他锁,且检测出请求解锁的计算任务是排他锁的拥有者时,则计算节点102对排他锁减少计数,并维护锁信息,当计数到达零时,则计算节点102向锁系统104发送释放锁请求;当计算节点102上一个计算任务结束时,如果检测出计算任务拥有共享锁,计算节点102对共享锁进行减少计数,在计数为零时,则向锁系统104发送释放锁请求,如果检测出计算任务拥有排他锁,直接释放计算节点102维护的锁信息,并则向锁系统104发送释放锁请求。
[0042] 在上述技术方案中,优选地,步骤404可以包括:当锁系统104对应的锁节点收到的请求为加锁请求时,检测锁节点内的锁信息,如果已经有其他计算节点102拥有计算节点102请求加的锁,且请求加的锁为共享锁,则进行加锁处理,返回加锁成功信息,如果已经有其他计算节点102拥有计算节点102请求加的锁,且请求加的锁为排他锁,则不进行加锁处理,返回加锁失败信息,如果没有其他计算节点102拥有请求加的锁,则根据计算节点102请求加的锁的类型进行加锁处理;当锁系统104对应的锁节点收到的请求为释放锁请求时,检测锁节点内的锁信息,如果请求释放的锁不被计算节点102拥有,则返回解锁失败信息,如果请求释放的锁被计算节点102拥有,则对请求释放的锁进行解锁处理,返回解锁成功信息。
[0043] 在上述技术方案中,优选地,步骤406可以包括:如果计算节点102请求加的锁已被其他计算节点102拥有,并且锁节点为计算节点102加锁成功,则锁节点在其维护的锁信息中,将计算节点102加入与请求加的锁对应的拥有者列表中,如果计算节点102请求加的锁没有被其他计算节点102拥有,并且锁节点为计算节点102加锁成功,则锁节点在其维护的锁信息中新增一个共享锁条目或一个排他锁条目,以及计算节点102根据返回的加锁成功信息在其维护的锁信息中加入新增的请求加的锁的信息;如果计算节点102请求释放的锁是共享锁,并且锁节点为计算节点102解锁成功,则锁节点在其维护的锁信息中,将计算节点102从与释放的锁对应的共享拥有者列表中删除,如果计算节点102请求释放的锁是排他锁,直接删除释放的锁对应的排他锁条目。
[0044] 在上述技术方案中,优选地,当计算节点102向锁系统104发送请求时,锁系统104根据需锁定的或需释放的资源,按照特定的选择算法选择对请求进行服务的锁节点,每个锁节点将其维护的锁信息进行存储。
[0045] 通过上述技术方案,使得系统的伸缩性强,针对每一个锁的加锁/释放,只请求单一的锁节点,没有锁节点直接的锁信息同步,系统效率得到提高。每个计算节点对其已经拥有的锁进行了本地维护,减少了对锁系统的请求,使系统具有更好的性能和稳定性,并且没有特定数据库的依赖,更加轻量级,具有更好的可移植性。
[0046] 下面具体说明计算节点加锁和释放锁的具体处理过程。在此,需说明的是,锁系统在进行服务计算节点的加锁和释放锁请求时,最终这些请求都会落实到各个锁节点上。本发明没有单点,所有的锁节点共同服务。也就是说,锁系统首先根据请求的加/释放锁的信息,例如锁定的目标资源,按照指定的哈希算法,选择对该锁进行服务的锁节点,然后把锁请求派往该锁节点。每个锁节点在维护锁时,每个锁在锁节点总存储为一个条目,锁节点在维护锁时,首先把锁条目写入持久化存储装置(例如图3所示的持久性存储装置3022)中,然后再更新内部的高速存储(例如内存,但不限),以确保其维护的锁,它崩溃时能够被恢复。
[0047] 图5示出了根据本发明的实施例的计算节点加锁的示意图。计算节点,启动一个计算任务,如果需要锁定某个资源,它会发起资源锁定请求,步骤502,计算节点首先在本节点检查该资源是否被节点内的其他计算任务锁定。检查的方法是检查本地拥有的锁信息,如果该锁属于该节点,接下来判断锁的类型,如果是共享锁,则进入步骤504,如果是排他锁,则进入步骤506,如果该计算节点不拥有该锁,则进入步骤508。
[0048] 步骤504,如果拥有共享锁,那么该计算节点会对其进行引用计数,维护锁拥有者信息,并表示加锁成功。
[0049] 步骤506,如果拥有排他锁,需要继续检查拥有该锁的任务信息,如果它是该锁的拥有者,那么会给该锁引用计数,并表示成功,否则表示失败。
[0050] 步骤508,请求锁系统要求对某个资源授予锁。如果锁系统成功的给该计算节点授予锁,该计算节点会在本地维护该锁信息,否则加锁失败,计算任务根据逻辑需要选择合适的后续动作。
[0051] 图6示出了根据本发明的实施例的计算节点释放锁的示意图,如图6所示,步骤602,计算节点在释放锁时,同样会首先检测本地拥有的锁信息,如果该计算节点要求释放的锁是其拥有的共享锁,则进入步骤604,如果要求释放的锁时是其拥有的排他锁,则进入步骤606。
[0052] 步骤604,计算节点会对该锁减少引用计数,维护该锁的锁信息。
[0053] 步骤606,特别的对于排他锁,在计算任务结束时,无论该锁的计数是否为零,都会释放该锁,这是符合排他锁逻辑的如果锁计数达零。
[0054] 步骤608,当锁的计数到达零时,该计算节点请求锁系统释放该锁,锁系统接到请求后,将针对该节点释放该锁,最后清除锁系统本地维护的该锁的信息。
[0055] 下面结合图7来说明本发明的锁节点处理加锁服务的详细过程。
[0056] 如图7所示,步骤702,锁节点在处理加锁请求时,首先在维护在内部的高速存储区的锁信息中查看该锁,如果已有其他计算节点拥有请求加的锁,并且该锁是共享锁,则进入步骤704,如果请求加的锁是排他锁,则进入步骤706,直接返回加锁失败给计算节点。如果没有节点拥有该锁,则进入步骤708。
[0057] 步骤704,直接为该锁的拥有者列表中增加该计算节点,并将加锁成功反馈给计算节点。
[0058] 步骤708,根据加锁请求的类型,如果是共享锁,则新增一个共享锁条目,如果是排他锁,新增一个排他锁条目。
[0059] 而相应地,锁节点处理释放锁的具体过程为:锁节点在处理释放锁请求时,首先在维护在内部的高速存储区的锁信息中查看该锁,如果该计算节点不拥有它,没有任何操作,返回失败消息给该计算节点。如果该计算节点拥有它,并且该锁是共享锁,则把该计算节点从共享锁的拥有者列表中删除,如果该共享锁再没有其他拥有者,在锁节点中删除该锁条目信息。如果该锁是排他锁,在锁节点中直接删除该锁条目信息。
[0060] 特别地,本发明的锁系统是一种高可靠系统,构成分布式环境的某个计算节点崩溃时,锁系统的锁节点能够检查到计算节点的失败,它会主动释放该节点拥有的所有锁,释放机制同上面描述的锁节点释放锁服务的处理过程。
[0061] 而构成一个锁系统中的某个锁节点崩溃时,锁系统的其他节点会从持久化存储装置中读取该锁节点维护的锁拷贝,根据新的活动锁节点构成,重新根据哈希算法进行选择,只有哈希分布在本锁节点的才会在本地维护,同时已在该锁节点内部维护的锁也要进行重新选择,某些锁可能会被迁移到其他锁节点上,重新平衡。当崩溃锁节点恢复时,其他锁节点会对在其内部维护的锁再次进行重新选择,某些锁可能被迁移到其他锁节点上,重新平衡。在锁迁移的过程所有的加锁/释放锁操作将被排队阻塞。
[0062] 并且分布式环境中各个节点的崩溃和恢复的检查,可以通过心跳检查的方式或者第三方的集群软件技术进行支持,可以采用一种内部实现的动态集群技术,能够动态的检查到成员的加入(恢复)和离开(崩溃)。
[0063] 因此,本发明在一个分布式环境中引入一种专注于进行资源锁定的锁系统,提供资源锁定服务,这种服务系统可以包括一个或者多个节点,称为锁节点,每个锁节点把它管理的资源锁定信息进行了持久化存储。而分布式环境中的计算节点,在进行资源锁定时,首先在本节点检查该资源是否被节点内的其他进程或者线程锁定,如果已经锁定,该操作自动放弃,否则,它会请求锁系统进行资源锁定。锁系统对该请求进行处理,并提供一种建议性的信息,表示其锁定成功或者失败。计算节点的加锁请求不会造成系统阻塞,在锁没有被获得的情况下,该资源能够及时得到释放。在锁系统中,如果其中某个负责资源锁定服务的锁节点崩溃,其他的锁节点会接管它,接管方式是重新装载该节点的锁信息,并在系统中进行恢复资源锁定状态信息。如果计算节点发生崩溃,并被锁系统检查到,该计算节点所拥有的锁将会被自动释放,不会有垃圾锁的遗留。
[0064] 以上结合附图详细说明了本发明的技术方案,本发明没有单点,系统的伸缩性得到增强,针对每一个锁的加锁/释放,只请求单一的锁节点,没有锁节点直接的锁信息同步,系统效率得到提高。而且每个计算节点对其已经拥有的锁进行了本地维护,减少了对锁系统的请求,使系统具有更好的性能和稳定性,并且没有特定数据库的依赖,更加轻量级,具有更好的可移植性。
[0065] 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。