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

阅读: 评论:0

著录项
  • CN201510634502.4
  • 20150929
  • CN105208124A
  • 20151230
  • 华为技术有限公司
  • 王志美
  • H04L29/08
  • H04L29/08

  • 广东省深圳市龙岗区坂田华为总部办公楼
  • 广东(44)
  • 北京同达信恒知识产权代理有限公司
  • 冯艳莲
摘要
本发明公开了一种管理锁的方法及装置、确定锁管理服务器的方法及装置、锁管理服务器及客户端。所述方法应用于锁管理服务器集,所述锁管理服务器集包含多个锁管理服务器,所述方法包括:第一锁管理服务器接收第一客户端发送的锁申请请求,所述锁申请请求包含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照预定函数关系,从所述多个锁管理服务器中确定出的;若所述第一锁管理服务器中所述资源标识对应的锁的状态为空闲,则所述第一锁管理服务器将所述锁分配给所述第一客户端;若所述第一锁管理服务器没有所述资源标识对应的锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。
权利要求

1.一种管理锁的方法,其特征在于,所述方法应用于锁管理服务器集, 所述锁管理服务器集包含多个锁管理服务器,所述方法包括:

第一锁管理服务器接收第一客户端发送的锁申请请求,所述锁申请请求包 含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照 预定函数关系,从所述多个锁管理服务器中确定出的;

若所述第一锁管理服务器中所述资源标识对应的锁的状态为空闲,则所述 第一锁管理服务器将所述锁分配给所述第一客户端;

若所述第一锁管理服务器没有所述资源标识对应的锁,则所述第一锁管理 服务器根据所述资源标识生成锁,并分配给所述第一客户端。

2.如权利要求1所述的方法,其特征在于,所述第一锁管理服务器没有 所述锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所述第 一客户端,包括:

所述第一锁管理服务器根据所述资源标识确定由所述第一锁管理服务器 生成所述锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所 述第一客户端。

3.如权利要求1或2所述的方法,其特征在于,还包括:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

4.如权利要求1-3任一所述的方法,其特征在于,所述预定函数关系用 于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

5.一种管理锁的方法,其特征在于,所述方法应用于锁管理服务器集, 所述锁管理服务器集包含多个锁管理服务器,所述方法包括:

第一锁管理服务器接收第一客户端发送的锁释放请求,所述锁释放请求包 含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照 预定函数关系,从所述多个锁管理服务器中确定出的;

若所述第一锁管理服务器中所述锁被所述第一客户端占用,则所述第一锁 管理服务器将所述锁的状态设置为空闲。

6.如权利要求5所述的方法,其特征在于,还包括:

若所述第一锁管理服务器没有所述锁,则所述第一锁管理服务器根据所述 资源标识生成锁,并设置生成的锁的状态为占用。

7.如权利要求5或6所述的方法,其特征在于,还包括:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

8.如权利要求5-7任一所述的方法,其特征在于,所述预定函数关系用 于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

9.一种确定锁管理服务器的方法,其特征在于,所述方法包括:

客户端根据第一资源标识,按照预定函数关系从锁管理服务器集包含的 多个锁管理服务器中确定出第一锁管理服务器;

若所述第一锁管理服务器工作正常,则所述客户端向所述第一锁管理服务 器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请求或第一锁释放 请求;所述第一锁操作请求携带所述第一资源标识。

10.如权利要求9所述的方法,其特征在于,还包括:

所述客户端根据第二资源标识,按照所述预定函数关系从所述多个锁管理 服务器中确定出第二锁管理服务器;

若所述第二锁管理服务器发生故障,则所述客户端按照所述预定函数关系 从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服务器为所 述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

若所述第三锁管理服务器工作正常,则所述客户端向所述第三锁管理服务 器发送第二锁操作请求,所述第二锁操作请求为第二锁申请请求或第二锁释放 请求,所述第二锁操作请求中携带所述第二资源标识。

11.一种管理锁的装置,其特征在于,包括:

接收单元,用于接收第一客户端发送的锁申请请求,所述锁申请请求包含 资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照预 定函数关系,从锁管理服务器集包含的多个锁管理服务器中确定出的;

分配单元,用于若所述第一锁管理服务器中所述资源标识对应的锁的状态 为空闲,则所述第一锁管理服务器将所述锁分配给所述第一客户端;

生成单元,用于若所述第一锁管理服务器没有所述资源标识对应的锁,则 所述第一锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

12.如权利要求11所述的装置,其特征在于,所述生成单元用于:

根据所述资源标识确定由所述第一锁管理服务器生成所述锁,则所述第一 锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

13.如权利要求11或12所述的装置,其特征在于,所述分配单元还用于:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

14.如权利要求11-13任一所述的装置,其特征在于,所述预定函数关系 用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标 识。

15.一种管理锁的装置,其特征在于,包括:

接收单元,用于接收第一客户端发送的锁释放请求,所述锁释放请求包含 资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照预 定函数关系,从所述多个锁管理服务器中确定出的;

释放单元,用于若所述第一锁管理服务器中所述锁被所述第一客户端占 用,则所述第一锁管理服务器将所述锁的状态设置为空闲。

16.如权利要求15所述的装置,其特征在于,所述装置还包括:

生成单元,用于若所述第一锁管理服务器没有所述锁,则所述第一锁管理 服务器根据所述资源标识生成锁,并设置生成的锁的状态为占用。

17.如权利要求15或16所述的装置,其特征在于,所述释放单元还用于:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

18.如权利要求15-17任一所述的装置,其特征在于,所述预定函数关系 用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标 识。

19.一种确定锁管理服务器的装置,其特征在于,包括:

确定单元,用于根据第一资源标识,按照第一函数关系从锁管理服务器集 包含的多个锁管理服务器中确定出第一锁管理服务器;

发送单元,用于若所述第一锁管理服务器工作正常,则所述客户端向所述 第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请 求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

20.如权利要求19所述的装置,其特征在于,所述确定单元还用于:

根据第二资源标识,按照所述第一函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述第一 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

所述发送单元还用于:若所述第三锁管理服务器工作正常,则所述客户端 向所述第三锁管理服务器发送第二锁操作请求,所述第二锁操作请求为第二锁 申请请求或第二锁释放请求,所述第二锁操作请求中携带所述第二资源标识。

21.一种锁管理服务器,所述锁管理服务器为锁管理服务器集包含的多 个锁管理服务器中的一个,其特征在于,所述锁管理服务器包括:处理器,接 收器和通信总线;其中,所述处理器和所述接收器通过所述通信总线完成相互 间的通信;

所述接收器用于:

接收第一客户端发送的锁申请请求,所述锁申请请求包含资源标识,所述 锁管理服务器是所述第一客户端根据所述资源标识按照预定函数关系,从所述 多个锁管理服务器中确定出的;

所述处理器用于:

若所述锁管理服务器中所述资源标识对应的锁的状态为空闲,则将所述锁 分配给所述第一客户端;若所述锁管理服务器没有所述资源标识对应的锁,则 所述锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

22.如权利要求21所述的锁管理服务器,其特征在于,所述处理器用于:

根据所述资源标识确定由所述锁管理服务器生成所述锁,则根据所述资源 标识生成锁,并分配给所述第一客户端。

23.如权利要求21或22所述的锁管理服务器,其特征在于,所述处理器 还用于:

若所述锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客户端 故障,则将所述锁分配给所述第一客户端。

24.如权利要求21-23任一所述的锁管理服务器,其特征在于,所述预定 函数关系用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服 务器的标识。

25.一种锁管理服务器,所述锁管理服务器为锁管理服务器集包含的多 个锁管理服务器中的一个,其特征在于,所述锁管理服务器包括:处理器,接 收器和通信总线;其中,所述处理器和所述接收器通过所述通信总线完成相互 间的通信;

所述接收器用于:

接收第一客户端发送的锁释放请求,所述锁释放请求包含资源标识,所述 锁管理服务器是所述第一客户端根据所述资源标识按照预定函数关系,从所述 多个锁管理服务器中确定出的;

所述处理器用于:

若所述锁管理服务器中所述锁被所述第一客户端占用,则将所述锁的状态 设置为空闲。

26.如权利要求25所述的锁管理服务器,其特征在于,所述处理器还用 于:

若所述锁管理服务器没有所述锁,则根据所述资源标识生成锁,并设置生 成的锁的状态为占用。

27.如权利要求25或26所述的锁管理服务器,其特征在于,所述处理器 还用于:

若所述锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客户端 发生故障,则将所述锁的状态设置为空闲。

28.如权利要求25-27任一所述的锁管理服务器,其特征在于,所述预定 函数关系用于将所述资源标识映射为所述多个锁管理服务器中一个锁管理服 务器的标识。

29.一种客户端,其特征在于,包括:处理器,发送器和通信总线;其中, 所述处理器和所述发送器通过所述通信总线完成相互间的通信;

所述处理器用于:根据第一资源标识,按照预定函数关系从锁管理服务器 集包含的多个锁管理服务器中确定出第一锁管理服务器;

所述发送器用于:若所述第一锁管理服务器工作正常,则所述客户端向所 述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请 请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

30.如权利要求29所述的客户端,其特征在于,所述处理器还用于:

根据第二资源标识,按照所述预定函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述预定 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器。

说明书
技术领域

本发明涉及通信技术领域,特别涉及一种管理锁的方法及装置、确定锁管 理服务器的方法及装置、锁管理服务器及客户端。

分布式系统是一组主机通过网络相互连接与通信后形成的系统。在分布式 系统中,各个主机之间共享分布式系统的资源,为了防止两个或多个主机同时 访问一个资源造成冲突的情况发生,每个资源需要对应一个锁,主机访问一个 资源,需要首先申请该资源对应的锁,申请成功后,再访问该资源,访问完毕 后,释放该资源对应的锁,以便其他主机能够申请该资源对应的锁。

目前管理分布式系统的资源对应的锁的实现方式:

分布式系统中的所有主机均存储有每个资源对应的锁,所有主机中有一个 主机为主节点,对外提供服务,其他主机作为备节点,备节点接收到的请求均 转发到主节点上。在主节点上执行的所有操作必须同步到备节点上。由于仅有 主节点对外提供服务,所以主节点能够支持的锁数量就是整个分布式系统能够 支持的锁数量,锁容量有限,并且由于在主节点上执行的每次操作都需要同步 到整个分布式系统中的各个备节点上,涉及到多次通信以及协商,所以性能较 低,同时可靠性难以得到保障。

综上,目前管理系统资源对应的锁的方式无法满足高并发、低时延和可靠 性需求。

本发明实施例提供一种管理锁的方法及装置、确定锁管理服务器的方法及 装置、锁管理服务器及客户端,锁无需持久化,同时满足处理低时延,和服务 高并发,锁的高可靠性,无需保存锁多个副本从而避免锁迁移带来的额外开销。

本发明实施例第一方面提供了一种管理锁的方法,所述方法应用于锁管理 服务器集,所述锁管理服务器集包含多个锁管理服务器,所述方法包括:

第一锁管理服务器接收第一客户端发送的锁申请请求,所述锁申请请求包 含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照 预定函数关系,从所述多个锁管理服务器中确定出的;

若所述第一锁管理服务器中所述资源标识对应的锁的状态为空闲,则所述 第一锁管理服务器将所述锁分配给所述第一客户端;

若所述第一锁管理服务器没有所述资源标识对应的锁,则所述第一锁管理 服务器根据所述资源标识生成锁,并分配给所述第一客户端。

结合第一方面,在第一方面的第一种可能的实现方式中,所述第一锁管理 服务器没有所述锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分 配给所述第一客户端,包括:

所述第一锁管理服务器根据所述资源标识确定由所述第一锁管理服务器 生成所述锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所 述第一客户端。

结合第一方面或者第一方面的第一种可能的实现方式,在第一方面的第二 种可能的实现方式中,还包括:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

结合第一方面至第一方面的第二种可能的实现方式中的任一种可能的实 现方式,在第一方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第二方面提供了一种管理锁的方法,所述方法应用于锁管理 服务器集,所述锁管理服务器集包含多个锁管理服务器,所述方法包括:

第一锁管理服务器接收第一客户端发送的锁释放请求,所述锁释放请求包 含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照 预定函数关系,从所述多个锁管理服务器中确定出的;

若所述第一锁管理服务器中所述锁被所述第一客户端占用,则所述第一锁 管理服务器将所述锁的状态设置为空闲。

结合第二方面,在第二方面的第一种可能的实现方式中,还包括:

若所述第一锁管理服务器没有所述锁,则所述第一锁管理服务器根据所述 资源标识生成锁,并设置生成的锁的状态为占用。

结合第二方面或者第二方面的第一种可能的实现方式,在第二方面的第二 种可能的实现方式中,还包括:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

结合第二方面至第二方面的第二种可能的实现方式中的任一种可能的实 现方式,在第二方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第三方面提供了一种确定锁管理服务器的方法,所述方法包 括:

客户端根据第一资源标识,按照预定函数关系从锁管理服务器集包含的 多个锁管理服务器中确定出第一锁管理服务器;

若所述第一锁管理服务器工作正常,则所述客户端向所述第一锁管理服务 器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请求或第一锁释放 请求;所述第一锁操作请求携带所述第一资源标识。

结合第三方面,在第三方面的第一种可能的实现方式中,还包括:

所述客户端根据第二资源标识,按照所述预定函数关系从所述多个锁管理 服务器中确定出第二锁管理服务器;

若所述第二锁管理服务器发生故障,则所述客户端按照所述预定函数关系 从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服务器为所 述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

若所述第三锁管理服务器工作正常,则所述客户端向所述第三锁管理服务 器发送第二锁操作请求,所述第二锁操作请求为第二锁申请请求或第二锁释放 请求,所述第二锁操作请求中携带所述第二资源标识。

本发明实施例第四方面提供了一种管理锁的装置,包括:

接收单元,用于接收第一客户端发送的锁申请请求,所述锁申请请求包含 资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照预 定函数关系,从锁管理服务器集包含的多个锁管理服务器中确定出的;

分配单元,用于若所述第一锁管理服务器中所述资源标识对应的锁的状态 为空闲,则所述第一锁管理服务器将所述锁分配给所述第一客户端;

生成单元,用于若所述第一锁管理服务器没有所述资源标识对应的锁,则 所述第一锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

结合第四方面,在第四方面的第一种可能的实现方式中,所述生成单元用 于:

根据所述资源标识确定由所述第一锁管理服务器生成所述锁,则所述第一 锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

结合第四方面或者第四方面的第一种可能的实现方式,在第四方面的第二 种可能的实现方式中,所述分配单元还用于:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

结合第四方面至第四方面的第二种可能的实现方式中的任一种可能的实 现方式,在第四方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第五方面提供了一种管理锁的装置,包括:

接收单元,用于接收第一客户端发送的锁释放请求,所述锁释放请求包含 资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按照预 定函数关系,从所述多个锁管理服务器中确定出的;

释放单元,用于若所述第一锁管理服务器中所述锁被所述第一客户端占 用,则所述第一锁管理服务器将所述锁的状态设置为空闲。

结合第五方面,在第五方面的第一种可能的实现方式中,所述装置还包括:

生成单元,用于若所述第一锁管理服务器没有所述锁,则所述第一锁管理 服务器根据所述资源标识生成锁,并设置生成的锁的状态为占用。

结合第五方面或者第五方面的第一种可能的实现方式,在第五方面的第二 种可能的实现方式中,所述释放单元还用于:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

结合第五方面至第五方面的第二种可能的实现方式中的任一种可能的实 现方式,在第五方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第六方面提供了一种确定锁管理服务器的装置,包括:

确定单元,用于根据第一资源标识,按照第一函数关系从锁管理服务器集 包含的多个锁管理服务器中确定出第一锁管理服务器;

发送单元,用于若所述第一锁管理服务器工作正常,则所述客户端向所述 第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请 求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

结合第六方面,在第六方面的第一种可能的实现方式中,所述确定单元还 用于:

根据第二资源标识,按照所述第一函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述第一 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

所述发送单元还用于:若所述第三锁管理服务器工作正常,则所述客户端 向所述第三锁管理服务器发送第二锁操作请求,所述第二锁操作请求为第二锁 申请请求或第二锁释放请求,所述第二锁操作请求中携带所述第二资源标识。

本发明实施例第七方面提供了一种锁管理服务器,所述锁管理服务器为锁 管理服务器集包含的多个锁管理服务器中的一个,所述锁管理服务器包括: 处理器,接收器和通信总线;其中,所述处理器和所述接收器通过所述通信总 线完成相互间的通信;

所述接收器用于:

接收第一客户端发送的锁申请请求,所述锁申请请求包含资源标识,所述 锁管理服务器是所述第一客户端根据所述资源标识按照预定函数关系,从所述 多个锁管理服务器中确定出的;

所述处理器用于:

若所述锁管理服务器中所述资源标识对应的锁的状态为空闲,则将所述锁 分配给所述第一客户端;若所述锁管理服务器没有所述资源标识对应的锁,则 所述锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

结合第七方面,在第七方面的第一种可能的实现方式中,所述处理器用于:

根据所述资源标识确定由所述锁管理服务器生成所述锁,则根据所述资源 标识生成锁,并分配给所述第一客户端。

结合第七方面或者第七方面的第一种可能的实现方式,在第七方面的第二 种可能的实现方式中,所述处理器还用于:

若所述锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客户端 故障,则将所述锁分配给所述第一客户端。

结合第七方面至第七方面的第二种可能的实现方式中的任一种可能的实 现方式,在第七方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第八方面提供了一种锁管理服务器,所述锁管理服务器为锁 管理服务器集包含的多个锁管理服务器中的一个,所述锁管理服务器包括: 处理器,接收器和通信总线;其中,所述处理器和所述接收器通过所述通信总 线完成相互间的通信;

所述接收器用于:

接收第一客户端发送的锁释放请求,所述锁释放请求包含资源标识,所述 锁管理服务器是所述第一客户端根据所述资源标识按照预定函数关系,从所述 多个锁管理服务器中确定出的;

所述处理器用于:

若所述锁管理服务器中所述锁被所述第一客户端占用,则将所述锁的状态 设置为空闲。

结合第八方面,在第八方面的第一种可能的实现方式中,所述处理器还用 于:

若所述锁管理服务器没有所述锁,则根据所述资源标识生成锁,并设置生 成的锁的状态为占用。

结合第八方面或者第八方面的第一种可能的实现方式,在第八方面的第二 种可能的实现方式中,所述处理器还用于:

若所述锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客户端 发生故障,则将所述锁的状态设置为空闲。

结合第八方面至第八方面的第二种可能的实现方式中的任一种可能的实 现方式,在第八方面的第三种可能的实现方式中,所述预定函数关系用于将所 述资源标识映射为所述多个锁管理服务器中一个锁管理服务器的标识。

本发明实施例第九方面提供了一种客户端,包括:处理器,发送器和通信 总线;其中,所述处理器和所述发送器通过所述通信总线完成相互间的通信;

所述处理器用于:根据第一资源标识,按照预定函数关系从锁管理服务器 集包含的多个锁管理服务器中确定出第一锁管理服务器;

所述发送器用于:若所述第一锁管理服务器工作正常,则所述客户端向所 述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请 请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

结合第九方面,在第九方面的第一种可能的实现方式中,所述处理器还用 于:

根据第二资源标识,按照所述预定函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述预定 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器。

本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优 点:

本发明实施例中,客户端根据锁申请请求包含的资源标识,按照预定函数 关系,从锁管理服务器集包含的多个锁管理服务器中确定出第一锁管理服务 器,然后向第一锁管理服务器发送锁申请请求,如果第一锁管理服务器中所述 资源标识对应的锁为空闲,则将该锁分配给客户端;如果第一锁管理服务器中 没有所述资源标识对应的锁,则会根据所述资源标识生成锁,并分配给客户端。

因此,本发明实施例中,客户端根据锁申请请求或锁释放请求包含的资源 标识,按照预定函数关系即可确定第一锁管理服务器,然后向第一锁管理服务 器进行锁申请和锁释放,满足了处理低时延,和服务高并发。锁无需一直存储 在第一锁管理服务器中,第一锁管理服务器可以根据资源标识生成锁,可靠性 高。

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所 需要使用的附图作简要介绍。

图1为本发明实施例适用的分布式系统;

图2为本发明实施例中客户端确定锁申请请求或锁释放请求的接收者的流 程图;

图3为本发明实施例中客户端每次确定出锁管理服务器后执行的步骤的流 程图;

图4为本发明实施例中锁管理服务器针对锁申请请求的处理过程的流程 图;

图5为本发明实施例中部署有CMS的分布式系统的示意图;

图6为本发明实施例中锁管理服务器针对锁申请请求的处理过程的流程 图;

图7为本发明实施例中客户端进行锁操作的流程图;

图8为本发明实施例中锁管理服务器对锁申请请求进行处理的示意图;

图9为本发明实施例中锁管理服务器对锁释放请求进行处理的示意图;

图10为本发明实施例中管理锁的装置的第一种功能模块示意图;

图11为本发明实施例中锁管理服务器的第一种硬件结构示意图;

图12为本发明实施例中管理锁的装置的第二种功能模块示意图;

图13为本发明实施例中锁管理服务器的第二种硬件结构示意图;

图14为本发明实施例中确定锁管理服务器的装置的功能模块示意图;

图15为本发明实施例中客户端的硬件结构示意图。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明 实施例中的附图,对本发明实施例中的技术方案进行清楚地描述。

本申请中的术语“系统”和“网络”可被互换使用。“多个”是指两个或两个以 上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和 /或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。 另外,字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。

在背景技术中已经提及目前管理分布式系统的资源对应的锁的方式。分布 式系统的资源对应的锁都是持久化的,即:分布式系统的资源对应的锁必须存 储在持久化的存储设备中,例如一个或多个锁管理服务器的硬盘中。本发明实 施例提出的管理锁的方法中,锁无需持久化,对存储锁的设备没有要求,锁管 理服务器仅需在内存中管理锁,可以根据情况生成锁。也因为锁管理服务器可 以根据情况生成锁,所以可靠性高。

本发明实施例提出的管理锁的方法中,与无副本方式类似,锁没有副本, 锁操作响应时间短,锁操作无需同步,避免主机故障时需要进行锁迁移和锁恢 复带来的额外开销。也因为锁没有副本,所以分布式系统的锁容量为各个锁管 理服务器能够支持的锁数量之和,增加锁管理服务器可以直接增加分布式系统 的锁容量。

本发明实施例提出的管理锁的方法中,客户端确定出的锁管理服务器如果 发生故障,则可以重新确定锁管理服务器,直到确定出一个正常工作的锁管理 服务器,然后向确定出的正常工作的锁管理服务器发送锁申请请求或锁释放请 求,故障处理复杂度低,故障恢复时间短。

下面对本发明实施例提供的管理锁的方法进行详细说明。

请参考图1,图1为本发明实施例适用的分布式系统。分布式系统包括: 锁管理服务器集、多个客户端、多个资源。其中,锁管理服务器集包括多 个锁管理服务器,每个锁管理服务器有一个标识,记为ServerID。多个资源可 以是物理资源(例如:硬盘),也可以是逻辑资源(例如:硬盘上的一段存储 空间),每个资源有一个资源标识,记为ResourceID。客户端与通过网络与锁 管理服务器集进行通信。

每个资源对应一把锁,在把一个资源加入到分布式系统中时,分布式系统 需要为其生成一把锁,该锁表征客户端对资源进行访问的权限,客户端申请到 锁,即可对锁对应的资源进行访问,锁有使用周期,称为租约,例如60秒。 客户端需要在租约到期之前完成资源访问并且释放锁。如果客户端在租约到期 之后未释放锁,则锁将被锁管理服务器强制回收。如果客户端需继续使用资源, 则需要重新申请锁。

本发明实施例中,如果客户端请求对某个资源对应的锁进行申请或释放, 则客户端可以根据该资源的资源标识,按照预定函数关系,确定出第一锁管理 服务器,然后向第一锁管理服务器发送锁申请请求或锁释放请求,进而实现锁 申请或锁释放。下面对本发明实施例提供的锁管理方法进行详细说明。

首先说明客户端如何确定向哪个锁管理服务器发送锁申请请求或锁释放 请求。如图2所示,客户端确定锁申请请求或锁释放请求的接收者包括以下步 骤:

步骤21:客户端根据第一资源标识,按照预定函数关系从锁管理服务器集 包含的多个锁管理服务器中确定出第一锁管理服务器。

其中,预定函数关系用于将所述资源标识映射为所述多个锁管理服务器中 一个锁管理服务器的标识。具体可以是哈希函数关系,还可以是其他函数关系, 只要能够将一个值映射到另一个值即可。以预定函数关系是哈希函数关系为 例,哈希函数能够将任意长度的二进制值(称为输入)映射为较短的固定长度 的二进制值,这个短的二进制值称为哈希值(或称为输出)。哈希值是一段数 据唯一且极其紧凑的数值表示形式。即使输入有很小的变化,都将产生不同的 哈希值。

在实际应用中,为锁管理服务器集设置哈希函数,记为Hash_cluster, 也就是说,锁管理服务器集中的所有锁管理服务器的标识与资源标识之间均 满足Hash_cluster。利用Hash_cluster,以ResourceID为入参得到ServerID。 具体地,假设锁管理服务器集包括N个锁管理服务器,N个锁管理服务器中 ServerID的最小值为M,则服务器ID有效范围是[M,M+N),哈希桶的范围为 [M,M+N),利用Hash_cluster以ResourceID为入参得到中间结果,再获得中 间结果对N的余数[0,N),余数加上M即为ServerID。

具体来讲,如果客户端请求对第一资源对应的锁进行操作,例如:对第一 资源对应的锁进行申请或释放,则客户端可以根据第一资源对应的第一资源标 识,按照预定函数关系,计算出一个锁管理服务器的标识。然后向计算出的锁 管理服务器的标识对应的锁管理服务器发送锁操作请求,锁操作请求可以是锁 申请请求或锁释放请求。

举例来讲,客户端请求对资源标识为ResourceX对应的锁进行操作,则客 户端以ResourceX为入参,利用Hash_clutser计算得到Server_1的标识,则客 户端向Server_1发送锁操作请求。

步骤22:若所述第一锁管理服务器工作正常,则所述客户端向所述第一锁 管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请请求或第 一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

具体来讲,客户端确定出第一锁管理服务器之后,需要判断第一锁管理服 务器(记为LockServer)是否工作正常,如果是,则向LockServer发送锁申 请请求或锁释放请求,如果否,则表明LockServer发生故障,此时,客户端 即使向LockServer发送锁申请请求或锁释放请求,由于LockServer发生故障, 所以LockServer无法对锁申请请求或锁释放请求进行响应。因此,客户端需 要重新确定一个与第一锁管理服务器不同的且正常工作的锁管理服务器。

以客户端请求对第二资源标识对应的锁进行操作为例,说明客户端重新确 定锁管理服务器的过程。该过程具体包括:

所述客户端根据第二资源标识,按照所述预定函数关系从所述多个锁管理 服务器中确定出第二锁管理服务器;

若所述第二锁管理服务器发生故障,则所述客户端按照所述预定函数关系 从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服务器为所 述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

若所述第三锁管理服务器工作正常,则所述客户端向所述第三锁管理服务 器发送第二锁操作请求,所述第二锁操作请求为第二锁申请请求或第二锁释放 请求,所述第二锁操作请求中携带所述第二资源标识。

首先,与客户端请求对第一资源标识对应的锁进行操作一样,客户端首先 根据第二资源标识,按照预定函数关系确定出一个锁管理服务器(称为第二锁 管理服务器),如果第二锁管理服务器发生故障,则客户端需要重新确定一个 与第二锁管理服务器不同的且正常工作的锁管理服务器。

一种可能的实现方式为:利用所述预定函数关系重新确定锁管理服务器。 在客户端重新确定锁管理服务器的过程中,为了将发生故障的第二锁管理服务 器排除在外,客户端可以从剩余锁管理服务器中确定出一个服务器(称为第三 锁管理服务器),其中,剩余锁管理服务器包括锁管理服务器集包含的多个 锁管理服务器中除第二锁管理服务器外的锁管理服务器。

由于第二锁管理服务器发生故障,所以相应地锁管理服务器集从N个锁 管理服务器减小到N-1个锁管理服务器,原本N个锁管理服务器中ServerID 的最小值为M,则服务器ID有效范围由[M,M+N)变为[M,M+N-1),哈希桶的 范围由[M,M+N)变为[M,M+N-1),根据变化后的服务器ID有效范围以及哈希 同的范围,利用Hash_cluster以ResourceID为入参得到中间结果,再获得中间 结果对N-1的余数[0,N-1),余数加上M即为重新确定的锁管理服务器的Server ID。

另一种可能的实现方式为:利用锁管理服务器对应的函数关系重新确定锁 管理服务器。在这种实现方式中,提出资源标识对应的历史故障锁管理服务器 列表,其中,资源标识为客户端发送的锁申请请求或锁释放请求包含的资源标 识,资源标识对应的历史故障锁管理服务器列表中包含:客户端在确定能够向 哪个锁管理服务器发送锁申请请求或锁释放请求的过程中,确定出的锁管理服 务器中发生故障的锁管理服务器的标识。

在客户端根据第二锁资源标识,按照预定函数关系确定出第二锁管理服务 器的过程中,资源标识对应的故障服务器列表为初始列表,初始列表的内容为 空。客户端确定出第二锁管理服务器后,如果第二锁管理服务器发生故障,则 将第二锁管理服务器的标识存入资源标识对应的历史故障锁管理服务器列表, 也即资源标识对应的历史故障锁管理服务器列表由初始列表更新为第一列表, 其中,第一列表包含第二锁管理服务器的标识。然后客户端重新确定与第二锁 管理服务器不同的且工作正常的第三锁管理服务器。

客户端确定第三锁管理服务器的一种实现方式为:为锁管理服务器集中 的每个锁管理服务器设置哈希函数,记为Hash_serveice,每个锁管理服务器的 Hash_serveice是专有的,一个锁管理服务器的Hash_serveice用于在该锁管理 服务器发生故障时,客户端利用该锁管理服务器的Hash_serveice确定新的锁 管理服务器。

具体来讲,客户端利用锁管理服务器专有的Hash_serveice,以ResourceID 和ResourceID对应的历史故障锁管理服务器列表为入参,得到新的ServerID。 其中,Hash_serveice是带历史故障锁管理服务器列表的哈希函数,历史故障锁 管理服务器列表在实际应用中是这样的:ResourceID对应的历史故障节点列表 初始化为空,客户端利用Hash_cluster,以ResourceID为入参,计算得到A锁 管理服务器,如果A锁管理服务器发生故障,则将A锁管理服务器的标识存 入ResourceID对应的历史故障锁管理服务器列表,接着,如果A锁管理服务 器专有的Hash_serveice为Hash_A,则客户端以ResourceID和ResourceID对 应的历史故障锁管理服务器列表(包含A锁管理服务器的标识)为入参,得到 新的锁管理服务器(称为第三锁管理服务器)。

客户端确定出第三锁管理服务器之后,同样需要判断第三锁管理服务器 (记为新的LockServer)是否工作正常,如果是,则向新的LockServer发送 锁申请请求或锁释放请求,如果否,则表明新的LockServer发生故障,此时, 客户端将第三锁管理服务器的标识存入ResourceID对应的历史故障锁管理服 务器列表,也即资源标识对应的历史故障锁管理服务器列表由第一列表更新为 第二列表,其中,第一列表包含第二锁管理服务器的标识,第二列表包含第二 锁管理服务器的标识和第三锁管理服务器的标识。然后客户端可以重新确定锁 管理服务器,直到确定出的锁管理服务器是正常工作的锁管理服务器为止,客 户端重新确定锁管理服务器的方法请参考前述,在此就不再赘述。

如图3所示,客户端每次确定出锁管理服务器后,都要判断确定出的锁管 理服务器(记为LockServer)是否工作正常,如果是,则向LockServer发送 锁申请请求或锁释放请求,如果否,则执行LockServer专有的Hash_serveice, 得到新的LockServer。

需要说明的是,如果锁资源标识对应的历史故障锁管理服务器列表中包含 分布式系统中所有锁管理服务器的标识,也即客户端确定分布式系统中的所有 锁管理服务器均发生故障,则客户端无需发送锁申请请求或锁释放请求,因为 分布式系统中没有工作正常的锁管理服务器对锁申请请求或锁释放请求进行 响应。

接下来说明锁管理服务器接收到客户端发送的锁申请请求之后,针对锁申 请请求的处理过程。

如图4所示,客户端针对锁申请请求的处理过程包括以下步骤:

步骤41:第一锁管理服务器接收第一客户端发送的锁申请请求,所述锁申 请请求包含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源 标识按照预定函数关系,从所述多个锁管理服务器中确定出的。

第一客户端通过执行图2所示的方法,可以确定向第一锁管理服务器发送 锁申请请求。因此,第一锁管理服务器可以接收到第一客户端发送的锁申请请 求。

步骤42:若所述第一锁管理服务器中所述资源标识对应的锁的状态为空 闲,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

步骤43:若所述第一锁管理服务器没有所述资源标识对应的锁,则所述第 一锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

步骤42和步骤43中分别针对的是第一客户端请求申请的锁存储在第一锁 管理服务器中以及未存储在第一锁管理服务器的情况。因此,在执行步骤42 和步骤43之前,第一锁管理服务器还可以执行以下步骤:

所述第一锁管理服务器判断所述资源标识对应的锁是否存储在所述第一 锁管理服务器中。

第一锁管理服务器判断第一客户端请求申请的锁是否存储在第一锁管理 服务器中,也就是判断在接收到第一客户端发送的锁申请请求之前,是否有其 他客户端向第一锁管理服务器申请过该资源标识对应的锁,如果有其他客户端 向第一锁管理服务器申请过该资源标识对应的锁,则第一锁管理服务器中存储 有该资源标识对应的锁,以便其他客户端能够申请到该资源标识对应的锁;否 则,第一锁管理服务器生成锁,并分配给第一客户端。

步骤42中在第一客户端请求申请的锁存储在第一锁管理服务器中的前提 下,还针对该资源标识对应的锁的状态是空闲的情况。因此,在所述第一锁管 理服务器确定所述锁存储在所述第一锁管理服务器中之后,还可以执行以下步 骤:

所述第一锁管理服务器判断所述资源标识对应的锁的状态是否为空闲,如 果是,则执行步骤42,如果否,则根据分布式系统中部署的集管理服务 (ClusterManagementService,CMS)是否同时管理锁管理服务器和客户端的 状态,可能会执行以下步骤:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

具体来讲,在第一客户端请求申请的锁存储在第一锁管理服务器的前提 下,如果该锁的状态是空闲,则说明该锁可以被分配给第一客户端,此时,第 一锁管理服务器将该锁分配给第一客户端,并启动该锁的租约定时器、将该锁 的状态设置为占用,将该锁的持有者设置为第一客户端。之后通知第一客户端 锁申请成功。

在第一客户端请求申请的锁存储在第一锁管理服务器的前提下,如果该锁 的状态不是空闲,而是占用,则说明该锁已经被分配给其他客户端,为方便表 述,占用该锁的客户端记为第二客户端。此时第一锁管理服务器需要针对第二 客户端的状态是工作正常的情况以及第二客户端的状态是发生故障的情况分 别做不同的处理。第一锁管理服务器可以通过CMS获知第二客户端的状态。

如图5所示,CMS为分布式系统提供集管理和所有的锁管理服务器的 状态同步服务。目前对CMS有多种实现方案,本发明实施例对其实现方案没 有限定。实际CMS在分布式系统中的部署有两种场景:

第一种场景:CMS只管理锁管理服务器,而不管理客户端,即客户端是 无状态的。客户端通过CMS可以得到锁管理服务器的状态,而锁管理服务器 通过CMS无法得到客户端的状态。满足这个功能,记为“CMS仅支持锁管理 服务器状态查询”。

第二种场景:CMS既管理锁管理服务器,也管理客户端。通过CMS,锁 管理服务器和客户端能够相互得到对方的状态。满足这个功能,记为“CMS 同时支持锁管理服务器和客户端状态查询”。

其中,与第二客户端的状态类似,锁管理服务器的状态可以是工作正常, 还可以是发生故障。

如果CMS仅支持锁管理服务器状态查询,则第一锁管理服务器通过CMS 无法得到第二客户端的状态,也即第一锁管理服务器无法获知第二客户端是工 作正常还是发生故障,因此,第一锁管理服务器只能通知第一客户端锁分配失 败。

如果CMS同时支持锁管理服务器和客户端状态查询,则第一锁管理服务 器通过CMS可以获知第二客户端是工作正常还是发生故障,如果第二客户端 工作正常,则表明第二客户端正在正常占用该锁,第一锁管理服务器不能将该 锁分配给第一客户端,只能通知第一客户端锁分配失败;如果第二客户端发生 故障,则表明第二客户端没有能力占用该锁,第一锁管理服务器将该锁分配给 第一客户端,并启动该锁的租约定时器、将该锁的状态设置为占用,将该锁的 持有者设置为第一客户端。之后通知第一客户端锁申请成功。

步骤43针对第一客户端请求申请的锁未存储在第一锁管理服务器中的情 况。

具体来讲,第一锁管理服务器接收到第一客户端发送的锁申请请求,但是 第一客户端请求申请的锁未存储在第一锁管理服务器中,一种实施方式为第一 锁管理服务器直接生成锁,并分配给第一客户端。另一种实施方式为:在第一 锁管理服务器生成锁之前,需要检查一下该锁申请请求的合法性,在该锁申请 请求合法的前提下,才生成锁,并分配给第一客户端。因此,在另一实施例中, 步骤43具体包括:

所述第一锁管理服务器根据所述资源标识确定由所述第一锁管理服务器 生成所述锁,则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所 述第一客户端。

其中,第一锁管理服务器检查锁申请请求的合法性的方法为:第一锁管理 服务器利用资源标识确定出一个锁管理服务器,第一锁管理服务器可以使用前 文所述的预定函数关系,例如:Hash_clutser,也可以使用其他方法,只要根据 资源标识能够确定出一个锁管理服务器即可。

如果第一锁管理服务器利用资源标识确定出的锁管理服务器是自己,则说 明该锁申请请求是合法的,应该由第一锁管理服务器生成锁,则第一锁管理服 务器生成锁,并分配给第一客户端。

如果第一锁管理服务器利用资源标识确定出的锁管理服务器不是自己,例 如是第四锁管理服务器,则说明原本应该由第四锁管理服务器生成锁,但是第 四锁管理服务器发生故障,因为通过图2所示的方法可知,第一客户端根据资 源标识,按照预定函数关系,确定出第四锁管理服务器之后,在第四锁管理服 务器发生故障的情况下,第一客户端才会向其他锁管理服务器(例如第一锁管 理服务器)发送锁申请请求。此时,一种可能的实施方式是:第一锁管理服务 器直接生成锁,并分配给第一客户端。另一种可能的实施方式是:第一锁管理 服务器判断资源标识对应的历史故障锁管理服务器列表中各个标识分别对应 的锁管理服务器是否均已故障,如果是,则生成锁,并分配给第一客户端;如 果否,则说明第一客户端误将正常工作的锁管理服务器的标识放入资源标识对 应的历史故障锁管理服务器列表,第一客户端本应将锁申请请求发送给除第一 锁管理服务器外的一个工作正常的锁管理服务器,但是第一锁客户却端误将锁 申请请求发送给第一锁管理服务器,则第一锁管理服务器通知第一客户端锁分 配失败。

