一种磁盘锁的管理方法、装置和系统与流程

文档序号:11154657阅读:642来源:国知局
一种磁盘锁的管理方法、装置和系统与制造工艺

本发明实施例涉及计算机领域,尤其涉及一种资源访问的方法、装置和系统。



背景技术:

在分布式系统中,分布式锁是不可或缺。而分布式锁有很多种实现方法。

磁盘锁是分布式锁的一种实现形式,拥有磁盘锁的节点用于访问磁盘锁对应资源的权限,节点通过光纤存储区域网络(Fiber Channel Storage Area Network,FC SAN)或互联网协议存储区域网络(Internet Protocol Storage Area Network,IP SAN)以小型计算机系统接口(Small computer system interface,SCSI)命令的形式将加锁、解锁的消息写入磁盘,或者通过FC-SAN或IP-SAN以SCSI命令的形式从磁盘读出锁的状态,从而决定是否加锁或解锁。

磁盘锁存储于磁盘上的,每次要刷新锁的信息就是不断地读磁盘,然后将新的锁信息写到磁盘,对磁盘锁的频繁刷新会锁消耗大量的磁盘输入输出(Input Output,IO)。在一个中等规模的分布式系统中,如果所有节点都这样不断地从磁盘读锁信息,然后将锁信息写到磁盘,那么大量地IO将被磁盘锁占用,系统的性能将会受到很大的影响。



技术实现要素:

有鉴于此,本发明实施例公开了一种磁盘锁的管理方法、装置和系统。以根据实际的需求,来对磁盘锁进行操作,减少了对磁盘锁的频繁更新,提升了分布式系统的性能。

第一方面,本申请提供了一种磁盘锁的管理方法,资源和资源的磁盘锁保存在数据存储系统中,占有磁盘锁的节点拥有访问资源的权限,该方法包括:第一节点向数据存储系统发送获取请求,获取请求用于请求获取磁盘锁;第一节点接收释放请求,释放请求用于请求第一节点释放磁盘锁;第一节点向数据存储系统发送释放消息,释放消息用于释放磁盘锁。

结合第一方面,在第一方面第一种可能的实现方式中,第一节点接收释放请求包括:第一节点接收来自第二节点的释放请求,第二节点为待请求获取磁盘锁的节点。

如果第一节点和第二节点互联,则第二节点需要访问资源时,可以直接向第一节点发送释放请求,请求第一节点释放该资源的磁盘锁。

结合第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,第一节点向数据存储系统发送释放消息之后,该方法还包括:第一节点向第二节点发送确认消息,确认消息用于指示第一节点已经释放磁盘锁。

第一节点释放磁盘锁后,可以通过向第二节点发送确认消息,用于指示已经释放了磁盘锁,第二节点接收到确认消息后,可以去申请磁盘锁,从而获得访问资源的权限。

结合第一方面或第一方面以上任一种可能的实现方式,在第一方面第三种可能的实现方式中,第一节点接收释放请求包括:第一节点接收来自数据存储系统的释放请求。

当第二节点和第一节点没有互联时,可以通过数据存储系统向第一节点发送释放请求,从而使第一节点释放磁盘锁。

结合第一方面或第一方面以上任一种可能的实现方式,在第一方面第四种可能的实现方式中,第一节点向数据存储系统发送释放消息之前,该方法还包括:第一节点确定第一节点占用磁盘锁的时间超过预设的阈值。

为了避免频繁的锁申请和锁释放,可以为每个节点设置一个预设的时间阈值,当一个节点对磁盘锁的占用时间超过这个预设的阈值后,才会释放磁盘锁。

结合第一方面或第一方面以上任一种可能的实现方式,在第一方面第五种可能的实现方式中,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,获取请求中携带第一节点的标识,获取请求用于将第一节点的标识写入磁盘锁的占有字段。

第二方面,本申请提供一种磁盘锁的管理方法,资源和资源的磁盘锁保存在数据存储系统中,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,占有磁盘锁的节点拥有访问资源的权限,该方法包括:第二节点读取磁盘锁;第二节点根据读取的磁盘锁的占有字段,确定磁盘锁被第一节点占用;第二节点向第一节点发送释放请求,释放请求用于请求第一节点释放磁盘锁。

结合第二方面,在第二方面第一种可能的实现方式中,第二节点向第一节点发送释放请求之后,该方法还包括:第二节点接收第一节点发送的确认消息,确认消息用于指示第一节点已经释放磁盘锁。

第一节点释放磁盘锁后,可以通过主动通知的形式,使得第二节点获取这一消息,第二节点获取确认消息后,可以去申请磁盘锁,从而可以避免第二节点对磁盘锁状态频繁的确认操作。

结合第二方面或第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所第二节点向第一节点发送释放请求之后,该方法还包括:第二节点向数据存储系统发送获取请求,磁获取请求用于请求获取磁盘锁。

第三方面,一种可读介质,其特征在于,包括执行指令,当计算设备的处理器执行该执行指令时,该计算设备执行以上任一方面或以上任一方面的任一种可能的实现方式中的方法。

第四方面,本申请提供了一种计算设备,其特征在于,包括:处理器、存储器和总线;

存储器用于存储执行指令,处理器与存储器通过总线连接,当计算设备运行时,处理器执行存储器存储的执行指令,以使计算设备执行以上任一方面或以上任一方面的任一种可能的实现方式中的方法。

第五方面,本申请提供了一种磁盘锁的管理装置,资源和资源的磁盘锁保存在数据存储系统中,占有磁盘锁的节点拥有访问资源的权限,该装置包括:发送单元,用于向数据存储系统发送获取请求,获取请求用于请求获取磁盘锁;接收单元,用于接收释放请求,释放请求用于请求第一节点释放磁盘锁;发送单元还用于向数据存储系统发送释放消息,释放消息用于释放磁盘锁。

结合第五方面,在第五方面第一种可能的实现方式中,接收单元具体用于接收来自第二节点的释放请求,第二节点为待请求获取磁盘锁的节点。

结合第五方面第一种可能的实现方式,在第五方面第二种可能的实现方式中,发送单元向数据存储系统发送释放消息之后,还用于向第二节点发送确认消息,确认消息用于指示第一节点已经释放磁盘锁。

结合第五方面,在第五方面第三种可能的实现方式中,接收单元具体用于接收来自数据存储系统的释放请求。

结合第五方面或第五方面以上任一种可能的实现方式,在第五方面第四种可能的实现方式中,该装置还包括确定单元,发送单元向数据存储系统发送释放消息之前,确定单元用于确定第一节点占用磁盘锁的时间超过预设的阈值。

结合第五方面或第五方面以上任一种可能的实现方式,在第五方面第五种可能的实现方式中,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,获取请求中携带第一节点的标识,获取请求用于将第一节点的标识写入磁盘锁的占有字段。

第五方面为第一方面方法对应的装置实现方式,第一方面或第一方面任一种可能的实现方式中的描述对应适用于第五方面或第五方面任一种可能的实现方式,在此不再赘述。

第六方面,本申请提供一种磁盘锁的管理装置,资源和资源的磁盘锁保存在数据存储系统中,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,占有磁盘锁的节点拥有访问资源的权限,该装置包括:读取单元,用于读取磁盘锁;确定单元,用于根据读取的磁盘锁的占有字段,确定磁盘锁被第一节点占用;发送单元,用于向第一节点发送释放请求,释放请求用于请求第一节点释放磁盘锁。

结合第六方面,在第六方面第一种可能的实现方式中,该装置还包括接收单元,发送单元向第一节点发送释放请求之后,接收单元用于接收第一节点发送的确认消息,确认消息用于指示第一节点已经释放磁盘锁。

结合第六方面或第六方面第一种可能的实现方式,在第六方面第二种可能的实现方式中,发送单元向第一节点发送释放请求之后,还用于向数据存储系统发送获取请求,获取请求用于请求获取磁盘锁。

第六方面为第二方面方法对应的装置实现方式,第二方面或第二方面任一种可能的实现方式中的描述对应适用于第六方面或第六方面任一种可能的实现方式,在此不再赘述。

第七方面,本申请提供一种磁盘锁的管理系统,该系统包含第一节点和数据存储系统,其中,数据存储系统用于存储资源和资源的磁盘锁,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,占有磁盘锁的节点拥有访问资源的权限;第一节点用于向数据存储系统发送获取请求,获取请求用于请求获取磁盘锁,接收释放请求,释放请求用于请求第一节点释放磁盘锁,并向数据存储系统发送释放消息,释放消息用于释放磁盘锁。

结合第七方面,在第七方面第一种可能的实现方式中,该系统还包括第二节点,第二节点为待请求获取磁盘锁的节点,第一节点具体用于接收来自第二节点发送的释放请求。

结合第七方面第一种可能的实现方式,在第七方面第二种可能的实现方式中,第一节点向数据存储系统发送释放消息之后,还用于向第二节点发送确认消息,该确认消息用于指示第一节点已经释放所述磁盘锁。

结合第七方面,在第七方面第三种可能的实现方式中,第一节点具体用于接收来自数据存储系统的释放请求。

结合第七方面或第七方面以上任一种可能的实现方式,在第七方面第四种可能的实现方式中,第一节点向数据存储系统发送释放消息之前,还用于确定第一节点占用磁盘锁的时间超过预设的阈值。

结合第七方面或第七方面以上任一种可能的实现方式,在第七方面第五种可能的实现方式中,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,获取请求中携带第一节点的标识,获取请求用于将第一节点的标识写入磁盘锁的占有字段。

第七方面为第一方面和第二方面方法对应的系统实现方式,第一方面,第二方面,第一方面任一种可能的实现方式或第二方面任一种可能的实现方式中的描述对应适用于第七方面或第七方面任一种可能的实现方式,在此不再赘述。

根据本发明实施例公开的技术方案,根据节点对资源访问的热点现象,第一节点在完成本次访问操作后,并不会立即释放获取的磁盘锁,而是持续占有该磁盘锁,当有第二节点需要获取该磁盘锁时,占有该磁盘锁的第一节点会接收到释放请求,并根据释放请求释放该磁盘锁,以供第二节点使用,从而避免了对磁盘锁频繁的申请和释放的操作,减少了对因申请和释放磁盘锁对磁盘IO的占用,提升了系统的整体性能。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为分布式系统的逻辑结构示意图;

图2为依据本发明一实施例的磁盘锁数据结构;

图3为依据本发明一实施例的节点硬件结构示意图;

图4为依据本发明一实施例的磁盘锁管理方法的示范性流程图;

图5为依据本发明一实施例的磁盘锁管理方法的示范性信令图;

图6为依据本发明一实施例的磁盘锁管理方法的示范性信令图;

图7为依据本发明一实施例的磁盘锁管理装置的逻辑结构示意图;

图8为依据本发明一实施例的磁盘锁管理装置的逻辑结构示意图;

图9为依据本发明一实施例的磁盘锁管理装置的逻辑结构示意图;

图10为依据本发明一实施例的磁盘锁管理装置的逻辑结构示意图。

具体实施方式

下面将结合附图,对本发明实施例进行描述。

在分布式系统中,节点对资源进行访问时,一般会出现热点现象,即在特定的时间内,一个节点会对特定资源进行频繁的访问。而现有机制中,节点需要访问某一资源时,需要向存储该资源的存储设备申请该资源对应的磁盘锁(在以下描述中也可以被称为锁),并在结束对该资源的访问操作后,释放该资源对应的磁盘锁,当需要再次访问时,该节点需要重新向存储设备申请磁盘锁,如果在一定的时间内,该节点需要频繁的访问该资源,则就需要频繁的进行申请磁盘锁和释放磁盘锁锁的流程,而每一次对磁盘锁的申请和释放,都需要占用存储设备的IO资源,如果不实现对资源访问的合理管理,则节点对磁盘锁的刷新操作会占用存储设备大量的IO资源,极大的影响分布式系统的整体性能。

图1为一种共享文件系统的逻辑结构示意图。图1所述的共享文件系统包括多个服务器102,每个服务器102与存储区域网络(storage area network,SAN)114互联。在以下描述中,一个服务器102被称为一个节点。运行在服务器102上的操作系统104通过SAN 114与一个共享的文件系统112交互,以实现对保存在存储单元110中保存的数据的访问操作。具体的,存储单元110可以为与SAN 114互联的一个数据存储系统106的一个逻辑单元号(logic unit number,LUN)。存储单元110通过存储控制器108以一个连续的逻辑存储空间的形式呈献给操作系统104,但操作系统104通过文件系统112访问的数据可能实际存储在存储阵列114不连续的物理存储空间中。

存储在存储单元110中的数据以共享文件系统112所支持的形式被访问和存储。例如,存储在存储单元110中的数据可以被组织为文件的形式被不同的服务器102共享。

图2展示了磁盘锁的数据结构,如图2所示,存储单元110中将数据分为多个资源204,每一个资源204有对应的磁盘锁202,资源204可以被文件系统112组织成文件的形式。每个磁盘锁202包含占有字段,其中占有字段用于记录当前正在占有磁盘锁202的节点的标识,占有磁盘锁202的节点拥有访问该磁盘锁202对应的资源204的权限,如果要改变一个资源204的配置数据,节点需要首先获得该资源204对应的磁盘锁202。其中节点可以为任意实体,例如,可以为图1所述的与其他节点共享资源的服务器102。

可选的,每个磁盘锁202还包含等待字段,等待字段用于记录当前正在等待占有该磁盘锁的节点的标识。当系统有多个节点同时争抢同一个资源的锁,锁的持有者释放锁后立即抢锁成功,造成其他节点长期得不到锁,从而导致读写的最大时延特别长,影响了上层应用,所以增加一个等待字段,当前锁的持有者释放锁后,只有等待字段中记录的节点才有获取磁盘锁的权限。在具体实现过程中,等待字段可以是一个等待队列,可以记录多个等待节点,节点按照等待队列记录的顺序获取磁盘锁,即当锁的持有者释放磁盘锁后,处于等待队列首的节点拥有获取磁盘锁的权限。为了描述方便,在以下描述中,本发明实施例以等待字段只记录一个节点标识为例进行说明,但应了解,本发明实施例并不限定等待字段记录等待节点的个数。

其中,节点的标识用于指示拥有磁盘锁202的节点。例如,每一个节点可以被分配一个特殊的身份标识(identity identifier,ID),该ID用于写入磁盘锁202的占有字段,以此指示该ID对应的节点占有磁盘锁202。该ID可以人为设置,也可以使用服务器的互联网协议(internet protocol,IP)地址或媒体接入控制(Media Access Control,MAC)地址,或服务器的通用唯一标识符(Universally Unique Identifier,UUID)等。本发明实施例并不对节点的标识的形式进行限定。

则磁盘锁202的占有字段可以使用数值0或者其他特殊的标识表示当前没有节点占用该磁盘锁202,等待字段也可以使用0或其他特殊的标识表示当前没有节点等待占用该磁盘锁202。在以下描述中,为了描述方便,占有字段使用数值0标识当前磁盘锁202没有被任何节点占用,等待字段使用数值0标识当前没有节点等待占用该磁盘锁202,但应理解,本发明实施例并不对表示磁盘锁202当前没有被占用的表现形式进行限定。

可选的,磁盘锁202还可以包含锁类型字段,锁类型字段用于记录磁盘锁202的类型,锁类型用于指示节点占有磁盘锁202期间,其他节点对该磁盘锁202对应的资源204的访问权限,例如可以使用锁类型指示是否允许其他节点对该资源204进行读操作。

节点与数据存储系统可以通过小型计算机系统接口(Small Computer System Interface,SCSI)协议进行通信。在SCSI协议栈中,有一个SCSI compare and write协议。该协议的主要功能是先进行数据比较,比较一致后,然后再写数据。数据存储系统通过SCSI协议收到两个数据,旧数据和新数据。旧数据数据是节点之前从数据存储系统中读出的数据,新数据是节点发送过来需要写到数据存储系统的数据。数据存储系统收到这两个数据后,首先将旧数据和自己保存的数据进行对比,如果相同,则允许将新数据写入数据存储系统,如果旧数据与自己当前保存的数据不同,则不允许。

节点在请求或释放磁盘锁的时候,都需要在指令中携带磁盘锁的旧值和将要写入磁盘锁的新值,只有当携带的旧值与磁盘锁记录的旧值相同时,才允许将新值写入磁盘锁。

图3是依据本发明一实施例的节点300的硬件结构示意图。如图3所示,节点300包括处理器302、存储器304、输入/输出接口306、通信接口308和总线310。其中,处理器302、存储器304、输入/输出接口306和通信接口308通过总线310实现彼此之间的通信连接。

处理器302是节点300的控制中心,用于执行相关程序,以实现本发明实施例所提供的技术方案。处理器302可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。除非另有说明,在本发明中,一个用于执行特定功能的组件,例如,处理器302或存储器304,可以通过配置一个通用的组件来执行相应功能来实现,也可以通过一个专门执行特定功能的专用组件来实现,本申请并不对此进行限定。

存储器304可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器304可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器304中,并由处理器302来执行。存储器304可以与处理器302集成在一起或集成在处理器302的内部,也可以是独立于处理器302的一个或多个存储单元。

供处理器302执行的程序代码可以存储在与其连接的存储器304中。可选的,存储器304为RAM,存储在硬盘内部的程序代码(例如,通信模块或磁盘锁管理模块等)被拷贝到存储器304中,以供处理器302执行。

如图3所示,节点300的存储器304中包含磁盘锁管理模块,处理器302执行该磁盘锁管理模块程序代码,实现对磁盘锁的管理。

输入/输出接口306用于接收输入的数据和信息,输出操作结果等数据。

通信接口308使用例如但不限于收发器一类的收发装置,来实现节点300与其他设备或通信网络之间的通信。

总线310可包括一通路,在节点300各个部件(例如处理器302、存储器304、输入/输出接口306和通信接口308)之间传送信息。

应注意,尽管图3所示的计节点300仅仅示出了处理器302、存储器304、输入/输出接口306、通信接口308以及总线310,但是在具体实现过程中,本领域的技术人员应当明白,节点300还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,节点300还可包含实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,节点300也可仅仅包含实现本发明实施例所必须的器件,而不必包含图3中所示的全部器件。

图3所示的硬件结构以及上述描述适用于本发明实施例所提供的各种磁盘锁管理装置和系统,适用于执行本发明实施例所提供的各种磁盘锁管理方法。

图4为依据本发明一实施例的磁盘锁管理方法的示意性流程图,资源和资源的磁盘锁保存在数据存储系统中,磁盘锁的占有字段用于记录占有磁盘锁的节点,占有所述磁盘锁的节点拥有访问所述资源的权限,如图4所示,该方法包括:

S402:第一节点向数据存储系统发送获取请求,该获取请求用于请求获取资源的磁盘锁。

第一节点向数据存储系统发送获取请求之前,该方法还包括:第一节点读取该资源的磁盘锁,并根据读取的磁盘锁确定该资源的磁盘锁没有被其他节点占用。具体的,第一节点根据磁盘锁的占有字段判断磁盘锁当前是否被其他节点占用,如果磁盘锁的占有字段为0,则表明磁盘锁当前没有被其他节点占用。

具体的,获取请求中携带第一节点的标识,该获取请求用于将第一节点的标识写入磁盘锁的占有字段,用于表明磁盘锁被第一节点占用。

更具体的,获取请求还携带第一节点读取的磁盘锁的占有字段的旧值(即数值0),数据存储系统在接收到获取请求后,会比较获取请求中携带的旧值与磁盘锁的占有字段当前保存的数值,如果二者相同,则表明第一节点在读取磁盘锁以及发送获取请求之间的时间内没有其他节点改变磁盘锁占有字段的值,则数据存储系统将第一节点的标识写入磁盘锁的占有字段,如果二者不同,则说明在第一节点发送获取请求之前有其他节点改变了磁盘锁占有字段的值,则数据存储系统不允许第一节点将第一节点的标识写入磁盘锁的占有字段。

S404:第一节点接收释放请求,该释放请求用于请求该第一节点释放该磁盘锁。

在分布式文件系统中,节点对数据访问存在热点现象,即在特定的时间段内,第一节点可能会频繁的访问该资源。如果在一次访问结束后,第一节点立即释放磁盘锁,则第一节点在该特定的时间段内,需要频繁的申请磁盘锁和释放磁盘锁,这些请求磁盘锁和释放磁盘锁的操作会占用大量的磁盘IO,从而影响正常的数据访问。所以在本发明实施例中,第一节点申请到磁盘锁后,在完成一次访问操作后,并不会立即释放磁盘锁,而是继续占用该磁盘锁,从而避免后续重复的磁盘锁申请和释放操作。

在本发明实施例的一种可能的实现方式中,第一节点与第二节点互联,第一节点接收来自第二节点的释放请求,该第二节点为待请求获取磁盘锁的节点。

因为第一节点持续占用该资源的磁盘锁,当第二节点也需要访问该资源时,第二节点需要确定该磁盘锁是否被其他节点占用。具体的,第二节点读取该资源的磁盘锁,并根据读取的磁盘锁确定当前是否有其他节点占用该磁盘锁,因为第一节点在访问操作结束后,并没有释放磁盘锁,则第二节点根据读取的该磁盘锁,确定该磁盘锁被第一节点占用。更具体的,第二节点根据磁盘锁的占有字段记录的信息确定第二节点当前正在占用该磁盘锁。

当第二节点确定第一节点当前正在占用该磁盘锁后,第二节点向第一节点发送释放请求,该释放请求用于请求第一节点释放所述磁盘锁。

在本发明实施例的另一种可能的实现方式中,第一节点接收到来自数据存储系统的释放请求。例如,在第一节点和第二节点之间没有网络互连时,第二节点无法直接向第一节点发送释放请求,则由数据存储系统向第一节点发送释放请求。

具体的,第二节点需要访问该资源时,首先读取该资源的磁盘锁,并根据读取的磁盘锁确定当前是否有其他节点占用该磁盘锁,因为第一节点在访问操作结束后,并没有释放磁盘锁,则第二节点根据读取的该磁盘锁,确定该磁盘锁被第一节点占用,则第二节点会触发数据存储系统向第一节点发送释放请求,该释放请求用于请求第一节点释放该磁盘锁。

S406:第一节点根据接收到的释放请求,释放该磁盘锁。

具体的,第一节点在接收到释放请求后,会首先确定第一节点是否存在正在进行的对该资源的访问操作,如果有正在进行的对该资源的访问操作,则第一节点在该正在进行的访问操作结束前继续占有该磁盘锁。

若当前第一节点没有正在进行的对该资源的访问操作,则第一节点在接收到释放请求后释放该磁盘锁;若存在正在进行的对该资源的访问操作,则第一节点在该正在进行的访问请求结束后,释放该磁盘锁。

第一节点接收到释放请求后,可以在当前没有正在进行的对该资源的访问操作时或在当前正在进行的对该资源的访问操作结束后,直接释放该磁盘锁。

可选的,第一节点确定其占用所述磁盘锁的时间超过预设的阈值之后,才会释放磁盘锁。为了防止磁盘锁在节点之间频繁切换,从而导致频繁的锁操作,性能急剧下降,可以设置节点对锁的最短持有时间。只有锁的实际持有时间超过最短持有时间,持有锁的节点才会释放锁。更具体的,锁的最短持有时间可以动态设置。如果锁的最短持有时间设置为0,则第一节点接收到释放请求后,如果锁不需要继续使用,则立即释放。如果锁的最短持设置不为零,则第一节点需要持有锁超过最短时间后才能释放。

具体实现过程中,第一节点通过向数据存储系统发送释放消息来释放磁盘锁,该释放消息用于将磁盘锁的占有字段记录的第一节点的标识删除。更具体的,释放消息中携带第一节点的标识和0标识,数据存储系统接收到释放消息后,比较释放消息中携带的节点标识和磁盘锁的占有字段记录的节点标识,如果二者相同,则数据存储系统释放第一节点对磁盘锁的占用,将磁盘锁的占有字段写0。

可选的,第二节点向第一节点发送释放请求后,第二节点会重新去读取磁盘锁,如果发现磁盘锁的占有字段的值为0,则说明第一节点已经释放了对磁盘锁的占用,则第二节点向数据存储系统发送获取请求,该获取请求中携带第二节点的标识。更具体的,第二节点发送的获取请求中还携带第二节点之前从磁盘锁占有字段读出的旧值0,数据存储系统会比较第二节点发送的获取请求中携带的旧值与当前磁盘锁占有字段记录的值,如果二者相同,说明没有没有其他节点提前占用了磁盘锁,则允许将第二节点的标识写入磁盘锁的占有字段。

可选的,第一节点向数据存储系统发送释放消息后,还可以向第二节点发送确认消息,该确认消息用于指示第一节点已经释放该磁盘锁,第二节点接收到确认消息后,可以去读取磁盘锁,并确认当前没有其他节点占有该磁盘锁。

为了避免频繁的锁竞争导致有的节点一直获取不到磁盘锁的现象,该磁盘锁还可以包含等待字段,等待字段用于记录等待占有该磁盘锁的节点,当正在占有磁盘锁的节点释放磁盘锁后,只有磁盘锁等待字段记录的节点才有获取磁盘锁的权限。数据存储系统接收到新的获取请求后,会比较获取请求携带的节点标识与等待字段记录的节点标识,如果二者相同,则表明发送该获取请求的节点拥有获取磁盘锁的权限,并将获取请求中携带的节点标识写入占有字段,并将等待字段的值置为0。当第二节点根据磁盘锁的占有字段确认第一节点正在占用磁盘锁时,第二节点可以请求数据存储系统将第二节点的标识写入该磁盘锁的等待字段,当第一节点释放磁盘锁后,第二节点有拥有获取磁盘锁的权限,第二节点向磁盘锁发送获取请求后,数据存储系统确定获取请求中和等待字段中的节点标识均为第二节点的标识后,将第二节点的标识写入占有字段,并将等待字段置0。

在本发明实施例另一种实现方式中,第一节点获取到磁盘锁后,会按照预设的时间周期释放磁盘锁,从而避免了对磁盘锁的频繁的请求和释放。

