管理锁的方法及装置、确定锁管理服务器的方法及装置的制造方法_2

文档序号:9451561阅读:来源:国知局
能的实现方式中,所述处理器还用于:
[0070]若所述锁管理服务器没有所述锁,则根据所述资源标识生成锁,并设置生成的锁的状态为占用。
[0071]结合第八方面或者第八方面的第一种可能的实现方式,在第八方面的第二种可能的实现方式中,所述处理器还用于:
[0072]若所述锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客户端发生故障,则将所述锁的状态设置为空闲。
[0073]结合第八方面至第八方面的第二种可能的实现方式中的任一种可能的实现方式,在第八方面的第三种可能的实现方式中,所述预定函数关系用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。
[0074]本发明实施例第九方面提供了一种客户端,包括:处理器,发送器和通信总线;其中,所述处理器和所述发送器通过所述通信总线完成相互间的通信;
[0075]所述处理器用于:根据第一资源标识,按照预定函数关系从锁管理服务器集群包含的多个锁管理服务器中确定出第一锁管理服务器;
[0076]所述发送器用于:若所述第一锁管理服务器工作正常,则所述客户端向所述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。
[0077]结合第九方面,在第九方面的第一种可能的实现方式中,所述处理器还用于:
[0078]根据第二资源标识,按照所述预定函数关系从所述多个锁管理服务器中确定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述预定函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器。
[0079]本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
[0080]本发明实施例中,客户端根据锁申请请求包含的资源标识,按照预定函数关系,从锁管理服务器集群包含的多个锁管理服务器中确定出第一锁管理服务器,然后向第一锁管理服务器发送锁申请请求,如果第一锁管理服务器中所述资源标识对应的锁为空闲,则将该锁分配给客户端;如果第一锁管理服务器中没有所述资源标识对应的锁,则会根据所述资源标识生成锁,并分配给客户端。
[0081]因此,本发明实施例中,客户端根据锁申请请求或锁释放请求包含的资源标识,按照预定函数关系即可确定第一锁管理服务器,然后向第一锁管理服务器进行锁申请和锁释放,满足了处理低时延,和服务高并发。锁无需一直存储在第一锁管理服务器中,第一锁管理服务器可以根据资源标识生成锁,可靠性高。
【附图说明】
[0082]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。
[0083]图1为本发明实施例适用的分布式系统;
[0084]图2为本发明实施例中客户端确定锁申请请求或锁释放请求的接收者的流程图;
[0085]图3为本发明实施例中客户端每次确定出锁管理服务器后执行的步骤的流程图;
[0086]图4为本发明实施例中锁管理服务器针对锁申请请求的处理过程的流程图;
[0087]图5为本发明实施例中部署有CMS的分布式系统的示意图;
[0088]图6为本发明实施例中锁管理服务器针对锁申请请求的处理过程的流程图;
[0089]图7为本发明实施例中客户端进行锁操作的流程图;
[0090]图8为本发明实施例中锁管理服务器对锁申请请求进行处理的示意图;
[0091]图9为本发明实施例中锁管理服务器对锁释放请求进行处理的示意图;
[0092]图10为本发明实施例中管理锁的装置的第一种功能模块示意图;
[0093]图11为本发明实施例中锁管理服务器的第一种硬件结构示意图;
[0094]图12为本发明实施例中管理锁的装置的第二种功能模块示意图;
[0095]图13为本发明实施例中锁管理服务器的第二种硬件结构示意图;
[0096]图14为本发明实施例中确定锁管理服务器的装置的功能模块示意图;
[0097]图15为本发明实施例中客户端的硬件结构示意图。
【具体实施方式】
[0098]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。
[0099]本申请中的术语“系统”和“网络”可被互换使用。“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
[0100]在【背景技术】中已经提及目前管理分布式系统的资源对应的锁的方式。分布式系统的资源对应的锁都是持久化的,即:分布式系统的资源对应的锁必须存储在持久化的存储设备中,例如一个或多个锁管理服务器的硬盘中。本发明实施例提出的管理锁的方法中,锁无需持久化,对存储锁的设备没有要求,锁管理服务器仅需在内存中管理锁,可以根据情况生成锁。也因为锁管理服务器可以根据情况生成锁,所以可靠性高。
[0101]本发明实施例提出的管理锁的方法中,与无副本方式类似,锁没有副本,锁操作响应时间短,锁操作无需同步,避免主机故障时需要进行锁迀移和锁恢复带来的额外开销。也因为锁没有副本,所以分布式系统的锁容量为各个锁管理服务器能够支持的锁数量之和,增加锁管理服务器可以直接增加分布式系统的锁容量。
[0102]本发明实施例提出的管理锁的方法中,客户端确定出的锁管理服务器如果发生故障,则可以重新确定锁管理服务器,直到确定出一个正常工作的锁管理服务器,然后向确定出的正常工作的锁管理服务器发送锁申请请求或锁释放请求,故障处理复杂度低,故障恢复时间短。
[0103]下面对本发明实施例提供的管理锁的方法进行详细说明。
[0104]请参考图1,图1为本发明实施例适用的分布式系统。分布式系统包括:锁管理服务器集群、多个客户端、多个资源。其中,锁管理服务器集群包括多个锁管理服务器,每个锁管理服务器有一个标识,记为Server ID。多个资源可以是物理资源(例如:硬盘),也可以是逻辑资源(例如:硬盘上的一段存储空间),每个资源有一个资源标识,记为ResourceID0客户端与通过网络与锁管理服务器集群进行通信。
[0105]每个资源对应一把锁,在把一个资源加入到分布式系统中时,分布式系统需要为其生成一把锁,该锁表征客户端对资源进行访问的权限,客户端申请到锁,即可对锁对应的资源进行访问,锁有使用周期,称为租约,例如60秒。客户端需要在租约到期之前完成资源访问并且释放锁。如果客户端在租约到期之后未释放锁,则锁将被锁管理服务器强制回收。如果客户端需继续使用资源,则需要重新申请锁。
[0106]本发明实施例中,如果客户端请求对某个资源对应的锁进行申请或释放,则客户端可以根据该资源的资源标识,按照预定函数关系,确定出第一锁管理服务器,然后向第一锁管理服务器发送锁申请请求或锁释放请求,进而实现锁申请或锁释放。下面对本发明实施例提供的锁管理方法进行详细说明。
[0107]首先说明客户端如何确定向哪个锁管理服务器发送锁申请请求或锁释放请求。如图2所示,客户端确定锁申请请求或锁释放请求的接收者包括以下步骤:
[0108]步骤21:客户端根据第一资源标识,按照预定函数关系从锁管理服务器集群包含的多个锁管理服务器中确定出第一锁管理服务器。
[0109]其中,预定函数关系用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。具体可以是哈希函数关系,还可以是其他函数关系,只要能够将一个值映射到另一个值即可。以预定函数关系是哈希函数关系为例,哈希函数能够将任意长度的二进制值(称为输入)映射为较短的固定长度的二进制值,这个短的二进制值称为哈希值(或称为输出)。哈希值是一段数据唯一且极其紧凑的数值表示形式。即使输入有很小的变化,都将产生不同的哈希值。
[0110]在实际应用中,为锁管理服务器集群设置哈希函数,记为HaSh_clUSter,也就是说,锁管理服务器集群中的所有锁管理服务器的标识与资源标识之间均满足Hash_cluster。利用Hash_cluster,以Resource ID为入参得到Server ID。具体地,假设锁管理服务器集群包括N个锁管理服务器,N个锁管理服务器中Server ID的最小值为M,则服务器ID有效范围是[Μ, M+N),哈希桶的范围为[Μ, M+N),利用Hash_cluster以Resource ID为入参得到中间结果,再获得中间结果对N的余数[0,N),余数加上M即为Server ID。
[0111]具体来讲,如果客户端请求对第一资源对应的锁进行操作,例如:对第一资源对应的锁进行申请或释放,则客户端可以根据第一资源对应的第一资源标识,按照预定函数关系,计算出一个锁管理服务器的标识。然后向计算出的锁管理服务器的标识对应的锁管理服务器发送锁操作请求,锁操作请求可以是锁申请请求或锁释放请求。
[0112]举例来讲,客户端请求对资源标识为ResourceX对应的锁进行操作,则客户端以ResourceX为入参,利用Hash_clutser计算得到Server_l的标识,则客户端向Server_l发送锁操作请求。
[0113]步骤22:若所述第一锁管理服务器工作正常,则所述客户端向所述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。
[0114]具体来讲,客户端确定出第一锁管理服务器之后,需要判断第一锁管理服务器(记为Lock Server)是否工作正常,如果是,则向Lock Server发送锁申请请求或锁释放请求,如果否,贝1J表明Lock Server发生故障,此时,客户端即使向Lock Server发送锁申请请求或锁释放请求,由于Lock Server发生故障,所以Lock Server无法对锁申请请求或锁释放请求进行响应。因此,客户端需要重新确定一个与第一锁管理服务器不同的且正常工作的锁管理服务器。
[0115]以客户端请求对第二资源标识对应的锁进行操作为例,说明客户端重新确定锁管理服务器的过程。该过程具体包括:
[0116]所述客户端根据第二资源标识,按照所述预定函数关系从所述多个锁管理服务器中确定出第二锁管理服务器;
[0117]若所述第二锁管理服务器发生故障,则所述客户端按照所述预定函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器;
[0118]若所述第三锁管理服务器工作正常,则所述客户端向所述第三锁管理服务器发送第二锁操作请求,所述第二锁操作请求为第二锁申请请求或第二锁释放请求,所述第二锁操作请求中携带所述第二资源标识。
[0119]首先,与客户端请求对第一资源标识对应的锁进行操作一样,客户端首先根据第二资源标识,按照预定函数关系确定出一个锁管理服务器(称为第二锁管理服务器),如果第二锁管理服务器发生故障,则客户端需要重新确定一个与第二锁管理服务器不同的且正常工作的锁管理服务器。
[0120]一种可能的实现方式为:利用所述预定函数关系重新确定锁管理服务器。在客户端重新确定锁管理服务器的过程中,为了将发生故障的第二锁管理服务器排除在外,客户端可以从剩余锁管理服务器中确定出一个服务器(称为第三锁管理服务器),其中,剩余锁管理服务器包括锁管理服务器集群包含的多个锁管理服务器中除第二锁管理服务器外的锁管理服务器。
[0121]由于第二锁管理服务器发生故障,所以相应地锁管理服务器集群从N个锁管理服务器减小到N-1个锁管理服务器,原本N个锁管理服务器中Server ID的最小值为M,则服务器ID有效范围由[M,M+N)变为[M,M+N-1),哈希桶的范围由[M,M+N)变为[M,M+N-1),根据变化后的服务器ID有效范围以及哈希同的范围,利用Hash_cluster以Resource ID为入参得到中间结果,再获得中间结果对N-1的余数[0,N-1),余数加上M即为重新确定的锁管理服务器的Server ID0
[0122]另一种可能的实现方式为:利用锁管理服务器对应的函数关系重新确定锁管理服务器。在这种实现方式中,提出资源标识对应的历史故障锁管理服务器列表,其中
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1