接下来说明锁管理服务器接收到客户端发送的锁释放请求之后,针对锁释 放请求的处理过程。

如图6所示,锁管理服务器针对锁释放请求的处理过程包括以下步骤:

步骤61:第一锁管理服务器接收第一客户端发送的锁释放请求,所述锁释 放请求包含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源 标识按照预定函数关系,从所述多个锁管理服务器中确定出的。

与锁申请请求类似,第一客户端通过执行图2所示的方法,可以确定向第 一锁管理服务器发送锁释放请求。因此,第一锁管理服务器可以接收到第一客 户端发送的锁释放请求。

步骤62:若所述第一锁管理服务器中所述锁被所述第一客户端占用,则所 述第一锁管理服务器将所述锁的状态设置为空闲。

步骤63:若所述第一锁管理服务器没有所述锁,则所述第一锁管理服务器 根据所述资源标识生成锁,并设置生成的锁的状态为占用。

与锁申请请求类似,步骤62和步骤63中分别针对的是第一客户端请求释 放的锁存储在第一锁管理服务器中以及未存储在第一锁管理服务器的情况。因 此,在执行步骤62和步骤63之前,第一锁管理服务器还可以执行以下步骤:

所述第一锁管理服务器判断所述资源标识对应的锁是否存储在所述第一 锁管理服务器中。

具体可参考前文,在此不再赘述。

步骤62中在第一客户端请求释放的锁存储在第一锁管理服务器中的前提 下,还针对该锁被所述第一客户端占用的情况。因此,在所述第一锁管理服务 器确定所述锁存储在所述第一锁管理服务器中之后,还可以执行以下步骤:

所述第一锁管理服务器判断所述锁的状态是否被所述第一客户端占用,如 果是,则执行步骤62,如果否,则根据分布式系统中部署的CMS是否同时管 理锁管理服务器和客户端的状态,可能会执行以下步骤:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

具体来讲,在第一客户端请求释放的锁存储在第一锁管理服务器的前提 下,如果该锁被第一客户端占用,则说明该锁释放请求是合法的,该锁可以被 释放,此时,第一锁管理服务器关闭该锁的租约定时器、将该锁的状态设置为 空闲,将该锁的持有者设置为无。之后通知第一客户端锁释放成功。

在第一客户端请求释放的锁存储在第一锁管理服务器的前提下,如果该锁 不被第一客户端占用,而是被其他客户端(例如第二客户端)占用,则说明该 锁已经被分配给第二客户端。此时第一锁管理服务器需要针对第二客户端的状 态是工作正常的情况以及第二客户端的状态是发生故障的情况分别做不同的 处理。第一锁管理服务器可以通过CMS获知第二客户端的状态。

如果CMS仅支持锁管理服务器状态查询,则第一锁管理服务器通过CMS 无法得到第二客户端的状态,也即第一锁管理服务器无法获知第二客户端是工 作正常还是发生故障,因此,第一锁管理服务器只能通知第一客户端锁释放失 败。

如果CMS同时支持锁管理服务器和客户端状态查询,则第一锁管理服务 器通过CMS可以获知第二客户端是工作正常还是发生故障,如果第二客户端 工作正常,则表明第二客户端正在正常占用该锁,第一锁管理服务器不能将释 放该锁,只能通知第一客户端锁分配失败;如果第二客户端发生故障,则表明 第二客户端没有能力占用该锁,第一锁管理服务器将该锁的状态设置为空闲, 将该锁的持有者设置为无。之后通知第一客户端锁释放成功。

步骤63中针对第一客户端请求申请的锁未存储在第一锁管理服务器中的 情况。

具体来讲,第一锁管理服务器接收到第一客户端发送的锁释放请求,但是 第一客户端请求释放的锁未存储在第一锁管理服务器中,一种实施方式为第一 锁管理服务器不对该锁释放请求进行响应。另一种实施方式为:第一锁管理服 务器生成锁,并设置生成的锁的状态为占用。第一锁管理服务器生成锁是为了 缩短以后其他客户端申请锁的等待时间,如果以后有其他客户端向第一锁管理 服务器生成锁,则由于第一锁管理服务器存储有该锁,所以其他客户端无需等 待,即可申请到该锁。第一锁管理服务器将生成的锁置为占用是因为:第一锁 管理服务器中没有该锁,则说明原本存储有该锁的原始锁管理服务器发生了故 障,考虑到可能在原始锁管理服务器发生故障之前,该锁已经被分配给其他客 户端占用,为避免同一个资源对应的锁分配给多个客户端,造成多个客户端访 问资源发生冲突,将生成的锁置为占用。

下面举一个例子说明客户端从申请锁到释放锁的全过程。请参考图7,图 7为本发明实施例中客户端进行锁操作的流程图。包括以下步骤:

步骤1:客户端申请资源标识为ResourceX对应的锁,以Hash_clutser计 算得到Server_1。到Server_1上申请该锁。

步骤2:Server_1首先通过ResourceX检查锁是否为自己所管理。是,则 继续检查锁是否已被占用。如果空闲,则启动租约定时器,将锁置为占用状态, 记录锁的持有者为客户端。

步骤3:Server_1通知客户端申请锁成功锁。

步骤4:客户端访问锁对应的资源。

步骤5:客户端对锁对应的资源访问完成。

步骤6:客户端释放锁给Server_1。

步骤7:Server_1关闭租约定时器,锁置为空闲。

在以上步骤中可能出现以下冲突情况:

在步骤1中,客户端发现Server_1已经发生故障,则需要通过Server_1 专有的Hash_serveice,重新计算新的Server。

在步骤2中,Server_1检查锁已被占用,则通知客户端申请锁失败。

在步骤7中,Server_1检查锁释放请求是否是客户端所发送,如果不是客 户端发送的锁释放请求,锁释放请求将被丢失。

为使本领域的技术人员更加理解本发明实施例,下面举例说明锁管理服务 器对锁申请请求的处理过程。请参考图8,图8为本发明实施例中锁管理服务 器对锁申请请求进行处理的示意图。包括以下步骤:

申请步骤1:客户端请求申请资源标识为ResourceX对应的锁,以 Hash_clutser计算得到Server_1。判断Server_1的状态,如果工作正常,则转 入申请步骤2,否则转入申请步骤1.1。

申请步骤1.1,客户端继续执行Server_1的Hash_service(ResourceX的历 史故障节点列表,ResourceX),此时ResourceX的历史故障节点列表包含: Server_1。假设计算得到Server_2。如果Server_2工作正常,则转入申请步骤 2。否则需反复执行此步骤,直到到工作正常的Server,转入申请步骤2; 或分布式系统中的所有锁管理服务器全部发生故障,转入申请步骤5。

申请步骤2:Server_1(或Server_2)检查锁是否存在。如果存在,说明这 把锁已经被申请过,转入申请步骤3。否则,转入申请步骤2.1。

申请步骤2.1:检查锁申请请求是否合法。此时做检查点1。

检查点1:通过ResourceID,来检查锁是否为自己所管理。检查方式为: 执行锁管理服务器集的Hash_cluster,得到的ServerID,与自己的ID比较即 可。

(1)如果是自己管理的锁,则检查完成,转入申请步骤2.2。

(2)如果不是自己管理的锁,则表示锁的原始锁管理服务器发生故障。 此时做检查点2。

检查点2:检查ResourceX的历史故障节点列表中是否存在工作正常的 Server。

(1)如果存在,则本次锁申请请求为非法请求,转入申请步骤5。

(2)如果不存在,则检查完成,转入申请步骤2.2。

申请步骤2.2:Server1(或Server2)根据ResourceID创建锁,并分配给客 户端。

申请步骤3:检查锁是否已被占用。(1)如果锁的状态为空闲,则启动租 约定时器,将锁置为占用状态,锁的持有者置为客户端。转入申请步骤4。(2) 如果锁已经被占用,转入申请步骤3.1。

申请步骤3.1:(1)如果“CMS仅支持锁管理服务器状态查询”,转入 申请步骤5。(2)如果“CMS同时支持锁管理服务器和客户端状态查询”, 并且锁的持有者不是无,则转入申请步骤3.2。

申请步骤3.2,查询锁的持有者状态。

(1)如果锁的持有者工作正常,则转入申请步骤5。

(2)如果锁的持有者发生故障,将锁置为占用状态,锁的持有者置为客 户端。转入申请步骤4。

申请步骤4:通知客户端,锁申请成功。操作完成。

申请步骤5:通知客户端,锁申请失败。操作完成。

为使本领域的技术人员更加理解本发明实施例,下面举例说明锁管理服务 器对锁释放请求的处理过程。请参考图9,图9为本发明实施例中锁管理服务 器对锁释放请求进行处理的示意图。包括以下步骤:

释放步骤1:客户端请求释放资源标识为ResourceX对应的锁,以 Hash_clutser计算得到Server_1。判断Server_1的状态,如果工作正常,则转 入释放步骤2,否则转入释放步骤1.1。

释放步骤1.1:客户端继续执行Server_1的Hash_service(ResourceX的历 史故障节点列表,ResourceX),此时ResourceX的历史故障节点列表包含: Server_1。假设计算得到Server_2。如果Server_2工作正常,则转入释放步骤 2。否则需反复执行此步骤,直到到工作正常的Server,转入释放步骤2; 或分布式系统中的所有锁管理服务器全部发生故障,转入释放步骤5。

释放步骤2:Server_1(或Server_2)检查锁是否存在。如果存在,说明这 把锁已经被申请过,转入释放步骤3。否则,转入释放步骤2.1。

释放步骤2.2:Server1(或Server2)根据ResourceID创建锁。将锁的状态 置为占用,锁的持有者置为无。

释放步骤3:检查锁的持有者是否是客户端。(1)如果锁的持有者是客户 端,则关闭租约定时器,将锁置为空闲状态,锁的持有者置为无。转入释放步 骤4。(2)如果锁的持有者不是客户端,转入释放步骤3.1。

释放步骤3.1:(1)如果“CMS仅支持锁管理服务器状态查询”,转入 释放步骤5。(2)如果“CMS同时支持锁管理服务器和客户端状态查询”, 并且锁的持有者不是无,则转入释放步骤3.2。

释放步骤3.2,查询锁的持有者状态。

(1)如果锁的持有者工作正常,则转入释放步骤5。

(2)如果锁的持有者发生故障,将锁置为空闲状态,锁的持有者置为无。 转入释放步骤4。

释放步骤4:通知客户端,锁释放成功。操作完成。

释放步骤5:通知客户端,锁释放失败。操作完成。

本发明实施例还提供锁管理服务器集扩容。如果锁管理服务器集需要 从N个锁管理服务器扩大到N+1个锁管理服务器,原本N个锁管理服务器中 ServerID的最小值为M,则服务器ID有效范围由[M,M+N)变为[M,M+N+1), 哈希桶的范围由[M,M+N)变为[M,M+N+1),客户端可以利用变化后的服务器 ID有效范围以及哈希同的范围,要利用Hash_cluster以ResourceID为入参得 到中间结果,再获得中间结果对N+1的余数[0,N+1),余数加上M即为新的 ServerID。

对于扩容进来的锁管理服务器(简称为扩容锁管理服务器),需要首先设 置为启动状态,启动扩容锁管理服务器所管理的资源对应的锁的初始化,待初 始化完成之后设置为正常工作状态,此时,扩容锁管理服务器才能对外提供服 务。此外,需要将N变为N+1、扩容后锁管理服务器集中的锁管理服务器的 ServerID、以及扩容后锁管理服务器集中的锁管理服务器的状态同步到客户 端。如果扩容锁管理服务器发现自己管理了其他锁管理服务器(例如:第五锁 管理服务器)的锁,并且第五锁管理服务器的状态为正常工作,则扩容锁管理 服务器删除这些锁。

其中,扩容锁管理服务器所管理的资源对应的锁的初始化的方式为:向 CMS获取扩容锁管理服务器管理的锁,建立锁,将建立的锁为占用,待建立 的锁超时之后,则建立的锁可用。在扩容锁管理服务器所管理的资源对应的锁 的初始化实现的过程中,扩容锁管理服务器可以接收客户端发送的锁申请请求 或锁释放请求。操作过程参见前文。

对于锁管理服务器从发生故障恢复到工作正常的情况,与锁管理服务器集 扩容有相似之处。对于从发生故障恢复到工作正常的锁管理服务器(下文简 称恢复的锁管理服务器),需要首先设置为启动状态,启动恢复的锁管理服务 器所管理的资源对应的锁的初始化,待初始化完成之后设置为正常工作状态, 此时,恢复的锁管理服务器才能对外提供服务。

其中,恢复的锁管理服务器所管理的资源对应的锁的初始化的方式,可参 考扩容锁管理服务器所管理的资源对应的锁的初始化的方式。

本发明实施例还提供资源扩容。如果需要资源扩容,则只需将扩容进来的 资源其添加到CMS即可。对于扩容进来的资源对应的锁,首次被申请时该锁 被添加到对应的锁管理服务器。

本发明实施例还提供锁管理服务器集缩容。在具体实施过程中,可以将 正常工作的锁管理服务器发生故障等效为锁管理服务器集缩容。

基于同一发明构思,本发明实施例还提供一种管理锁的装置,该管理锁的 装置可以是前述锁管理服务器。如图10所示,该管理锁的装置包括:

接收单元101,用于接收第一客户端发送的锁申请请求,所述锁申请请求 包含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按 照预定函数关系,从锁管理服务器集包含的多个锁管理服务器中确定出的

分配单元102,用于若所述第一锁管理服务器中所述资源标识对应的锁的 状态为空闲,则所述第一锁管理服务器将所述锁分配给所述第一客户端;

生成单元103,用于若所述第一锁管理服务器没有所述资源标识对应的锁, 则所述第一锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户 端。

可选的,所述生成单元用于:

根据所述资源标识确定由所述第一锁管理服务器生成所述锁,则所述第一 锁管理服务器根据所述资源标识生成锁,并分配给所述第一客户端。

可选的,所述分配单元102还用于:

若所述第一锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客 户端故障,则所述第一锁管理服务器将所述锁分配给所述第一客户端。

可选的,所述预定函数关系用于将所述资源标识映射为所述多个锁管理服 务器中一个锁管理服务器的标识。

前述图4实施例中的管理锁的方法中的各种变化方式和具体实例同样适用 于本实施例的管理锁的装置,通过前述对管理锁的方法的详细描述,本领域技 术人员可以清楚的知道本实施例中管理锁的装置的实施方法,所以为了说明书 的简洁,在此不再详述。

基于同一发明构思,本发明实施例还提供一种锁管理服务器,所述锁管理 服务器为锁管理服务器集包含的多个锁管理服务器中的一个,请参考图11 所示,该锁管理服务器包括:处理器602,接收器601和通信总线600;其中, 所述处理器602和所述接收器601通过所述通信总线600完成相互间的通信;

接收器601,用于接收第一客户端发送的锁申请请求,所述锁申请请求包 含资源标识,所述锁管理服务器是所述第一客户端根据所述资源标识按照预定 函数关系,从所述多个锁管理服务器中确定出的;

处理器602,用于若所述锁管理服务器中所述资源标识对应的锁的状态为 空闲,则将所述锁分配给所述第一客户端;若所述锁管理服务器没有所述资源 标识对应的锁,则所述锁管理服务器根据所述资源标识生成锁,并分配给所述 第一客户端。

可选的,所述处理器602还用于:

根据所述资源标识确定由所述锁管理服务器生成所述锁,则根据所述资源 标识生成锁,并分配给所述第一客户端。

可选的,所述处理器602还用于:

若所述锁管理服务器中所述锁的状态为占用、且占用所述锁的第二客户端 故障,则将所述锁分配给所述第一客户端。

可选的,所述预定函数关系用于将所述资源标识映射为所述多个锁管理服 务器中一个锁管理服务器的标识。

进一步,在图11中,通信总线600可以包括任意数量的互联的总线和桥, 通信总线600将包括由处理器602代表的一个或多个处理器和存储器604代表 的存储器的各种电路连接在一起。通信总线600还可以将诸如外围设备、稳压 器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知 的,因此,本文不再对其进行进一步描述。总线接口605在通信总线600和接 收器601之间提供接口。接收器601可以是即收发机,提供用于在传输介质上 与各种其他装置通信的单元。

处理器602负责管理通信总线600和通常的处理,而存储器604可以被用 于存储处理器602在执行操作时所使用的数据。

前述图4实施例中的管理锁的方法中的各种变化方式和具体实例同样适用 于本实施例的锁管理服务器,通过前述对管理锁的方法的详细描述,本领域技 术人员可以清楚的知道本实施例中锁管理服务器的实施方法,所以为了说明书 的简洁,在此不再详述。

基于同一发明构思,本发明实施例还提供一种管理锁的装置,该管理锁的 装置可以是前述锁管理服务器。如图12所示,该管理锁的装置包括:

接收单元201,用于接收第一客户端发送的锁释放请求,所述锁释放请求 包含资源标识,所述第一锁管理服务器是所述第一客户端根据所述资源标识按 照预定函数关系,从所述多个锁管理服务器中确定出的;

释放单元202,用于若所述第一锁管理服务器中所述锁被所述第一客户端 占用,则所述第一锁管理服务器将所述锁的状态设置为空闲。

可选的,所述装置还包括:

生成单元203,用于若所述第一锁管理服务器没有所述锁,则所述第一锁 管理服务器根据所述资源标识生成锁,并设置生成的锁的状态为占用。

可选的,所述释放单元202还用于:

若所述第一锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客 户端发生故障,则所述第一锁管理服务器将所述锁的状态设置为空闲。

可选的,所述预定函数关系用于将所述资源标识映射为所述多个锁管理服 务器中一个锁管理服务器的标识。

前述图6实施例中的管理锁的方法中的各种变化方式和具体实例同样适用 于本实施例的管理锁的装置,通过前述对管理锁的方法的详细描述,本领域技 术人员可以清楚的知道本实施例中管理锁的装置的实施方法,所以为了说明书 的简洁,在此不再详述。

基于同一发明构思,本发明实施例还提供一种锁管理服务器,所述锁管理 服务器为锁管理服务器集包含的多个锁管理服务器中的一个,请参考图13 所示,所述锁管理服务器包括:处理器702,接收器701和通信总线700;其 中,所述处理器702和所述接收器701通过所述通信总线700完成相互间的通 信;

接收器701,用于接收第一客户端发送的锁释放请求,所述锁释放请求包 含资源标识,所述锁管理服务器是所述第一客户端根据所述资源标识按照预定 函数关系,从所述多个锁管理服务器中确定出的;

处理器702,用于若所述锁管理服务器中所述锁被所述第一客户端占用, 则将所述锁的状态设置为空闲。

可选的,所述处理器702用于:

若所述锁管理服务器没有所述锁,则根据所述资源标识生成锁,并设置生 成的锁的状态为占用。

可选的,所述处理器702用于:

若所述锁管理服务器中所述锁的状态为占用,且占用所述锁的第二客户端 发生故障,则将所述锁的状态设置为空闲。

可选的,所述预定函数关系用于将所述资源标识映射为所述多个锁管理服 务器中一个锁管理服务器的标识。

进一步,在图13中,通信总线700可以包括任意数量的互联的总线和桥, 通信总线700将包括由处理器702代表的一个或多个处理器和存储器704代表 的存储器的各种电路连接在一起。通信总线700还可以将诸如外围设备、稳压 器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知 的,因此,本文不再对其进行进一步描述。总线接口705在通信总线700和接 收器701之间提供接口。接收器701可以是即收发机,提供用于在传输介质上 与各种其他装置通信的单元。

处理器702负责管理通信总线700和通常的处理,而存储器704可以被用 于存储处理器702在执行操作时所使用的数据。

前述图6实施例中的管理锁的方法中的各种变化方式和具体实例同样适用 于本实施例的锁管理服务器,通过前述对管理锁的方法的详细描述,本领域技 术人员可以清楚的知道本实施例中锁管理服务器的实施方法,所以为了说明书 的简洁,在此不再详述。

基于同一发明构思,本发明实施例还提供一种确定锁管理服务器的装置, 该确定锁管理服务器的装置可以是前述客户端。如图14所示,该确定锁管理 服务器的装置包括:

确定单元301,用于根据第一资源标识,按照第一函数关系从锁管理服务 器集包含的多个锁管理服务器中确定出第一锁管理服务器;

发送单元302,用于若所述第一锁管理服务器工作正常,则所述客户端向 所述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申 请请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

可选的,所述确定单元301还用于:

根据第二资源标识,按照所述第一函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述第一 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器;

所述发送单元302还用于:若所述第三锁管理服务器工作正常,则所述客 户端向所述第三锁管理服务器发送第二锁操作请求,所述第二锁操作请求为第 二锁申请请求或第二锁释放请求,所述第二锁操作请求中携带所述第二资源标 识。

前述图2实施例中的确定锁管理服务器方法中的各种变化方式和具体实例 同样适用于本实施例的确定锁管理服务器的装置,通过前述对确定锁管理服务 器的方法的详细描述,本领域技术人员可以清楚的知道本实施例中确定锁管理 服务器的装置的实施方法,所以为了说明书的简洁,在此不再详述。

基于同一发明构思,本发明实施例还提供一种客户端,请参考图15所示, 该客户端包括:处理器802,发送器801和通信总线800;其中,所述处理器 802和所述发送器801通过所述通信总线800完成相互间的通信;

处理器802,用于根据第一资源标识,按照预定函数关系从锁管理服务器 集包含的多个锁管理服务器中确定出第一锁管理服务器;

发送器801,用于若所述第一锁管理服务器工作正常,则所述客户端向所 述第一锁管理服务器发送第一锁操作请求;所述第一锁操作请求为第一锁申请 请求或第一锁释放请求;所述第一锁操作请求携带所述第一资源标识。

可选的,所述处理器802还用于:

根据第二资源标识,按照所述预定函数关系从所述多个锁管理服务器中确 定出第二锁管理服务器;若所述第二锁管理服务器发生故障,则按照所述预定 函数关系从剩余锁管理服务器中确定出第三锁管理服务器,所述剩余锁管理服 务器为所述多个服务器中除所述第二锁管理服务器外的锁管理服务器。

进一步,在图15中,通信总线800可以包括任意数量的互联的总线和桥, 通信总线800将包括由处理器802代表的一个或多个处理器和存储器804代表 的存储器的各种电路连接在一起。通信总线800还可以将诸如外围设备、稳压 器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知 的,因此,本文不再对其进行进一步描述。总线接口805在通信总线800和发 送器801之间提供接口。发送器801可以是即收发机,提供用于在传输介质上 与各种其他装置通信的单元。

处理器802负责管理通信总线800和通常的处理,而存储器804可以被用 于存储处理器802在执行操作时所使用的数据。

前述图2实施例中的确定锁管理服务器方法中的各种变化方式和具体实例 同样适用于本实施例的客户端,通过前述对确定锁管理服务器的方法的详细描 述,本领域技术人员可以清楚的知道本实施例中客户端的实施方法,所以为了 说明书的简洁,在此不再详述。

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

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

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

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

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基 本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要 求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发 明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及 其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

本文发布于:2023-04-14 18:58:16,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/86787.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图