根据本发明实施例公开的技术方案,根据节点对资源访问的热点现象,第一节点在完成本次访问操作后,并不会立即释放获取的磁盘锁,而是持续占有该磁盘锁,当有第二节点需要获取该磁盘锁时,占有该磁盘锁的第一节点会接收到释放请求,并根据释放请求释放该磁盘锁,以供第二节点使用,从而避免了对磁盘锁频繁的申请和释放的操作,减少了对因申请和释放磁盘锁对磁盘IO的占用,提升了系统的整体性能。

图5为依据本发明一实施例的一种具体的磁盘锁管理方法的信令图,如图5所示,该流程包含:

S502:第一节点从数据存储系统读取待访问资源的磁盘锁。

当第一节点需要访问资源时,需要获取资源的磁盘锁,如果当前没有其他节点占有该磁盘锁,则磁盘锁的占有字段的值为0。第一节点根据读取到的磁盘锁占有字段的值,确定当前没有其他节点占有该磁盘锁。

S504:第一节点向数据存储系统发送获取请求。

其中,第一节点发送的获取请求中携带步骤S504中读取的占有字段的旧值0以及第一节点的节点标识ID1。

数据存储系统接收到第一节点发送的获取请求后,首先比较获取请求中携带的旧值和当前占有字段中的值,如果二者相等,则表示在步骤S502和步骤S504之间没有其他的节点获取到该磁盘锁,数据存储系统将第一节点的标识ID1写入磁盘锁的占有字段,表示由第一节点占有该磁盘锁。

S506:第二节点从数据存储系统读取磁盘锁。

因为节点对资源的访问存在热点现象,第一节点获取到磁盘锁后,不会主动释放,当第二节点需要访问资源时,需要获取资源的磁盘锁,因为当前第一节点占有磁盘锁,磁盘锁的占有字段记录有第一节点的标识,第二节点读取磁盘锁后,根据读取的磁盘锁的占有字段记录的第一节点的标识信息,确定当前第一节点占有该磁盘锁。

S508:第二节点向第一节点发送释放请求,该释放请求用于请求第一节点释放磁盘锁。

第二节点根据读取的磁盘锁的占有字段,确定当前第一节点占有磁盘锁,因为第一节点没有主动释放磁盘锁,第二节点为了获取磁盘锁,需要向第一节点发送释放消息。

S510:第一节点向数据存储系统发送释放消息,该释放消息用于释放第一节点对磁盘锁的占用。

第一节点接收到第二节点发送的释放请求后,判断当前是否存在对磁盘锁对应的资源的正在进行的访问操作,如果有对该资源正在进行的访问操作,则第一节点持续占用该磁盘锁,直至完成当前对该资源正在进行的访问操作后再释放磁盘锁。如果当前没有对该资源正在进行的访问操作,在第一节点释放该磁盘锁。可选的,为了避免频繁的锁切换,第一节点在释放磁盘锁之前还确认第一节点对磁盘锁的占用时间超过预设的阈值。

具体的,释放消息中携带第一节点的标识和0标识,数据存储系统接收到释放请求后,比较释放消息中携带的第一标识与当前磁盘锁占有字段中记录的标识,如果二者相同,则将0标识写入磁盘锁的占有字段,标识没有节点占有该磁盘锁。

S512:第二节点从数据存储系统读取磁盘锁。

第二节点可以按照固定的周期读取磁盘锁,并判断第一节点是否已经将磁盘锁释放,如果第二节点读取的磁盘锁的占有字段的标识为0,则表明第一节点已经成功将磁盘锁释放。

S514:第二节点向数据存储系统发送获取请求,该获取请求用于获取磁盘锁。

第二节点在确认第一节点释放磁盘锁后,向数据存储系统发送获取请求。具体的,第二节点发送的获取请求中携带第二节点的标识和第二节点从磁盘锁的占有字段中读取的旧值0。数据存储系统接收到第二节点发送的获取请求后,比较第二节点发送的获取请求中鞋底的旧值0与磁盘锁占有字段记录的值,如果二者相同,标识第一节点释放磁盘锁后,当前没有其他节点占有了该磁盘锁,则数据存储系统将第二节点的标识写入磁盘锁的占有字段,表示第二节点站由磁盘锁。

可选的,磁盘锁还包含等待字段,该等待字段记录正在等待获取磁盘锁的节点,例如,第二节点读取磁盘锁后,发现第一节点正在占用磁盘锁,如果磁盘锁等待字段记录的标识为0,第二节点可以请求数据存储系统将第二节点的标识写入等待字段。后续数据存储系统接收到第二节点的获取请求后,还会比较第二节点的标识与磁盘锁等待字段记录的标识,如果二者相同,则允许将第二节点的标识写入占有字段,并将等待字段置0。

图6为依据本发明一实施例的一种具体的磁盘锁管理方法的信令图,如图6所示,该流程包含:

步骤S602-S606参照步骤S502-S506描述,在此不再赘述。

S608:第一节点按照预设的占有周期向数据存储系统发送释放消息。

为了避免频繁的请求锁和释放锁的操作,第一节点在完成访问操作后,并不会立即释放获取的磁盘锁,而是按照预设的占有周期释放磁盘锁。第一节点维护有占有磁盘锁的时间,当时间到达预设的时间周期后,释放磁盘锁。

释放消息的具体描述参照图5实施例,在此不再赘述。

S610:第二节点读取磁盘锁。

第二节点可以按照预设的周期去读取磁盘锁,第一节地释放磁盘锁后,第二节点读取的磁盘锁显示磁盘锁的占有字段为0,表明当前没有节点占用该磁盘锁。

S612:第二节点向数据存储系统发送获取请求。

步骤S610和S612的具体描述参照步骤S512和步骤S514,在此不再赘述。

图7为依据本发明一实施例的的磁盘锁管理装置700的逻辑结构示意图,如图7所示,装置700包括:

发送单元702,用于向数据存储系统发送获取请求,该获取请求用于请求获取磁盘锁。

接收单元704,用于接收释放请求,该释放请求用于请求第一节点释放磁盘锁。

发送单元702还用于向数据存储系统发送释放消息,该释放消息用于释放磁盘锁。

可选的,接收单元704具体用于接收来自第二节点的释放请求,第二节点为待请求获取磁盘锁的节点。发送单元702向数据存储系统发送释放消息之后,还可以用于向第二节点发送确认消息,确认消息用于指示第一节点已经释放磁盘锁。

可选的,接收单元704具体用于接收来自数据存储系统的释放请求。

可选的,如图8所示,装置700还包括确定单元706,发送单元702向数据存储系统发送释放消息之前,确定单元706用于确定第一节点占用磁盘锁的时间超过预设的阈值。

具体的,磁盘锁包含占有字段,占有字段用于记录占有磁盘锁的节点,发送单元702发送的获取请求中携带第一节点的标识,获取请求用于将第一节点的标识写入磁盘锁的占有字段。

应理解,为了描述方便,本发明实施例的发送单元702、接收单元704和确定单元706的功能可以集合在图3所示的通信模块和/或磁盘锁管理模块内,由处理器302执行通信模块和/或磁盘锁管理模块的不同部分,实现不同的功能,但在具体实现中,可以将通信模块和/或磁盘锁管理模块进行进一步的细化,本发明实施例对此不进行限定。

本发明实施例是第一节点的装置实施例,图4-图6实施例部分的特征描述,适用于本发明实施例,在此不再赘述。

图9为依据本发明一实施例的的磁盘锁管理装置900的逻辑结构示意图,资源和该资源的磁盘锁保存在数据存储系统中,该磁盘锁包含占有字段,占有字段用于记录占有该磁盘锁的节点,占有所述磁盘锁的节点拥有访问该资源的权限,如图9所示,装置900包括:

读取单元902,用于读取磁盘锁;

确定单元904,用于根据读取的磁盘锁的占有字段,确定磁盘锁被第一节点占用;

发送单元906,用于向第一节点发送释放请求,释放请求用于请求第一节点释放磁盘锁。

可选的,如图10所示,装置900还包括接收单元908,发送单元906向第一节点发送释放请求之后,接收单元908还用于接收第一节点发送的确认消息,确认消息用于指示第一节点已经释放磁盘锁。

发送单元906向第一节点发送释放请求之后,还用于向数据存储系统发送获取请求,该获取请求用于请求获取磁盘锁。

应理解,为了描述方便,本发明实施例的读取单元902、确定单元904、发送单元906和接收单元908的功能可以集合在图3所示的通信模块和/或磁盘锁管理模块内,由处理器302执行通信模块和/或磁盘锁管理模块的不同部分,实现不同的功能,但在具体实现中,可以将通信模块和/或磁盘锁管理模块进行进一步的细化,本发明实施例对此不进行限定。

本发明实施例是第二节点的装置实施例,图4-图6实施例部分的特征描述,适用于本发明实施例,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。

上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1