CN117407374B - 一种基于分布式文件系统的分布式锁实现方法和系统 - Google Patents
一种基于分布式文件系统的分布式锁实现方法和系统 Download PDFInfo
- Publication number
- CN117407374B CN117407374B CN202311698188.7A CN202311698188A CN117407374B CN 117407374 B CN117407374 B CN 117407374B CN 202311698188 A CN202311698188 A CN 202311698188A CN 117407374 B CN117407374 B CN 117407374B
- Authority
- CN
- China
- Prior art keywords
- lock
- list
- extension
- structure body
- distributed
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 30
- 238000004891 communication Methods 0.000 claims description 4
- 238000003780 insertion Methods 0.000 claims description 4
- 230000037431 insertion Effects 0.000 claims description 4
- 230000000903 blocking effect Effects 0.000 claims description 2
- 230000002618 waking effect Effects 0.000 claims description 2
- 230000000694 effects Effects 0.000 abstract description 2
- 241000760358 Enodes Species 0.000 description 13
- 230000007246 mechanism Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
- G06F16/1774—Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于分布式文件系统的分布式锁实现方法和系统,涉及分布式存储技术领域,包括步骤:接收客户端发送的加锁请求,根据iNode号搜索iNode索引表,获得Extent索引表地址,利用Extent索引表中的Extent编号查询锁结构体信息;对查询结果进行判断,未查询到锁结构体时,获取等待位为no的锁结构体,将该锁结构体插入Extent索引表中获取列表锁;在查询到锁结构体时直接获取列表锁,将等待位置设置为yes,释放列表锁,向客户端返回锁信息。本发明协调分布式文件系统客户端之间对共享文件的访问,保证了读‑写一致性顺序,实现了锁请求过程中多个客户端同时请求的效果,作为锁管理器的方式部署。
Description
技术领域
本发明涉及分布式存储技术领域,特别涉及一种基于分布式文件系统的分布式锁实现方法和系统。
背景技术
文件系统是计算机操作系统负责管理持久化数据的子系统。文件系统在逻辑上呈现为一颗目录树,目录类似于一个容器,可以包含子目录,也可以包含文件。而分布式文件系统是指文件系统所管理的文件内容,不是直接存储在计算机本机的物理存储设备(如磁盘)上,而是分布在通过计算机网络与本节点相连的若干台分布式文件系统服务器上。
分布式文件系统将存储在系统服务端的文件资源形成一个逻辑上的文件目录树,通过客户端软件,作为子目录,挂载到客户端操作系统的文件系统上,从而使得用户访问分布在网络上的共享文件更加简便。
在高性能计算(HPC)、金融等领域,往往需要文件系统有多挂载的能力,即将同一个逻辑上的文件目录树,同时挂载到多个计算机上客户端的文件系统上。不同计算机上的应用程序,可以通过操作系统提供的文件系统访问接口(如Linux上的POSIX接口),同时对同一批文件进行读、写等操作。并且要保证不同客户端之间的读、写操作按顺序进行,即保证同一个文件上读-写一致性,和写-写一致性。
这种多挂载机制仅在传统的集中式网络文件系统(NAS)产品中提供,而现有的分布式文件系统基本上没有这种能力。现有的分布式文件系统,要么无法在多挂载的场景下保证读-写一致性顺序;要么对文件整体上锁,即一个客户端锁定某个文件之后,其他客户端便不能访问这个文件,这种粗粒度的文件锁机制无法满足某些特定的应用领域。
发明内容
本发明的目的在于针对上述现有技术的不足,提供一种基于分布式文件系统的分布式锁实现方法和系统,以解决现有技术中粗粒度的文件锁机制无法满足某些特定的应用领域的问题。
本发明具体提供如下技术方案:一种基于分布式文件系统的分布式锁实现方法,包括以下步骤:
接收客户端发送的加锁请求,所述加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式;
根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息;
若未查询到所述锁结构体,则获取一个等待位为no的锁结构体,并将所述等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,向客户端返回锁信息;
若查询到所述锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,将所述等待位加入锁请求项列表中,令所述结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
优选的,所述将所述锁结构体插入Extent索引表中获取列表锁,包括如下步骤:
使用Extent索引表构造无锁的供扩展哈希表结构;
使用CAS操作把新建的锁结构体插入到Extent索引表中,若插入成功则获取列表锁,否则重新查找哈希表。
优选的,所述接收客户端发送的加锁请求之前,客户端先接收来自本地文件系统的读、写或加锁事件,包括如下步骤:
确定读、写访问的文件逻辑地址,用{iNode号,Extent编号}的组合表示;其中,iNode号是指待访问的文件在分布式文件系统中的逻辑编号,Extent编号是指文件系统内部的逻辑块编号;
请求分布式锁服务端,获取iNode中特定Extent{iNode号=1, Extent编号=23}的读锁;
在接收到等待响应读锁ID=233后,等待唤醒;
释放锁后通过分布式锁服务端分配读锁,在接收到读锁ID=233后,唤醒阻塞的操作,对Extent的读操作进行处理;
在所述对Extent的读操作处理完成后释放锁,请求服务端释放读锁ID=233,服务端在处理之后,成功释放返回响应。
优选的,所述对Extent的读操作进行处理,包括如下步骤:
通过所述特定Extent{iNode号=1, Extent编号=23}的读锁确定读操作中的读-写一致性;
若存在其他客户端对此Extent进行更新操作时,将所述更新操作的写锁在分布式锁服务端处等待。
优选的,所述根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息,包括如下步骤:
基于iNode号构建iNode索引表,利用iNode号为索引,找到相应Extent索引表的指针;
利用Extent索引表中以特定iNode获取的Extent编号为索引,获取Extent的锁结构体指针。
优选的,所述新建锁请求项并将其加入锁请求项列表后释放列表锁,包括如下步骤:
利用锁请求项作为节点构建列表,并通过节点维护来自客户端的锁请求;
在列表锁被客户端释放时,相应的锁请求项也从列表中移除。
优选的,所述利用锁请求项作为节点构建列表时,通过请求上下文指针、锁模式、等待位、时间戳和指向列表中下一个节点的指针构建锁请求项,包括如下步骤:
通过请求上下文指针维护包括客户端标识、客户端连接信息、锁ID在内的上下文信息,并维护分布式锁服务端和客户端之间的通信渠道;
通过锁模式表示共享锁或排他锁;
通过等待位表示本次锁请求是在等待中,还是已经获取;
通过时间戳记录锁请求的时间。
优选的,本发明还包括步骤:
接收客户端发送的释放锁请求,所述释放锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁ID;
根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体信息;
若未查询到锁结构体,则向客户端返回错误消息;
若查询到锁结构体,获取列表锁,并利用锁ID从列表中搜索加锁时对应的请求项,并对该请求项进行删除;
并判断待释放锁的类型,根据释放锁的类型释放列表锁或进一步处理,并向客户端返回成功响应。
优选的,所述根据释放锁的类型释放列表锁或进一步处理,包括如下步骤:
若待释放的锁是共享锁,且还有其他共享者在使用此锁,释放列表锁;
若待释放的锁是共享锁或排它锁,且没有其他共享者在使用此锁时,从列表表头开始,扫描是否还有等待中的锁;
若不存在等待中的锁,则去掉锁结构体的锁模式,并令等待位=no,释放锁列表;
若存在等待中的锁,则设置锁结构体中的锁模式,令等待位=yes,并根据锁请求项向各个对应的客户端发送消息,通知获取锁事件,释放列表锁。
本发明还包括一种基于分布式文件系统的分布式锁实现系统,包括:
接收模块,用于接收客户端发送的加锁请求,所述加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式;
查询模块,用于根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息;
第一处理模块,用于若未查询到所述锁结构体,则获取一个等待位为no的锁结构体,将所述等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,向客户端返回锁信息;
第二处理模块,用于若查询到所述锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,所述等待位加入锁请求项列表中,令所述结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
与现有技术相比,本发明具有如下显著优点:
本发明提供了一种用于分布式文件系统的细粒度的分布式锁,来协调分布式文件系统客户端之间对共享文件的访问,通过锁请求项维护分布式锁服务端和客户端之间的通信渠道,并基于等待位的no或yes进行锁请求的访问控制,保证了读-写一致性顺序,可以作为独立的锁管理器的方式部署,通过分布式进行锁定或释放锁,实现了锁请求过程中多个客户端同时请求的效果,提高了协调多个客户端对共享文件访问的效率。
附图说明
图1为本发明提供的文件系统客户端提供的访问接口和访问流程图;
图2为本发明提供的分布式锁服务端的主要组件图;
图3为本发明提供的分布式文件系统的客户端向分布式锁服务端请求加锁的流程图;
图4为本发明提供的分布式文件系统的客户端向分布式锁服务端请求释放锁的流程图。
具体实施方式
下面结合本发明中的附图,对本发明实施例的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
为了便于理解和说明,如附图3所示,本发明提供了一种基于分布式文件系统的分布式锁实现方法,包括以下步骤:
步骤S1:接收客户端发送的加锁请求,加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式。
图1是本发明为文件系统客户端提供的访问接口和访问流程。
在本步骤中,图中客户端100指分布式文件系统的客户端。分布式文件系统的客户端一般安装在应用服务器上,在Linux操作系统上,可以通过FUSE协议接收来自操作系统内核的文件系统调用事件,并根据这些调用事件远程调用分布式文件系统的调用接口。
图中的服务端119即指本发明提供的分布式锁服务。客户端100在接收到来自本地文件系统的读(read)、写(write)或加锁(flock)事件时,首先确定读、写访问的文件逻辑地址,用{iNode号, Extent编号}的组合来表示。其中iNode号是指待访问的文件在分布式文件系统中的逻辑编号,Extent编号是指文件系统内部的逻辑块编号。
在图1所示的例子中,客户端100在进行读操作之前,首先请求分布式锁服务端119,获取iNode中特定Extent上{iNode号=1, Extent编号=23}的读锁。服务端119把请求加入锁表中,并分析是否能分配锁。在步骤108中,服务端119中无法分配锁,因此返回等待响应102。在响应中,服务端119分配了一个等待的读锁ID=233。客户端100在接收到等待响应后,阻塞当前操作,等待唤醒。
在步骤109中,分布式锁服务端119在其他客户端释放锁之后,可以为客户端100分配读锁。此时他向客户端100发送103消息,通知客户端100读锁ID=233已准备好。客户端100可以用一个单独的线程来侦听来自服务端119的通知消息。当它接收到读锁ID=233已经准备好之后,它则唤醒刚才阻塞的操作,继续进行业务操作107。
在步骤107的进行过程中,因为已经获得了特定Extent上{iNode号=1, Extent编号=23}的读锁,因此它可以确定在接下来对Extent进行的读操作中保持严格的读-写一致性,即读到的是分布式文件系统上的最新数据。而且在这个过程中如果有其他客户端上对此Extent的更新操作时,这些更新操作的写锁在分布式锁服务端119处等待。
当步骤107中对Extent的读操作处理完成之后,即可以释放锁。此时它发送请求104,请求服务端119释放读锁ID=233。服务端110在处理之后,返回响应105释放成功。
步骤S2:根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用Extent索引表中的Extent编号查询锁结构体的信息。
图2是分布式锁服务端的主要组件。
在本步骤中,用线程安全的可扩展散列表结构构建iNode索引表201和Extent索引表202。iNode索引表201中以iNode号为索引,由iNode号可以找到相应的Extent索引表202的指针。Extent索引表202中以特定iNode的Extent编号为索引,可以找到该Extent的锁结构体203指针。iNode索引表201和Extent索引表202都是线程安全的,即可以由多个线程同时插入、遍历和删除元素。
锁结构体203包括锁模式、等待位、列表头尾指针和列表锁。锁模式和等待位配合使用。等待位=yes/no,用来标识锁结构体当前是否在锁定状态;如果当前在锁定状态,则锁模式表示当前是共享锁还是排他锁。共享锁用于读操作,因为多个客户端可以同时拥有共享锁,去完成读操作。排他锁用于写操作,只有一个客户端可以拥有排他锁,去完成写操作。最后,所有进行中的锁请求都会被放到请求列表中,因此在锁结构体203中保存了列表的头尾指针,和一个列表锁。列表锁是一个排他锁。
列表中的节点称为锁请求项204,一个节点204维护了来自客户端的一个锁请求,当锁被客户端释放时,相应的锁请求项204也从列表中移除。锁请求项中包含了请求上下文指针、锁模式、等待位、时间戳和指向列表中下一个节点的指针。请求上下文中维护了包括客户端标识、客户端连接信息、锁ID在内的上下文信息,用于维护分布式锁服务端和客户端之间的通信渠道。锁模式表示是共享锁还是排他锁。等待位表示本次锁请求是在等待中,还是已经获取到。时间戳记录了锁请求的时间。
步骤S3:若未查询到锁结构体,则获取一个等待位为no的锁结构体,将等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,并向客户端返回锁信息。
步骤S4:若查询到锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,将等待位加入锁请求项列表中,令结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
具体包括步骤:
图3描述了一个分布式文件系统的客户端100向分布式锁服务端119请求加锁的流程图。
步骤301,客户端100向服务端119发送请求,要求加锁。在请求中,包含了锁对应的文件地址信息(iNode号,和Extent编号),和锁模式(共享锁/排他锁),然后转到步骤302。
步骤302,服务端119根据iNode号搜索iNode索引表201,得到Extent索引表的地址202;然后从Extent索引表202中根据Extent编号,查询锁结构体203信息。如果查不到,则转到步骤304;如果查到,则转到步骤311。
步骤304,分配一个锁结构体203,其等待位=no,然后转到步骤305,把上一步的锁结构体203插入到Extent索引表202中。Extent索引表可以构造成无锁的可扩展哈希表结构,因此,步骤305可以用CAS(compare and swap)操作把新建的锁结构体插入到Extent索引表202中。如果插入成功,则转到步骤307;否则,转到步骤302,重新查找哈希表。
步骤307,获取列表锁,以独占访问锁结构体203的请求项列表。之后转到步骤308,新建锁请求项,加入锁请求项列表中。完成插入锁请求项之后转到步骤309,释放列表锁,之后转到步骤310,向客户端返回锁信息后,流程结束。
步骤311,在查到锁结构体后,获取列表锁。步骤312,新建请求项,并根据锁结构体的等待位和锁模式,来确定这个新建请求项的等待位。之后转到步骤313,把请求项加入锁请求项列表中。
如果确定新请求项是在等待的,则转到步骤315,把锁结构体的等待位置为yes,并设置锁模式,之后转到步骤316,释放列表锁,之后转到步骤317,向客户端返回锁信息后,流程结束。
图4描述了一个分布式文件系统的客户端100向分布式锁服务端119请求释放锁的流程图。
本发明还包括步骤:
步骤401,客户端100向分布式锁服务端119发送释放锁的请求。请求中包含了锁对应的文件地址信息(iNode号,和Extent编号),和锁ID。之后转到步骤402。
步骤402,服务端119根据iNode号搜索iNode索引表201,得到Extent索引表的地址202;然后从Extent索引表202中根据Extent编号,查询锁结构体203信息。如果查不到,则转到步骤403;如果查到,则转到步骤404。
步骤403,如果查不到对应的锁信息,则向客户端返回错误消息后,流程结束。
步骤404,获取列表锁后,转到步骤405,利用锁ID,从列表中搜索之前加锁时对应的请求项。找到请求项之后,转到步骤406,删除该请求项。
如果待释放的锁是共享锁,且还有其他共享者在使用此锁,则转到步骤407,释放列表锁,之后转到步骤408,向客户端返回成功响应后,流程结束。
如果待释放的锁是共享锁,但已经没有其他共享者在使用此锁;或者待释放的锁是排他锁,则转到步骤409。
步骤409,从列表表头开始,扫描是否还有等待中的锁。如果不存在,则转到步骤410,去掉锁结构体的锁模式,并令等待位=no,之后转到步骤411,释放锁列表,之后转到步骤412,向客户端返回成功响应后,流程结束。
如果存在等待中的锁,则转到步骤413,设置锁结构体中的锁模式,令等待位=yes,之后转到步骤414。
步骤414,根据锁请求项,向各个对应的客户端发送消息,通知获取锁事件。之后转到步骤415,释放列表锁,之后转到步骤416,向客户端返回成功响应,流程结束。
本发明提供的一种基于分布式文件系统的分布式锁系统,包括:接收模块、查询模块、第一处理模块和第二处理模块。其中,接收模块用于接收客户端发送的加锁请求,加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式;查询模块用于根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用Extent索引表中的Extent编号查询锁结构体信息;第一处理模块用于若未查询到锁结构体,则获取一个等待位为no的锁结构体,将等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,向客户端返回锁信息;第二处理模块用于若查询到锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,等待位加入锁请求项列表中,令结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
以上内容是结合具体优选实施方式对本发明做进一步详细说明,对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (10)
1.一种基于分布式文件系统的分布式锁实现方法,其特征在于,包括以下步骤:
接收客户端发送的加锁请求,所述加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式;
根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息;
若未查询到所述锁结构体,则获取一个等待位为no的锁结构体,并将所述等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,向客户端返回锁信息;
若查询到所述锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,将所述等待位加入锁请求项列表中,令所述结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
2.如权利要求1所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述将所述等待位为no的锁结构体插入Extent索引表中获取列表锁,包括如下步骤:
使用Extent索引表构造无锁的供扩展哈希表结构;
使用CAS操作把新建的锁结构体插入到Extent索引表中,若插入成功则获取列表锁,否则重新查找哈希表。
3.如权利要求1所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述接收客户端发送的加锁请求之前,客户端先接收来自本地文件系统的读、写或加锁事件,包括如下步骤:
确定读和写访问的文件逻辑地址,用{iNode号,Extent编号}的组合表示;其中,iNode号是指待访问的文件在分布式文件系统中的逻辑编号,Extent编号是指文件系统内部的逻辑块编号;
请求分布式锁服务端,获取iNode中特定Extent{iNode号=1, Extent编号=23}的读锁;
在接收到等待响应读锁ID=233后,等待唤醒;
释放锁后通过分布式锁服务端分配读锁,在接收到读锁ID=233后,唤醒阻塞的操作,对Extent的读操作进行处理;
在所述对Extent的读操作处理完成后释放锁,请求服务端释放读锁ID=233,服务端在处理之后,成功释放返回响应。
4.如权利要求3所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述对Extent的读操作进行处理,包括如下步骤:
通过所述Extent上读锁确定读操作中的读-写一致性,获取分布式文件系统上的最新数据;
若存在其他客户端对此Extent进行更新操作时,将所述更新操作的写锁在分布式锁服务端处等待。
5.如权利要求1所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息,包括如下步骤:
基于iNode号构建iNode索引表,利用iNode号为索引,找到相应Extent索引表的指针;
利用Extent索引表中以特定iNode获取的Extent编号为索引,获取Extent的锁结构体指针。
6.如权利要求1所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述新建锁请求项并将其加入锁请求项列表后释放列表锁,包括如下步骤:
利用锁请求项作为节点构建列表,并通过节点维护来自客户端的锁请求;
在列表锁被客户端释放时,相应的锁请求项也从列表中移除。
7.如权利要求6所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述利用锁请求项作为节点构建列表时,通过请求上下文指针、锁模式、等待位、时间戳和指向列表中下一个节点的指针构建锁请求项,包括如下步骤:
通过请求上下文指针维护包括客户端标识、客户端连接信息、锁ID在内的上下文信息,并维护分布式锁服务端和客户端之间的通信渠道;
通过锁模式表示共享锁或排他锁;
通过等待位表示本次锁请求是在等待中,还是已经获取;
通过时间戳记录锁请求的时间。
8.如权利要求1-7任一项所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,还包括步骤:
接收客户端发送的释放锁请求,所述释放锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁ID;
根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体信息;
若未查询到锁结构体,则向客户端返回错误消息;
若查询到锁结构体,获取列表锁,并利用锁ID从列表中搜索加锁时对应的请求项,并对该请求项进行删除;
并判断待释放锁的类型,根据释放锁的类型释放列表锁或进一步处理,并向客户端返回成功响应。
9.如权利要求8所述的一种基于分布式文件系统的分布式锁实现方法,其特征在于,所述根据释放锁的类型释放列表锁或进一步处理,包括如下步骤:
若待释放的锁是共享锁,且还有其他共享者在使用此锁,释放列表锁;
若待释放的锁是共享锁或排它锁,且没有其他共享者在使用此锁时,从列表表头开始,扫描是否还有等待中的锁;
若不存在等待中的锁,则去掉锁结构体的锁模式,并令等待位=no,释放锁列表;
若存在等待中的锁,则设置锁结构体中的锁模式,令等待位=yes,并根据锁请求项向各个对应的客户端发送消息,通知获取锁事件,释放列表锁。
10.一种基于分布式文件系统的分布式锁实现系统,其特征在于,包括:
接收模块,用于接收客户端发送的加锁请求,所述加锁请求包括锁对应的文件地址信息iNode号和Extent编号,以及锁模式;
查询模块,用于根据iNode号搜索iNode索引表,获得Extent索引表的地址,并利用所述Extent索引表中的Extent编号查询锁结构体的信息;
第一处理模块,用于若未查询到所述锁结构体,则获取一个等待位为no的锁结构体,将所述等待位为no的锁结构体插入Extent索引表中获取列表锁,独占访问锁结构体的请求项列表;新建锁请求项并将其加入锁请求项列表后释放列表锁,向客户端返回锁信息;
第二处理模块,用于若查询到所述锁结构体,则直接获取列表锁,根据锁结构体的等待位和锁模式确定新建请求项的等待位,所述等待位加入锁请求项列表中,令所述结构体的等待位为yes,且设置锁模式并释放列表锁,向客户端返回锁信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311698188.7A CN117407374B (zh) | 2023-12-12 | 2023-12-12 | 一种基于分布式文件系统的分布式锁实现方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311698188.7A CN117407374B (zh) | 2023-12-12 | 2023-12-12 | 一种基于分布式文件系统的分布式锁实现方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117407374A CN117407374A (zh) | 2024-01-16 |
CN117407374B true CN117407374B (zh) | 2024-02-27 |
Family
ID=89492808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311698188.7A Active CN117407374B (zh) | 2023-12-12 | 2023-12-12 | 一种基于分布式文件系统的分布式锁实现方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117407374B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7730258B1 (en) * | 2005-11-01 | 2010-06-01 | Netapp, Inc. | System and method for managing hard and soft lock state information in a distributed storage system environment |
CN107423403A (zh) * | 2017-07-27 | 2017-12-01 | 郑州云海信息技术有限公司 | 一种基于分布式文件系统的融合锁管理方法和系统 |
CN107862064A (zh) * | 2017-11-16 | 2018-03-30 | 北京航空航天大学 | 一个基于nvm的高性能、可扩展的轻量级文件系统 |
CN109407971A (zh) * | 2018-09-13 | 2019-03-01 | 新华三云计算技术有限公司 | 升级磁盘锁的方法及装置 |
CN109684285A (zh) * | 2018-12-13 | 2019-04-26 | 郑州云海信息技术有限公司 | 一种用户态网络文件系统文件锁方法、装置及设备 |
CN116401225A (zh) * | 2023-03-28 | 2023-07-07 | 北京航空航天大学 | 一种面向卫星云的分布式文件系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6950833B2 (en) * | 2001-06-05 | 2005-09-27 | Silicon Graphics, Inc. | Clustered filesystem |
-
2023
- 2023-12-12 CN CN202311698188.7A patent/CN117407374B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7730258B1 (en) * | 2005-11-01 | 2010-06-01 | Netapp, Inc. | System and method for managing hard and soft lock state information in a distributed storage system environment |
CN107423403A (zh) * | 2017-07-27 | 2017-12-01 | 郑州云海信息技术有限公司 | 一种基于分布式文件系统的融合锁管理方法和系统 |
CN107862064A (zh) * | 2017-11-16 | 2018-03-30 | 北京航空航天大学 | 一个基于nvm的高性能、可扩展的轻量级文件系统 |
CN109407971A (zh) * | 2018-09-13 | 2019-03-01 | 新华三云计算技术有限公司 | 升级磁盘锁的方法及装置 |
CN109684285A (zh) * | 2018-12-13 | 2019-04-26 | 郑州云海信息技术有限公司 | 一种用户态网络文件系统文件锁方法、装置及设备 |
CN116401225A (zh) * | 2023-03-28 | 2023-07-07 | 北京航空航天大学 | 一种面向卫星云的分布式文件系统 |
Also Published As
Publication number | Publication date |
---|---|
CN117407374A (zh) | 2024-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874383B (zh) | 一种分布式文件系统元数据的解耦合分布方法 | |
US20210011652A1 (en) | Data storage access method, device and apparatus for persistent memory | |
US8321389B2 (en) | Method, apparatus and computer program product for maintaining file system client directory caches with parallel directory writes | |
US7376674B2 (en) | Storage of multiple pre-modification short duration copies of database information in short term memory | |
US7243088B2 (en) | Database management system with efficient version control | |
US6665675B1 (en) | Shared file system having a token-ring style protocol for managing meta-data | |
US5999976A (en) | Parallel file system and method with byte range API locking | |
CN111240588B (zh) | 一种持久性内存对象存储系统 | |
JPH10222407A (ja) | プロセスオーバーヘッド及びデータベースサーバからの冗長な検索を減少するように同じプロセスにおける多数のデータベーストランザクションを処理する方法 | |
US20020174200A1 (en) | Method and system for object replication in a content management system | |
US20130290636A1 (en) | Managing memory | |
US11775480B2 (en) | Method and system for deleting obsolete files from a file system | |
US20180276267A1 (en) | Methods and system for efficiently performing eventual and transactional edits on distributed metadata in an object storage system | |
CN113342507B (zh) | 一种分布式锁服务实现方法、装置及计算机设备 | |
CN111796767A (zh) | 一种分布式文件系统及数据管理方法 | |
US20200097581A1 (en) | Systems and methods of managing manifest refresh in a database | |
CN107992270B (zh) | 一种多控存储系统全局共享缓存的方法及装置 | |
CN117407374B (zh) | 一种基于分布式文件系统的分布式锁实现方法和系统 | |
JP2006351040A (ja) | ノード間共用ファイル制御方法 | |
CN116431590A (zh) | 一种数据处理的方法及相关设备 | |
US11216439B2 (en) | Auto-expiring locks based on object stamping | |
JP3866448B2 (ja) | ノード間共用ファイル制御方式 | |
KR100507782B1 (ko) | 데이터베이스 관리시스템 및 그 시스템에서 시스템테이블에 대한 동시성 제어 방법 | |
CN116821058B (zh) | 元数据访问方法、装置、设备及存储介质 | |
CN117076147B (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 |