CN107783842B - 一种分布式锁实现方法、设备及存储装置 - Google Patents

一种分布式锁实现方法、设备及存储装置 Download PDF

Info

Publication number
CN107783842B
CN107783842B CN201610792007.0A CN201610792007A CN107783842B CN 107783842 B CN107783842 B CN 107783842B CN 201610792007 A CN201610792007 A CN 201610792007A CN 107783842 B CN107783842 B CN 107783842B
Authority
CN
China
Prior art keywords
lock
ownership
partition
server
node
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610792007.0A
Other languages
English (en)
Other versions
CN107783842A (zh
Inventor
朱云锋
陈新进
杨世泉
卢毅军
杨斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610792007.0A priority Critical patent/CN107783842B/zh
Publication of CN107783842A publication Critical patent/CN107783842A/zh
Application granted granted Critical
Publication of CN107783842B publication Critical patent/CN107783842B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Hardware Redundancy (AREA)

Abstract

本申请的目的是提供一种分布式锁实现方法、设备及存储装置,通过把分布式锁的实现分为主节点和工作节点,主节点向工作节点发送分区的调度请求,工作节点基于所述分区的调度请求,在服务端抢占该分区的分布式锁的所有权;并在服务端创建该分布式锁所有权的锁占有者文件后,向服务端订阅该锁占有者文件的删除通知,在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务,实现了加载该分区以提供相应的业务访问服务,大大提升系统的可用性。

Description

一种分布式锁实现方法、设备及存储装置
技术领域
本申请涉及计算机领域,尤其涉及一种分布式锁实现方法、设备及存储装置。
背景技术
分布式锁服务在大规模云计算场景中被广泛使用,分布在不同计算节点上的客户端进程通常依赖分布式锁来访问共享资源,保证数据的分布式一致性。典型的分布式锁服务是基于分布式一致性系统提供的一类临时文件Ephemeral File(Ephemeral文件,即临时文件)操作接口设计开发的;具体地,分布式锁的抢锁是基于创建Ephemeral文件操作接口实现的,而分布式锁释放锁则是基于删除Ephemeral文件操作接口实现的。
分布式一致性系统中的Ephemeral文件有Owner(归属者)概念,这确保了分布式锁的互斥性。Quorum Server(即分布式一致性系统服务,其中,Quorum为分布式一致性系统服务端的Servers集合)端会记录创建Ephemeral文件的Client(客户端)进程对应的Session(会话)信息,其它Client进程尝试创建已存在Ephemeral文件,Quorum Server通过检查该Ephemeral文件归属的Session与尝试创建的Client进程的Session不匹配,则告知尝试创建的Client的Ephemeral文件创建失败,即抢锁失败。
分布式一致性系统中的Ephemeral文件还有生命期概念,这确保了分布式锁的可用性。Ephemeral文件归属Session依赖Client进程与Quorum Server端定期心跳来更新生命期,Client进程在本端认定Session超时时间内没有收到来自任何一个Quorum Server的心跳包回复,则判定该Session超时,确认自己丢失该分布式锁;任何一个Quorum Server在本端认定的Session超时时间内没有接收到来自任何一个Client进程的心跳包,则判定该Session超时,主动删除锁文件(即Ephemeral文件),释放该分布式锁的所有权。
在大规模云计算环境场景中,很多应用服务均存在如下场景:一个Master(主节点)调度多个Worker(工作节点)来协同并发提供服务,每个Worker争抢分布式锁,在获取某个分布锁的所有权之后负责提供对应某块Partition(分区)具体的访问服务,并通过定期心跳向Master汇报服务状态。例如,在很多类型存储系统中,一个Master调度多个Worker来加载不同Partition并发提供存储访问服务,Master接收到来云计算服务中的业务客户端的业务访问请求,根据目标Partition被调度到的目标Worker,回复该业务客户端具体应该访问的目标Worker,故而将业务访问请求转发至该目标Worker进行处理;同时,处于正常服务状态的该目标Worker会通过定期心跳向Master汇报自身的状态信息。
为了避免多个Worker同时加载一个Partition共同提供存储服务导致的数据被写坏可能,Master在调度一个Worker服务的某Partition时,该Worker必须去争抢到该Partition对应的分布式锁的所有权,方可加载该Partition,提供相应的服务。在现有技术中,分布锁的所有权通过Worker互相争抢获得,如果占据着分布式锁的Worker与后端Quorum Server心跳保持正常,即Worker与后端Quorum ServerSession之间的会话超时之前可以收到心跳包回复,那么该Worker会一直占有该分布式锁,其余Workers无法获得该分布式锁的所有权。但是实际的分布式并发环境复杂难控,存在如下分区无法对外提供正常服务的场景,如图2所述,占据着某Partition对应分布式锁的所有权的Worker与QuorumServer之间心跳正常,即在Session超时前总可以收到心跳包回复,故一直占据着该分布式锁的所有权,而业务服务线程因为该Worker机器的Load(负载)过高而无法正常业务服务请求,即该Worker加载的Partition无法对用户服务。在此情况下,即使Master通过与Worker之间心跳异常发现该Worker不能正常工作,亦无法动态调度其它Worker来服务该Partition,原因在于其它Worker无法获得该Partition对应分布式锁所有权。
申请内容
本申请的一个目的是提供一种分布式锁实现方法、设备及存储装置,能够解决工作节点不能正常工作下,主节点无法动态调整其他的工作节点来服务分区,导致该节点加载的分区无法对用户服务的问题。
根据本申请的一个方面,提供了一种在工作节点端的分布式锁实现方法,该方法包括:
基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件包括所述工作节点及其所抢占的分布式锁的所有权,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,加载所述分区,并提供与所述分区的调度请求对应的业务访问服务。
进一步地,上述方法中,所述在服务端创建对应于所述分布式锁的所有权的锁占有者文件,包括:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。
进一步地,上述方法中,所述提供与所述分区的调度请求对应的业务访问服务的同时,还包括:
向所述主节点发送业务访问服务的状态信息。
进一步地,上述方法中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。
进一步地,上述方法中,所述向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。
进一步地,上述方法中,所述向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权。
进一步地,上述方法中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
根据本申请的另一方面,还提供了一种在主节点端的分布式锁实现方法,其中,所述方法包括:
向工作节点发送分区的调度请求;
在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
进一步地,上述方法中,所述主节点与所述工作节点通信异常包括:
所述主节点从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。
进一步地,上述方法中,所述业务访问服务的状态信息包含于所述主节点与工作节点之间的心跳包中。
进一步地,上述方法中,服务端删除所述锁占有者文件之后,还包括:
向另一工作节点发送分区的调度请求。
进一步地,上述方法中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
根据本申请的另一方面,还提供了一种分布式锁实现的工作节点设备,其中,所述工作节点设备包括:
抢占装置,用于基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
创建订阅装置,用于在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
加载访问装置,用于在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,加载所述分区,并提供与所述分区的调度请求对应的业务访问服务。
进一步地,上述工作节点设备中,所述创建订阅装置用于:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。
进一步地,上述工作节点设备中,所述加载访问装置还用于:
向所述主节点发送业务访问服务的状态信息。
进一步地,上述工作节点设备中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。
进一步地,上述工作节点设备中,所述创建订阅装置还用于:
若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。
进一步地,上述工作节点设备中,所述创建订阅装置还用于:
若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权。
进一步地,上述工作节点设备中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
根据本申请的另一方面,还提供了一种分布式锁实现的主节点设备,其中,所述主节点设备包括:
发送装置,用于向工作节点发送分区的调度请求;
删除装置,用于在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
进一步地,上述主节点设备中,所述删除装置用于:
从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。
进一步地,上述主节点设备中,所述发送装置还用于:
向另一工作节点发送分区的调度请求。
进一步地,上述主节点设备中,所述业务访问服务的状态信息包含于所述主节点与工作节点之间的心跳包中。
进一步地,上述主节点设备中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
根据本申请的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
在服务端创建对应于所有权的锁占有者文件后,向所述服务端订阅所述对应于所述锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务。
根据本申请的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
向工作节点发送分区的调度请求;
在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除对应于所述分布式锁的所有权的锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
与现有技术相比,本申请通过把分布式锁实现分为主节点和工作节点,主节点向工作节点发送分区的调度请求,工作节点基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;并且在服务端创建对应于所述分布式锁的所有权的锁占有者文件后,向所述服务端订阅所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,以待该工作节点与主节点之间的业务访问服务的状态信息异常,主节点在服务端删除所述对应于所述分布式锁的所有权的锁占有者文件,由于工作节点收到来自服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则所述工作节点在所述服务端释放所述分布式锁的所有权,以使主节点调度其他的工作节点来抢占该分区的分布式锁的所有权,由于被删除的该分区的分布式锁的所有权可以由其他工作节点来抢占成功,并由其他工作节点进而加载该分区以提供与所述分区的调度请求对应的业务访问服务,实现了在该工作节点不能正常工作的情况下,由主节点主动删除该工作节点抢占的分布式锁的所有权的锁占有者文件,来释放该分区对应的分布式锁的所有权,保证该分区的分布式锁能被其他工作节点抢占并加载该分区已提供相应的服务,大大提升了系统的可用性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出现有方案的分区无法对外提供正常业务访问服务的场景示意图;
图2示出根据本申请一个方面的一种分布式锁实现方法的一优选的实施例的流程图;
图3示出根据本申请一个方面的一种分布式锁实现方法的一优选的实施例中的Master与Worker之间业务访问服务的状态信息异常时的流程图;
图4示出根据本申请一个方面的一种分布式锁实现方法的一优选实施例中的Master与Worker之间业务访问服务的状态信息异常时,Master调度Worker2的流程图;
图5示出根据本申请一个方面的一种分布式锁实现方法的一优选的应用场景为存储访问服务场景的流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
根据本申请的一个方面,提供一种在工作节点端的分布式锁实现方法,该方法的执行主体是工作节点,该方法包括:
步骤S1,基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;在此,所述服务端可以是分布式系统中的服务端,亦可以是云计算服务场景中的服务端,在本申请的一个优选实施例中,优选所述服务端为Quorum Server端(分布式一致性系统服务端),当然,本领域技术人员应能理解,其他现有的或今后可能出现的所述复制请求响应状态如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
具体地,在大规模云计算场景中,如图2所示,每个Worker在被Master调度去服务某Partition时候,会首先去争抢该Partition对应的分布式锁。,故Worker1基于Master(主节点)发送的PartitionA(分区)的调度请求,在Quorum Server端抢占所述PartitionA对应的分布式锁。此处需要说明的是该Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的过程为在所述Quorum Server端的后端创建所述PartitionA对应的分布式锁的Ephemeral File(临时文件),若所述Worker1在Quorum Server端的后端创建所述PartitionA对应的分布式锁的Ephemeral File成功,则表示Worker1抢占所述PartitionA对应的分布式锁成功,若创建所述PartitionA对应的分布式锁的Ephemeral File失败,则表示Worker1抢占所述PartitionA对应的分布式锁失败,仍需继续抢占所述PartitionA对应的分布式锁。
如图2中所述,在Worker1在成功获得所述PartitionA对应的分布式锁的所有权之后,继续步骤S2,在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件包括所述工作节点及其所抢占的分布式锁的所有权,所述锁占有者文件由所述主节点在与工作节点通信异常时删除。具体地,步骤S2中Worker1会继续在Quorum Server的后端创建对应所述PartitionA对应的分布式锁的Lock Holder File(Lock Holder文件,即锁占有者文件),该Lock Holder文件的文件路径上会包括有Worker1及其对应的分布式锁所属PartitionA,具体地体现方式为Worker1的Id信息及相应的分布式锁所属PartitionA的Id信息;Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的Lock Holder文件之后,继续向所述Quorum Server订阅所述分布式锁的Lock Holder文件的删除通知。
在此需要说明的是,Quorum Client(分布式一致性系统服务端集合客户端),即(Worker或者Master)与Quorum Server之间维持定期心跳来进行通信,以更新会话在Client/Server(客户设备/服务设备)端的有效期,当然Quorum Server端发生了订阅文件的被创建、更新、删除等变更事件,Quorum Server也会在心跳包回复里面,携带上上述变更事件,在本申请的优选实施例中,是Worker向所述Quorum Server订阅了所述分布式锁的Lock Holder文件的删除通知,故Worker与所述Quorum Server之间的额心跳回复包中包含有所述分布式锁的Lock Holder文件的删除通知。
接着步骤S3,在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,加载所述分区,并提供与所述分区的调度请求对应的业务访问服务。具体地,Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的Lock Holder文件之后,继续向所述Quorum Server订阅所述分布式锁的Lock Holder文件的删除通知之后,Worker1才开始加载所述PartitionA并提供所述PartitionA的调度请求对应的业务访问服务,进而实现了在Worker与Quorum Server之间正常通信,但Worker与Master之间业务线程通信异常时,可以通过Master主动删除分布式锁的锁占有者文件,由于该Worker1订阅了该锁占有者文件的删除通知,以使Worker1收到来自Master发送的所述锁占有者文件的删除通知释放分布式锁的所有权,进而退出进程,而Master在删除了所述锁占有者文件之后,可调度其他的Worker来争抢所述PartitionA对应的分布式锁的所有权,保证所述PartitionA能继续被其他Worker继续加载以提供服务,大大提升系统的可用性。
本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述步骤S2中的在服务端创建对应于所述分布式锁的所有权的锁占有者文件,包括:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。具体地,若Worker1在Quorum Server的后端创建所述PartitionA对应的分布式锁的Ephemeral File成功,即表示Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁成功后,Worker1就接着在Quorum Server的后端创建所述分布式锁的Lock Holder文件,以供调度Worker1抢占PartitionA对应的分布式锁的Master通过删除所述分布式锁的Lock Holder文件,从而释放Worker1的分布式锁的所有权,以调度其他的Worker来继续加载所述PartitionA服务,大大提升系统的可用性。
本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述步S3中的提供与所述分区的调度请求对应的业务访问服务的同时,还包括:
向所述主节点发送业务访问服务的状态信息,其中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。具体地,Worker1加载所述PartitionA并提供所述PartitionA的调度请求对应的业务访问服务的同时,还要向Master汇报自身与Master之间的业务访问服务的状态信息,其中,Worker1通过Master与Worker1之间的心跳包的形式向Master发送的所述业务访问服务的状态信息,使得所述业务访问服务的状态信息包含于Master与Worker1之间的心跳包中,进而能够通过心跳包快速周期地获悉当前的Worker1的业务访问服务的状态信息。
本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述步骤S2中的向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
步骤S4,若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。具体地,当因为Worker1所在机器Load(负载)过高,使得Worker1与Master之间的业务访问服务对应的业务线程不能正常工作,Master接收不到来自该Worker1的心跳包时,即若Worker1与Master之间的心跳包异常时,Master需要重新调度所述Paritition至其它Worker。而在这之前,需要确保该Worker1能够主动释放所述Partition对应的分布式锁的所有权,如图3所示,Master会根据记录的Worker 1以及其业务访问服务所属的所述Paritition A,找到对应的所述分布式锁的Lock Holder文件,主动删除掉Quorum Server的后端创建的所述分布式锁的Lock Holder文件之后,则订阅了所述分布式锁的Lock Holder文件的删除通知的Worker1,会接收到来自Quorum Server端发送的所述分布式锁的Lock Holder文件的删除通知,用于指示Master需要重新调度自身当前服务的所述PartitionA,因此Worker1基于所述分布式锁的Lock Holder文件的删除通知,在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,即删除所述PartitionA对应的分布式锁的Ephemeral File,并退出进程,以达到释放所述PartitionA对应的分布式锁的所有权的目的,进而以供其他Worker来抢占所述PartitionA对应的分布式锁的所有权,进而使其他的Worker来继续加载所述PartitionA服务如图4所示,大大提升系统的可用性。
接着在工作节点端的分布式锁实现方法一优选的实施例,图4中Worker1基于所述分布式锁的Lock Holder文件的删除通知,在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权后,Master将Partition A重新调度至Worker 2,Worker 2会在所述Quorum Server端不断尝试抢占所述Partition A对应的分布式锁,即在所述QuorumServer端创建所述PartitionA对应的分布式锁的Ephemeral File。如上述在工作节点端的分布式锁实现方法一优选实施例中分析的,当Worker 1收到来自所述Quorum Server端发送的所述分布式锁的LockHolder文件的删除通知,或者Worker1与所述Quorum Server端之间的Session超时时,Worker 1会主动释放所述Partition A对应的分布式锁的占有权,因此,最终Worker 2可以成功获得所述Partition A对应的分布式锁的所有权;Worker 2在成功占有所述Partition A对应的分布式锁之后,如图4所示的,Worker 2会在所述QuorumServer端创建有关Worker 2占有所述Partition A对应的分布式锁的LockHolder文件,并订阅所述分布式锁的LockHolder文件的删除通知;然后,Worker 2会加载Partition A以提供服务,大大提升系统的可用性,并通过心跳包向Master汇报自身与Master之间的业务访问服务的状态信息,其中,Worker1通过Master与Worker1之间的心跳包的形式向Master发送的所述业务访问服务的状态信息。
本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述步骤S2中的向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
步骤S5,若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权,在此,所述对应于所述分布式锁的所有权的锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。具体地,在Worker 1接收、处理Quorum Server端的所述分布式锁的LockHolder文件的删除通知的线程本身也可能被hang(悬空),因此在申请的中将订阅所述分布式锁的Lock Holder文件的删除通知放入Client(客户端)与Quorum Server之间的心跳回复包中,以确保如果Worker 1没有及时收到文件变更通知在所述Client(客户端)中的Worker1与Quorum Server之间的会话时间内,没有收到所述Quorum Server端发送的所述分布式锁的Lock Holder文件的删除通知,即表示在Worker1与Quorum Server之间的会话时间内Worker 1也没有及时收到包含有所述分布式锁的Lock Holder文件的删除通知的心跳包,此时确定Worker1与Quorum Server之间Session(会话)超时,Worker 1同样会在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,即删除所述PartitionA对应的分布式锁的Ephemeral File,并退出进程,以达到直接释放所述PartitionA对应的分布式锁的所有权的目的,进而以供其他Worker来抢占所述PartitionA对应的分布式锁的所有权,进而使其他的Worker来继续加载所述PartitionA服务,大大提升系统的可用性。
接着本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述步骤S2中的向所述服务端订阅所述锁占有者文件的删除通知之后,即可分为两种情况:一方面,当worker1收到所述分布式锁的Lock Holder文件的删除通知之后,会在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,退出进程;另一方面,将所述分布式锁的Lock Holder文件的删除通知放入Client(客户端)中的worker1与Quorum Server之间的心跳回复包中,若Worker 1在worker1与Quorum Server之间的Session(会话)超时前,没有收到含有所述分布式锁的Lock Holder文件的删除通知的心跳回复包,则Worker 1同样会直接在所述Quorum Server端释放掉所述PartitionA对应的分布式锁的所有权,退出进程。在此,上述两种情况是互为补充的,例如,M老师10分钟内给N同学发封邮件,邮件内容是让N同学去领课本,则要么N同学会在十分钟内会收到邮件内容为去领课本的邮件,N同学收到该邮件后主动去领课本,要么就是超过十分钟N同学一直没收到任何来自M老师发送的去领课本的邮件,这个时候N同学知道老师的邮件肯定因为什么原因,中途丢了,N同学也会主动去领课本。
本申请的在主节点端的分布式锁实现方法一优选的实施例中,该方法的执行主体是主节点,该方法包括:
步骤S11,向工作节点发送分区的调度请求;例如,Master调度Worker1并向该Worker1发送PartitionA的调度请求,以待Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的所有权。即若Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的所有权成功,即Worker1在所述Quorum Server端的后端成功创建所述PartitionA对应的分布式锁的Ephemeral File(临时文件)之后,则继续在QuorumServer的后端创建对应所述PartitionA对应的分布式锁的所有权的Lock Holder File(Lock Holder文件,即锁占有者文件),该Lock Holder文件的文件路径上会包括有Worker1及其对应的分布式锁所属PartitionA,具体地体现方式为Worker1的Id信息及相应的分布式锁所属PartitionA的Id信息;Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的Lock Holder文件之后,Worker1加载分区并提供调度请求对应的业务访问服务,并向Master发送的业务访问服务的状态信息。
步骤22,在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。在此,Master通过与Worker1之间的心跳包的形式接收来自Worker1基于所述PartitionA的调度请求发送的业务访问服务的状态信息,使得所述业务访问服务的状态信息包含于Master与Worker1之间的心跳包中,进而能够通过心跳包快速周期地获悉当前的Worker1的业务访问服务的状态信息。优选地,所述主节点与所述工作节点通信异常包括:所述主节点从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。例如,若Master与Worker1之间的通信异常,即Master从Worker1接收到基于所述PartitionA的调取请求发送的异常业务访问服务的状态信息,Master则在Quorum Server删除对应于所述分布式锁的所有权的Lock Holder文件,从而可以使Master调度其他Worker来继续加载所述PartitionA如图4所示,以提供业务访问服务,大大提升了系统的可用性。
本申请的在主节点端的分布式锁实现方法一优选的实施例中,所述主节点与所述工作节点通信异常时,即Master发现与Worker1之间的业务访问服务的状态信息出现异常,Master则直接在Quorum Server端删除对应于所述分布式锁的所有权的Lock Holder文件,以使Quorum Server端基于所述分布式锁的所有权的Lock Holder文件的删除,向Worker1发送所述分布式锁的所有权的Lock Holder文件的删除通知,其中,所述分布式锁的所有权的Lock Holder文件的删除通知以心跳包的形式在Master与Worker1之间进行通知,从而使得Worker1在Quorum Server端释放所述分布式锁的所有权,进而能够使Master调度其他Worker来抢占所述PartitionA对应的分布式锁的所有权,并继续加载所述PartitionA以提供业务访问服务,大大提升了系统的可用性。
本申请的在主节点端的分布式锁实现方法一优选的实施例中,所述步骤22服务端删除所述锁占有者文件之后,还包括:
步骤33,向另一工作节点发送分区的调度请求。在此,当Master发现与Worker1之间的业务访问服务的状态信息异常,Master则直接在Quorum Server端删除对应于所述分布式锁的所有权的Lock Holder文件之后,向其他的Worker发送所述PartitionA的调度请求,以调度其他Worker来抢占所述PartitionA对应的分布式锁的所有权,并继续加载所述PartitionA以提供业务访问服务,大大提升了系统的可用性。
根据本申请的一个方面,提供一种分布式锁实现的工作节点设备,该工作节点设备包括:
抢占装置1,用于基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;在此,所述服务端可以是分布式系统中的服务端,亦可以是云计算服务场景中的服务端,在本申请的一个优选实施例中,优选所述服务端为Quorum Server端(分布式一致性系统服务端),当然,本领域技术人员应能理解,其他现有的或今后可能出现的所述复制请求响应状态如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
具体地,在大规模云计算场景中,如图2所示,每个Worker在被Master调度去服务某Partition时候,会首先去争抢该Partition对应的分布式锁。,故Worker1基于Master(主节点)发送的PartitionA(分区)的调度请求,在Quorum Server端抢占所述PartitionA对应的分布式锁。此处需要说明的是该Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的过程为在所述Quorum Server端的后端创建所述PartitionA对应的分布式锁的Ephemeral File(临时文件),若所述Worker1在Quorum Server端的后端创建所述PartitionA对应的分布式锁的Ephemeral File成功,则表示Worker1抢占所述PartitionA对应的分布式锁成功,若创建所述PartitionA对应的分布式锁的Ephemeral File失败,则表示Worker1抢占所述PartitionA对应的分布式锁失败,仍需继续抢占所述PartitionA对应的分布式锁。
如图2中所述,在Worker1在成功获得所述PartitionA对应的分布式锁的所有权之后,继续执行创建订阅装置2,所述创建订阅装置2用于:在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件包括所述工作节点及其所抢占的分布式锁的所有权,所述锁占有者文件由所述主节点在与工作节点通信异常时删除。具体地,所述创建订阅装置2中Worker1会继续在Quorum Server的后端创建对应所述PartitionA对应的分布式锁的Lock Holder File(Lock Holder文件,即锁占有者文件),该Lock Holder文件的文件路径上会包括有Worker1及其对应的分布式锁所属PartitionA,具体地体现方式为Worker1的Id信息及相应的分布式锁所属PartitionA的Id信息;Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的Lock Holder文件之后,继续向所述Quorum Server订阅所述分布式锁的Lock Holder文件的删除通知。
接着执行加载访问装置3,所述加载访问装置3用于:在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,加载所述分区,并提供与所述分区的调度请求对应的业务访问服务。具体地,Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的Lock Holder文件之后,继续向所述Quorum Server订阅所述分布式锁的LockHolder文件的删除通知之后,Worker1才开始加载所述PartitionA并提供所述PartitionA的调度请求对应的业务访问服务,进而实现了在Worker与Quorum Server之间正常通信,但Worker与Master之间业务线程通信异常时,可以通过Master主动删除分布式锁的锁占有者文件,由于该Worker1订阅了该锁占有者文件的删除通知,以使Worker1收到来自Master发送的所述锁占有者文件的删除通知释放分布式锁的所有权,进而退出进程,而Master在删除了所述锁占有者文件之后,可调度其他的Worker来争抢所述PartitionA对应的分布式锁的所有权,保证所述PartitionA能继续被其他Worker继续加载以提供服务,大大提升系统的可用性。
本申请的在工作节点端的分布式锁实现方法一优选的实施例中,所述创建订阅装置2用于:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。具体地,若Worker1在Quorum Server的后端创建所述PartitionA对应的分布式锁的Ephemeral File成功,即表示Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的所有权成功后,Worker1就接着在Quorum Server的后端创建所述分布式锁的所有权的Lock Holder文件,以供调度Worker1抢占PartitionA对应的分布式锁的Master通过删除所述分布式锁的所有权的Lock Holder文件,从而释放Worker1的分布式锁的所有权,以调度其他的Worker来继续加载所述PartitionA服务,大大提升系统的可用性。
本申请的分布式锁实现的工作节点设备一优选的实施例中,所述加载访问装置3,还用于:
向所述主节点发送业务访问服务的状态信息,其中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。具体地,Worker1加载所述PartitionA并提供所述PartitionA的调度请求对应的业务访问服务的同时,还要向Master汇报自身与Master之间的业务访问服务的状态信息,其中,Worker1通过Master与Worker1之间的心跳包的形式向Master发送的所述业务访问服务的状态信息,由于所述业务访问服务的状态信息包含于Master与Worker1之间的心跳包中,进而能够通过心跳包快速周期地获悉当前的Worker1的业务访问服务的状态信息及异常业务访问服务的状态信息。
本申请的在分布式锁实现的工作节点设备一优选的实施例中,所述创建订阅装置2,还用于:
若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。具体地,当因为Worker1所在机器Load(负载)过高,使得Worker1与Master之间的业务访问服务对应的业务线程不能正常工作,Master接收不到来自该Worker1的心跳包时,即若Worker1与Master之间的心跳包异常时,Master需要重新调度所述Paritition至其它Worker。而在这之前,需要确保该Worker1能够主动释放所述Partition对应的分布式锁的所有权,如图3所示,Master会根据记录的Worker 1以及其业务访问服务所属的所述Paritition A,找到对应的所述分布式锁的所有权的Lock Holder文件,主动删除掉Quorum Server的后端创建的所述分布式锁的所有权的Lock Holder文件之后,则订阅了所述分布式锁的所有权的Lock Holder文件的删除通知的Worker1,会接收到来自Quorum Server端发送的所述分布式锁的所有权的Lock Holder文件的删除通知,用于指示Master需要重新调度自身当前服务的所述PartitionA,因此Worker1基于所述分布式锁的所有权的Lock Holder文件的删除通知,在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,即删除所述PartitionA对应的分布式锁的所有权的Ephemeral File,并退出进程,以达到释放所述PartitionA对应的分布式锁的所有权的目的,由于被删除的所述PartitionA对应的分布式锁的所有权可以由其他Worker来抢占,进而使其他Worker来抢占所述PartitionA对应的分布式锁的所有权成功后,继续加载所述PartitionA服务如图4所示,大大提升系统的可用性。
接着在本申请的分布式锁实现的工作节点设备一优选的实施例,图4中Worker1基于所述分布式锁的所有权的Lock Holder文件的删除通知,在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权后,Master将Partition A重新调度至Worker 2,Worker 2会在所述Quorum Server端不断尝试抢占所述Partition A对应的分布式锁的所有权,即在所述Quorum Server端创建所述PartitionA对应的分布式锁的所有权的Ephemeral File。如上述在工作节点端的分布式锁实现方法一优选实施例中分析的,当Worker 1收到来自所述Quorum Server端发送的所述分布式锁的所有权的LockHolder文件的删除通知,或者Worker 1与所述Quorum Server端之间的Session超时时,Worker 1会主动释放所述Partition A对应的分布式锁的所有权,因此,最终Worker 2可以成功获得所述Partition A对应的分布式锁的所有权;Worker 2在成功占有所述Partition A对应的分布式锁之后,如图4所示的,Worker 2会在所述Quorum Server端创建有关Worker 2占有所述Partition A对应的分布式锁的所有权的LockHolder文件,并订阅所述分布式锁的所有权的LockHolder文件的删除通知;然后,Worker 2会加载Partition A以提供服务,大大提升系统的可用性,并通过心跳包向Master汇报自身与Master之间的业务访问服务的状态信息及及异常业务访问服务的状态信息,其中,Worker1通过Master与Worker1之间的心跳包的形式向Master发送的所述业务访问服务的状态信息。
本申请的分布式锁实现的工作节点设备一优选的实施例中,所述创建订阅装置2,还用于:
若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权,在此,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。具体地,在Worker 1接收、处理Quorum Server端的所述分布式锁的Lock Holder文件的删除通知的线程本身也可能被hang(悬空),因此在申请的中将订阅所述分布式锁的Lock Holder文件的删除通知放入Client(客户端)与Quorum Server之间的心跳回复包中,以确保如果Worker 1没有及时收到文件变更通知在所述Client(客户端)中的Worker1与Quorum Server之间的会话时间内,没有收到所述Quorum Server端发送的所述分布式锁的所有权的Lock Holder文件的删除通知,即表示在Worker1与Quorum Server之间的会话时间内Worker 1也没有及时收到包含有所述分布式锁的所有权的Lock Holder文件的删除通知的心跳包,此时确定Worker1与Quorum Server之间Session(会话)超时,Worker1同样会在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,即删除所述PartitionA对应的分布式锁的Ephemeral File,并退出进程,以达到直接释放所述PartitionA对应的分布式锁的所有权的目的,由于被删除的所述PartitionA对应的分布式锁的所有权可以由其他Worker来抢占,所述PartitionA对应的分布式锁的所有权,进而使其他Worker抢占所述PartitionA对应的分布式锁的所有权成功后,来继续加载所述PartitionA服务,大大提升系统的可用性。
接着本申请的分布式锁实现的工作节点设备一优选的实施例中,所述创建订阅装置2中可分为两种情况:一方面,当worker1收到所述分布式锁的所有权的Lock Holder文件的删除通知之后,会在所述Quorum Server端释放所述PartitionA对应的分布式锁的所有权,退出进程;另一方面,将所述分布式锁的Lock Holder文件的删除通知放入Client(客户端)中的worker1与Quorum Server之间的心跳回复包中,若Worker 1在worker1与QuorumServer之间的Session(会话)超时前,没有收到含有所述分布式锁的所有权的Lock Holder文件的删除通知的心跳回复包,则Worker 1同样会直接在所述Quorum Server端释放掉所述PartitionA对应的分布式锁的所有权,退出进程。在此,上述两种情况是互为补充的,例如,M老师10分钟内给N同学发封邮件,邮件内容是让N同学去领课本,则要么N同学会在十分钟内会收到邮件内容为去领课本的邮件,N同学收到该邮件后主动去领课本,要么就是超过十分钟N同学一直没收到任何来自M老师发送的去领课本的邮件,这个时候N同学知道老师的邮件肯定因为什么原因,中途丢了,N同学也会主动去领课本。
本申请的分布式锁实现的主节点设备一优选的实施例中,该主节点设备包括:
发送装置11,用于向工作节点发送分区的调度请求;例如,Master调度Worker1并向该Worker1发送PartitionA的调度请求,以待Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁。即若Worker1在Quorum Server端抢占所述PartitionA对应的分布式锁的成功,即Worker1在所述Quorum Server端的后端成功创建所述PartitionA对应的分布式锁的所有权的Ephemeral File(临时文件)之后,则继续在Quorum Server的后端创建对应所述PartitionA对应的分布式锁的所有权的Lock Holder File(Lock Holder文件,即锁占有者文件),该Lock Holder文件的文件路径上会包括有Worker1及其对应的分布式锁所属PartitionA,具体地体现方式为Worker1的Id信息及相应的分布式锁所属PartitionA的Id信息;Worker1在Quorum Server的后端成功创建所述PartitionA对应的分布式锁的所有权的Lock Holder文件之后,Worker1加载分区并提供调度请求对应的业务访问服务,并向Master发送的业务访问服务的状态信息。
删除装置22,在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。在此,Master通过与Worker1之间的心跳包的形式接收来自Worker1基于所述PartitionA的调度请求发送的业务访问服务的状态信息,使得所述业务访问服务的状态信息包含于Master与Worker1之间的心跳包中,进而能够通过心跳包快速周期地获悉当前的Worker1的业务访问服务的状态信息。优选地,所述删除装置2用于:从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。例如,若Master与Worker1之间的通信异常,即Master从Worker1接收到基于所述PartitionA的调取请求发送的异常业务访问服务的状态信息,Master则在Quorum Server端删除对应于所述分布式锁的所有权的Lock Holder文件,从而可以使Master调度其他Worker来继续加载所述PartitionA如图4所示,以提供业务访问服务,大大提升了系统的可用性。
本申请的分布式锁实现的主节点设备一优选的实施例中,所述删除装置22用于:当Master发现与Worker1之间的业务访问服务的状态信息出现异常,Master则直接在Quorum Server端删除对应于所述分布式锁的所有权的Lock Holder文件,以使QuorumServer端基于所述分布式锁的所有权的Lock Holder文件的删除,向Worker1发送所述分布式锁的所有权的Lock Holder文件的删除通知,其中,所述分布式锁的所有权的LockHolder文件的删除通知以心跳包的形式在Master与Worker1之间进行通知,从而使得Worker1在Quorum Server端释放所述分布式锁的所有权,进而能够使Master调度其他Worker来抢占所述PartitionA对应的分布式锁的所有权,并继续加载所述PartitionA以提供业务访问服务,大大提升了系统的可用性。
本申请的分布式锁实现的主节点设备一优选的实施例中,所述发送装置11还用于:
向另一工作节点发送分区的调度请求。在此,当Master发现与Worker1之间的业务访问服务的状态信息异常,Master则直接在Quorum Server端删除对应于所述分布式锁的所有权的Lock Holder文件之后,向其他的Worker发送所述PartitionA的调度请求,以调度其他Worker来抢占所述PartitionA对应的分布式锁的所有权,并继续加载所述PartitionA以提供业务访问服务,大大提升了系统的可用性。
综上所述,本申请通过把分布式锁实现分为主节点和工作节点,主节点向工作节点发送分区的调度请求,工作节点基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;并且在服务端创建对应于所述分布式锁的所有权的锁占有者文件后,向所述服务端订阅所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,以待该工作节点与主节点之间的业务访问服务的状态信息异常,主节点在服务端删除对应于所述分布式锁的所有权的锁占有者文件,从而工作节点收到来自主节点发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,在所述服务端释放分布式锁的所有权,以使主节点调度其他的工作节点来抢占该分区的分布式锁,进而加载该分区以提供与所述分区的调度请求对应的业务访问服务,实现了在该工作节点不能正常工作的情况下,由主节点主动删除该工作节点抢占的分布式锁的锁占有者文件,以使该工作节点释放分区对应的分布式锁的所有权,保证该分区的分布式锁能被其他工作节点抢占并加载该分区已提供相应的服务,大大提升了系统的可用性。
本申请在大规模云计算场景中的一个典型的应用场景如图5所示,若该应用场景为存储类服务场景,则所述调度请求为对具体的目标Partition的读访问请求或写访问请求,下面以Worker1对PartitionA的调度请求为读访问请求,而Worker2对PartitionB的调度请求为写访问请求,对本申请的分布式锁实现方法中的Master和Worker进行进一步解释说明。
如图5中所示,在该存储类服务系统中,一个Master调度多个Worker来加载不同目标Partition并发提供存储访问服务,Master对于接收到来自云计算服务中的真正客户设备的对PartitionA的读访问请求以及对PartitionB的写访问请求,根据目标Partition备调度到相应的Worker,回复业务的客户设备具体应该访问的Worker,故而Master将对PartitionA的读访问请求转发至Worker1进行处理,并将对PartitionB的写访问请求转发至Worker2进行处理,如图5中的1.1和2.1的内容所示;接着,Worker1在Quorum Servers端抢占所述PartitionA对应的分布式锁的所有权,即Worker1在所述Quorum Servers端的后端创建所述PartitionA对应的分布式锁的Ephemeral File(临时文件),若所述Worker1在Quorum Servers端的后端创建所述PartitionA对应的分布式锁的Ephemeral File成功,则表示Worker1抢占所述PartitionA对应的分布式锁成功,如图5中的1.2的内容所示,并在Quorum Servers端的后端创建所述PartitionA对应的分布式锁的Lock Holder文件,并订阅该分布式锁的Lock Holder文件的删除通知,同时,Worker2在Quorum Servers端抢占所述PartitionB对应的分布式锁的所有权,即Worker2在所述Quorum Servers端的后端创建所述PartitionB对应的分布式锁的Ephemeral File(临时文件),若所述Worker2在QuorumServers端的后端创建所述PartitionB对应的分布式锁的Ephemeral File成功,则表示Worker2抢占所述PartitionB对应的分布式锁成功,如图5中的2.2的内容所示,并在QuorumServers端的后端创建所述PartitionB对应的分布式锁的Lock Holder文件,并订阅该分布式锁的Lock Holder文件的删除通知;在Worker1和Worker2分别在Quorum Servers端的后端抢占成功对应的分布式锁的所有权之后,然后Worker1加载并为PartitionA提供读访问服务如图5中的1.3的内容所示,Worker2加载并为PartitionB提供写访问服务如图5中的2.3的内容所示;接着,Worker1还要向Master汇报自身与Master之间的业务访问服务的状态信息,其中,Worker1通过Master与Worker1之间的心跳包的形式向Master发送的所述业务访问服务的状态信息如图5中的1.4的内容所示,Worker2还要向Master汇报自身与Master之间的业务访问服务的状态信息,其中,Worker2通过Master与Worker2之间的心跳包的形式向Master发送的所述业务访问服务的状态信息如图5中的2.4的内容所示,使得存储访问服务中的状态信息包含于Master与Worker之间的心跳包中,进而能够通过心跳包快速周期地获悉当前的Worker的存储访问服务的状态信息。
另一方面,若图5中的1.4或者2.4对应的存储访问服务中的状态信息出现异常,即Master与Worker之间的状态信息出现异常,假设此处Master与Worker2之间的状态信息出现异常,则Master会在Quorum Servers端删除对应于所述PartitionB的分布式锁的LockHolder文件,从而可以使Master调度其他Worker来继续加载所述PartitionB,以提供存储访问服务对应的读访问服务,大大提升了系统的可用性。
根据本申请的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
在服务端创建对应于所述分布式锁的所有权的锁占有者文件后,向所述服务端订阅所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务。
根据本申请的另一面,还提供一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
向工作节点发送分区的调度请求;
在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除对应于所述分布式锁的所有权的锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (26)

1.一种在工作节点端的分布式锁实现方法,其中,所述方法包括:
基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务。
2.根据权利要求1所述的方法,其中,所述在服务端创建对应于所述分布式锁的所有权的锁占有者文件,包括:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。
3.根据权利要求1所述的方法,其中,所述提供与所述分区的调度请求对应的业务访问服务的同时,还包括:
向所述主节点发送业务访问服务的状态信息。
4.根据权利要求3所述的方法,其中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。
5.根据权利要求1所述的方法,其中,所述向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。
6.根据权利要求1或5所述的方法,其中,所述向所述服务端订阅所述锁占有者文件的删除通知之后,还包括:
若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权。
7.根据权利要求1所述的方法,其中,所述对应于所述分布式锁的所有权的锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
8.一种在主节点端的分布式锁实现方法,其中,所述方法包括:
向工作节点发送分区的调度请求;
在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
9.根据权利要求8所述的方法,其中,所述主节点与所述工作节点通信异常包括:
所述主节点从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。
10.根据权利要求9所述的方法,其中,所述业务访问服务的状态信息包含于所述主节点与工作节点之间的心跳包中。
11.根据权利要求8所述的方法,其中,服务端删除所述锁占有者文件之后,还包括:
向另一工作节点发送分区的调度请求。
12.根据权利要求8至11中任一项所述的方法,其中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
13.一种分布式锁实现的工作节点设备,其中,所述工作节点设备包括:
抢占装置,用于基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
创建订阅装置,用于在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
加载访问装置,用于在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务。
14.根据权利要求13所述的工作节点设备,其中,所述创建订阅装置用于:
若在服务端抢占所述分区对应的分布式锁的所有权成功,在服务端创建对应于所述所有权的锁占有者文件。
15.根据权利要求13所述的工作节点设备,其中,所述加载访问装置还用于:
向所述主节点发送业务访问服务的状态信息。
16.根据权利要求15所述的工作节点设备,其中,所述业务访问服务的状态信息包含于主节点与工作节点之间的心跳包中。
17.根据权利要求13所述的工作节点设备,其中,所述创建订阅装置还用于:
若接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,基于所述删除通知在所述服务端释放分布式锁的所有权。
18.根据权利要求13或17所述的工作节点设备,其中,所述创建订阅装置还用于:
若在预设时间内,未接收到所述服务端发送的所述对应于所述分布式锁的所有权的锁占有者文件的删除通知,则在所述服务端释放分布式锁的所有权。
19.根据权利要求13所述的工作节点设备,其中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
20.一种分布式锁实现的主节点设备,其中,所述主节点设备包括:
发送装置,用于向工作节点发送分区的调度请求;
删除装置,用于在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若所述主节点与所述工作节点通信异常,则在服务端删除所述锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
21.根据权利要求20所述的主节点设备,其中,所述删除装置用于:
从所述工作节点接收到基于所述分区的调度请求发送的异常业务访问服务的状态信息。
22.根据权利要求21所述的主节点设备,其中,所述业务访问服务的状态信息包含于所述主节点与工作节点之间的心跳包中。
23.根据权利要求20所述的主节点设备,其中,所述发送装置还用于:
向另一工作节点发送分区的调度请求。
24.根据权利要求20至23中任一项所述的主节点设备,其中,所述锁占有者文件的删除通知包含于所述服务端与工作节点之间的心跳包中。
25.一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
基于主节点发送的分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权;
在服务端创建对应于所述所有权的锁占有者文件后,向所述服务端订阅所述对应于所述锁占有者文件的删除通知,所述锁占有者文件由所述主节点在与工作节点通信异常时删除;
在基于所述删除通知释放所述分区对应的分布式锁的所有权之前,提供与所述分区的调度请求对应的业务访问服务。
26.一种基于计算的设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:
向工作节点发送分区的调度请求;
在所述工作节点根据所述分区的调度请求,在服务端抢占所述分区对应的分布式锁的所有权、并创建对应于所述所有权的锁占有者文件后,若主节点与所述工作节点通信异常,则在服务端删除对应于所述分布式锁的所有权的锁占有者文件,以供所述服务端基于所述锁占有者文件的删除,向工作节点发送的所述锁占有者文件的删除通知。
CN201610792007.0A 2016-08-31 2016-08-31 一种分布式锁实现方法、设备及存储装置 Active CN107783842B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610792007.0A CN107783842B (zh) 2016-08-31 2016-08-31 一种分布式锁实现方法、设备及存储装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610792007.0A CN107783842B (zh) 2016-08-31 2016-08-31 一种分布式锁实现方法、设备及存储装置

Publications (2)

Publication Number Publication Date
CN107783842A CN107783842A (zh) 2018-03-09
CN107783842B true CN107783842B (zh) 2021-09-03

Family

ID=61451340

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610792007.0A Active CN107783842B (zh) 2016-08-31 2016-08-31 一种分布式锁实现方法、设备及存储装置

Country Status (1)

Country Link
CN (1) CN107783842B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108804709B (zh) * 2018-06-22 2021-01-01 新华三云计算技术有限公司 共享文件系统锁管理消息处理方法、装置及服务器
CN108881489A (zh) * 2018-08-03 2018-11-23 高新兴科技集团股份有限公司 一种分布式服务的协调系统及方法
CN109753364A (zh) * 2018-12-28 2019-05-14 北京明朝万达科技股份有限公司 一种基于网络的分布式锁的实现方法、设备及介质
CN110134522A (zh) * 2019-04-04 2019-08-16 杭州抖音科技有限公司 一种带有心跳的分布式锁实现方法及系统
CN110474963A (zh) * 2019-07-17 2019-11-19 中国平安人寿保险股份有限公司 一种基于zookeeper的资源访问方法、系统、介质及电子设备
CN110445864B (zh) * 2019-08-11 2022-04-08 西藏宁算科技集团有限公司 一种云计算环境下分布式锁的实现方法及系统
CN111708793A (zh) * 2020-06-18 2020-09-25 辽宁振兴银行股份有限公司 一种分布式应用锁实现方法及装置
CN114567540B (zh) * 2022-02-25 2023-07-21 北京百度网讯科技有限公司 主备节点切换方法、装置、设备、介质及程序产品

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1505788A (zh) * 2001-06-28 2004-06-16 �׹��Ĺ��ʹ�˾ 在不同数据库服务器之间划分一个数据库所有权以控制访问数据库
CN102214088A (zh) * 2010-04-07 2011-10-12 腾讯科技(深圳)有限公司 文件解锁的方法和装置
CN104158898A (zh) * 2014-08-25 2014-11-19 曙光信息产业股份有限公司 一种分布式文件系统中文件布局的更新方法
CN104184603A (zh) * 2013-05-23 2014-12-03 腾讯科技(深圳)有限公司 一种用户状态统计方法、装置及系统
CN105631023A (zh) * 2015-12-30 2016-06-01 华为技术有限公司 分布式锁服务的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9658899B2 (en) * 2013-06-10 2017-05-23 Amazon Technologies, Inc. Distributed lock management in a cloud computing environment

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1505788A (zh) * 2001-06-28 2004-06-16 �׹��Ĺ��ʹ�˾ 在不同数据库服务器之间划分一个数据库所有权以控制访问数据库
CN102214088A (zh) * 2010-04-07 2011-10-12 腾讯科技(深圳)有限公司 文件解锁的方法和装置
CN104184603A (zh) * 2013-05-23 2014-12-03 腾讯科技(深圳)有限公司 一种用户状态统计方法、装置及系统
CN104158898A (zh) * 2014-08-25 2014-11-19 曙光信息产业股份有限公司 一种分布式文件系统中文件布局的更新方法
CN105631023A (zh) * 2015-12-30 2016-06-01 华为技术有限公司 分布式锁服务的方法和装置

Also Published As

Publication number Publication date
CN107783842A (zh) 2018-03-09

Similar Documents

Publication Publication Date Title
CN107783842B (zh) 一种分布式锁实现方法、设备及存储装置
CN109582466B (zh) 一种定时任务执行方法、分布式服务器集群及电子设备
US11888599B2 (en) Scalable leadership election in a multi-processing computing environment
US10838777B2 (en) Distributed resource allocation method, allocation node, and access node
EP3220282B1 (en) Method for managing lock in cluster, lock server and client
US10067791B2 (en) Methods and apparatus for resource management in cluster computing
US5734902A (en) Communication system for maintaining data consistency among replicated shared objects
CN110069346B (zh) 多进程间资源共享方法、装置、电子设备
US8996469B2 (en) Methods and apparatus for job state tracking in cluster computing
JP5519909B2 (ja) アプリケーション・プロセスにおいて内部イベントをリプレイするための非侵入的方法およびこの方法を実装するシステム
CN107515784B (zh) 一种在分布式系统中计算资源的方法与设备
CN105357042B (zh) 一种高可用集群系统及其主节点和从节点
US11675622B2 (en) Leader election with lifetime term
CN106034137A (zh) 用于分布式系统的智能调度方法及分布式服务系统
CN113448699A (zh) 一种分布式定时任务处理系统、方法及相关装置
CN106649000B (zh) 实时处理引擎的故障恢复方法及相应的服务器
CN114296891A (zh) 任务的调度方法、系统、计算设备、存储介质及程序产品
CN118193238A (zh) 一种业务信息的处理方法、装置、设备及存储介质
CN116185589A (zh) 调度权限获取方法、设备、系统及存储介质
CN110968406A (zh) 处理任务的方法、装置、存储介质和处理器
CN106997304B (zh) 输入输出事件的处理方法及设备
CN111435320B (zh) 一种数据处理方法及其装置
CN114510459A (zh) 一种基于Redis缓存系统的分布式锁管理的方法及系统
CN113987072A (zh) 一种关系型数据库高速访问处理方法和装置
TW201828087A (zh) 分布式儲存系統的服務節點切換方法及裝置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant