CN111324305A - 一种分布式存储系统中数据写入/读取方法 - Google Patents

一种分布式存储系统中数据写入/读取方法 Download PDF

Info

Publication number
CN111324305A
CN111324305A CN202010094496.9A CN202010094496A CN111324305A CN 111324305 A CN111324305 A CN 111324305A CN 202010094496 A CN202010094496 A CN 202010094496A CN 111324305 A CN111324305 A CN 111324305A
Authority
CN
China
Prior art keywords
node
data
logic
nodes
storage
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
Application number
CN202010094496.9A
Other languages
English (en)
Other versions
CN111324305B (zh
Inventor
陈鹏
刘露
于超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Orca Data Technology Xian Co Ltd
Original Assignee
Orca Data Technology Xian Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Orca Data Technology Xian Co Ltd filed Critical Orca Data Technology Xian Co Ltd
Priority to CN202010094496.9A priority Critical patent/CN111324305B/zh
Publication of CN111324305A publication Critical patent/CN111324305A/zh
Application granted granted Critical
Publication of CN111324305B publication Critical patent/CN111324305B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种分布式存储系统中数据写入/读取方法,根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;接收用户根据逻辑空间树发出的写入请求信息;其中,写请求信息包括用户数据和写入逻辑块号;将每个数据摘要值根据逻辑块号存储至逻辑空间树中;将用户数据拆分为多个预定大小的数据对象,并计算出每个数据对象的数据摘要值;通过分布式哈希表生成每个数据摘要值的存储节点;通过网络将数据摘要值分别发送至对应的存储节点进行存储;本发明通过安排特定的元数据组织方式,可以提高了系统利用率以及运行效率。

Description

一种分布式存储系统中数据写入/读取方法
【技术领域】
本发明属于计算机存储技术领域,尤其涉及一种分布式存储系统中数据写入/读取方法。
【背景技术】
随着大数据时代的降临,业务应用对存储空间的需求越来越大,性能越来越高。海量的数据对存储的要求已经远远超出了传统的多控存储系统所能承受的范围。没有哪一套单机的存储能够提供如此大的数据存储能力。存储系统正在向着大规模、分布式、虚拟化方向发展。
分布式存储空间的管理,是通过某种手段或者软件将分散在多个服务器节点上的零散硬盘空间组织到一起,组成一个逻辑上连续的大型储存空间。然后,由多台存储服务器相互协作,给用户呈现一个统一的、虚拟的单一空间视图。
已有的解决方案比如开源的CEPH,以及EMC和NETAPP的相关存储产品,均提供存储虚拟化和分布式管理的功能。CEPH提供分布式对象存储和块存储,以及文件系统的功能。但CEPH的实现中缺失重复数据删除这一环节,导致空间利用率不高。若使用复杂的跨节点纠删码,可以适当提升其空间利用率。但是,由于其纠删码实现过程的复杂性,导致性能降低,故障率上升。EMC和NETAPP的相关产品虽然提供了全局重复数据删除的功能,但由于其在元数据管理的设计上的不足,导致其元数据本身无法被重删和精简,使得存储空间使用并不高效。
【发明内容】
本发明的目的是提供一种分布式存储系统中数据写入/读取方法,将存储数据和元数据采用相同的逻辑管理,使分布式存储系统的元数据同时具有重删和精简特点,增强系统的利用率。
本发明采用以下技术方案:一种分布式存储系统中数据写入方法,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;
接收用户根据逻辑空间树发出的写入请求信息;其中,写请求信息包括用户数据和写入逻辑块号;
将每个数据摘要值根据逻辑块号存储至逻辑空间树中;
将用户数据拆分为多个预定大小的数据对象,并计算出每个数据对象的数据摘要值;
通过分布式哈希表生成每个数据摘要值的存储节点;
通过网络将数据摘要值分别发送至对应的存储节点进行存储。
进一步地,逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;
将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;
根据每个叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;
填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;
重复执行填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成逻辑空间树。
进一步地,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象。
进一步地,通过分布式哈希表生成每个数据摘要值的存储节点包括:
将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据摘要值的第一节点摘要值;
提取第一节点摘要值对应的第一存储节点的编号;
将数据摘要值对应的待存储数据对象存储至第一存储节点。
进一步地,存储节点数组的生成包括:
获取分布式存储系统中每个存储节点的节点ID和节点容量;
按照预定的空间大小将每个节点容量分为多个单位容量;
采用加密摘要算法为每个单位容量生成对应的节点摘要值;
将每个存储节点的多个节点摘要值按照由小至大的顺序进行排列,得到存储节点数组。
本发明的另一种技术方案:一种分布式存储系统中数据读取方法,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;
接收用户根据逻辑空间树发出的读取请求信息;其中,读取请求信息包括用户数据的逻辑块号;
根据逻辑块号在逻辑空间树中读取对应的数据摘要值;
通过分布式哈希表查询每个数据摘要值的存储节点;
通过网络读取存储节点中存储的与数据摘要值对应的数据对象;
将数据对象组合成用户数据返回给用户。
进一步地,逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;
将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;
根据每个叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;
填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;
重复执行填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成逻辑空间树。
进一步地,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象。
进一步地,通过分布式哈希表查询每个数据摘要值的存储节点包括:
将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据摘要值的第一节点摘要值;
提取第一节点摘要值对应的第一存储节点的编号。
进一步地,存储节点数组的生成包括:
获取分布式存储系统中每个存储节点的节点ID和节点容量;
按照预定的空间大小将每个节点容量分为多个单位容量;
采用加密摘要算法为每个单位容量生成对应的节点摘要值;
将每个存储节点的多个节点摘要值按照由小至大的顺序进行排列,得到存储节点数组。
本发明的有益效果是:本发明通过安排特定的元数据组织方式,将用户数据和元数据“一视同仁”,共享同一块存储池,使得元数据本身也可以被精简配置以及重复删除,同时,因为对元数据和用户数据同源,所以在实现中只需要同一套逻辑来进行管理,无需区别对待,大大降低了软件逻辑的复杂度,从而,提高了空间利用率以及运行效率。
【附图说明】
图1为本发明实施例中的写入数据流程示意图;
图2为本发明实施例中逻辑空间树的结构示意图;
图3为本发明实施例中零逻辑空间树的结构示意图;
图4为本发明是实施例中分布式存储系统中的数组结构示意图;
图5为本发明实施例中存储节点内的存储聚合示意图;
图6为本发明实施例中的区段的数据结构图;
图7为本发明实施例中区段的数据结构图;
图8为本发明实施例中索引管理器的结构示意图;
图9为本发明另一实施例中读取数据流程示意图。
【具体实施方式】
下面结合附图和具体实施方式对本发明进行详细说明。
本发明提供了一种分布式存储系统中数据写入方法,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;接收用户根据逻辑空间树发出的写入请求信息;其中,写请求信息包括用户数据和写入逻辑块号;将每个数据摘要值根据逻辑块号存储至逻辑空间树中;将用户数据拆分为多个预定大小的数据对象,并计算出每个数据对象的数据摘要值;通过分布式哈希表生成每个数据摘要值的存储节点;通过网络将数据摘要值分别发送至对应的存储节点进行存储。
本发明通过安排特定的元数据组织方式,将用户数据和元数据“一视同仁”,共享同一块存储池,使得元数据本身也可以被精简配置以及重复删除,同时,因为对元数据和用户数据同源,所以在实现中只需要同一套逻辑来进行管理,无需区别对待,大大降低了软件逻辑的复杂度,从而,提高了空间利用率以及运行效率。
本发明实施例给出了写入数据的具体流程,如图1所示,图中包含了:
1.服务器节点1,2,3;
2.每个节点中,分别运行了:
a.LUN TREE逻辑空间树;
b.DHT分布式哈希表;
c.INDEX索引管理器;
d.EXTENT MANAGER区段管理器。
3.每个节点的物理磁盘;
4.用户数据对象1和用户数据对象2。
具体的,该实施例的写入流程为:
向用户展现逻辑卷,即逻辑空间树1。
用户向两个逻辑空间树发送写入请求。
每当有新的用户数据到达系统,系统先将用户数据拆分成同等大小的数据对象,即数据对象1和数据对象2。数据拆分后,系统根据数据内容计算数据指纹(即数据摘要值),即数据指纹1和数据指纹2,分别对应于数据对象1和数据对象2。
指纹1和指纹2按逻辑块号分别被保存在逻辑空间树1的对应叶子节点中。
系统将指纹1交给DHT分布式哈希,以确定数据对象所属节点,DHT分布式哈希计算后决定数据对象1应该所属节点2。系统将指纹2交给DHT分布式哈希,以确定数据对象所属节点,DHT分布式哈希计算后决定数据对象2应该所属节点3。
数据对象1被通过网络发送给服务器节点2,数据对象2被通过网络发送给服务器节点3。
服务器节点2接受到数据对象1后,通知EXTENT MANAGER范围管理器,将数据对象保存到本节点的虚拟存储池中。然后将指纹1与数据对象的物理位置的对应关系保存到INDEX索引管理器中。
服务器节点3接受到数据对象2后,通知EXTENT MANAGER范围管理器,将数据对象保存到本节点的虚拟存储池中。然后将指纹2与数据对象的物理位置的对应关系保存到INDEX索引管理器中。
系统按照处理数据对象的方式将逻辑空间树1的叶子节点也进行同样处理,系统返回写成功。
在另一种情况下,数据对象1和2写入完成后,如果用户又向系统写入了重复的数据。例如,向位于节点3的另一个逻辑卷2,即逻辑空间树2同样写入数据对象1和数据对象2,那么按如下流程进行:
系统根据数据内容计算数据指纹,因为数据对象的内容相同,因此同样得到数据指纹1和数据指纹2。指纹1和指纹2按逻辑块号分别被保存在逻辑空间树1的对应叶子节点中。
系统将逻辑指纹1和2交给DHT分布式哈希,以确定数据对象所属节点;由于数据指纹相同,因此通过DHT分布式哈希计算后,数据对象所属节点也相同,分别为节点2和节点3,数据对象1和数据对象2分别被送往节点2和节点3。
服务器节点2接受到数据对象1后,通过查询INDEX索引管理器,知道数据对象已经保存了一份在本节点虚拟存储池中,因此,只需在INDEX中将指纹1所对应的引用计数加1即可,数据对象1本身无需再次保存。
服务器节点3接受到数据对象2后,通过查询INDEX索引管理器,知道数据对象已经保存了一份在本节点虚拟存储池中,因此,只需在INDEX中将指纹2所对应的引用计数加1即可,数据对象2本身无需再次保存。
系统按照处理数据对象的方式将逻辑空间树1的叶子节点也进行同样处理;系统返回写成功。
具体的,逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;根据每个叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;重复执行填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成逻辑空间树。进一步地,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象。
本技术方案巧妙地安排元数据组织方式,实现了将用户数据和元数据一视同仁,共享同一块存储池,使得元数据本身也可以被精简配置以及重复删除,同时,因为对元数据和用户数据同源,所以在实现中只需要同一套逻辑来进行管理,无需区别对待,大大降低了软件逻辑的复杂度,从而提高了空间利用率以及运行效率。
分布式管理的存储系统跨节点地将每个服务器的零散存储空间组织起来,给用户呈现一个统一连续的视图。用户所见的连续视图,就是一个存储设备,也叫做LUN(逻辑卷)。LUN(逻辑卷)是一个由软件模拟的虚拟存储设备,用传统的方式呈现给用户操作系统识别,被用于底层块设备。
在本实施例中,用一个逻辑空间树来表示数据对象与逻辑位置之间的对应关系,当完成了上述的步骤后,即可生成如图2所示的逻辑空间树,在该树形结构中,n取值为3,包含如下结点:
根结点:0;
中间结点:1,2,3
叶子节结点:4,5,6,7,8,9。
每一个树节点都是一个存储了一组数据,树结点内部所保存的数据为加密摘要值(即数据摘要值或节点摘要值)。每当有新的用户数据或者元数据写入,数据会被切分为一个个相同大小的“数据对象”。数据对象的大小可以预先定义,一般为4KB或者8KB。树节点对象和用户数据对象具有相同大小,按照同样逻辑处理。
数据对象会被某种加密哈希算法进行摘要计算,得到该数据对象的加密摘要值,即数据摘要值。摘要算法可以使用SHA1或者CITYHASH等成熟算法。随后,数据摘要值会被保存在树结点内部。
结点大小预先定义,根据预先定义的结点大小,可以包含的加密摘要值的个数也随之确定。在实际应用的存储系统中,每个结点可以包含的加密摘要值的数量可能多达几百个。本实施例为了叙述方便,图中以3个加密摘要值为例。
叶子结点的内部数据保存用户数据的数据摘要值,根据叶子结点在树中所处的位置,以及数据摘要值在结点内部的偏移量,代表逻辑卷的不同逻辑块号的内容。
例如,位于叶子结点4的第1个位置的值是“dh0”,代表逻辑卷第1个块,也就是逻辑块号(LBN)为0的数据的加密摘要值为“dh0”;位于叶子结点5的第1个位置的值是“dh3”,代表逻辑卷第4个块,也就是逻辑块号(LBN)为3的数据的加密摘要值为“dh3”;位于叶子节点8的第2个位置的值是“dh13”,代表逻辑卷第14个块,也就是逻辑块号(LBN)为13的数据的加密摘要值为“dh13”。以此类推,根据叶子节点在树中的位置,以及数据加密摘要值在结点中的偏移量,来确定每个逻辑块号所对应的数据的加密摘要值。
根结点和中间结点的内部数据保存其子结点的加密摘要值,也就是元数据的加密摘要值。例如,结点1中的第1个位置的值为“h4”,它代表其子结点4的加密摘要值为“h4”;结点2中的第3个位置的值为“h9”,它代表其子结点9的加密摘要值为“h9”;以此类推,由底向上一直回朔到根节点。
逻辑空间树父子结点之间的关联全靠加密摘要值维系。父节点中的某个加密摘要值,指定其子节点的内容。系统根据父节点的加密摘要值从下层虚拟化中找到并读出其子节点。在系统启动时,从根节点往下,层层构建,从而建立起一棵完整的逻辑空间树。
在实施中,根据逻辑卷的大小,逻辑空间树的结点数量可能会非常巨大。而为了实现元数据的重复数据删除,需要将逻辑空间树的结点大小和用户数据块大小定义成一样。这样,作为元数据的逻辑空间树的结点和用户数据可以按照相同逻辑进行处理,实现重复数据删除。在一个逻辑卷被写满的情况下,逻辑空间树是一个“满树”,其数据如图1所示。满树所占用的磁盘空间可能达到逻辑卷大小的1/100,是系统中最大的元数据。
在本发明实施例中,当需要对逻辑卷进行克隆或快照时,提取根节点的节点摘要值,生成克隆或快照的逻辑卷。生成克隆或快照的逻辑卷还包括将每个节点摘要值的引用计数加1。
在本实施例中,克隆和快照几乎是同样的结构,差别仅在于克隆允许读写,而快照则为只读。传统元数据的克隆和快照,是按照复制元数据以及复制用户数据的方式,这会使得元数据越来越大。因此,对逻辑空间树进行元数据重复删除是非常必要的。在本实施例中,因为进行了元数据重删,克隆和快照几乎不占用空间,而是与原逻辑卷共享逻辑空间树的结点。另外,本方案无需写时复制COW,从而使得克隆和快照对系统性能几乎无影响。
克隆和快照的生成:
1.在快照刚刚创建的时候,由于源LUN和新生成的克隆和快照的数据完全相同,因此系统只需要记录一个源LUN的逻辑空间树的根节点的加密摘要值,改变逻辑卷ID即可;
2.有了根节点的加密摘要值,系统就可以递归地构建出一棵与源LUN完全相同的逻辑空间树;
3.由于节点对象与源LUN完全一样,在重删的作用下,逻辑空间树的节点无需复制,只需将源LUN的逻辑空间树元数据对象的引用计数加一即可。
克隆和快照的读写:
1.克隆和快照的读写,与普通LUN采用相同的方法;
2.当有新的数据写入,克隆和快照只需更改被影响的LBA所对应的叶子节点,以及其子树。其他大部分未受影响的元数据,仍与源LUN共享;
3.这种方式避免了传统的COW的写时复制,不影响系统性能。
在本实施例中,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象,即均填充为0,这样才能达到精简配置的目的。
因为有逻辑空间树结构的支持,本方案十分自然地实现了精简配置。在新建一个逻辑卷的过程中,由于所有逻辑块上的数据都初始为0。因此,可以引用一个“零树”。“零树”,只需要几个树结点就可以表示最大的逻辑卷,占用很少的空间,实现了元数据的精简配置。
零树的结构如图3所示,“零树”的特点是:叶子结点中所保存的加密摘要值(dh0,dh1,dh2)全都相等,也即:dh0=dh1=dh2,是由全0的数据块计算摘要而得;中间结点所保存的加密摘要值(h4,h5,h6)也相等,也即:h4=h5=h6,是由叶子结点计算摘要而得;根结点中所保存的每个加密摘要值(h1,h2,h3)也相等,也即:h1=h2=h3,是由中间节点计算摘要而得。
随着用户数据的不断写入,“零树”会越来越接近“满树”。无论逻辑卷有多大,在最初被创建时,所有的逻辑卷都具有相同的“零树”结构。零树的结点也是数据对象,可以被重复删除。因此,整个系统是共享同一个零树结构,只占用极少空间。
在上述的数据逻辑关系的支持下,本实施例非常优雅地实现了数据的重复删除。从下面的读写流程中可以看到,无论是用户数据还是逻辑空间树元数据,其本质都是数据对象。系统中所有的数据对象都被同等对待,同样的数据都只被保存了一份。
实现重复数据删除的原理在于:
系统中所有数据都被切分成等大的数据对象;每个数据对象都进行了加密摘要,加密摘要算法如SHA1,CITYHASH的本质就是用一串摘要值来代表一个更长的数据对象,摘要值相同,认为数据对象的内容相同;系统在保存数据的过程中,根据摘要值计算数据对象所处的节点,将数据对象保存到对应的计算机节点上。
作为一种可能实现的方式,通过分布式哈希表生成每个数据摘要值的存储节点包括:
将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据摘要值的第一节点摘要值;提取第一节点摘要值对应的第一存储节点的编号;将数据摘要值对应的待存储数据对象存储至第一存储节点。进一步地,存储节点数组的生成包括:获取分布式存储系统中每个存储节点的节点ID和节点容量;按照预定的空间大小将每个节点容量分为多个单位容量;采用加密摘要算法为每个单位容量生成对应的节点摘要值;将每个存储节点的多个节点摘要值按照由小至大的顺序进行排列,得到存储节点数组。
具体的,可以采用SHA1、SHA256或者CITYHASH一类的加密摘要算法,为每个节点计算节点加密摘要值。根据节点容量的大小,为每个节点计算出多个加密摘要值。容量越大,加密摘要值越多,容量越小,加密摘要值越少。在本实施例中,是按照为每1MB节点容量就生成一个加密摘要值。例如,节点容量为1TB,那么在DHT中,就会为该节点生成1TB/1MB=1M个节点加密摘要值。节点加密摘要值从H1,H2……,一直到Hn,每个加密摘要都有一个与之关联的节点。
将所有加密摘要值装入一个连续的数组空间,按照加密摘要值的大小排序。由于加密摘要值是散列的,因此,按数值大小排列加密摘要值会将代表不同节点的加密摘要值打散交叉装入数组,可以证明其概率分布为统一分布(UNIFORM DISTRIBUTION),至此,数组构建完成,即如图4所示,DHT构建完成。
每当有新的数据块写入,系统对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn。
数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是新的数据块应该被保存的节点。
由于节点加密摘要值是根据容量计算,且统一分布。根据概率,数据块会以节点容量大小为权重,被平均分布到每个节点。由于数据加密摘要值不会改变(数据块内容不变,加密摘要值也不会变),因此,对同一块数据进行计算,总会得到相同的加密摘要值。从而使得同一块数据总是被保存在相同的节点上。
当节点新增和删除的时候,节点加密摘要值数组被重新计算。由于节点加密摘要值不会发生变化(节点容量不变,加密摘要值不变),因此节点加密摘要值在数组中的相对位置基本稳定,仍然是按照大小顺序排列。这使得节点相对位置变化很小,需要数据的移动也很少。节点发生变化后,所需移动的数据量大约为:数据移动量=(当前的数据总量*发生变化的节点容量)/总容量。
通过使用加密摘要算法,可以为每个单位容量的存储空间生成对应的节点加密摘要值,进而按照节点加密摘要值的大小均匀排布形成分布式存储系统的数组。在该数组中,各个存储节点的单位容量的存储空间均匀排布,可以使得数据存储更加均衡。
在本发明实施例中,将待存储数据块存储至第一存储节点之后,还包括:
获取存储节点:将数据加密摘要值与分布式存储系统存储节点数组中的第一节点加密摘要值之后的节点加密摘要值依次进行比较,直至找到下一个大于数据加密摘要值的第二节点加密摘要值;其中,第二节点加密摘要值对应的存储节点的编号与第一节点加密摘要值对应的存储节点的编号不同;将待存储数据块存储至第二存储节点;重复执行获取存储节点步骤,直至待存储数据块的存储次数达到预定存储次数。
具体的,找到下一个大于数据加密摘要值的第二节点加密摘要值包括:
提取第二节点加密摘要值对应的第二存储节点的编号;判断第二存储节点的编号与第一存储节点的编号是否相同:响应于第二存储节点的编号与第一存储节点的编号不同,将待存储数据块存储至第二存储节点中;响应于第二存储节点的编号与第一存储节点的编号相同,继续在分布式存储系统存储节点数组中寻找下一个第二节点加密摘要值,直至第二存储节点的编号与第一存储节点的编号不同,将待存储数据块存储至第二存储节点中。
通过设计预定存储次数,可以在分布式存储系统中为待存储数据块建立多个副本,以防止该数据块单独存放在某个存储节点上时存储节点崩溃导致数据丢失的问题。
由于组成分布式系统的节点数量可能会很多,因此,单个节点故障的可能性也较大。当节点出现故障的时候,必须要保证用户数据仍然可用。本实施例通过对数据保存多个副本来实现单个节点的容错。
在DHT中,每个节点都有多个加密摘要值。不同节点的加密摘要值互相交叉被装入DHT。用户可以预先设置一个副本数量,用于在多个节点上保存多分数据拷贝,以达到数据冗余,保护数据的作用。
假设用户设置了副本数量为2,那么DHT在处理新的数据写入时,按以下步骤执行:
1.对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
2.数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是数据块的第一份拷贝应该被保存的节点,称之为“节点A”;
3.数据块被发送给节点A保存,作为数据块的第一份拷贝;
4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的节点加密摘要值,直到找到下一个大于数据加密摘要值,且非“节点A”的节点摘要。该摘要值所代表的节点,就是第二份数据拷贝应该去往的节点,称之为“节点B”;
5.数据块被发送给节点B保存,作为数据块的第二份拷贝。
通过这个过程,本方案支持多个数据拷贝。多数据副本的特点是:
1.数据拷贝的份数不能大于节点数量;
2.系统中可以允许同时故障的节点个数=数据副本数-1;
3.单个节点最多只能包含同一数据的一份拷贝。
另外,在本实施例中,当第二存储节点的编号与第一存储节点的编号不同时,还包括:
判断第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号是否相同;当第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号不同时,将待存储数据块存储至第二存储节点中;当第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号相同时,继续寻找下一个第二存储节点,直至找到的第二存储节点的编号对应的存储域编号与第一存储节点的编号对应的存储域编号不同时,将待存储数据块存储至第二存储节点中。
在分布式存储系统中还可以建立不同的存储域,每个存储域可包含多个存储节点,这样做的好处是,可以把整个存储域看作为一个存储节点,在系统中允许整个存储域中进行删除或暂停,不会影响整个分布式存储系统的运行,保证数据存储安全。
除了单个的节点可以作为容错的单位,本实施例还支持将节点定义在不同的故障域,实现按故障域进行容灾。被定义在同一个故障域中的多个节点可以一起故障,而不会导致用户数据丢失。
在定义了故障域的系统中,DHT将故障域看成一个单独的节点。当有新的数据写入时,系统按如下顺序执行:
1.对数据块进行哈希计算,得到数据加密摘要值DH1,DH2……,DHn;
2.数据加密摘要值在前文所述的数组中进行比较查询,直到找到下一个比数据加密摘要值更大的节点加密摘要值。此时,该节点加密摘要值所代表的节点,就是数据块的第一份拷贝应该被保存的节点,称之为“节点A”;
3.数据块被发送给节点A保存,作为数据块的第一份拷贝;
4.系统继续用数据加密摘要值在数组中向后遍历并和比较数组中的节点加密摘要值,直到找到下一个大于数据加密摘要值,且非“节点A”所在的故障域的节点摘要。该摘要值所代表的节点,就是第二份数据拷贝应该去往的节点,称之为“节点B”;
5.数据块被发送给节点B保存,作为数据块的第二份拷贝;
6.如果用户定义的数据副本数量大于故障域的数量,那么将剩余数据在故障域间平均分布,单个故障域中可以允许同一份数据的多个拷贝。
通过这个过程,本实施例支持将多个数据副本分配给不同的故障域。定义了故障域的多数据副本的特点是:
1.数据副本的份数不能大于节点数量;
2.系统中可以允许同时故障的跨故障域的节点个数=数据副本数-1;
3.系统允许同时故障的故障域的个数=数据副本数-1;
4.同一故障域中允许包含同一数据的多份副本。
另外,本实施例中所提及的区段管理器也称为“EXTENT MANAGER”,可以实现本地虚拟存储池的读写。索引管理器也称为“INDEX”,其实现的是管理数据对象的物理位置映射。
对于区段管理器,如图5所示,为存储节点内存储聚合示意图。一般地,单台服务器中的硬盘数量和容量是有限的。本实施例首先在组成系统的每个节点内部对节点所拥有的本机物理存储空间进行聚合,使得节点内的多个物理设备在逻辑上呈现出一个统一连续的虚拟存储池。通过图1可以看到,位于单存储节点中的多个硬盘,被区段管理器“ExtentManager”发现并组织为一个虚拟的存储池,从逻辑上将零散的物理空间组织到一起,为上层应用提供一个连续的虚拟空间。另外,区段管理器与索引管理器协同工作,将随机的小写请求进行聚合后写入后端物理磁盘,从而提升物理磁盘的性能,降低SSD磁盘的写放大。
对于区段管理来讲,当区段管理器启动时,会读取用户在配置文件中指定的设备文件的路径列表。
发现物理磁盘设备的过程如下:
1)区段管理器从配置文件中获取到磁盘设备列表后,读取该磁盘列表中所有磁盘的头部,查看是否有区段管理器置位的特别标志;如磁盘头部的某一位或者某几位是否置于0。
2)对于没有特殊标志的磁盘,表示该磁盘还未进行过初始化。区段管理器将该磁盘初始化为标准格式,并在磁盘头部置上区段管理器的特殊标志。
3)对于已有特殊标志的磁盘,表示该磁盘是已经初始化完成的磁盘设备,可以直接使用。
区段管理器在成功得到物理磁盘列表后,得到磁盘设备列表。对于还没有初始化的物理磁盘设备,区段管理器将对其进行初始化。一个“区段”(Extent)代表物理上连续的一段磁盘空间,本实施例中一个区段默认为16MB大小。区段的意义主要是为了将小块随机写转换为大块顺序写,进而提高磁盘的写性能,并降低SSD设备的写放大。
一个区段在物理磁盘上的数据结构大概是如图6所示,每个区段大小为16MB。每个区段开头的4KB为区段头,区段头中主要包含了区段的描述信息,例如,剩余空间起始位置mUp,以及剩余空间结束位置mDown等。紧接区段头后面的部分为区段数据区,用于保存用户数据,区段日志等。区段中空闲空间的开始位置由mUp指针指示,结束位置由mDown指示,若需计算空闲空间大小则:mUp-mDown。
区段管理器按如下流程对磁盘设备进行初始化:
1.首先获取磁盘设备的ID,大小等信息。
2.按照16MB的大小,将磁盘空间划分成多个区段。例如,一个100GB的磁盘,被划分为100*1024/16=6400个区段。
3.在磁盘的头部位置写上如图2所示的第一个16MB的区段。该区段在区段头中带有特殊标记(即上述的置位标记),不用于保存用户数据,是一个特殊的“超级区段”。每个物理磁盘设备上,只有一个超级区段。
4.超级区段中包含整个物理设备中的基本信息,包括磁盘所包含的区段个数,空闲区段个数等等。
5.超级区段写入成功后,该磁盘设备的初始化完成。
区段管理器在运行过程中需要对磁盘上的每个区段进行跟踪。在内存里,区段管理器维护一个“区段描述符”列表。该列表中包含了一系列的“区段描述符”,每一个描述符对应一个区段。
区段管理器启动时将存储节点中所有的物理磁盘设备上的区段信息读出,全都收集到“区段描述符”列表中。这样,区段描述符列表中包含了该存储节点的所有区段信息。
“区段描述符”的结构大致如图7所示,设备ID指示该区段所在的磁盘设备的序号。区段号对应区段的编号,是一个磁盘设备内部的区段编号,在读写的时候,区段管理器根据设备ID找到区段所在的磁盘,然后,以16MB*区段号为偏移量,找到区段的开始位置。mUp和mDown,用于指示区段内部的空闲空间。空闲空间起始地址为mUp,结束地址为mDown。图6中由于已经存储了部分数据,所以,mUp和mDown的位置随之改变了。
在本发明实施例中,为了提高写性能,区段管理器可以在内存中先写满一个区段后,才刷新到物理磁盘设备。但这样带来的风险是由于区段是一个较大的数据块,16MB的区段可能在还没来得及刷新到磁盘,节点就可能意外重启,导致数据丢失。
因此,本实施例用区段管理器利用NVDIMM或者NVRAM一类的非易失存储器进行写缓存,可以既解决数据写性能问题,又同时避免数据丢失的潜在风险。
区段管理器在非易失存储器上进行数据缓存的过程如下:
1.当系统中存在非易失存储器的时候,区段管理器首先在非易失存储器上载入32个空闲区段备用;
2.区段管理器维护一个“活跃区段”(ActiveExtent)指针,指向当前正在写入的区段;
3.一开始,“活跃区段指针”指向第一个空闲区段;
4.当活跃区段写满后,跳向下一个空闲区段。此时旧的活跃区段成为“脏区段”,需要等待刷新,下一个空闲区段成为当前的活跃区段;
5.然后,区段管理器开始将脏区段刷新到磁盘设备永久保存;
6.脏区段刷新完成后,区段管理器重新载入一个空闲区段,放到之前脏区段的位置备用;
7.重复这一过程直到32个空闲区段全部写完一遍,活跃区段指针又跳到第一个区段。此时脏区段已经被刷新到磁盘,第一个区段的位置上会被另一个空闲区段代替。
区段管理器中除了4KB的区段头之外,剩余的(16MB-4KB)的空间大小被用于两部分信息:用户数据区和区段日志区。用户数据区中,保存用户下发的数据块。一般的实施例中,数据块的大小为4KB。区段日志区中,保存用户数据块所关联的元数据,例如数据摘要值,用于校验数据的有效性性。
当用户数据块下发到区段管理器时,用户数据按照从左到右的方向写入区段数据区,而与之关联的元数据则从右往左写入日志区。从而形成首位对应的关系,即:用户数据-元数据对应。对应关系从两端向中间汇聚。
如图6所示,用户数据区的开始位置为mUp所指示的位置,从左往右扩张,结束位置在mDown所指定的位置。区段日志区开始位置为mDown所指示的位置,从右往左扩张,结束位置在mUp所指定的位置。当mUp和mDown相等时,则表示该区段已经写满。
区段管理器的写过程如下:
a.当接收到一个写请求,写请求中包含数据块本身和与之对应的数据摘要值;
b.区段管理器接收到数据块后,将写请求中所包含的数据块及其摘要写入到位于非易失存储器中的“活跃区块”;
c.写入完成后,数据块所在的区段号以及设备ID,区段内偏移量即被确定下来;
d.区段管理器返回写入成功,并返回由{设备ID,区段号,偏移量}组成的三元组物理地址;
e.区段管理器继续等待新的写请求;
f.当活跃区块写满后,活跃区块指针指向下一个空闲区块,当前区块标记为脏区块;
g.区段管理器根据设备ID和区段号,将所有的脏区块刷新到底层磁盘设备做永久保存。
区段管理器的读过程如下:
a.当接收到一个读请求,读请求中必须包含所请求数据的物理地址。物理地址中必须包含:i.设备ID,ii.区段号,iii.以及数据在区段中的偏移量。
b.区段管理器根据物理地址中的设备ID,区段号,以及偏移量,计算出数据所在的物理设备逻辑地址(LBA);
c.使用逻辑地址,从物理设备中读取该数据块并返回。
另外,在区段管理器进行读过程中,需要进行数据的完整性校验。区段管理器在保存用户数据块的同时,还保存了数据块对应的数据摘要值。数据块与数据摘要值在区段的数据区和日志区中首尾成对出现,向中间收拢,一一对应。
当需要进行数据校验的时候,按照下面的步骤进行:
1)从区段用户区读出用户数据块,然后对数据块的内容进行数据摘要值计算;
2)从区段日志区中取出对应的数据摘要值;
3)将第1)步计算而得的数据摘要值与第2)步取得的数据摘要值进行对比,如果两者一致,说明数据是完整有效的;反之,说明数据发生了损坏。
对于本实施例中提及的索引管理器,其维护了数据摘要值和数据对象之间的映射关系。索引管理器和区段管理器协同工作,指示了某个数据摘要值所对应数据对象所在的物理位置。
系统将用户数据和元数据切分成预定大小的“对象”,对象的大小通常是4KB或者8KB。随后,系统依据加密摘要算法,根据每个数据对象的内容,生成一个唯一的摘要值,也叫做数据摘要值。数据摘要值与数据内容,是一对一的关系。也即数据摘要值相同则意味着数据内容相同。数据对象被保存在存储节点的存储设备上,“EXTENT MANAGER”区段管理器负责读写节点内部的虚拟存储池。数据对象具体保存的物理位置由“EXTENT MANAGER”决定。“INDEX”索引管理器维护着从数据摘要值到物理位置的映射。INDEX是类似一个数据表的结构,保存了数据指纹和物理位置的对应关系。在实现中,可以使用哈希表类似的结构,以实现快速查询。
作为本实施例的一种可能的实现方式,如图8所示,为“INDEX”的索引结构。图中的指纹1…指纹N,即为数据摘要值1…数据摘要值N。
在图8中,将索引分为了4个分区,分别为INDEX 1-4。每个分区包含多个桶,每个桶包含多个索引记录,每一条索引记录中,保存了:
a)数据摘要值(即数据指纹);
b)数据摘要值所对应的数据对象的物理存储位置,物理位置与区段管理器中的物理地址相对应,是一个{设备ID,区段号,偏移量}三元组。
c)数据对象的引用计数。
每个索引记录都有一个与之关联的数据对象。通过在索引记录中对摘要值进行查找,可以找到其对应的数据对象的物理位置,进而通过“EXTENT MANAGER”从虚拟存储池中读取到对象的内容。由于不同数据对象的摘要值是不同的,因此索引记录也是唯一的。因此,索引记录中还保存了每个数据对象的引用计数,表示该数据对象被外界引用的次数。当引用计数降低为0,则表示该数据对象没有被外界所引用,可以对其进行回收(即删除)。
通过数据摘要值引用数据对象,使得同样内容的对象只需要保存一次,实现了数据对象的重复删除。在INDEX中保存和查找数据摘要值时,可以将元数据单独放在某个索引区,例如INDEX 1。这样使得元数据的索引相对集中,查找效率更高。INDEX是全系统被访问最为频繁的结构,要求低延时的随机访问,因此最好是常驻内存。
索引记录的快速放置:
索引记录保存的是数据摘要值和数据对象本身的物理位置的对应关系。而数据摘要值天然就是散列的,因此,索引管理器无需重新设计哈希算法,只需要利用数据摘要值的散列特点,将索引记录放置到不同的索引桶里。
通过对索引记录中的数据摘要值进行截取,可以获得天然散列的哈希值,这个哈希值作为索引桶的下标,将索引记录其放置进某个索引分区中对应下标的索引桶里。例如,数据摘要值的长度有20个字节,160位,查找时仅需要截取40位,用40位来查找,效率比较高。
索引记录的快速查找:
与索引记录放置的过程类似,通过对索引记录中的数据摘要值进行截取作为下标。使用该下标在索引分区中直接随机访问到该数据摘要值对应的索引记录所在的索引桶,在桶中查找数据摘要对应的索引记录即可。
本实施例的索引管理器和区段管理器联合作用,可以完成数据按内容进行寻址的读写。
写流程:
1)用户发出写请求,写请求中需要包含需要数据对象本身,以及数据摘要值;
2)索引管理器通过数据摘要,上述的过程放置其对应的索引记录。此时,由于数据的物理位置尚未确定,因此,索引记录中只放置了一个空的物理位置三元组;
3)索引管理器用数据对象产生一个写请求,发送给区段管理器“Extent Manager“;
4)区段管理器接到写请求之后,向位于非易失存储器中的活跃区段写入对象并返回物理地址三元组;
5)索引管理器接收到物理地址三元组,将物理地址更新到索引记录中,并返回写成功;
6)当相同的数据对象再次被写入,由于其数据摘要相同,因此索引管理器不再重复写入数据对象,而仅仅在索引记录中将引用计数加一即可。相同的数据写入,只执行到索引管理器的部分即可完成了。
读流程:
1)用户发出读请求,读请求中包含需要读取数据的数据摘要;
2)索引管理器通过数据摘要,按照上述的过程查找其对应的索引记录;
3)找到索引记录后,从记录中获取到物理地址三元组;
4)用物理地址三元组产生一个读请求,发送给区段管理器“Extent Manager”;
5)区段管理器接到读请求之后,从物理磁盘设备上读取用户数据对象并返回。
本发明的另一种技术方案:一种分布式存储系统中数据读取方法,如图9所示,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;接收用户根据逻辑空间树发出的读取请求信息;其中,读取请求信息包括用户数据的逻辑块号;根据逻辑块号在逻辑空间树中读取对应的数据摘要值;通过分布式哈希表查询每个数据摘要值的存储节点;通过网络读取存储节点中存储的与数据摘要值对应的数据对象;将数据对象组合成用户数据返回给用户。
如图9所示,图中包含了:
1.服务器节点1,2;
2.每个节点中,分别运行了:
a.LUN TREE逻辑空间树;
b.DHT分布式哈希表;
c.INDEX索引管理器;
d.EXTENT MANAGER区段管理器。
3.每个节点的物理磁盘。
系统的读流程按如下流程进行:
节点1向用户展现逻辑卷,即逻辑空间树1。
用户向逻辑空间树1发送写请求,请求中带有所要读取的逻辑块号。
逻辑空间树查询与用户所请求的逻辑块号相对应的叶子节点,找到对应的数据对象的指纹1(数据摘要值1)。
节点1使用指纹1向DHT分布式哈希表查询指纹1所对应的数据对象1所在的服务器节点,DHT通过计算,返回节点2,表示数据对象1当前被保存在服务器节点2上。
节点1使用指纹1向节点2请求其对应的数据对象1;节点2收到请求后,使用指纹1查询INDEX索引管理器,查到数据对象1被保存的物理位置;节点2的EXTENT MANAGER范围管理器,从数据对象1所在的物理位置中读取数据对象1的内容,并返回给节点1;节点1将数据对象1返回给用户,读流程结束。
具体的,逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;根据每个叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;重复执行填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成逻辑空间树。
具体的,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象,这样才能达到精简配置的目的。
具体的,通过分布式哈希表查询每个数据摘要值的存储节点包括:
将数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于数据摘要值的第一节点摘要值;提取第一节点摘要值对应的第一存储节点的编号。
更具体的,存储节点数组的生成包括:
获取分布式存储系统中每个存储节点的节点ID和节点容量;按照预定的空间大小将每个节点容量分为多个单位容量;采用加密摘要算法为每个单位容量生成对应的节点摘要值;将每个存储节点的多个节点摘要值按照由小至大的顺序进行排列,得到存储节点数组。
在上述实施例中,对两个实施例的描述都各有侧重,由于数据写入和数据读取时两个相似的操作流程,所以,在数据读取实施例中没有详述或记载的部分,可以参见数据写入实施例的相关描述。
根据上述实施例中的数据写入和数据读取方法,对分布式存储的元数据进行了有效的管理,可以实现元数据本身的精简配置和重复数据删除,同时通过完善的缓存技术,在性能和空间中进行折中和优化,使得分布式存储的空间数据管理灵活高效。
上述实施例中的方法中,使用多层映射对多节点物理设备进行虚拟化,数据摘要值(即数据指纹)决定数据的物理位置,元数据和用户数据使用相同的数据结构,使用空闲空间进行本地缓存。通过使用上述方法,分布式存储系统能够达到元数据和用户数据融为一体,元数据和用户数据天然地得以重复删除,元数据和用户数据平均分布到每个节点,数据可以在节点间自由移动而不影响用户使用。

Claims (10)

1.一种分布式存储系统中数据写入方法,其特征在于,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;
接收用户根据所述逻辑空间树发出的写入请求信息;其中,所述写请求信息包括用户数据和写入逻辑块号;
将每个所述数据摘要值根据所述逻辑块号存储至所述逻辑空间树中;
将所述用户数据拆分为多个预定大小的数据对象,并计算出每个数据对象的数据摘要值;
通过分布式哈希表生成每个数据摘要值的存储节点;
通过网络将所述数据摘要值分别发送至对应的存储节点进行存储。
2.如权利要求1所述的一种分布式存储系统中数据写入方法,其特征在于,所述逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;
将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;
根据每个所述叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;
填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;
重复执行所述填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成所述逻辑空间树。
3.如权利要求2所述的一种分布式存储系统中数据写入方法,其特征在于,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象。
4.如权利要求1所述的一种分布式存储系统中数据写入方法,其特征在于,通过分布式哈希表生成每个数据摘要值的存储节点包括:
将所述数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于所述数据摘要值的第一节点摘要值;
提取所述第一节点摘要值对应的第一存储节点的编号;
将所述数据摘要值对应的待存储数据对象存储至所述第一存储节点。
5.如权利要求4所述的一种分布式存储系统中数据写入方法,其特征在于,所述存储节点数组的生成包括:
获取分布式存储系统中每个存储节点的节点ID和节点容量;
按照预定的空间大小将每个所述节点容量分为多个单位容量;
采用加密摘要算法为每个所述单位容量生成对应的节点摘要值;
将每个存储节点的多个所述节点摘要值按照由小至大的顺序进行排列,得到所述存储节点数组。
6.一种分布式存储系统中数据读取方法,其特征在于,包括:
根据分布式存储系统的当前状态生成逻辑空间树,并向用户展现;
接收用户根据所述逻辑空间树发出的读取请求信息;其中,所述读取请求信息包括用户数据的逻辑块号;
根据所述逻辑块号在所述逻辑空间树中读取对应的数据摘要值;
通过分布式哈希表查询每个数据摘要值的存储节点;
通过网络读取所述存储节点中存储的与数据摘要值对应的数据对象;
将所述数据对象组合成用户数据返回给用户。
7.如权利要求6所述的一种分布式存储系统中数据读取方法,其特征在于,所述逻辑空间树的生成方法为:
将每个逻辑卷分成多个相同空间大小的逻辑节点;其中,b=n*a,b为每个逻辑节点的空间大小,n为正整数,a为数据对象的数据摘要值所占用的空间大小;
将存储有数据摘要值的逻辑节点作为逻辑空间树的叶子结点;
根据每个所述叶子节点中的数据摘要值组成生成该叶子节点的节点摘要值;
填充上层父节点:将相邻的n个叶子节点的节点摘要值填充至一个空的逻辑节点,将填充后的逻辑节点作为该n个叶子节点的上层父节点;
重复执行所述填充上层父节点步骤,直至生成的上层父节点的数量为1个,将该上层父节点作为根节点,生成所述逻辑空间树。
8.如权利要求7所述的一种分布式存储系统中数据读取方法,其特征在于,在未填充数据摘要值或节点摘要值的逻辑节点中,均引用全零对象。
9.如权利要求6所述的一种分布式存储系统中数据读取方法,其特征在于,通过分布式哈希表查询每个数据摘要值的存储节点包括:
将所述数据加密摘要值与分布式存储系统存储节点数组中的节点加密摘要值依次进行比较,直至找到大于所述数据摘要值的第一节点摘要值;
提取所述第一节点摘要值对应的第一存储节点的编号。
10.如权利要求9所述的一种分布式存储系统中数据读取方法,其特征在于,所述存储节点数组的生成包括:
获取分布式存储系统中每个存储节点的节点ID和节点容量;
按照预定的空间大小将每个所述节点容量分为多个单位容量;
采用加密摘要算法为每个所述单位容量生成对应的节点摘要值;
将每个存储节点的多个所述节点摘要值按照由小至大的顺序进行排列,得到所述存储节点数组。
CN202010094496.9A 2020-02-16 2020-02-16 一种分布式存储系统中数据写入/读取方法 Active CN111324305B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010094496.9A CN111324305B (zh) 2020-02-16 2020-02-16 一种分布式存储系统中数据写入/读取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010094496.9A CN111324305B (zh) 2020-02-16 2020-02-16 一种分布式存储系统中数据写入/读取方法

Publications (2)

Publication Number Publication Date
CN111324305A true CN111324305A (zh) 2020-06-23
CN111324305B CN111324305B (zh) 2021-02-02

Family

ID=71171166

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010094496.9A Active CN111324305B (zh) 2020-02-16 2020-02-16 一种分布式存储系统中数据写入/读取方法

Country Status (1)

Country Link
CN (1) CN111324305B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112286873A (zh) * 2020-10-30 2021-01-29 西安奥卡云数据科技有限公司 一种哈希树缓存方法及装置
CN113076281A (zh) * 2021-03-30 2021-07-06 山东英信计算机技术有限公司 一种Ceph内核客户端进行通信的方法、系统、设备及介质
CN114879910A (zh) * 2022-05-13 2022-08-09 苏州思萃工业互联网技术研究所有限公司 分布式块存储底层读写系统及方法
CN115577157A (zh) * 2022-11-24 2023-01-06 河北热点科技股份有限公司 多数据源元数据终端查询快速比对方法及系统

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103002027A (zh) * 2012-11-26 2013-03-27 中国科学院高能物理研究所 基于键值对系统实现树形目录结构的数据存储系统及方法
CN103984607A (zh) * 2013-02-08 2014-08-13 华为技术有限公司 分布式存储的方法、装置和系统
CN107291876A (zh) * 2017-06-19 2017-10-24 华中科技大学 一种分布式数据管理方法
CN107615252A (zh) * 2015-01-05 2018-01-19 邦存科技有限公司 横向扩展存储系统中的元数据管理
CN107632789A (zh) * 2017-09-29 2018-01-26 郑州云海信息技术有限公司 基于分布式存储的重删方法、系统及数据重复检测方法
CN108664223A (zh) * 2018-05-18 2018-10-16 百度在线网络技术(北京)有限公司 一种分布式存储方法、装置、计算机设备及存储介质
EP3454231A1 (en) * 2017-09-07 2019-03-13 Cohesity, Inc. Remotely mounted file system with stubs
WO2019050661A1 (en) * 2017-09-07 2019-03-14 Cohesity, Inc. REMOTE MOUNTED FILE SYSTEM HAVING STEMS
US10372917B1 (en) * 2016-10-21 2019-08-06 Google Llc Uniquely-represented B-trees
CN110096220A (zh) * 2018-01-31 2019-08-06 华为技术有限公司 一种分布式存储系统、数据处理方法和存储节点
CN110275681A (zh) * 2019-06-27 2019-09-24 深圳前海微众银行股份有限公司 一种数据存储方法及数据存储系统
CN110287150A (zh) * 2019-05-16 2019-09-27 中国科学院信息工程研究所 一种大规模存储系统元数据分布式管理方法与系统
CN110430282A (zh) * 2019-08-16 2019-11-08 微位(深圳)网络科技有限公司 分布式系统节点之间的数据传输方法及装置
WO2020033178A1 (en) * 2018-08-10 2020-02-13 Cohesity, Inc. Fast migration of metadata

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103002027A (zh) * 2012-11-26 2013-03-27 中国科学院高能物理研究所 基于键值对系统实现树形目录结构的数据存储系统及方法
CN103984607A (zh) * 2013-02-08 2014-08-13 华为技术有限公司 分布式存储的方法、装置和系统
CN107615252A (zh) * 2015-01-05 2018-01-19 邦存科技有限公司 横向扩展存储系统中的元数据管理
US10372917B1 (en) * 2016-10-21 2019-08-06 Google Llc Uniquely-represented B-trees
CN107291876A (zh) * 2017-06-19 2017-10-24 华中科技大学 一种分布式数据管理方法
EP3454231A1 (en) * 2017-09-07 2019-03-13 Cohesity, Inc. Remotely mounted file system with stubs
WO2019050661A1 (en) * 2017-09-07 2019-03-14 Cohesity, Inc. REMOTE MOUNTED FILE SYSTEM HAVING STEMS
CN107632789A (zh) * 2017-09-29 2018-01-26 郑州云海信息技术有限公司 基于分布式存储的重删方法、系统及数据重复检测方法
CN110096220A (zh) * 2018-01-31 2019-08-06 华为技术有限公司 一种分布式存储系统、数据处理方法和存储节点
CN108664223A (zh) * 2018-05-18 2018-10-16 百度在线网络技术(北京)有限公司 一种分布式存储方法、装置、计算机设备及存储介质
WO2020033178A1 (en) * 2018-08-10 2020-02-13 Cohesity, Inc. Fast migration of metadata
CN110287150A (zh) * 2019-05-16 2019-09-27 中国科学院信息工程研究所 一种大规模存储系统元数据分布式管理方法与系统
CN110275681A (zh) * 2019-06-27 2019-09-24 深圳前海微众银行股份有限公司 一种数据存储方法及数据存储系统
CN110430282A (zh) * 2019-08-16 2019-11-08 微位(深圳)网络科技有限公司 分布式系统节点之间的数据传输方法及装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112286873A (zh) * 2020-10-30 2021-01-29 西安奥卡云数据科技有限公司 一种哈希树缓存方法及装置
CN113076281A (zh) * 2021-03-30 2021-07-06 山东英信计算机技术有限公司 一种Ceph内核客户端进行通信的方法、系统、设备及介质
CN114879910A (zh) * 2022-05-13 2022-08-09 苏州思萃工业互联网技术研究所有限公司 分布式块存储底层读写系统及方法
CN114879910B (zh) * 2022-05-13 2023-10-13 苏州思萃工业互联网技术研究所有限公司 分布式块存储底层读写系统及方法
CN115577157A (zh) * 2022-11-24 2023-01-06 河北热点科技股份有限公司 多数据源元数据终端查询快速比对方法及系统
CN115577157B (zh) * 2022-11-24 2023-02-28 河北热点科技股份有限公司 多数据源元数据终端查询快速比对方法及系统

Also Published As

Publication number Publication date
CN111324305B (zh) 2021-02-02

Similar Documents

Publication Publication Date Title
CN111324305B (zh) 一种分布式存储系统中数据写入/读取方法
US10031672B2 (en) Snapshots and clones in a block-based data deduplication storage system
US7676628B1 (en) Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes
US8051050B2 (en) Block-level data de-duplication using thinly provisioned data storage volumes
WO2020204880A1 (en) Snapshot-enabled storage system implementing algorithm for efficient reclamation of snapshot storage space
US11061770B1 (en) Reconstruction of logical pages in a storage system
WO2020204882A1 (en) Snapshot-enabled storage system implementing algorithm for efficient reading of data from stored snapshots
US11256678B2 (en) Reconstruction of links between logical pages in a storage system
CN113986826B (zh) 存储系统容量使用率估计
US11099940B1 (en) Reconstruction of links to orphaned logical pages in a storage system
CN103593477A (zh) 一种哈希数据库的配置方法和装置
US11334523B2 (en) Finding storage objects of a snapshot group pointing to a logical page in a logical address space of a storage system
US11625169B2 (en) Efficient token management in a storage system
US9557937B2 (en) Systems, methods, and computer program products implementing hybrid file structures for data storage
CN113535670B (zh) 一种虚拟化资源镜像存储系统及其实现方法
US11366750B2 (en) Caching techniques
US11232043B2 (en) Mapping virtual block addresses to portions of a logical address space that point to the virtual block addresses
US11210230B2 (en) Cache retention for inline deduplication based on number of physical blocks with common fingerprints among multiple cache entries
CN111274259A (zh) 一种分布式存储系统中存储节点的数据更新方法
US11797478B1 (en) Snapshot mapping structure characterizing data dependencies between a storage volume and its snapshots
CN111338568B (zh) 一种数据逻辑位置映射方法
US20220398030A1 (en) Reverse range lookup on a unified logical map data structure of snapshots
US11748300B2 (en) Reverse deletion of a chain of snapshots
US20240176741A1 (en) Caching techniques using a two-level read cache
CN114647388B (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
PE01 Entry into force of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: A data write / read method in distributed storage system

Effective date of registration: 20210928

Granted publication date: 20210202

Pledgee: Xi'an investment and financing Company limited by guarantee

Pledgor: Xi'an Okayun Data Technology Co.,Ltd.

Registration number: Y2021980010139

PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20221009

Granted publication date: 20210202

Pledgee: Xi'an investment and financing Company limited by guarantee

Pledgor: Xi'an Okayun Data Technology Co.,Ltd.

Registration number: Y2021980010139

PC01 Cancellation of the registration of the contract for pledge of patent right
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: A method of data write/read in distributed storage system

Effective date of registration: 20221017

Granted publication date: 20210202

Pledgee: Xi'an investment and financing Company limited by guarantee

Pledgor: Xi'an Okayun Data Technology Co.,Ltd.

Registration number: Y2022610000660

PE01 Entry into force of the registration of the contract for pledge of patent right
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20231101

Granted publication date: 20210202

Pledgee: Xi'an investment and financing Company limited by guarantee

Pledgor: Xi'an Okayun Data Technology Co.,Ltd.

Registration number: Y2022610000660

PC01 Cancellation of the registration of the contract for pledge of patent right