一种分布式文件系统客户端元数据缓存优化方法

文档序号:7806858阅读:275来源:国知局
一种分布式文件系统客户端元数据缓存优化方法
【专利摘要】本发明公开了一种分布式文件系统客户端元数据缓存优化方法,属于计算机存储系统【技术领域】。当客户端在访问文件时,直接向锁服务器申请及建立文件父目录的目录范围锁,获得该目录下所有子文件的元数据缓存权限;当其它客户端访问同一个子文件时,撤回冲突子文件的元数据到元数据服务器,后继客户端再申请此子文件的元数据缓存权限。本发明减少了维护缓存一致性的开销,并且目录范围锁对应缓存中的元数据可以批量刷回,减少与元数据服务器的交互次数,同时客户端具有更好的并发度,提高客户端访问元数据的性能。本发明适合于各种应用场景,特别适用于扁平的目录层次结构,即目录下有大量文件而目录层次不深的场景。
【专利说明】一种分布式文件系统客户端元数据缓存优化方法

【技术领域】
[0001] 本发明属于计算机存储系统【技术领域】,更具体地,涉及一种分布式文件系统客户 端元数据缓存优化方法,用于减少客户端与元数据服务器及锁服务器间的通信,降低维护 客户端元数据缓存一致性的开销,提高客户端元数据访问的性能。

【背景技术】
[0002] 近年来,随着各个行业数据规模的飞速增长,有越来越多的文件和数据需要保存, 也给分布式文件系统带来巨大挑战。根据国际数据公司统计,2011年的全球数据总量达到 1. 8ZB,即1. 8万亿GB,而且该数据还在以每两年翻一番的速度增长,预计到2020年全球的 数据总量将达到35ZB,增长近20倍。膨胀的数据规模给文件系统带来了巨大压力,因此需 要提高分布式文件系统的访问性能。在基于三方架构的分布式文件系统中,元数据和数据 分开存储,元数据访问是数据访问的必经之路,而在文件系统的所有访问中,元数据的访问 占了 50%以上,提高元数据的访问性能是提升文件系统性能的重要途径。
[0003] 若客户端每次访问元数据都向元数据服务器申请获得,会带来大量通信开销,因 此可以将一部分元数据缓存在客户端,客户端下次读取或修改的时候可直接在本地完成, 避免网络通信开销,从而提高元数据访问的性能,加快数据获取的速度,提高系统整体性 能。
[0004] 目前很多主流文件系统都研究和实现了客户端的元数据缓存,比如NFS Version4、Lustre、BWFS、AFS及Google等文件系统的客户端都实现了元数据缓存机制。NFS Ver Si〇n4使用租约机制来实现元数据缓存;Lustre使用分布式锁回调机制保证元数据缓 存一致性;AFS使用与Lustre类似的锁回调机制实现元数据缓存;BWFS的方法是客户端每 隔一段时间就从元数据服务器获取最新元数据信息,或者刷回已经修改的元数据信息,以 保证元数据的一致性;Google文件系统使用Chubby提供的缓存一致性管理功能。
[0005] 由于元数据缓存一致性的维护会给系统性能的提升带来一定的损失,若需要进一 步地提高客户端元数据缓存的性能,可以通过减少缓存一致性维护的开销来提高文件系统 整体性能。目前公开了一种类似的元数据缓存优化方法,即Lustre中的子树锁机制,见: 钱迎进,金士尧,肖侬,《Lustre文件系统I/O锁的应用与优化》,计算机工程与应用,2011, 47 (3) : 1?5。该方法中子树锁是一个目录上的锁,保护以该目录为根节点的整个子树命名 空间,其具有以下缺点:第一,当有访问文件冲突时,会撤销其父目录为根的整个子树锁权 限,造成不必要的其他文件的撤回开销,特别是当文件数量很大时造成的开销更大,性能会 受影响;第二,每次文件申请元数据缓存时,需要向上级目录依次查询是否拥有子树锁,一 直到查到子树锁或者不存在子树锁为止,查询开销大。


【发明内容】

[0006] 针对现有技术的以上缺陷或改进需求,本发明提供一种分布式文件系统客户端元 数据缓存优化方法,通过减少缓存一致性维护中的网络通信开销,提高系统元数据访问性 能。
[0007] 本发明提供一种分布式文件系统客户端元数据缓存优化方法,包括下述步骤:
[0008] 步骤1客户端申请文件的元数据缓存权限,首先查看本地是否拥有所述文件的父 目录的目录范围锁,有则执行步骤3,否则执行步骤2 ;
[0009] 步骤2查询锁服务器上是否存在所述目录范围锁,如果没有则向所述锁服务器申 请所述目录范围锁,并获得所述父目录下所有子文件的元数据缓存权限,流程结束,否则执 行步骤4 ;
[0010] 步骤3查询申请的所述文件是否在所述目录范围锁的撤销列表中,如果不在则获 得所述文件的所述元数据缓存权限,流程结束,否则执行步骤5 ;
[0011] 步骤4查询申请的所述文件是否在所述撤销列表中,如果在则执行步骤5 ;否则所 述客户端请求所述锁服务器撤回所述文件的元数据,然后执行步骤5 ;
[0012] 步骤5所述客户端向所述锁服务器申请所述文件的所述元数据缓存权限。
[0013] 进一步地,所述步骤5具体包括以下子步骤:
[0014] (5. 1)在所述锁服务器上建立对应所述文件的属于所述客户端的带顺序号的锁节 点,并且设置对所述锁节点数据改变的监听;
[0015] (5. 2)查看所述锁节点之前是否已经建立了顺序号更小的锁节点,若有则表示已 经有其他客户端申请了所述文件的所述元数据缓存权限,执行步骤(5. 3),否则获得所述文 件的所述元数据缓存权限,流程结束;
[0016] (5. 3)触发所述锁节点数据改变的监听,所述锁服务器回调通知所述顺序号更小 的锁节点所属客户端刷回所述文件的元数据,当所述元数据刷回完成,则获得所述文件的 所述元数据缓存权限,流程结束。
[0017] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效 果:
[0018] 1、本发明通过建立目录范围锁,使得客户端可以拥有该目录下所有子文件的元数 据缓存权限,当有少数文件访问发生冲突时,只用撤回该目录下冲突的文件的元数据缓存, 而不用将整个目录下所有文件的元数据都撤回,开销较小。此外查询目录范围锁的开销也 较小,只需向上查询父目录是否拥有目录范围锁。本发明适用于多种场景,特别适合扁平的 目录层次结构,即目录下有大量文件,而目录层次不深的场景。
[0019] 2、本发明基于目录范围锁的技术方案可以使得客户端在本地创建、访问一个目录 下的大量文件,可以减少通信开销,提高系统性能。客户端拥有的目录范围锁的缓存也可以 批量刷回,减少与元数据服务器的交互次数,从而减少通信开销,同时客户端也具有更好的 并发度,可以提高客户端访问元数据的性能,进而提高客户端访问数据的性能。

【专利附图】

【附图说明】
[0020] 图1为本发明分布式文件系统的架构图;
[0021] 图2为本发明元数据缓存优化方法的流程图;
[0022] 图3为本发明元数据缓存优化方法的详细流程图;
[0023] 图4为本发明申请单个文件元数据缓存的流程图;
[0024] 图5为本发明目录范围锁及锁服务器上节点的示意图。

【具体实施方式】
[0025] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对 本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并 不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要 彼此之间未构成冲突就可以相互组合。
[0026] 图1所示为本发明分布式文件系统的架构图,包括客户端、锁服务器、元数据服务 器和对象存储服务器,相互之间通过高速互联网络进行通信。客户端向锁服务器申请获得 元数据缓存权限,然后向元数据服务器申请获得元数据并缓存在本地,最后根据元数据向 对象服务器申请获得数据。其中锁服务器和元数据服务器可以部署在不同的机器上或者同 一台机器,本发明实施例中为锁服务器和元数据服务器分别部署在独立机器上的情况。在 本发明实施例中,锁服务器采用zooke印er服务器来提供一致性保证。zookeeper服务器是 一个当前比较主流的保证一致性、高效、可靠的协同系统。
[0027] 图2所示为本发明元数据缓存优化方法的流程图。客户端先查询本地是否有所申 请子文件的父目录的目录范围锁,如果存在,则再查询该子文件是否在目录范围锁的撤销 列表中,是则申请该子文件的元数据缓存权限,即在锁服务器上建立表示该子文件元数据 缓存权限的带有顺序号的节点,创建成功后该客户端获得该子文件的元数据缓存权限;否 则获得该子文件的元数据缓存权限。当本地不存在父目录的目录范围锁时,则查询锁服务 器上是否已有该父目录的目录范围锁,如果没有则申请目录范围锁并获得该父目录下所有 子文件的元数据缓存权限,否则先查看申请的子文件是否在目录范围锁的撤销列表中,是 则直接申请该子文件的元数据缓存权限,否则请求撤回该子文件的元数据缓存,然后申请 该子文件的元数据缓存权限。
[0028] 图3所示为本发明元数据缓存优化方法的详细流程图。
[0029] 在本发明实施例中,假设客户端1首先在目录/dir下创建大量子文件/dir/a、/ dir/b···,然后客户端2访问子文件/dir/a,最后客户端3也访问子文件/dir/a。
[0030] 客户端1首先在父目录/dir下进行操作,系统执行下述步骤:
[0031] 步骤1当客户端1在申请子文件/dir/a的元数据缓存权限时,首先查看本地是否 拥有其父目录/dir的目录范围锁,有则执行步骤3,否则执行步骤2。在本发明实施例中, 当客户端拥有目录范围锁表示该客户端拥有此目录下所有子文件的元数据缓存权限,不包 括子目录的元数据缓存权限。
[0032] 步骤2查询锁服务器上是否已有该父目录/dir的目录范围锁,有则执行步骤4, 否则申请父目录/dir的目录范围锁,此时客户端1在锁服务器上创建锁节点/subtree/ dir/ex_sessionID_l,其中,subtree表示目录范围锁,dir表示父目录,ex表示互斥访问, sessionID表示客户端与锁服务器的对话ID,用以区分不同的客户端,最后一个数字是递 增的,表示申请目录范围锁的顺序,同时在锁节点/subtree/dir/ex_sessionID_l上设置 监听,监听其他客户端的请求。由于此时锁服务器上没有此目录范围锁节点,则可以创建目 录范围锁成功,获得父目录/dir下所有子文件的元数据缓存的互斥访问权限。
[0033] 步骤3查询子文件/dir/a是否在父目录/dir的目录范围锁的撤销列表中,是则 执行步骤5,否则获得该子文件/dir/a的元数据缓存权限,流程结束。
[0034] 在本发明实施例中,当客户端1申请子文件/dir/b和其父目录/dir下其他子文 件的元数据缓存权限时,查到客户端1本地已经拥有父目录/dir的目录范围锁,而且查询 申请的文件/dir/b等不在撤销列表中,则可以在父目录/dir下直接创建、访问/dir/b等 子文件,按已获得元数据缓存权限进行后续操作,此时无需与锁服务器及元数据服务器进 行通信。
[0035] 此时客户端2访问/dir/a,客户端2查询本地没有/dir的目录范围锁,因此同样 也要向锁服务器申请/dir的目录范围锁。通过查询锁服务器得知此时客户端2需要申请 的目录范围锁/dir已经被客户端1申请,表明两个客户端申请同一个目录下的文件元数据 缓存。
[0036] 步骤4查询申请的文件/dir/a是否在目录范围锁的撤销列表中,是则执行步骤5, 否则由客户端2向锁服务器发出请求撤回子文件/dir/a的元数据,锁服务器触发之前客户 端1建立的监听,回调通知拥有/dir/a文件元数据缓存的客户端1撤回子文件/dir/a的 元数据,而且客户端1将/dir/a放入目录范围锁的撤销列表中,并且同时由客户端2在节 点 eX_SeSSionID_l上设置一个监听,监听客户端1上/dir/a元数据的刷回是否完成,然后 进入等待进程。当客户端1的元数据刷回完成则通知锁服务器,此时会触发之前客户端2 设置的监听,唤醒客户端2的等待进程,表示客户端2知道元数据的刷回完成,然后执行步 骤5。
[0037] 步骤5运行如图4所示的申请单个文件元数据缓存的流程图,具体包括以下子步 骤:
[0038] (5. 1)申请单个文件/dir/a的元数据缓存权限时,首先在锁服务器上建立对应此 文件/dir/a的属于客户端的带顺序号的锁节点,并且设置对该锁节点数据改变的监听。
[0039] (5. 2)查看该锁节点之前是否已经建立了顺序号更小的锁节点,即冲突节点,有则 表示已经有客户端申请了文件/dir/a的元数据缓存权限,执行步骤(5.3);否则成功获得 文件/dir/a的元数据缓存权限,流程结束。
[0040] (5. 3)找到冲突节点,触发上述步骤(5. 1)设置的锁节点数据改变的监听,并设置 前一个冲突节点的删除事件监听,客户端进入等待状态等待唤醒,当请求触发原拥有文件/ dir/a的元数据缓存权限的客户端的监听时,查询本地元数据缓存是否获得的标志,当元数 据缓存没有获得则等待下次重新触发,当元数据缓存已经获得,则锁服务器回调通知该冲 突节点所属客户端刷回元数据,并且客户端在该冲突节点上设置一个监听,监听该冲突节 点所属客户端的刷回元数据操作是否完成。当元数据刷回完成,将本地的元数据缓存置无 效,删除自身创建的锁节点并唤醒等待的客户端,通知其可以获得文件/dir/a的元数据缓 存权限,流程结束。
[0041] 在本发明实施例中,客户端2向锁服务器申请单个文件/dir/a的元数据缓存权 限,即在锁服务器上建立表示文件/dir/a元数据缓存权限的锁节点,例如/flock/dira/ ex_sessionID_l,其中/flock表示是单个文件的元数据缓存权限,dira表示文件/dir/a, 其他说明同步骤2,并且设置监听,监听其他客户端的请求。然后查看在该锁节点之前是否 已经建立了顺序号更小的节点,此时没有,则表示获得/dir/a元数据缓存权限成功。
[0042] 此时客户端1在锁服务器上建立了如图5所示的表示/dir的节点但是exc印t:a, 对应拥有文件系统中/dir目录范围锁(除/dir/a以外的所有子文件的元数据缓存权限), 即除去子文件/dir/a以外的目录范围锁。客户端2在锁服务器上建立了如图5所示的表 示/dir/a的锁节点,对应拥有文件系统中/dir/a的单个文件元数据缓存权限。
[0043] 当客户端3也申请/dir/a的元数据缓存权限的时候,则首先查看得知本地没有父 目录/dir的目录范围锁,因此同样也要向锁服务器申请/dir的目录范围锁。通过查询锁 服务器得知,此时客户端3需要申请的父目录/dir的目录范围锁已经被客户端1申请,表 明两个客户端申请同一个文件的元数据缓存权限。则首先查询锁服务器得知/dir/a在撤 销列表中,客户端3向锁服务器申请单个文件/dir/a的元数据缓存权限,即在锁服务器上 建立表示文件/dir/a元数据缓存权限的锁节点,例如/flock/dira/ex_sessionID_2,并且 设置监听,以监听其他客户端的请求。由于此节点之前已经建立了顺序号更小的节点,客户 端3进入等待状态,并触发锁节点/flock/dira/ex_sessionID_l的监听,锁服务器回调通 知客户端2刷回/dir/a的元数据,并且客户端3在锁节点/flock/dira/ex_sessionID_l 上设置一个监听,监听客户端2的元数据刷回操作完成。当/dir/a的元数据刷回完成,客 户端2会触发客户端3的监听,唤醒等待的客户端3,通知客户端3可以获得元数据缓存权 限。
[0044] 本发明提供的分布式文件系统客户端元数据缓存优化方法,当有访问文件冲突 时,只需要撤回冲突的文件元数据,不需要撤回不必要的其他文件元数据,撤销开销小;而 且由于本发明中目录范围锁只包含子文件的元数据缓存权限,因此文件申请元数据缓存权 限时,只需向上查询父目录是否拥有目录范围锁即可,查询开销小。客户端拥有的目录范围 锁的缓存也可以批量刷回,减少与元数据服务器的交互次数,从而减少通信开销。本发明适 合于各种应用场景,特别适合于扁平的目录层次结构场景,即目录下有大量文件,但是目录 层次不深的情况。
[0045] 本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以 限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含 在本发明的保护范围之内。
【权利要求】
1. 一种分布式文件系统客户端元数据缓存优化方法,其特征在于,包括: 步骤1客户端申请文件的元数据缓存权限,首先查看本地是否拥有所述文件的父目录 的目录范围锁,有则执行步骤3,否则执行步骤2 ; 步骤2查询锁服务器上是否存在所述目录范围锁,如果没有则向所述锁服务器申请所 述目录范围锁,并获得所述父目录下所有子文件的元数据缓存权限,流程结束,否则执行步 骤4; 步骤3查询申请的所述文件是否在所述目录范围锁的撤销列表中,如果不在则获得所 述文件的所述元数据缓存权限,流程结束,否则执行步骤5 ; 步骤4查询申请的所述文件是否在所述撤销列表中,如果在则执行步骤5 ;否则所述客 户端请求所述锁服务器撤回所述文件的元数据,然后执行步骤5 ; 步骤5所述客户端向所述锁服务器申请所述文件的所述元数据缓存权限。
2. 如权利要求1所述的方法,其特征在于,所述步骤2具体包括以下子步骤: (2. 1)查询所述锁服务器上是否存在所述目录范围锁,如果没有则执行步骤(2. 2),否 则执行步骤4 ; (2. 2)向所述锁服务器申请所述目录范围锁,并在所述锁服务器上创建代表所述父目 录的节点; (2. 3)在所述节点上设置监听,监听其他客户端的请求; (2. 4)创建所述目录范围锁成功,获得所述父目录下所有子文件的元数据缓存权限,流 程结束。
3. 如权利要求1或2所述的方法,其特征在于,所述步骤4具体包括以下子步骤: (4. 1)查询申请的所述文件是否在所述撤销列表中,如果在则执行步骤5 ;否则执行步 骤(4. 2); (4. 2)所述客户端请求所述锁服务器撤回所述文件的所述元数据; (4. 3)所述锁服务器回调通知拥有所述目录范围锁的所述客户端刷回所述文件的所述 元数据,并将所述文件放在所述撤销列表中; (4. 4)当所述元数据刷回完成则通知所述锁服务器,所述锁服务器通知所述客户端,然 后执行步骤5。
4. 如权利要求1或2所述的方法,其特征在于,所述步骤5具体包括以下子步骤: (5. 1)在所述锁服务器上建立对应所述文件的属于所述客户端的带顺序号的锁节点, 并且设置对所述锁节点数据改变的监听; (5. 2)查看所述锁节点之前是否已经建立了顺序号更小的锁节点,若有则表示已经有 其他客户端申请了所述文件的所述元数据缓存权限,执行步骤(5. 3),否则获得所述文件的 所述元数据缓存权限,流程结束; (5. 3)触发所述锁节点数据改变的监听,所述锁服务器回调通知所述顺序号更小的锁 节点所属客户端刷回所述文件的元数据,当所述元数据刷回完成,则获得所述文件的所述 元数据缓存权限,流程结束。
【文档编号】H04L29/08GK104113587SQ201410284455
【公开日】2014年10月22日 申请日期:2014年6月23日 优先权日:2014年6月23日
【发明者】王芳, 冯丹, 刘芬, 田昊, 朱挺炜, 祖文强 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1