著录项信息
专利名称 | 基于键值对系统实现树形目录结构的数据存储系统及方法 |
申请号 | CN201210487740.3 | 申请日期 | 2012-11-26 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-03-27 | 公开/公告号 | CN103002027A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04L29/08 | IPC分类号 | H;0;4;L;2;9;/;0;8查看分类表>
|
申请人 | 中国科学院高能物理研究所 | 申请人地址 | 北京市石景山区玉泉路19号乙院
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院高能物理研究所 | 当前权利人 | 中国科学院高能物理研究所 |
发明人 | 黄秋兰;程耀东;汪璐 |
代理机构 | 隆天知识产权代理有限公司 | 代理人 | 章侃铱;张浴月 |
摘要
本申请公开了一种基于键值对k-v系统实现树形目录结构的数据存储系统服务端,用于与数据存储系统客户端通信以进行文件的写入和读取,包括:目录服务器集群,由若干个目录服务器组成,用于存储所写入文件的目录信息并以树形目录结构的形式呈现给所述客户端;数据服务器集群,由若干个数据服务器组成,用于根据预设存储结构存储所写入文件的数据内容;以及管理配置模块。本申请相应还公开了一种数据存储系统客户端以及上述数据存储系统服务端和客户端的数据读写方法。本申请的实施例可以实现数据的高效存储和定位,并且通过目录服务器的巧妙设计实现了物理存储与逻辑结构的有效映射,对于海量数据的存储具有更强的适应性和可扩展性。
基于键值对系统实现树形目录结构的数据存储系统及方法\n技术领域\n[0001] 本申请涉及分布式数据存储技术领域,尤其涉及一种在k-v(key-value,键值对)存储系统基础上实现树形目录结构的分布式数据存储系统服务端和客户端及其数据读写方法。\n背景技术\n[0002] 随着信息技术的快速发展,个人用户、科学计算、互联网等应用产生了海量数据的存储需求。爆炸式增长的数据即将从PB级向EB级迈进,这些数据的存储和高速访问对分布式文件系统在可用性、可扩展性及IO(Input/Output,输入/输出)访问性能上提出了新的挑战。在海量存储需求的驱动下,随着磁盘容量和IO速度的提高以及网络技术和存储架构设计的进步,诞生了大量高性能、高扩展性、高可用性的分布式文件系统。它们能够支持PB级的存储空间和数千万个甚至上亿个文件,可以动态地通过增加存储服务器和存储介质来增加系统容量、提高聚合访问带宽。\n[0003] 然而,随着存储系统规模的不断增大,现有的主流存储系统,逐渐都或多或少地表现出一定的局限性,从而影响系统的整体性能。例如,通用并行文件系统Lustre的元数据服务器存在单点故障的风险,是系统后续扩展的瓶颈,同时,元数据服务器采用的ext3/ext4本地文件系统还存在由于单个目录下节点个数过多而带来性能降低的问题,另外还存在不支持数据冗余、新旧设备存储水位不均衡等问题。\n[0004] 又例如,以采用k-v对应关系访问数据的k-v存储系统为例,其有着比较成熟的技术支撑,并且已经广泛应用在一些互联网存储服务中。然而,在现有的k-v存储系统框架下,所有数据只根据k-v键值对存入相应的数据服务器上,而不能以统一的命名空间展示给用户(换言之,即不能类似于Windows操作系统中的资源管理器那样为用户呈现集中化的统一数据管理视图);并且,由于k-v存储系统不支持POSIX(Portable Operating System Interface,可移植操作系统接口)标准(该标准包括文件的读写、重命名、链接的标准接口定义,目前已被Windows、Linux等绝大部分操作系统所支持)下的接口,所以用户通过k-v存储系统进行数据的读写操作时,必须使用存储系统服务方提供的特殊API(Application Programming Interface,应用程序界面)进行操作,这种操作完全不同于用户在本地操作系统中进行数据读写操作时的使用体验,不仅多有不便而且往往容易出错。鉴于上述k-v存储系统存在的不具备统一命名空间以及不支持POSIX语义等问题,可见也难以在其基础上实现通用型的大规模分布式存储。\n[0005] 综上所述,面对不断增长的海量数据,需要设计一种新型的存储架构,克服现有存储系统不易扩展、不具备统一命名空间,不兼容POSIX语义等问题,保证系统的可用性、可扩展性不会随着系统规模的增大而受限。\n发明内容\n[0006] 本申请的实施例旨在提供一种基于键值对系统实现树形目录结构的数据存储系统服务端和客户端及其数据读写方法,以解决上述相关技术中存在的各种问题。\n[0007] 为实现上述目的,本申请的实施例提供了一种基于键值对系统实现树形目录结构的数据存储系统服务端,用于与数据存储系统客户端通信以进行文件的写入和读取,包括:\n[0008] 目录服务器集群,由若干个目录服务器组成,所述目录服务器用于存储所写入文件的目录信息,并以树形目录结构的形式呈现给所述客户端;\n[0009] 数据服务器集群,由若干个数据服务器组成,所述数据服务器用于根据预设存储结构存储所写入文件的数据内容;\n[0010] 管理配置模块,根据所述客户端按第一计算值查找统一布局表得到的第一结果定位至对应的目录服务器,以创建与待写入文件对应的空文件,或从所述目录服务器获取待读取文件的目录信息;并根据所述客户端按第二计算值查找所述统一布局表得到的第二结果定位至对应的数据服务器,以根据所述预设存储结构写入待写入文件的数据内容,或从所述数据服务器获取待读取文件的数据内容;\n[0011] 其中,所述统一布局表用于存储所述目录服务器集群中各目录服务器所对应的第一标识与第一计算值范围之间的第一映射关系,从而在所述客户端按照根据待写入文件或待读取文件的第一特征值计算得到第一计算值时,根据该第一映射关系定位到相应第一标识所对应的目录服务器;以及用于存储所述数据服务器集群中各数据服务器所对应的第二标识与第二计算值范围的第二映射关系,从而在所述客户端按照根据待写入文件或待读取文件的第二特征值计算得到第二计算值时,根据该第二映射关系定位到相应第二标识所对应的数据服务器。\n[0012] 本申请的另一实施例提供了一种基于键值对系统实现树形目录结构的数据存储系统客户端,用于与数据存储系统服务端通信以进行文件的写入和读取,包括:\n[0013] 布局表获取模块,用于获取根据所述服务端的配置信息所生成的统一布局表,所述统一布局表用于存储所述服务端的目录服务器集群中各目录服务器所对应的第一标识与第一计算值范围之间的第一映射关系,以及所述服务端的数据服务器集群中各数据服务器所对应的第二标识与第二计算值范围的第二映射关系;\n[0014] 第一定位模块,用于在根据待写入文件或待读取文件的第一特征值计算得到第一计算值时,查找所述统一布局表并根据所述第一映射关系定位到相应第一标识所对应的目录服务器,进而将该定位结果通知给所述服务端以使所述服务端在该对应的目录服务器上创建与所述待写入文件对应的空文件,或从该对应的目录服务器获取所述待读取文件的目录信息;\n[0015] 第二定位模块,用于在根据所述待写入文件或所述待读取文件的第二特征值计算得到第二计算值时,查找所述统一布局表并根据所述第二映射关系定位到相应第二标识所对应的数据服务器,进而将该定位结果通知给所述服务端以使所述服务端在该对应的数据服务器写入所述待写入文件的数据内容,或从该对应的数据服务器获取所述待读取文件的数据内容。\n[0016] 本申请的又一实施例提供了一种基于键值对系统实现树形目录结构的数据存储系统服务端的数据读写方法,用于使数据存储系统服务端与数据存储系统客户端通信以进行文件的写入或读取,包括以下步骤:\n[0017] S31.根据所述客户端利用第一计算值查找统一布局表的定位结果,使所述服务端在该定位结果对应的目录服务器上创建与待写入文件对应的空文件或者从该对应的目录服务器获取待读取文件的目录信息,其中所述第一计算值是由所述客户端根据所述待写入文件或所述待读取文件的第一特征值计算得到;\n[0018] S32.根据所述客户端利用第二计算值查找统一布局表的定位结果,使所述服务端在该定位结果对应的数据服务器写入所述待写入文件的数据内容或者从该对应的数据服务器获取所述待读取文件的数据内容,其中所述第二计算值是由所述客户端根据所述待写入文件或所述待读取文件的第二特征值计算得到;\n[0019] 其中,所述统一布局表用于存储所述目录服务器集群中各目录服务器所对应的第一标识与第一计算值范围之间的第一映射关系,以及所述数据服务器集群中各数据服务器所对应的第二标识与第二计算值范围的第二映射关系。\n[0020] 本申请的再一实施例提供了一种基于键值对系统实现树形目录结构的数据存储系统客户端的数据读写方法,用于使数据存储系统客户端与数据存储系统服务端通信以进行文件的写入或读取,包括以下步骤:\n[0021] S41.使所述客户端根据待写入文件或待读取文件的第一特征值计算得到第一计算值;\n[0022] S42.利用所述第一计算值查找统一布局表以定位到所述服务端的目录服务器集群中对应的目录服务器;\n[0023] S43.将步骤S42的定位结果通知给所述服务端以使所述服务端相应地在该对应的目录服务器上创建与所述待写入文件对应的空文件或者从该对应的目录服务器获取所述待读取文件的目录信息;\n[0024] S44.使所述客户端根据所述待写入文件或所述待读取文件的第二特征值计算得到第二计算值;\n[0025] S45.利用所述第二计算值查找所述统一布局表以定位到所述服务端的数据服务器集群中对应的数据服务器;\n[0026] S46.将步骤S45的定位结果通知给所述服务端以使所述服务端相应地在该对应的数据服务器写入所述待写入文件的数据内容或者从该对应的数据服务器获取所述待读取文件的数据内容;\n[0027] 其中,所述统一布局表用于存储所述服务端的目录服务器集群中各目录服务器所对应的第一标识与第一计算值范围之间的第一映射关系,以及所述服务端的数据服务器集群中各数据服务器所对应的第二标识与第二计算值范围的第二映射关系。\n[0028] 由上述技术方案可知,本申请的实施例至少分别部分地实现了以下有益效果:通过建立k-v存储系统的树形目录结构可以实现数据的高效存储和定位;通过目录服务器的巧妙设计实现了物理存储与逻辑结构的有效映射;整个系统对于海量数据的存储具有更强的适应性和可扩展性。\n附图说明\n[0029] 图1示出本申请数据存储系统服务端和客户端的实施例示意图;\n[0030] 图2示出本申请数据存储系统服务端和客户端的数据读取方法示意图;\n[0031] 图3示出本申请数据存储系统服务端和客户端的数据写入方法示意图。具体实施方式\n[0032] 下面将详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。\n[0033] 图1示出本申请数据存储系统服务端和客户端的实施例示意图,如图所示,本申请的数据存储系统由服务端10和客户端20组成。在一个实施例中,服务端10为数据中心提供的分布式网络存储服务集群,客户端20则通过管理员在计算集群上安装与存储服务相关的客户端软件来实施。在另一个实施例中,服务端10由提供分布式网络数据存储服务的服务商搭建,而客户端20则通过在用户计算机上安装由服务商提供的与其数据存储服务相关的客户端软件来实施。下面将分别针对服务端10和客户端20这两个部分加以详细说明。\n[0034] 首先,本实施例的数据存储系统服务端10是用于与数据存储系统客户端20通信以进行文件的写入和读取,如图1所示,该服务端10包括:目录服务器集群11、数据服务器集群12以及管理配置模块13。\n[0035] 其中,目录服务器集群11是由若干个目录服务器(DS,Directory Server)111、\n112、...、11n组成,且这些目录服务器111-11n是用于存储所写入文件的目录信息,并以树形目录结构的形式呈现给客户端20以供后者进行浏览、检索等操作;在一个实施例中,目录服务器集群11中所有的目录服务器111-11n需要保持完全一致的目录结构,从而方便客户端20进行遍历。\n[0036] 接续,数据服务器集群12 是由若干个数据服务器 (DSS,Data \nStorageServer)121、122、...、12n组成,且这些数据服务器121-12n是用于根据预设存储结构存储所写入文件的数据内容;在一个实施例中,这里的预设存储结构可以是树形存储结构,但要注意将这里所述数据服务器上的树形存储结构与上述目录服务器提供的“树形目录结构”区分开来看待,具体而言,前者是数据服务器的物理存储结构,而后者是指以树形结构形式将整个文件系统存储的目录结构信息显示给用户。\n[0037] 最后,管理配置模块13是用于根据客户端20按第一计算值查找统一布局表(DULT,Distributed Unified Layout Table)得到的第一结果定位至对应的目录服务器\n111-11n中的一个,以创建与待写入文件对应的空文件(在写文件时),或从对应的目录服务器111-11n中的一个获取待读取文件的目录信息(在读文件时);并根据客户端接续按第二计算值查找统一布局表得到的第二结果定位至对应的数据服务器121-12n中的一个,以根据所述的预设存储结构(例如上文所述的树形存储结构)写入待写入文件的数据内容(在写文件时),或从对应的数据服务器121-12n中的一个获取待读取文件的数据内容(在读文件时)。在一个实施例中,上述管理配置模块13在目录服务器111-11n上写入空文件时,所述的“空文件”是指文件名与客户端要写入的文件名相同但不具有任何数据内容(即,占用0字节)的文件。\n[0038] 这里,上述提到的统一布局表是用于存储目录服务器集群11中各目录服务器\n111-11n所对应的第一标识与第一计算值范围之间的第一映射关系,从而在客户端20按照根据待写入文件或待读取文件的第一特征值计算得到第一计算值时,根据该第一映射关系定位到相应第一标识所对应的目录服务器;以及用于存储数据服务器集群12中各数据服务器121-12n所对应的第二标识与第二计算值范围的第二映射关系,从而在客户端20按照根据待写入文件或待读取文件的第二特征值计算得到第二计算值时,根据该第二映射关系定位到相应第二标识所对应的数据服务器。统一布局表的生成算法将在后文加以详细说明。这里需注意的是,在一个实施例中,上述的第一特征值可以是文件的文件名,而第二特征值可以是文件的全路径,而第一计算值和第二计算值则分别可以是对所述文件名和全路径进行哈希计算后得到的计算值。然而,本申请的实施例并不仅限于此,本领域技术人员根据此处的说明显然可以选取文件的其他特征值,例如MD5码、MD4码、SHA-1码等等,这里不再赘述。\n[0039] 综上所述可见,在本实施例的服务端10中,通过目录服务器和数据服务器的分开设计,实现了数据的物理存储(单独在数据服务器121-12n上进行)和上层逻辑结构(即指由目录服务器111-11n存储文件的目录信息)的分离,从而使系统具有统一的命名空间、支持POSIX语义。具体而言,目录服务器上只存储文件的目录信息,并且要求每个目录服务器上具有一致的目录结构,方便用户的目录遍历。也即,当客户端20执行mkdir(创建目录)操作时,需要在每个目录服务器创建同样的目录;当客户端20执行write(写)操作时,则根据定位服务(将在下文客户端20的实施例中详述)定位到具体的目录服务器上,进而客户端20与该目录服务器建立连接,写入空文件。由此实现了文件目录信息和后续在数据服务器上写入的文件内容的分开,文件和文件目录信息都采用k-v的结构存储,但两者之间没有任何的映射关系,这一点明显有别于传统的元数据服务器设计。目录服务器在使用过程中,会随着用户需求而不断扩大,这就要求目录服务器集群11的规模可以随着应用的需要和使用情况进行动态调整。本实施例的上述结构允许管理员通过修改配置文件即可实现动态调整目录服务器集群11的规模。并且,在动态配置的过程中,通过启动后台进程,将目录结构同步到新加入的目录服务器上,这仍然是为了确保目录服务器集群11中每个目录服务器111-11n上具有一致的目录结构。\n[0040] 接续,正如上文所述,在一个实施例中,数据存储服务器121-12n的本地物理存储设计可以采用树形存储结构,以实现物理存储和上层逻辑结构的有效映射,同时能够防止现有例如ext3/ext4本地文件系统下单个目录的inode(节点)个数过多造成的性能降低。\n在一个实施例中,上述的树形存储结构具体可采用深度为5的目录树结构,数据都放在叶子节点上,实现这种树形存储结构的具体过程可如以下步骤S101-S103所示。\n[0041] S101、用文件的全路径进行哈希计算,得到一个哈希值;\n[0042] 如上文所述,客户端20采用文件的第二特征值计算得到的第二计算值来定位对应的数据服务器,此处即以客户端采用文件的全路径作为第二特征值并以哈希计算的结果作为第二计算值来进行数据服务器的定位。接续,以文件“/testfs/huangql/test/ftest”为例,其文件名为“ftest”,全路径为“/testfs/huangql/test/ftest”,则根据本步骤的计算结果为hash(“/testfs/huangql/test/ftest”)=825480300。\n[0043] S102、用哈希值与1000求模,将结果值abc分解为/a/b/c的结构;\n[0044] 以上a、b、c分别为结果值的百位数、十位数和个位数,且结果值的范围显然为\n000-999。接续S101中的计算示例,825480300%1000=300,则S102即对应3/0/0的结构。\n[0045] S103、将文件写入目录/X/a/b/c/下。\n[0046] 本步骤中,X表示数据服务器的标识,也即上述的由客户端按第二计算值查找统一布局表得到的第二结果所定位到的对应数据服务器的标识,具体的定位过程请参见下文关于客户端20的说明。本步骤中,接续步骤S102中的计算示例,300对应为/X/3/0/0目录,即全路径为“/testfs/huangql/test/ftest”的文件的存放目录为:“/X/3/0/0/825480300”。\n[0047] 接续,本实施例的数据存储系统客户端20是用于与数据存储系统服务端10通信以进行文件的写入和读取,仍然如图1所示,该客户端20包括:布局表获取模块21、第一定位模块22、以及第二定位模块23。\n[0048] 其中,布局表获取模块21用于获取根据服务端10的配置信息所生成的统一布局表。这里所述的统一布局表与上文服务端10的管理配置模块13中所用到的统一布局表是同一对象,其用于存储服务端10的目录服务器集群11中各目录服务器111-11n所对应的第一标识与第一计算值范围之间的第一映射关系,以及服务端10的数据服务器集群12中各数据服务器121-12n所对应的第二标识与第二计算值范围的第二映射关系。接续,在一个实施例中,服务端10可进一步包括布局表生成模块(图中未示出),以用于根据服务端10中与各目录服务器111-11n和各数据服务器121-12n有关的配置信息按预设算法生成统一布局表,并进一步由服务端10提供给客户端20的布局表获取模块21;并且,一旦服务端10中的目录服务器111-11n或数据服务器121-12n出现设备更新(例如增加新的服务器或删除故障服务器)时,该布局表生成模块可实时更新新的统一布局表并下发给客户端20,从而保证客户端20始终能够获取最新的统一布局表。然而,本申请的实施例并不仅限于此,在另一个实施例中,这里的布局表获取模块21可以自身即具有生成统一布局表的功能,也即,由服务端10向客户端20仅提供与各目录服务器111-11n和各数据服务器\n121-12n有关的最新的配置信息,而由各客户端20的布局表获取模块21根据该配置信息自主生成统一布局表。在一个实施例中,布局表获取模块21在得到(无论是从服务端10获取得到还是由自身生成得到)上述统一布局表后,是直接将该统一布局表挂载于客户端计算机的内存中,从而使得后续的定位过程更加迅速、高效。\n[0049] 基于上文所述的内容,在展开第一定位模块22和第二定位模块23的说明之前,将首先详细描述统一布局表DULT的具体生成算法,正如前文所述,统一布局表DULT既可由服务端10根据自身的配置信息生成并分发至客户端20,也可由客户端20根据服务端10下发的配置信息而生成;也即,下面将描述的DULT生成算法即可应用于服务端10,也可应用于客户端20。\n[0050] 具体而言,在一个实施例中,本申请DULT算法的实现主要是基于一致性哈希环的Chord算法。Chord算法是目前主流的分布式hash表协议之一,由麻省理工学院于1997年提出,其是通过修正简单hash算法得到。Chord算法的基本思路是利用一致性哈希环的特性,将存储设备(本实施例中分别包括目录服务器111-11n和数据服务器121-12n)均匀分布到一个大小为2m的环上,即每个设备负责的区域空间为“2m/设备总数”,这里,m为大于等于32的整数,在下文涉及的示例中均以m=32为例。假设环上有8个节点(也即,存在8个目录服务器111-118或8个数据服务器121-128),则N1节点对应的区域为[0,\n536870912),之后的节点依此类推。根据分配的结果生成路由信息,即得到所需的DULT。\n[0051] 进一步,DULT的数据结构为文本文件,每行记录代表一个存储设备的布局信息,其存储格式例如可以设计为:\n[0052] hash(IP,dev),[start,end)\n[0053] 其中,第一个字段hash(IP,dev)为存储服务器的IP地址和设备名dev进行哈希计算的结果,第二个字段表示该设备的管辖区域,并作为后续服务端20对目录服务器和数据服务器进行定位的依据(请参见后文关于定位服务的说明)。由此,上述每条记录唯一地标识一个设备的布局信息,每条记录大约1KB,则DULT的大小约为:\n[0054] 1KB×设备总数\n[0055] 因此,即使存储规模扩大到成千上万个设备时,DULT的大小也小于机器的常用内存,从而便于客户端20将DULT挂载于内存中。\n[0056] 接续,第一定位模块22用于在根据待写入文件或待读取文件的第一特征值计算得到第一计算值时,查找统一布局表并根据上述的第一映射关系定位到相应第一标识所对应的目录服务器111-11n中的一个,进而将该定位结果通知给服务端10以使服务端10在该对应的目录服务器上创建与待写入文件对应的空文件,或从该对应的目录服务器获取待读取文件的目录信息。\n[0057] 最后,第二定位模块23是用于在根据待写入文件或待读取文件的第二特征值计算得到第二计算值时,查找统一布局表并根据第二映射关系定位到相应第二标识所对应的数据服务器121-12n中的一个,进而将该定位结果通知给服务端10以使服务端10在该对应的数据服务器写入待写入文件的数据内容,或从该对应的数据服务器获取待读取文件的数据内容。\n[0058] 如前文服务端10的实施例中所述,在一个实施例中,这里的第一特征值和第二特征值可以分别采用文件的文件名和全路径,即,第一定位模块22可以使用对文件的文件名进行哈希计算得到的结果作为所述第一计算值,而第二定位模块23可以使用对文件的全路径进行哈希计算得到的结果作为所述第二计算值。接续,在一个实施例中,第一定位模块22和第二定位模块23是以定位服务(LE,Location Engine)的形式运行在客户端20对应的计算机上,也即,客户端计算机是通过运行定位服务来实现上述第一定位模块22和第二定位模块23所完成的文件两次定位。以下将结合上文统一布局表的示例对目录服务器或数据服务器的定位过程加以简单说明。具体而言,首先,以第一定位模块22进行目录服务器的定位为例,仍以文件“/testfs/huangql/test/ftest”为例,其文件名为“ftest”,则根据该文件名进行哈希计算得到第一计算值的结果为hash(“ftest”)=533837746,在上述统一布局表的生成算法实施例中,该结果位于第一个目录服务器111的管辖区域[0,\n536870912)的范围内,因此第一定位模块22即定位到目录服务器111并将定位结果通知给服务端10,进而由服务端10在目录服务器111上创建对应的空文件“/testfs/huangql/test/ftest”;接续,以第二定位模块23进行数据服务器的定位为例,假设其根据待写入文件或待读取文件的全路径进行哈希计算得到第二计算值的结果为825480300(参见前文步骤S101-S103),则在上述统一布局表的生成算法实施例中,该结果位于第二个数据服务器\n122的管辖区域[536870912,1073741824)的范围内,因此第二定位模块23即定位到数据服务器122,进而将定位结果通知给服务端10以进行后续文件的写入或读取。\n[0059] 结合上文分布式存储系统服务端和客户端的实施例说明,下面将详细说明利用本申请分布式存储系统服务端和客户端进行数据读写操作的方法。\n[0060] 图2为本申请分布式存储系统服务端和客户端配合进行数据写入操作的流程,如图所示,其包括以下步骤S201-S206。\n[0061] S201、客户端挂载文件系统,获取统一布局表,并将统一布局表装载于内存中;\n[0062] 在一个实施例中,客户端挂载文件系统是指在客户端计算机上安装存储系统的客户端软件后,通过创建挂载点,例如利用Unix/Linux的挂载(mount)命令,将该分布式网络存储系统挂载到本地,进行数据的浏览、读写等操作。当用户在客户端访问文件系统时,具有与本地文件系统一样的用户体验。当用户在客户端上挂载文件系统后(挂载点以/testfs为例),用户在客户端上创建了目录,相当于在所有的目录服务器上创建了相同名称的文件夹,这之后,用户在该文件夹下进行存储相关的操作时,其体验与在本地进行的操作完全相同,但操作所产生的变化却仅体现在服务端的目录服务器和数据服务器中。例如,以Linux操作系统为例,用户在/testfs下创建“/huangql/test/”的目录结构时,该操作将同步至目录服务器集群中的所有目录服务器上;紧接着,用户在该目录结构下写入名称为“ftest”的文件时,服务端将根据两次定位的结果在定位到的目录服务器和数据服务器中分别写入对应的空文件和文件数据内容,具体如后续步骤所述。\n[0063] 在另一个实施例中,客户端挂载文件系统是指在客户端计算机上安装存储系统服务方提供的客户端软件,并完成注册、登录等操作。当用户在客户端计算机上利用注册的用户名(下文以用户名为testfs为例)和密码登录客户端软件后,相当于同时在客户端计算机中创建了一个名称为testfs的文件夹(或分区)并在所有的目录服务器上创建了相同名称的文件夹(此处假设通过注册时的限制手段保证testfs能够作为全局唯一标识),这之后,用户在该文件夹下进行存储相关的操作时,其体验与在本地进行的操作完全相同,但操作所产生的变化却仅体现在服务端的目录服务器和数据服务器中。例如,以Windows操作系统为例,用户在testfs文件夹下创建“/huangql/test/”的目录结构时,该操作将同步至目录服务器集群中的所有目录服务器上;紧接着,用户在该目录结构下写入名称为“ftest”的文件时,服务端将根据两次定位的结果在定位到的目录服务器和数据服务器中分别写入对应的空文件和文件数据内容,具体如后续步骤所述。\n[0064] S202、客户端发起写文件操作;\n[0065] S203、客户端的第一定位模块根据文件名计算第一计算值,根据该值查找统一布局表定位到对应的目录服务器,并将定位结果通知服务端;\n[0066] 如前文客户端的实施例所述,第一定位模块根据该文件名“ftest”进行哈希计算得到第一计算值的结果为hash(“ftest”)=533837746,对应于第一个目录服务器的第一计算值范围[0,536870912),由此第一定位模块定位到该目录服务器并将定位结果通知给服务端;\n[0067] S204、服务端与对应的目录服务器通信,在对应的目录服务器的目录结构下写入空文件;\n[0068] 在服务端与目录服务器通信前还可对待写入的文件进行完整性和正确性的校验,在校验通过后才进行后续的空文件写入步骤,否则中止本次写入操作。进一步,假设此处通过校验,客户端是要在“testfs/huangql/test/”下写入文件,由步骤S201可知,服务端目录服务器集群中的每个目录服务器都通过同步而具有完全相同的目录结构,因此,服务端在此次定位到的目录服务器上也能找到对应的目录结构,进而便可在该目录下写入文件名为“ftest”的空文件。\n[0069] 通过本步骤,客户端每次进行的文件写入操作都能够在对应的目录服务器上留下相应的空文件记录,服务端集合所有目录服务器存储的目录信息,便能够向客户端呈现相应的树形目录结构,该树形目录结构能够保证与客户端在本地文件系统上写入文件时所产生的目录结构完全相同,从而使得用户具有与在本地计算机上使用文件系统完全相同的使用体验,因此更加便于进行文件浏览、检索等操作。\n[0070] S205、客户端的第二定位模块根据全路径计算第二计算值,根据该值查找统一布局表定位到对应的数据服务器,并将定位结果通知服务端;\n[0071] 如前文客户端的实施例所述,第二定位模块根据全路径“/testfs/huangql/test/ftest”进行哈希计算得到第二计算值的结果为hash(“/testfs/huangql/test/ftest”)=\n825480300,对应于第二个数据服务器的第二计算值范围[536870912,1073741824),由此第二定位模块定位到该第二个数据服务器并将定位结果通知给服务端;\n[0072] S206、服务端与对应的数据服务器通信,在对应的数据服务器中写入文件的数据内容;\n[0073] 在服务端与数据服务器通信前还可对待写入的文件进行完整性和正确性的校验,在校验通过后才进行后续的数据内容写入步骤,否则中止本次写入操作。\n[0074] 图3为本申请分布式存储系统服务端和客户端配合进行数据读取操作的流程,如图所示,其包括以下步骤S301-S306。\n[0075] S301、客户端挂载文件系统,获取统一布局表,并将统一布局表装载于内存中;\n[0076] 本步骤可参见上文步骤S201的详细描述。\n[0077] S302、客户端发起读文件操作;\n[0078] S303、客户端的第一定位模块根据文件名计算第一计算值,根据该值查找统一布局表定位到对应的目录服务器,并将定位结果通知服务端;\n[0079] 假设客户端要读取的文件为“/testfs/huangql/test/ftest”,则与步骤S203类似,第一定位模块根据文件名“ftest”进行哈希计算得到第一计算值的结果为hash(“ftest”)=533837746,对应于第一个目录服务器的第一计算值范围[0,\n536870912),由此第一定位模块定位到该目录服务器并将定位结果通知给服务端。\n[0080] S304、服务端与对应的目录服务器通信,从对应的目录服务器获取文件的目录结构;\n[0081] 与步骤S204类似,在服务端与目录服务器通信前还可对待读取的文件进行完整性和正确性的校验,在校验通过后才进行后续的步骤,否则中止本次读取操作。在一个实施例中,这里的完整性和正确性校验主要是指两个方面,第一是判断是否具有访问权限,第二是指判断文件是否存在。\n[0082] 在一个实施例中,可以省略本步骤,这是因为,通常情况下客户端在挂载文件系统后便能看到完整的目录结构,因此无需额外再进行服务器获取目录结构的步骤。然而,在用户针对部分目录设置了权限校验的情况下,本步骤仍有存在的必要,具体而言,在通过权限校验之前客户端上只能看到有限的目录结构,而当客户端需要访问设置了权限校验的目录下的文件时便需要通过本步骤的权限校验之后,才能由对应的目录服务器获取这一部分文件的目录结构。\n[0083] S305、客户端的第二定位模块根据全路径计算第二计算值,根据该值查找统一布局表定位到对应的数据服务器,并将定位结果通知服务端;\n[0084] 与步骤S205类似,这里第二定位模块根据全路径“/testfs/huangql/test/ftest”进行哈希计算得到第二计算值的结果为hash(“/testfs/huangql/test/ftest”)=\n825480300,对应于第二个数据服务器的第二计算值范围[536870912,1073741824),由此第二定位模块定位到该第二个数据服务器并将定位结果通知给服务端。\n[0085] S306、服务端与对应的数据服务器通信,从对应的数据服务器读取文件的数据内容;\n[0086] 与步骤S206类似,这里在服务端与数据服务器通信前还可对待读取的文件进行完整性和正确性的校验,在校验通过后才进行后续的数据内容读取步骤,否则中止本次读取操作。\n[0087] 结合上文对分布式存储系统服务端和客户端以及对分布式存储系统的数据写入和数据读取方法进行的描述,下面将分别对本申请分布式存储系统服务端的数据读写方法和分布式存储系统客户端的数据读写方法加以说明,由于这些方法的内容在上文中均有详细描述,因此下文将省略各步骤的具体说明,相关内容可参考上文各实施例。\n[0088] 首先介绍本申请分布式存储系统服务端的数据读写方法,其用于使分布式存储系统服务端与分布式存储系统客户端通信以进行文件的写入或读取,该方法包括以下步骤:\n[0089] 根据所述客户端利用第一计算值查找统一布局表的定位结果,使所述服务端在该定位结果对应的目录服务器上创建与待写入文件对应的空文件或者从该对应的目录服务器获取待读取文件的目录信息,其中所述第一计算值是由所述客户端根据所述待写入文件或所述待读取文件的第一特征值计算得到;\n[0090] 根据所述客户端利用第二计算值查找统一布局表的定位结果,使所述服务端在该定位结果对应的数据服务器写入所述待写入文件的数据内容或者从该对应的数据服务器获取所述待读取文件的数据内容,其中所述第二计算值是由所述客户端根据所述待写入文件或所述待读取文件的第二特征值计算得到。\n[0091] 接续介绍本申请分布式存储系统客户端的数据读写方法,其用于使分布式存储系统客户端与分布式存储系统服务端通信以进行文件的写入或读取,该方法包括以下步骤:\n[0092] 使所述客户端根据待写入文件或待读取文件的第一特征值计算得到第一计算值;\n[0093] 利用所述第一计算值查找统一布局表以定位到所述服务端的目录服务器集群中对应的目录服务器;\n[0094] 将前一步骤的定位结果通知给所述服务端以使所述服务端相应地在该对应的目录服务器上创建与所述待写入文件对应的空文件或者从该对应的目录服务器获取所述待读取文件的目录信息;\n[0095] 使所述客户端根据所述待写入文件或所述待读取文件的第二特征值计算得到第二计算值;\n[0096] 利用所述第二计算值查找所述统一布局表以定位到所述服务端的数据服务器集群中对应的数据服务器;\n[0097] 将前一步骤的定位结果通知给所述服务端以使所述服务端相应地在该对应的数据服务器写入所述待写入文件的数据内容或者从该对应的数据服务器获取所述待读取文件的数据内容。\n[0098] 综上所述,通过本申请的基于k-v实现树形目录结构的分布式存储系统及方法,为k-v存储系统作为通用型的分布式文件系统提供了依据。通过使用本申请,基于k-v技术的存储系统既具有k-v技术带来的优势,又具备统一的命名空间,兼容POSIX语义。这为k-v存储技术的广泛推广提供了有力的保障。具体而言,本申请具有下述技术优点和效果:\n[0099] (1)建立k-v存储系统的树形目录结构\n[0100] 传统的k-v存储系统改变了应用访问数据的方式,不具备统一的命名空间、不支持POSIX语义,不能作为通用型的分布式文件系统。虽然现有的k-v存储技术具有查询速度快、支持海量数据存储及高可扩展性的特点,并在存储领域的某些应用上有很好的表现,但由于前述问题的存在,其在分布式存储中的广泛使用还是很受限制。本申请基于k-v技术实现了数据的物理存储和上层逻辑结构的分离,将文件和文件目录信息分开,利用数据服务器存储数据内容,而利用目录服务器存储目录信息并向用户呈现树形目录结构,由此使得系统具有统一的命名空间并支持POSIX语义。使用该方法的k-v存储可以作为通用型的分布式文件系统,适用于任何场合,非常适合于大规模的分布式存储。\n[0101] (2)实现k-v的数据高效存储和定位\n[0102] 传统的存储系统中,数据的存储和定位需要与所有的存储服务器通信,造成了大量网络资源的浪费,并且随着存储规模的扩大,这种缺陷越来越明显。即使在有元数据服务器的系统中,数据的存储和定位也先通过与元数据服务器进行通信,得到具体的数据服务器再与之通信,这过程造成了很大的操作延时。然而在云存储中,很多情况下随着存储规模和数据量的增大,用户很难满足传统的数据访问性能。本申请通过一致性哈希思想设计的统一布局算法,将数据的分布信息置于内存,大大提高了数据的定位性能,数据的访问只需同对应的数据服务器进行通信,节省了大量的网络带宽,从而提高了整个系统的性能和可扩展性。\n[0103] (3)目录服务器的巧妙设计\n[0104] 传统的分布式存储系统使用集中式或分布式元数据服务来维护元数据,记录数据逻辑与物理位置的映像关系。集中式元数据服务会导致单点故障和性能瓶颈问题,而分布式元数据服务存在性能负载和元数据同步一致性问题。特别是对于海量小文件的应用,元数据问题是个非常大的挑战。在本申请中,基于元数据服务的思想巧妙设计的目录服务器不等同于元数据服务,它摒弃了有元数据的复杂设计,又能解决无元数据服务下目录遍历的性能问题,真正实现文件和文件的目录信息的完全分离,保证系统有统一的命名空间并支持POSIX语义。在本申请的实施例中,目录服务器只记录数据的目录结构信息,不需要额外对数据的逻辑与物理位置进行任何的映射操作,同时目录信息的访问也是通过高效的k-v技术,大大提高了无元数据服务下目录遍历的性能。\n[0105] (4)实现物理存储与逻辑结构的有效映射\n[0106] 在传统的分布式文件系统中,通常使用元数据服务来记录数据的物理存储和逻辑结构的映,而在没有元数据服务的系统中往往很难实现数据的逻辑和物理位置的有效映射。在本申请的实施例中,通过目录服务器记录数据的逻辑结构信息,数据服务器器存储数据内容,其中逻辑结构和物理存储的映射根据文件的两个不同特征值(例如文件名和全路径)进行哈希计算来实现,而不要查询索引或是其他服务器的辅助,从而极大提高了系统的可扩展性。\n[0107] (5)更强的适应性和可扩展性\n[0108] 本申请实现的k-v分布式存储系统摒弃了传统具有元数据服务的分布式存储设计的复杂性,又解决了k-v存储系统不具备统一命名空间、不支持POSIX语义的问题,集k-v存储的优势和通用型分布式文件系统的特性,使得整个系统具有很强的适应性和可扩展性,可以作为云存储的首选方案。\n[0109] 虽然已参照几个典型实施例描述了本申请,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。
法律信息
- 2015-09-02
- 2013-04-24
实质审查的生效
IPC(主分类): H04L 29/08
专利申请号: 201210487740.3
申请日: 2012.11.26
- 2013-03-27
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-04-07
|
2009-10-19
| | |
2
| |
2011-03-30
|
2009-08-24
| | |
3
| |
2012-06-27
|
2011-11-30
| | |
4
| |
2012-03-14
|
2010-08-24
| | |
5
| |
2011-01-26
|
2010-10-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |