CN103049574A - 实现文件动态副本的键值文件系统及方法 - Google Patents
实现文件动态副本的键值文件系统及方法 Download PDFInfo
- Publication number
- CN103049574A CN103049574A CN2013100024707A CN201310002470A CN103049574A CN 103049574 A CN103049574 A CN 103049574A CN 2013100024707 A CN2013100024707 A CN 2013100024707A CN 201310002470 A CN201310002470 A CN 201310002470A CN 103049574 A CN103049574 A CN 103049574A
- Authority
- CN
- China
- Prior art keywords
- dynamic
- son
- file
- volume
- son volume
- 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.)
- Granted
Links
Images
Abstract
本发明公开了一种在键值文件系统中实现文件动态副本的方法,用于针对特定文件进行动态副本的管理,该方法包括:由客户端定位特定文件的静态副本所在的第一子卷;从第一子卷读取特定文件的扩展属性,扩展属性中包括特定文件已有的动态副本所在的动态子卷集合;对动态子卷集合进行动态副本的增加、删除或浏览操作;以及根据增加或删除动态副本后的动态子卷集合更新扩展属性。本发明相应还公开了一种实现文件动态副本的键值文件系统。本发明的实施例基于键值文件系统实现了文件的动态副本,从而能够针对文件访问频度的变化来及时调整存储文件副本的子卷数量,达到提高存储资源的利用效率和响应速度的效果。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种在键值文件系统中实现文件动态副本的方法及实现文件动态副本的键值文件系统。
背景技术
随着大数据时代的到来,业界对信息的存储和访问的需求越来越苛刻,传统的文件系统如Lustre、Panfs、GPFS等在可扩展性、可靠性和可用性等方面受到了复杂语义和中心元数据服务器架构的制约,已经难以满足搜索引擎、社交网络、在线游戏和视频等这些存储量和访问量都十分巨大的互联网应用的需求。相比之下,键值(Key-Value,k-v)文件系统在大数据时代得到了越来越广泛的应用。在键值文件系统中,信息数据为值(Value),被赋予唯一的键(Key),客户端通过对键(Key)的哈希(HASH)来定位值(Value)的存储位置。与传统文件系统相比,键值文件系统摆脱了对中心元数据服务器的依赖,可扩展性大大提高。
在键值文件系统中,系统的管理客户端以存储卷为单位对物理存储于数据服务器上的文件数据进行管理,每个存储卷对应多个子卷。在客户端装载(mount)键值文件系统的初始阶段,通常会设定多种类型的子卷,例如包括普通子卷、复制子卷、和分条子卷等,其中,普通子卷仅对应单个子卷,而复制子卷和分条子卷都分别对应于多个子卷。对于普通子卷而言,数据的写入和读取操作都针对所述单个子卷进行。对于复制子卷而言,写入的数据会在其所包含的多个子卷之间进行同步(复制),而读取数据则在响应速度最快的子卷上完成。对于分条子卷而言,写入的数据会分成多条并分别存储到其所包含的多个子卷上,而读取数据则由这多个子卷共同响应完成,从而提高并发读件的效率。在Glusterfs等典型的键值文件系统中,每个子卷的冗余度(可由该子卷所对应的复制子卷中所包含的子卷数量表示)和分条度(可由该子卷所对应的分条子卷中所包含的子卷数量表示)一旦确定就很难再加以调整,而且所有存放于同一个存储卷的文件必须按照相同的规则存放。然而,在目前日趋流行的视频点播、在线游戏等网络应用中,经常会出现特定时间段内访问量突然剧增的文件,这种局部热点文件的数目往往不多,但由于直接影响到网络应用的用户体验,因此其访问性能不容忽视。为了改善局部热点文件的访问性能,最优选的方式是实时调整其所在子卷的冗余度,但这显然与键值文件系统的上述特点相悖;而如果在系统装载之初就预先针对这种不定期出现的少数文件创建一个冗余度很高的存储子卷,显然又会造成存储资源的浪费。
发明内容
本申请的实施例旨在提供一种在键值文件系统中实现文件动态副本的方法及实现文件动态副本的键值文件系统,以解决上述现有技术中键值文件系统针对局部热点文件不能实现动态副本的问题。
为实现上述目的,本申请的实施例提供了一种在键值文件系统中实现文件动态副本的方法,用于针对特定文件进行动态副本的管理,所述键值文件系统包括:客户端,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器,用于根据所述客户端的操作分成多个子卷来存储所述客户端写入的文件并响应所述客户端的文件读取请求;所述方法包括以下步骤:
由所述客户端定位所述特定文件的静态副本所在的第一子卷;
从所述第一子卷读取所述特定文件的扩展属性,所述扩展属性中包括所述特定文件已有的动态副本所在的动态子卷集合;
对所述动态子卷集合进行动态副本的增加、删除或浏览操作;以及
根据增加或删除动态副本后的动态子卷集合更新所述扩展属性。
相应地,本申请的实施例还提供一种实现文件动态副本的键值文件系统,用于针对特定文件进行动态副本的管理,所述键值文件系统包括:客户端,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器,用于根据所述客户端的操作分成多个子卷来存储所述客户端写入的文件并响应所述客户端的文件读取请求;其中,所述客户端包括:
静态定位单元,用于定位所述特定文件的静态副本所在的第一子卷;
属性操作单元,用于从所述第一子卷读取所述特定文件的扩展属性,所述扩展属性中包括所述特定文件已有的动态副本所在的动态子卷集合;以及
副本操作单元,用于对所述动态子卷集合进行动态副本的增加、删除或浏览操作;并且
所述属性操作单元根据所述副本操作单元增加或删除动态副本后的动态子卷集合更新所述扩展属性。
由上述技术方案可知,本申请的实施例基于键值文件系统实现了文件的动态副本,从而能够针对文件访问频度的变化来及时调整存储文件副本的子卷数量,达到提高存储资源的利用效率和响应速度的效果。
附图说明
图1为键值文件系统的实现原理框图;
图2为本申请在键值文件系统中实现文件动态副本的方法实施例一流程图;
图3为本申请在键值文件系统中实现文件动态副本的方法实施例二流程图;
图4为本申请在键值文件系统中实现文件动态副本的方法中文件查找(1ookup)操作的实施例流程图;
图5为本申请实现文件动态副本的键值文件系统的实施例框图;
图6为本申请键值文件系统改进后的实现原理框图。
具体实施方式
在描述本申请的实施例之前,下文将首先对键值文件系统的基本实现原理加以简单介绍。
图1示出键值文件系统的实现原理。如图所示,客户端11以存储卷为单位装载(mount)键值文件系统,每个存储卷(如图中卷A-C)包含多个存储子卷(如图中子卷1-6)。服务器(集群)中的各个子卷服务器121-122将一个本地文件系统分区作为一个子卷加入存储卷,如图中子卷服务器121将分区/data1作为子卷1加入存储卷A。子卷服务器为每个子卷运行一个后台进程,处理客户端请求,由客户端11的业务逻辑层111发起的读写请求被子卷后台进程映射成对相应服务器上本地文件系统的读写请求。相同存储卷的存储子卷对应的本地文件系统具有相同的目录结构,该目录结构与客户端看到的目录结构完全一致,并且新加入的存储子卷,会自动同步这一目录结构。所有子卷服务器上都启动了管理后台进程,该进程负责接收处理卷配置的修改和同步。
在客户端11,文件根据HASH(哈希)计算在子卷之间的分布。具体而言,每个文件名通过HASH计算可以得到一个对应的整数,该整数即为键(Key);文件的上层目录的扩展属性中记录了该目录中文件的layout(数据分布)规则,即每个子卷服务器对应的Key值范围,从而通过查找和比较可以找到文件所在的子卷序号,该序号即为值(Value)。客户端11对每个子卷启动一个连接(如图中通信层112中的连接C1-C6),用来与服务器上的子卷后台进程通信。子卷还可以组合成复制卷和分条卷,在创建新子卷时,通过指定副本数量R和分条数量S可以分别构造出复制卷和分条卷。如背景技术部分所述的,复制卷中所有的内容需要写同步,如图1中,复制卷B包含了2个子卷2、3,所有复制卷B的写操作需要同步到两个子卷2、3才算成功,而读操作则选择到最先响应的子卷完成;分条卷将文件分成多条,分别存储到多个子卷上,从而提高并发读文件的效率,如图1中的分条卷C会将写入的文件分成三条分别存储到三个子卷4、5、6上。
下面将详细描述本申请的具体实施例。应当注意,这里描述的实施例只用于举例说明,并不用于限制本申请。
本申请在键值文件系统中实现文件动态副本的方法是用于针对特定文件进行动态副本的管理。这里,上述的键值文件系统包括:客户端,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器,用于根据客户端的操作分成多个子卷来存储所述客户端写入的文件并响应所述客户端的文件读取请求。如图2所示,本申请在键值文件系统中实现文件动态副本的方法实施例包括以下步骤S201-S204。
S201、由客户端定位特定文件的静态副本所在的第一子卷;
这里的静态副本是相对于后文的动态副本而言,其含义即指文件数据本身。本步骤中客户端针对特定文件静态副本的定位与现有技术中的定位操作相同,即,根据该文件的HASH计算结果和文件父目录所存储的layout规则,定位到存储该文件静态副本所在的第一子卷。在一个实施例中,上述layout规则是存储于父目录的inode(索引节点)缓存中。具体而言,layout规则记录在父目录的layout扩展属性中,这个属性的格式例如如下:
[1-50]子卷1;[51-60]子卷2;...
以上例示的属性表示HASH结果在1-50之间的文件存放在子卷1上,HASH结果在51-60之间的文件存放在子卷2上,依此类推。
进一步,对于文件系统而言,数据文件和目录的区别在于其type属性不同。每个目录保存了本方法需要的“layout”扩展属性在本地磁盘中,数据文件存放了本方法需要的扩展属性(<replicainfo>,请见下文)在本地磁盘中,这两个属性都是在lookup操作的时候,被读文件系统的inode缓存中的。
S202、从第一子卷读取特定文件的扩展属性,扩展属性中包括特定文件已有的动态副本所在的动态子卷集合;
在一个实施例中,本步骤中所利用的扩展属性可以作为元数据同样也存储在文件父目录的inode缓存中。通常,键值文件系统的主要扩展属性包括layout(如上所述用于存储文件存放规则)和stripeinfo(用于存储分条信息)等,在本申请中,为了记录文件的动态子卷信息,相应在文件系统中添加了一个新的扩展属性<replicainfo>。该扩展属性<replicainfo>用来存储上述特定文件当前已有的动态副本所在的动态子卷集合(也即子卷序号的集合)。在一个实施例中,如果针对当前的特定文件是第一次配置动态副本,则本步骤中所获取的动态子卷集合显然为空。
S203、对动态子卷集合进行动态副本的增加、删除或浏览操作;
本步骤涉及针对动态副本的管理操作,例如可以通过在客户端上增设的动态副本管理模块(参见图6及其描述)来进行。在一个实施例中,例如在发现文件系统中出现访问量和访问频度在短期内剧增的局部热点文件时,便可以针对该文件进行动态副本的增加操作;又例如,当某个局部热点文件访问量和访问频度出现显著下降时,则可以进行动态副本的删除操作;至于动态副本的浏览操作则可以在增加和删除操作进行中或其他时间段随时进行。本步骤的具体内容将在下文实施例二中展开详细描述。
S204、根据增加或删除动态副本后的动态子卷集合更新扩展属性。
经过步骤S203针对动态副本的管理操作后,相应的会在步骤S202读取的动态子卷集合中增加或删除一定的动态副本。例如,如果针对当前的特定文件是第一次配置动态副本,通过步骤S203在原来为空的动态子卷集合中加入了多个用于存储动态副本的子卷。相应地,本步骤中即根据增加或删除动态副本后发生变化的动态子卷集合来更新上述特定文件对应的扩展属性。
上述实施例介绍了利用子卷本地文件系统的扩展属性来存储文件的动态副本位置信息,进而通过获取扩展属性来浏览当前已有的动态副本以及进行动态副本的增加和删除操作。动态副本的增加即为将特定文件的副本同步存储到更多的子卷上,相应地,动态副本的删除即为将特定文件的副本从若干个复制子卷上删除。在一个实施例中,动态副本的增加和删除可以不考虑子卷本地文件系统的存储性能(即服务器上与子卷对应的本地文件系统分区的存储性能),但这样一来会存在一定的问题。例如,在负担已经很重的子卷上新增动态副本,可能完全起不到分担局部热点文件访问量的作用,反而可能会恶化该子卷的存储性能;类似地,从负担较轻的子卷上删除动态副本而在负担较重的子卷上保留动态副本可能会使本来已经改善的局部热点文件访问体验再次恶化。
有鉴于此,在一个实施例中,为了优化子卷本地文件系统的存储性能,达到确保改善局部热点文件访问体验的效果,本申请在键值文件系统中实现文件动态副本的方法优选还包括一个子卷全局负载排序操作,其包括以下步骤:首先,在服务器上获取子卷的负载信息,并发送给客户端;然后,客户端根据收集到的所有子卷的负载信息进行排序以得到全局负载排序列表。进而,客户端便可以利用上述全局负载排序列表作为动态副本的增加和删除操作的依据。
进一步,具体而言,在一个实施例中,获取子卷的负载信息例如可以通过在服务器上增加I/O(输入/输出)状态汇报线程来实现;该线程可以定期收集服务器的CPU和内存使用率以及子卷对应磁盘分区的iowait(输入输出等待)值,并通过加权计算得出当前子卷的综合负载信息;这些负载信息可以在子卷服务进程与客户端的管理口(CM,可参见图6及其描述)进行通信时,与心跳信息一起发送给客户端。相应地,在一个实施例中,可以在客户端上增设负载排序线程,该线程对收集到的所有子卷的负载信息进行排序,由此生成子卷的全局负载排序列表,以作为上述实施例一步骤S203中动态副本增加和删除操作的依据,具体可参见下文实施例二所述。
图3为本申请在键值文件系统中实现文件动态副本的方法实施例二流程图,如图所示,本实施例的方法包括步骤S301-S308。
S301、HASH计算特定文件的静态副本所在的第一子卷;
S302、从第一子卷读取特定文件的扩展属性<replicainfo>;
S303、从<replicainfo>中读取已有的动态副本所在的动态子卷集合;
本实施例步骤S301-S302对应于上文实施例的步骤S201-S202,此处不再赘述,需要说明的是,在本实施例以及后文的描述中,除特别说明外,所提及的扩展属性均为<replicainfo>。
S304、确定动态副本的操作类型,如果为增加操作则转步骤S305,如果为删除操作则转步骤S308,如果为浏览操作则转步骤S311。
如实施例一步骤S203所述,根据局部热点文件访问量和访问频度的变化,可以相应进行动态副本的调整。在一个实施例中,动态副本的增加和删除可以由管理员利用客户端提供的人机操作接口来手动完成。但本申请并不仅限于此,在一个实施例中,还可以通过在客户端增设相应的服务进程来自动完成动态副本的增加和删除,例如,该进程在监测到某一文件的访问量和/或访问频度增幅超过一阈值时,便通过后续步骤S305-S307来增加文件的动态副本;反之,当监测到某一文件的访问量和/或访问频度降幅超过另一阈值时,便通过后续步骤S308-S309来删除文件的动态副本。接续,即相继对步骤S305-S307的动态副本增加操作和步骤S308-S309的动态副本删除操作加以说明。
S305、遍历全局负载排序列表,选取若干个负载最轻且不属于动态子卷集合的子卷加入第一集合;
S306、根据全局负载排序列表选取动态子卷集合中负载最轻的第二子卷;
S307、将特定文件的动态副本从第二子卷上同步到第一集合中的所有子卷上,并将第一集合中的所有子卷加入动态子卷集合中;
如上文所述,在视频点播、在线游戏等网络应用中经常会出现局部热点文件,在这种情况下,为了改善文件的访问性能,提升相关网络应用的使用体验,就需要增加该文件的动态副本数量。同时,为了优化子卷本地文件系统的存储性能,达到确保改善局部热点文件访问体验的效果,优选地,可以如步骤S305-S307那样在增加文件的动态副本时加入子卷负载的考虑。这里,步骤S305中使用的全局负载排序列表是由客户端根据收集到的所有子卷定期发送的综合负载信息通过排序而得到(可参见实施二之前的子卷全局负载排序操作)。具体而言,步骤S305是根据全局负载排序列表从动态子卷集合之外的所有子卷中选取待加入动态子卷集合的若干子卷;步骤S306是在原动态子卷集合中选取负载最轻的子卷,以使后续的同步过程更为高效;步骤S307则是将文件的动态副本从步骤S306所选取的子卷同步到步骤S305所选取的子卷上,同时将后者加入原动态子卷集合中从而组成新的动态子卷集合。如此一来,动态子卷集合中包括的存储有文件动态副本的子卷数量实现了增加,从而达到增加动态副本的目的。
在一个实施例中,步骤S307中所进行的动态副本的同步例如可以是在子卷服务器之间通过RSYNC标准协议来同步文件,实现文件的复制和扩展属性的同步。
经过上述步骤S307的操作,动态子卷集合发生了变化,从而转入步骤S310进行更新扩展属性<replicainfo>的处理。
接续,将参照步骤S308-S309描述动态副本的删除操作。
S308、遍历全局负载排序列表,选取若干个负载最重且属于动态子卷集合的子卷加入第二集合;
S309、从动态子卷集合中删除第二集合中的所有子卷,并从第二集合中的所有子卷上删除特定文件的动态副本;
如上文所述,在局部热点文件的访问量和/或访问频度出现下降且降幅达到预设阈值时,可以删除部分或全部的动态副本,而只保留剩余部分的动态副本或只保留文件的静态副本。同理,为了优化子卷本地文件系统的存储性能,避免在删除动态副本后影响文件的访问体验,优选可以如步骤S308-S309那样在删除动态副本时加入子卷负载的考虑。这里,步骤S308中使用的全局负载排序列表同样可以由客户端通过前文所述的子卷全局负载排序操作而得到。具体而言,步骤S308是根据全局负载排序列表从动态子卷集合中选取若干个负载最重的子卷,步骤S309则是从步骤S308中所选取的所有子卷上删除文件的动态副本,并从动态子卷集合中删除这些子卷,如此一来,既能减轻这些负载较重的子卷的存储负担,又使得动态子卷集合中留下负载相对较轻的子卷,从而保证对应文件的后续访问性能不受大的影响。
在一个实施例中,步骤S309中所述动态副本的删除例如可以是由客户端通过SSH免密码登陆通道启动RYSNC过程来进行文件的删除。
经过上述步骤S309的操作,动态子卷集合也会发生变化,从而转入步骤S310进行更新扩展属性<replicainfo>的处理。
S310、根据增加或删除动态副本后的动态子卷集合更新扩展属性。
本步骤与上文实施例一的步骤S204相同,此处不再赘述。需要说明的是,本步骤更新扩展属性<replicainfo>主要即更新扩展属性<replicainfo>中所包括的存储有动态副本的动态子卷(序号)集合,也即对动态副本的存储位置进行更新,以为后续进行的动态副本浏览、增加和删除操作以及下文将要描述的lookup(查找)操作提供准确依据。在一个实施例中,本步骤对于扩展属性的更新操作,是由客户端发起请求,并在服务器上执行。具体而言,例如,可由客户端通过RSYNC等协议来修改服务器磁盘文件系统上文件的扩展属性。
S311、显示第一子卷和动态子卷集合中所有子卷的相关信息。
经过动态副本的增加/删除操作以及相应的扩展属性更新后,本步骤S311用于呈现操作的最终结果,以供例如管理员进行浏览或继续操作。另外,如果步骤S304中确定的操作类型即为浏览,则直接转本步骤S311进行显示。
上述实施例一和二描述了本申请针对例如出现局部热点文件等情况来实时调整文件动态副本数量的主要思想。为了使键值文件系统支持动态副本的访问,本申请基于上述思想进一步对现有键值文件系统中的lookup操作提出了改进方案,下文将结合两个实施例分别进行描述,在此之前还将对lookup操作的基本流程加以简单介绍。
众所周知,lookup操作在键值文件系统中用于根据父目录的layout(文件分布规则)和文件名来查找存储文件的子卷(序号),并且从对应的子卷读出文件的所有元数据。具体而言,文件系统对所有文件操作执行之前都会执行lookup操作,经过lookup操作得到的信息会存放在inode缓存中,对于inode缓存中存在的文件,可以不与服务器通信,而直接根据缓存信息执行下一步的操作;反之,对于inode缓存中不存在的文件,则需要与服务器联系,判断文件是否存在并获得文件属性和文件扩展属性。这里,父目录的layout即子卷分布规则,其记录了每个子卷服务器对应的HASH整数范围,该layout通过对父目录的lookup操作获得,并记录在父目录的inode缓存中。针对特定文件进行lookup操作会将所得到的该文件所在的子卷序号存放在该文件的inode缓存中,供后续的文件读操作使用。也即,如果使lookup操作能够找到动态副本所在的子卷,就能够保证读操作由动态副本所在的子卷来响应。
本申请在键值文件系统中实现文件动态副本的方法中的文件lookup操作一个实施例如图4所述,包括以下步骤S401-S405。
S401、将第一子卷的相关信息存入特定文件的inode缓存;
在本步骤之前,默认已进行了前文实施例步骤S201或S301所述的对文件静态副本的定位,具体而言,例如可通过对文件的父目录进行lookup操作获得layout规则,再通过对文件名做HASH计算找出文件静态副本所对应的第一子卷。接续,于本步骤中,将所获取的第一子卷的相关信息存入该文件对应的inode缓存;在一个实施例中,这里的相关信息可以是预设的序号或其他唯一标识。并且,该步骤与现有的lookup操作基本相同。
需要特别说明的是,本步骤S401中述及在inode缓存中存放第一子卷的相关信息,这是为了更好的衔接前文所述的实施例一和二的说明,以便更好地理解本申请的精神。然而,基于本申请说明书的整体描述可以理解,本步骤当前描述的是在键值文件系统中实现文件动态副本之后针对某个文件“第一次”进行lookup操作的情况,只有在这时,该文件所对应的inode缓存中可以确定存放的是静态副本所在的子卷(也即第一子卷)信息,而一旦完成步骤S401-S405的实施后,文件当前的inode缓存中存放的就可能是其中一个动态副本所在的子卷信息,此时将本步骤S401中的第一子卷广义地理解为即inode缓存中所存放的子卷信息对应的子卷即可,而并不会影响后续步骤的实施。
S402、通过客户端向第一子卷发起lookup操作请求,该lookup操作请求中包括获取扩展属性的请求;
在定位到文件所对应的第一子卷后,本步骤即通过客户端向第一子卷发起lookup操作请求。通常而言,lookup操作请求中一般包括获取文件元数据的请求。然而,区别于现有的lookup操作请求,本步骤中在lookup操作请求中特别指出请求获取文件的扩展属性<replicainfo>。
S403、根据第一子卷针对lookup操作请求所回复的扩展属性获取动态子卷集合;
S404、将第一子卷与动态子卷集合中的所有子卷加入第三集合,根据全局负载排序列表选取第三集合中负载最轻的第三子卷;以及
S405、用第三子卷的相关信息代替特定文件的inode缓存中第一子卷的相关信息。
步骤S403-S405是本实施例区别于现有lookup操作请求的关键。具体而言,子卷服务器对于现有lookup操作请求的响应是回复文件元数据,再由客户端将回复的元数据加入inode缓存,而步骤S403中,是根据第一子卷针对步骤S402中发起的包括获取扩展属性相关请求的lookup操作而特别回复的扩展属性<replicainfo>来获取动态子卷集合的信息;接续,步骤S404是从文件的静态副本和所有动态副本所在的子卷中选取一个负载最轻的子卷(即第三子卷);然后,步骤S405使用第三子卷的相关信息(例如序号或其他唯一标识)来替代步骤S401中在inode缓存中存放的第一子卷的相关信息。如此一来,文件的inode缓存中所存放的子卷信息对应的可能不再是原来的静态副本所在的子卷,而是静态副本与所有动态副本所在子卷中负载最轻的那一个子卷,这之后,针对该文件的读操作响应便由该子卷响应,由此真正实现了动态副本的访问分流效果,保证了局部热点文件的访问体验。
另外需要说明的是,在步骤S405之后,与现有的lookup操作类似,客户端会将步骤S403中第一子卷针对lookup操作请求而与扩展属性一起回复的其他元数据加入inode缓存中。由此完成本实施例改进后的lookup操作。
为了更好地理解本申请在键值文件系统中实现文件动态副本的方法中的lookup操作,下面将结合另一更具体的实施例进一步加以说明。在该实施例中,假设客户端管理共3个子卷dht0、dht1和dht2,则基于前一实施例对全路径为“/A/B/C/f1”的文件f1的lookup操作过程如下所示,包括步骤Step 1-4。
Step 1.根据文件f1的父目录C的layout计算文件f1的静态副本所对应的子卷;
此处假设计算结果为dht1,则将序号1存入文件f1的inode缓存中,表示后续对文件f1的操作必须通过dht1。
Step 2.通过dht1与子卷服务器进程brick1的连接将lookup操作请求发送给brick1;
lookup操作请求中包括文件f1的全路径、请求获取的扩展属性的名称<replicainfo>等信息。
Step 3.brick1将结果回复给发出请求的客户端,客户端通过分析<replicainfo>得知文件f1还有一个动态副本在dht2上。
Step 4.遍历当前的全局负载排序列表,假设如下表所示:
负载排序 | 存储子卷 | 负载指数 |
1(轻负载) | dht2 | 10 |
2(中负载) | dht1 | 20 |
3(重负载) | dht0 | 40 |
根据上述步骤S404此时应选择dht1和dht2中负载最轻的子卷,即dht2。因此,接续用序号2替代序号1,写入文件f1的inode缓存。
经过上述步骤,后续对文件f1读操作时,通过访问其inode缓存可以确定由dht2进行响应,从而访问对象变成了f1的动态副本。
基于上文方法实施例的描述,下面将参照图5和图6对本申请实现文件动态副本的键值文件系统实施例加以说明。
图5为本申请实现文件动态副本的键值文件系统的实施例框图,如图所示,该系统包括:客户端51,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器52,用于根据客户端51的操作分成多个子卷来存储客户端51写入的文件并响应客户端51的文件读取请求。其中,客户端51包括:静态定位单元511、属性操作单元512以及副本操作单元513;具体而言,静态定位单元511用于定位特定文件的静态副本所在的第一子卷;属性操作单元512,用于从第一子卷读取特定文件的扩展属性,扩展属性中包括特定文件已有的动态副本所在的动态子卷集合;副本操作单元513,用于对动态子卷集合进行动态副本的增加、删除或浏览操作;并且属性操作单元512根据副本操作单元513增加或删除动态副本后的动态子卷集合来更新扩展属性。
在一个实施例中,上述服务器52包括负载上报单元521,其用于获取子卷的负载信息,并发送给客户端51。相应地,客户端51还包括负载排序单元514,其用于根据收集到的所有子卷的负载信息进行排序以得到全局负载排序列表;并且副本操作单元513进而使用该全局负载排序列表作为动态副本的增加和删除操作的依据。
接续,在一个实施例中,上述的副本操作单元513包括负载遍历子单元5131、文件同步子单元5132、和文件删除子单元5133。具体而言,在动态副本的增加操作中,负载遍历子单元5131用于遍历负载排序单元514生成的全局负载排序列表,并从中选取若干个负载最轻且不属于上述动态子卷集合的子卷加入第一集合,并根据全局负载排序列表选取动态子卷集合中负载最轻的第二子卷;文件同步子单元5132则用于将特定文件的动态副本从第二子卷上同步到第一集合中的所有子卷上,并将第一集合中的所有子卷加入动态子卷集合中,在一个实施例中,文件同步子单元5132可以通过在子卷服务器之间利用RSYNC标准协议来同步文件,实现文件的复制和扩展属性的同步。在动态副本的删除操作中,负载遍历子单元5131用于遍历上述全局负载排序列表,并从中选取若干个负载最重且属于动态子卷集合的子卷加入第二集合;文件删除子单元5133则用于从动态子卷集合中删除第二集合中的所有子卷,并从第二集合中的所有子卷上删除特定文件的动态副本,在一个实施例中,文件删除子单元5133可以通过SSH免密码登陆通道启动RYSNC过程来进行文件的删除。
接续,在一个实施例中,客户端还包括索引操作单元515和查找请求单元516。其中,索引操作单元515用于将第一子卷的相关信息存入特定文件的索引节点inode缓存;查找请求单元516,用于向第一子卷发起lookup操作请求,该lookup操作请求中包括获取扩展属性的请求。然后,属性操作单元512根据第一子卷针对lookup操作请求所回复的扩展属性获取动态子卷集合;索引操作单元515将第一子卷与动态子卷集合中的所有子卷加入第三集合,根据全局负载排序列表选取第三集合负载最轻的第三子卷,并用第三子卷的相关信息代替特定文件的inode缓存中第一子卷的相关信息。
基于以上系统实施例的说明,下面将结合图6对本申请键值文件系统改进后的实现原理加以说明。图6中带有阴影的部分表示原有组件,无阴影的部分表示本申请新增或改进过的组件,
如图6所示,本申请的实施例在子卷服务器621和622上增加了I/O状态汇报线程623,该线程定期收集服务器的CPU、内存使用率以及子卷对应磁盘分区的iowait值,通过加权计算得出当前子卷的综合负载信息。这些负载信息在子卷服务进程624与客户端61设于通信层612中的管理口CM通信时,与心跳信息一起发送给客户端61,这里的心跳信息和管理口CM都是现有键值文件系统维持正常运转而业已存在的组件,只是在本申请的技术方案中对二者赋予了新的功能。客户端61上相应增设一负载排序线程614,其用于对收集到的子卷负载信息进行排序,生成子卷的全局负载排序列表,该全局负载排序列表可以作为全局变量,供业务逻辑层611在例如发起文件读写请求时以及动态副本处理模块613在增加或删除动态副本时使用。
结合图5和图6所示系统实施例的说明可知,两个实施例是从不同角度对本申请实现文件动态副本的键值文件系统加以说明,相应地,二者之间在实现文件动态副本的关键功能上存在必然的对应关系。例如,图5中客户端51的副本操作单元513可以与图6中客户端61的动态副本处理模块613对应,负载排序单元514可以与负载排序线程614对应,而静态定位单元511、属性操作单元512、索引操作单元515、和查找请求单元516则可以与业务逻辑层611对应;又例如,图5中服务器52的负载上报单元521可以与图6中服务器621-622的I/O状态汇报线程623和子卷服务进程624对应。
综上所述,本申请多个实施例所提供的在键值文件系统中实现文件动态副本的方法及实现文件动态副本的键值文件系统:一方面,利用子卷本地文件系统的扩展属性来存储文件的动态副本位置,可以便利地实现动态部分的增加、删除和浏览操作;同时配合在客户端改进文件lookup操作流程、修改inode缓存,可以使动态副本真正起到文件访问分流的作用;另一方面,通过在子卷管理进程发送给客户端的心跳信息中加入负载信息,由客户端启动负载排序线程对所有子卷的负载进行排序,并定期刷新全局负载排序列表,以作为动态副本操作和inode缓存修改的依据,由此能够在保证文件访问体验的同时大大提高存储系统的利用效率。
并且,由上述实施例可知,一方面,本申请在键值文件系统中实现文件动态副本的方法各个步骤及其整体,可以对应于存储在计算机可读存储介质中的计算机可执行指令及其组成的计算机可执行程序;而另一方面,本申请实现文件动态副本的键值文件系统,则可以对应于用以执行该计算机可执行程序或指令的各部分计算机硬件及其组成的硬件集合。
虽然已参照几个典型实施例描述了本申请,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本申请能够以多种形式具体实施而不脱离申请的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。
Claims (10)
1.一种在键值文件系统中实现文件动态副本的方法,用于针对特定文件进行动态副本的管理,所述键值文件系统包括:客户端,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器,用于根据所述客户端的操作分成多个子卷来存储所述客户端写入的文件并响应所述客户端的文件读取请求;所述方法包括以下步骤:
由所述客户端定位所述特定文件的静态副本所在的第一子卷;
从所述第一子卷读取所述特定文件的扩展属性,所述扩展属性中包括所述特定文件已有的动态副本所在的动态子卷集合;
对所述动态子卷集合进行动态副本的增加、删除或浏览操作;以及
根据增加或删除动态副本后的动态子卷集合更新所述扩展属性。
2.如权利要求1所述的在键值文件系统中实现文件动态副本的方法,其中还包括:
在所述服务器上获取子卷的负载信息,并发送给所述客户端;以及
所述客户端根据收集到的所有子卷的负载信息进行排序以得到全局负载排序列表;并且
所述客户端使用所述全局负载排序列表作为所述动态副本的增加和删除操作的依据。
3.如权利要求2所述的在键值文件系统中实现文件动态副本的方法,其中所述动态副本的增加操作包括以下步骤:
遍历所述全局负载排序列表,选取若干个负载最轻且不属于所述动态子卷集合的子卷加入第一集合;
根据所述全局负载排序列表选取所述动态子卷集合中负载最轻的第二子卷;以及
将所述特定文件的动态副本从所述第二子卷上同步到所述第一集合中的所有子卷上,并将所述第一集合中的所有子卷加入所述动态子卷集合中。
4.如权利要求2所述的在键值文件系统中实现文件动态副本的方法,其中所述动态副本的删除操作包括以下步骤:
遍历所述全局负载排序列表,选取若干个负载最重且属于所述动态子卷集合的子卷加入第二集合;以及
从所述动态子卷集合中删除所述第二集合中的所有子卷,并从所述第二集合中的所有子卷上删除所述特定文件的动态副本。
5.如权利要求2所述的在键值文件系统中实现文件动态副本的方法,其中更新所述扩展属性后还包括:
将所述第一子卷的相关信息存入所述特定文件的索引节点inode缓存;
通过所述客户端向所述第一子卷发起查找lookup操作请求,该lookup操作请求中包括获取所述扩展属性的请求;
根据所述第一子卷针对所述lookup操作请求所回复的扩展属性获取所述动态子卷集合;
将所述第一子卷与所述动态子卷集合中的所有子卷加入第三集合,根据所述全局负载排序列表选取所述第三集合中负载最轻的第三子卷;以及
用所述第三子卷的相关信息代替所述特定文件的inode缓存中所述第一子卷的相关信息。
6.一种实现文件动态副本的键值文件系统,用于针对特定文件进行动态副本的管理,所述键值文件系统包括:客户端,用于分多个子卷来管理文件,发起文件的写入和读取请求;以及服务器,用于根据所述客户端的操作分成多个子卷来存储所述客户端写入的文件并响应所述客户端的文件读取请求;其中,所述客户端包括:
静态定位单元,用于定位所述特定文件的静态副本所在的第一子卷;
属性操作单元,用于从所述第一子卷读取所述特定文件的扩展属性,所述扩展属性中包括所述特定文件已有的动态副本所在的动态子卷集合;以及
副本操作单元,用于对所述动态子卷集合进行动态副本的增加、删除或浏览操作;并且
所述属性操作单元根据所述副本操作单元增加或删除动态副本后的动态子卷集合更新所述扩展属性。
7.如权利要求6所述的实现文件动态副本的键值文件系统,其中,
所述服务器包括:
负载上报单元,用于获取子卷的负载信息,并发送给所述客户端;
所述客户端还包括:
负载排序单元,用于根据收集到的所有子卷的负载信息进行排序以得到全局负载排序列表;并且
所述副本操作单元使用所述全局负载排序列表作为所述动态副本的增加和删除操作的依据。
8.如权利要求7所述的实现文件动态副本的键值文件系统,其中,所述副本操作单元包括:
负载遍历子单元,用于遍历所述全局负载排序列表,并从中选取若干个负载最轻且不属于所述动态子卷集合的子卷加入第一集合;以及根据所述全局负载排序列表选取所述动态子卷集合中负载最轻的第二子卷;以及
文件同步子单元,用于将所述特定文件的动态副本从所述第二子卷上同步到所述第一集合中的所有子卷上,并将所述第一集合中的所有子卷加入所述动态子卷集合中。
9.如权利要求7所述的实现文件动态副本的键值文件系统,其中,所述副本操作单元包括:
负载遍历子单元,遍历所述全局负载排序列表,并从中选取若干个负载最重且属于所述动态子卷集合的子卷加入第二集合;以及
文件删除子单元,用于从所述动态子卷集合中删除所述第二集合中的所有子卷,并从所述第二集合中的所有子卷上删除所述特定文件的动态副本。
10.如权利要求7所述的实现文件动态副本的键值文件系统,其中,所述客户端还包括:
索引操作单元,用于将所述第一子卷的相关信息存入所述特定文件的索引节点inode缓存;以及
查找请求单元,用于向所述第一子卷发起查找lookup操作请求,该lookup操作请求中包括获取所述扩展属性的请求;并且
所述属性操作单元根据所述第一子卷针对所述lookup操作请求所回复的扩展属性获取所述动态子卷集合;且
所述索引操作单元将所述第一子卷与所述动态子卷集合中的所有子卷加入第三集合,根据所述全局负载排序列表选取所述第三集合负载最轻的第三子卷,并用所述第三子卷的相关信息代替所述特定文件的inode缓存中所述第一子卷的相关信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310002470.7A CN103049574B (zh) | 2013-01-04 | 2013-01-04 | 实现文件动态副本的键值文件系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310002470.7A CN103049574B (zh) | 2013-01-04 | 2013-01-04 | 实现文件动态副本的键值文件系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103049574A true CN103049574A (zh) | 2013-04-17 |
CN103049574B CN103049574B (zh) | 2015-12-09 |
Family
ID=48062214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310002470.7A Active CN103049574B (zh) | 2013-01-04 | 2013-01-04 | 实现文件动态副本的键值文件系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103049574B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598533A (zh) * | 2014-12-29 | 2015-05-06 | 曙光云计算技术有限公司 | 一种文件扩展属性的存储方法 |
CN107786595A (zh) * | 2016-08-26 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 分布式存储系统中关键字的处理方法、装置及系统 |
CN108418900A (zh) * | 2015-06-10 | 2018-08-17 | 华为技术有限公司 | 一种服务器集群系统中的缓存方法、写入点客户端和读客户端 |
CN108459825A (zh) * | 2018-01-30 | 2018-08-28 | 深圳神州数码云科数据技术有限公司 | 一种存储系统服务质量控制方法和装置 |
CN108717420A (zh) * | 2018-04-20 | 2018-10-30 | 北京鲸鲨软件科技有限公司 | 一种分布式文件系统中提高小文件读取效率的方法 |
CN111625201A (zh) * | 2014-11-05 | 2020-09-04 | 亚马逊科技公司 | 用于存储客户端文件系统的存储卷的动态缩放 |
CN112689166A (zh) * | 2020-12-18 | 2021-04-20 | 武汉市烽视威科技有限公司 | 一种用于cdn热点内容实时弹性增减的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060184793A1 (en) * | 1998-05-07 | 2006-08-17 | Stephen Zizzi | Encrypting file system |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102298641A (zh) * | 2011-09-14 | 2011-12-28 | 清华大学 | 一种基于键值库的文件与结构化数据统一存储方法 |
-
2013
- 2013-01-04 CN CN201310002470.7A patent/CN103049574B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060184793A1 (en) * | 1998-05-07 | 2006-08-17 | Stephen Zizzi | Encrypting file system |
CN102110146A (zh) * | 2011-02-16 | 2011-06-29 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
CN102298641A (zh) * | 2011-09-14 | 2011-12-28 | 清华大学 | 一种基于键值库的文件与结构化数据统一存储方法 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111625201A (zh) * | 2014-11-05 | 2020-09-04 | 亚马逊科技公司 | 用于存储客户端文件系统的存储卷的动态缩放 |
CN111625201B (zh) * | 2014-11-05 | 2023-08-29 | 亚马逊科技公司 | 用于存储客户端文件系统的存储卷的动态缩放 |
US11729073B2 (en) | 2014-11-05 | 2023-08-15 | Amazon Technologies, Inc. | Dynamic scaling of storage volumes for storage client file systems |
CN104598533B (zh) * | 2014-12-29 | 2018-08-14 | 曙光云计算集团有限公司 | 一种文件扩展属性的存储方法 |
CN104598533A (zh) * | 2014-12-29 | 2015-05-06 | 曙光云计算技术有限公司 | 一种文件扩展属性的存储方法 |
CN108418900A (zh) * | 2015-06-10 | 2018-08-17 | 华为技术有限公司 | 一种服务器集群系统中的缓存方法、写入点客户端和读客户端 |
CN108418900B (zh) * | 2015-06-10 | 2021-05-04 | 华为技术有限公司 | 一种服务器集群系统中的缓存方法、写入点客户端和读客户端 |
CN107786595A (zh) * | 2016-08-26 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 分布式存储系统中关键字的处理方法、装置及系统 |
CN108459825B (zh) * | 2018-01-30 | 2020-12-29 | 深圳神州数码云科数据技术有限公司 | 一种存储系统服务质量控制方法和装置 |
CN108459825A (zh) * | 2018-01-30 | 2018-08-28 | 深圳神州数码云科数据技术有限公司 | 一种存储系统服务质量控制方法和装置 |
CN108717420A (zh) * | 2018-04-20 | 2018-10-30 | 北京鲸鲨软件科技有限公司 | 一种分布式文件系统中提高小文件读取效率的方法 |
CN108717420B (zh) * | 2018-04-20 | 2022-04-15 | 北京鲸鲨软件科技有限公司 | 一种分布式文件系统中提高小文件读取效率的方法 |
CN112689166A (zh) * | 2020-12-18 | 2021-04-20 | 武汉市烽视威科技有限公司 | 一种用于cdn热点内容实时弹性增减的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103049574B (zh) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6778795B2 (ja) | データを記憶するための方法、装置及びシステム | |
CN103049574B (zh) | 实现文件动态副本的键值文件系统及方法 | |
US11038973B2 (en) | Contact event feeds and activity updates | |
CN101866305B (zh) | 支持数据查询和快速恢复的连续数据保护方法及系统 | |
CN102169507B (zh) | 一种分布式实时搜索引擎的实现方法 | |
CN104133882A (zh) | 一种基于hdfs的小文件处理方法 | |
CN103327052A (zh) | 数据存储方法和系统以及数据访问方法和系统 | |
US10817472B2 (en) | Storage organization system with associated storage utilization values | |
CN108717457B (zh) | 一种电子商务平台大数据处理方法和系统 | |
CN105824723B (zh) | 一种对公有云存储账户的数据进行备份的方法及系统 | |
US20170031948A1 (en) | File synchronization method, server, and terminal | |
CN102932415A (zh) | 一种镜像文件存储方法及装置 | |
CN106775446A (zh) | 基于固态硬盘加速的分布式文件系统小文件访问方法 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN103023982A (zh) | 一种云存储客户端的低延迟元数据访问方法 | |
CN101923571B (zh) | 管理终端数据记录的方法及装置 | |
CN109299056B (zh) | 一种基于分布式文件系统的数据同步方法和装置 | |
CN109240607B (zh) | 一种文件读取方法和装置 | |
CN105005611A (zh) | 一种文件管理系统及文件管理方法 | |
JP2009259007A (ja) | 分散格納方法、分散格納システム及び分散格納装置 | |
CN107368608A (zh) | 基于arc替换算法的hdfs小文件缓存管理方法 | |
CN106302659A (zh) | 一种基于云存储系统中提升访问数据快速存储方法 | |
CN103078898A (zh) | 文件系统、接口服务装置和数据存储服务提供方法 | |
CN109767274B (zh) | 一种对海量发票数据进行关联存储的方法及系统 | |
CN103067479A (zh) | 一种基于文件冷热的网盘同步方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |