一种分布式锁实现方法和系统与流程

文档序号:12463719阅读:163来源:国知局
一种分布式锁实现方法和系统与流程

本发明涉及网络通信技术领域,特别涉及一种分布式锁实现方法和系统。



背景技术:

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调访问共享资源的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁,在分布式系统中,某一主机的一个应用了分布式锁的应用程序先通过获得分布式锁,才能根据该分布式锁访问共享资源。

现有技术中,分布式锁有zookeeper,大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。获取目录下的所有节点,判断最小节点是否为自己来获取锁。

在实施本发明实施例的过程中,发明人发现现有技术至少存在以下问题:

现有技术中,获得分布式锁的过程繁琐,且受开发语言的限制,通用性不佳。



技术实现要素:

为了解决现有技术中的问题,本发明实施例提供了一种分布式锁实现方法和系统。所述技术方案如下:

第一方面,本发明实施例提供的一种分布式锁实现方法,包括:

客户端响应应用程序针对需求的共享数据在根目录下创建子目录的请求,根据请求生成并发送第一请求数据包;

中心机器接收第一请求数据包,判断中心机器中是否存在对应共享数据的子目录的路径信息,当中心机器中不存在路径信息时,在中心机器中创建对应共享数据的子目录的路径信息,并向客户端发送创建成功信号。

可选地,所述方法还包括:

当中心机器中已存在对应共享数据的子目录的路径信息时,向客户端发送创建失败信号。

可选地,客户端还包含用户空间文件系统,通过用户空间文件系统提供出根目录,根目录下对应共享数据的子目录的路径与中心机器中对应共享数据的子目录的路径信息相同。

可选地,所述方法还包括:

客户端响应应用程序在根目录下删除对应共享数据的子目录的请求,根据请求生成并发送第二请求数据包至中心机器;

中心机器接收第二请求数据包,并在中心机器中删除共享数据的子目录的路径信息。

可选地,所述方法还包括:

中心机器检测共享数据的子目录的路径信息存在时间是否超过预设阈值,当存在时间超过预设阈值时,删除中心机器中共享数据的子目录的路径信息。

可选地,不同的应用程序针对同一共享数据在根目录下创建子目录的路径信息相同。

可选地,中心机器中对应共享数据的子目录的路径信息保存在中心机器的内存中。

第二方面,本发明实施例提供的一种分布式锁实现系统,包括:

客户端,用于响应应用程序针对需求的共享数据在根目录下创建子目录的请求,并根据请求生成并发送第一请求数据包;

中心机器,用于接收第一请求数据包,判断中心机器中是否存在对应共享数据的子目录的路径信息,当中心机器中不存在路径信息时,在中心机器中创建对应共享数据的子目录的路径信息,并向客户端发送创建成功信号。

可选地,中心机器,还用于:

当中心机器中已存在对应共享数据的子目录的路径信息时,向客户端发送创建失败信号。

可选地,客户端,还用于响应应用程序在根目录下删除对应共享数据的子目录的请求,根据请求生成并发送第二请求数据包;

中心机器,还用于接收第二请求数据包,在中心机器中删除共享数据的子目录的路径信息。

可选地,中心机器,还用于:

检测中心机器中对应所述共享数据的子目录的路径信息存在时间是否超过预设阈值,当存在时间超过预设阈值时,删除中心机器中共享数据的的子目录的路径信息。

可选地,客户端中不同的应用程序针对同一共享数据在根目录下创建子目录的路径信息相同。

可选地,客户端还包含用户空间文件系统,通过用户空间文件系统提供出根目录,根目录下对应共享数据的子目录的路径信息与中心机器中对应共享数据的子目录的路径信息相同。

本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的分布式锁实现方法,通过在中心机器中创建共享数据的子目录的路径信息的方式,使得应用程序获得对共享数据进行操作的分布式锁,通过在中心机器中删除对应子目录路径信息的方式,使得应用程序释放对共享数据进行操作的分布式锁,利用操作系统的基本操作如创建、删除子目录的方式实现分布式锁,不受开发语言的限制,通用性好,实现过程简单。

另外,中心机器中存储的共享数据的子目录的路径信息直接保存在中心机器的内存中,无需额外的存储服务器,结构简单,数据量小,直接从内存中读取数据更加方便快速。

附图说明

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

图1是本发明实施例提供的一种分布式锁实现方法的流程图;

图2是本发明实施例提供的另一种分布式锁实现方法的流程图;

图3是本发明实施例提供的另一种分布式锁实现方法的流程图;

图4是本发明实施例提供的另一种分布式锁实现方法的流程图;

图5是本发明实施例提供的另一种分布式锁实现方法的流程图;

图6是本发明实施例提供的一种分布式锁实现系统的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

图1是本发明实施例提供的一种分布式锁实现方法的流程图,图6是本发明实施例提供的一种分布式锁实现系统的结构示意图。请结合参考图1和图6,本发明实施例提供了一种分布式锁实现方法,该方法的执行基于分布式网络,实施该方法主要包括两个组件,分别为客户端1以及中心机器2(Master),客户端1用于部署在分布式网络中每个机器上,其中,客户端1的程序可以基于FUSE(Filesystem in Userspace,用户空间文件系统)开发,实现一个用户态的文件系统。为了保证数据一致性,分布式网络中每个机器上的应用程序对分布式网络中的共享数据执行操作时需要用到分布式锁,需要使用分布式锁的应用程序需要与客户端1进行绑定。

本发明实施例中,FUSE的功能为客户端提供一个映射目录(本实施例中的根目录及子目录),然后提供接口,通过该接口实现在这个根目录下的所有文件系统操作,比如创建、删除文件夹的动作。客户端1基于FUSE实现,所以可以捕获到这个创建子目录的请求。当应用程序在这个根目录下创建子目录时,就会触发客户端1,客户端1响应该创建子目录的请求,并将该请求转发到中心机器上。本实施例中,根目录和子目录实际存在于Master的内存中,通过FUSE映射给客户端1,所以也可以说客户端1中也存在对应的根目录和子目录。本实施例在应用时,每个客户端1在其部署的机器上提供一个该映射的根目录,该根目录用于供应用程序针对某个资源或某一组资源在该根目录下创建子目录,该子目录在中心机器中创建成功后则表示该应用程序获得分布式锁,并以此访问对应的某个资源或某组资源。

本发明实施例中,中心机器2较佳为实现一个无数据存储服务器(dataChuck)的分布式文件系统中心,单进程,数据保存在中心机器2的内存里,可实现基本的文件夹创建、删除、文件创建、删除、写入、读取。客户端1基于FUSE开发,实现了一个用户态的文件系统,当在这个用户态的文件系统里面进行文件系统操作时(本实施例主要应用创建和删除子目录),客户端1把这个操作通过网络发送给中心机器2执行,然后等待中心机器2的回复。客户端1都连接到中心机器2,同时,中心机器2是单进程,即使有两个应用程序同时针对同一共享数据请求分布式锁,中心机器2也会依序处理该些请求,这样保证了分布式锁的决策是有序的。

下面将结合具体实施方式,对图1-图5所示的处理流程进行详细的说明,内容可以如下:

步骤100,客户端1响应应用程序针对需求的共享数据在根目录下创建子目录的请求,根据该请求生成并发送第一请求数据包。

本实施例中,该根目录为FUSE提供,客户端1基于FUSE实现,因此可以捕获到在该根目录下创建子目录的请求,客户端1可以捕获应用程序针对需求的共享数据在第一根目录下创建子目录的动作的请求,从而响应该请求,生成第一请求数据包。

其中,在根目录下创建子目录在所有系统开发语言均通用,其通用性远好于现有技术的方案,适用范围广。

可选地,步骤100,客户端1响应应用程序针对需求的共享数据在根目录下创建子目录的请求,根据该请求生成并发送第一请求数据包,具体为:

应用程序针对需求的共享数据请求在根目录下创建文件夹,生成子目录。其中,可选地,不同的应用程序针对同一共享数据在根目录下创建子目录的路径信息相同。例如,在根目录下创建文件夹“/lock/lock1”,其中,/lock表示第一根目录,/lock1表示其需要访问的共享数据。需要说明的是,上述不同的应用程序针对同一共享数据在根目录下创建子目录的路径信息相同只是多种情况中的一种,应用程序之间需要用分布式锁也是由应用程序自己决定的,比如应用程序1已经用了目录/lock/lock1当分布式锁,应用程序2如果不需要和应用程序1共用锁,那么应用程序2的操作则不需要受到应用程序1的限定,就可以用新的目录/lock/app2/lock1。应用程序2如果需要与应用程序1共用锁,那么该目录只能与应用程序1创建的目录路径一致,为/lock/lock1。在一些实施例中,可以通过创建不同的子目录来区分对该共享数据进行不同的操作,例如对该共享数据的读的操作/lock/lock1/read,对该共享数据的写的操作/lock/lock1/write,子目录的路径由应用程序根据实际需求来确定,并不能以此来限定本发明。

客户端1响应在根目录下创建文件夹的请求,根据该请求生成第一数据包,并将第一请求数据包发送给中心机器2。这样,通过应用程序在根目录下创建文件夹的请求可触发客户端1向中心机器2发送第一请求数据包。

步骤200,中心机器2接收第一请求数据包,判断中心机器2中是否存在对应共享数据的子目录的路径信息,当中心机器2中不存在对应的路径信息时,在中心机器2中创建对应共享数据的子目录的路径信息,并向客户端1发送创建成功信号。

本实施例中,中心机器2中存储的共享数据的子目录的路径信息直接保存在中心机器2的内存中,这样,无需额外的存储服务器,结构简单,数据量小,直接从内存中读取子目录的路径信息更加方便快速。中心机器2根据第一请求数据包获知应用程序需要访问的共享数据,根据中心机器2是否存在对应共享数据的子目录的路径信息,判断是否有其他应用程序对该共享数据已经申请了分布式锁,当中心机器2中不存在对应该共享数据的子目录的路径信息时,中心机器2可以默认没有其他应用程序对该共享数据申请分布式锁,客户端1一侧的应用程序此时则可以对该共享数据进行访问,中心机器2可以在创建对应该共享数据的子目录的路径信息(例如/lock/lock1),防止其他应用程序对该共享数据进行访问造成干扰。当在中心机器2中创建对应该共享数据的子目录的路径信息成功后,中心数据2向客户端1反馈创建成功信号,客户端1确认获取分布式锁获取成功,应用程序获得有效的分布式锁(即该路径信息),可根据该分布式锁访问对应的共享数据。

可选地,客户端1还包含用户空间文件系统,通过用户空间文件系统提供出根目录,根目录下对应共享数据的子目录的路径与中心机器2中对应共享数据的子目录的路径信息相同。例如,根目录下对应共享数据的子目录的路径信息以及中心机器2对应共享数据的子目录的路径均为“/lock/lock1”。

参见图2,可选地,本分布式锁实现方法还包括:

步骤300,当中心机器2中已存在对应共享数据的子目录的路径信息时,返回创建失败信号。

本实施例中,中心机器2根据第一请求数据包判断是否有其他应用程序对该共享数据已经申请了分布式锁,且当中心机器2中已存在对应共享数据的子目录的路径信息时,中心机器2可以默认为其他应用程序正在对该共享数据进行访问,客户端1一侧的应用程序不可以对该共享数据进行访问,也即此时不能获得对该共享数据的分布式锁,中心机器2向客户端1返回创建子目录失败信号,客户端1根据该创建失败信号确认获取分布式锁失败,应用程序无法访问该共享数据,无法获得该分布式锁,只有等待其它应用程序释放该分布式锁。

参见图3,可选地,本分布式锁实现方法还包括:

步骤400,客户端1响应应用程序在根目录下删除对应共享数据的子目录的请求,根据该请求生成并发送第二请求数据包。

在本实施例中,在客户端1接收到中心机器2发送的子目录的创建成功信号后,即应用程序获得分布式锁(即该子目录的路径信息),应用程序根据该分布式锁执行对该共享数据的访问,执行结束后,应用程序请求在根目录下删除对应共享数据的子目录,客户端1捕获到该请求,生成第二请求数据包,并发送给中心机器2。

步骤500,中心机器2接收第二请求数据包,并在中心机器中删除对应共享数据的子目录的路径信息。

在本实施例中,中心机器2根据第二请求数据包在中心机器中删除对应共享数据的子目录的路径信息,从而完成了该分布式锁的释放,使得其他应用程序可以再进行申请该分布式锁,访问该共享数据。

参见图4,可选地,本分布式锁实现方法还包括:

步骤600,中心机器2检测共享数据的子目录的路径信息存在时间是否超过预设阈值,当存在时间超过预设阈值时,删除中心机器2中共享数据的子目录的路径信息。在本实施例中,在中心机器2创建该共享数据的子目录的路径信息后,有可以能发生客户端1故障或者客户端1与中心机器2之间链路故障等情况,导致客户端1无法通知中心机器2删除该共享数据的子目录的路径信息,也即无法及时释放该分布式锁,为防止进一步影响其他应用程序访问该共享数据,可以在中心机器2中设置子目录的路径信息存在的时间预设阈值,当中心机器2中该共享数据的子目录的路径信息存在时间超过预设阈值时,中心机器2可以主动删除该共享数据的子目录的路径信息,即中心机器2主动释放该分布式锁。

其中,应用程序一般占用锁的时间很短,预设阈值的设置可以根据应用程序的具体情况而定。

另外,参见图5,在本实施例中,本分布式锁实现方法可以存在步骤600,可以不存在步骤400和步骤500,即中心机器2只存在主动释放分布式锁,当中心机器2中共享数据的子目录的路径信息存在时间超过预设阈值时,中心机器2可以默认为应用程序已经完成对该共享数据的访问,主动释放分布式锁。

本发明实施例提供的分布式锁实现方法,通过在中心机器2中创建共享数据的子目录的路径信息的方式,使得应用程序获得对共享数据进行操作的分布式锁,通过在中心机器2中删除对应子目录路径信息的方式,使得应用程序释放对共享数据进行操作的分布式锁,利用操作系统的基本操作如创建、删除子目录的方式实现分布式锁,不受开发语言的限制,通用性好,实现过程简单。。

基于相同的发明构思,参见图6,本发明实施例还提供了一种分布式锁实现系统,该系统可以执行前述分布式锁的实现方法,包括:

客户端1,用于响应应用程序针对需求的共享数据在根目录下创建子目录的请求,根据该请求生成并发送第一请求数据包;其中,在分布式网络中,客户端1可以包含多个。

中心机器2,用于接收第一请求数据包,判断中心机器2中是否存在对应共享数据的子目录的路径信息,当中心机器2中不存在对应路径信息时,在中心机器2中创建对应共享数据的子目录的路径信息,并向客户端1发送创建成功信号,表明应用程序获得对该共享数据操作的分布式锁。

可选地,中心机器2,还用于,当中心机器中2已存在对应共享数据的子目录的路径信息时,向客户端1发送创建失败信号,此时该应用程序获取分布式锁失败,要等待该分布式锁释放之后才能继续申请。

可选地,客户端1,还用于响应应用程序在根目录下删除对应共享数据的子目录的请求,根据该请求生成并发送第二请求数据包;

中心机器2,还用于接收第二请求数据包,在中心机器2中删除对应共享数据的子目录,以释放对该共享数据进行操作的分布式锁。

可选地,中心机器2,还用于:

检测中心机器2中对应所述共享数据的子目录的路径信息存在时间是否超过预设阈值,当存在时间超过预设阈值时,删除中心机器2中对应共享数据的子目录的路径信息,主动释放该分布式锁。

可选的,可增加备用中心机器2,可以用集群选举Leader的方式解决分布式文件系统中心的单点问题,实现高可用。备用中心机器2,采用集群选举的方式在中心机器2集群中选出Leader,备用中心机器2正常情况下只同步中心机器2的数据,不执行其它功能,当中心机器2故障时,备用中心机器2中的Leader会检测到中心机器2发生故障的信息,则调用其它备用中心机器2来执行中心机器2的功能。避免中心机器2出现故障出现无法申请分布式锁或分布式锁无法释放的问题。

本发明实施例提供的分布式锁实现系统,通过在中心机器2中创建共享数据的子目录的路径信息的方式,使得应用程序获得对共享数据进行操作的分布式锁,通过在中心机器2中删除对应子目录路径信息的方式,使得应用程序释放对共享数据进行操作的分布式锁,利用操作系统的基本操作如创建、删除子目录的方式实现分布式锁,不受开发语言的限制,通用性好,实现过程简单。。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

还需要说明的是,术语“包括”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。

上述说明示出并描述了本发明的若干优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。

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