一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种虚拟化资源镜像存储系统及其实现方法与流程

2021-10-24 04:20:00 来源:中国专利 TAG:镜像 存储系统 虚拟 计算 方法


1.本发明涉及云计算技术领域,特别是涉及一种虚拟化资源镜像存储系统及其实现方法。


背景技术:

2.云计算技术与虚拟化技术的不断发展,使得越来越多的企业开始部署公有云与私有云,云计算的iaas(基础设施即服务)与paas(平台即服务)模式以虚拟化资源镜像为服务形式向租户提供计算服务,用户可以根据自身需要在云端创建虚拟机或者容器资源,并以此获取操作系统以及平台服务。
3.为了对平台提供良好的运行支撑,虚拟机镜像被广泛应用于云计算的各个领域。某些企业中的虚拟机镜像数量会高达5000~20000个。而容器化技术依靠存储占用小,启动速度快,系统开销小,简化的应用程序开发、部署和管理等特点迅速发展,很大程度上增大了容器镜像存储市场规模。
4.虚拟机镜像的构成方式会导致大量添零数据块的产生,这些数据块对于镜像存储系统来说是重复的、无效的。此外,容器镜像是按层存储的,在容器镜像叠加层(layer)的过程中,每新增加一层,镜像的大小就会有大幅度增长。不同镜像中包含相同的公共依赖项(例如,库文件),这也导致不同的容器镜像往往包含大量重复数据。
5.为了减少数据冗余,重复数据删除是一种常见的减少冗余数据的方法。在虚拟机镜像存储中,分块去重技术日渐成熟,通过分块去重算法去掉重复数据;而在容器镜像存储中,通常只对容器镜像的层进行去重处理,但是容器镜像的层很少完全相同,在容器镜像中使用的层共享技术不能有效降低存储空间损耗,直接像虚拟机镜像使用分块去重方案会提高性能开销。
6.现有的镜像重复数据删除系统为了提高检索性能通常使用hash索引,使用hash索引很大程度上提高了查询的速度,但是现有的hash索引不支持使用索引进行排序,无法得到有序的索引表,同时在大规模的数据存储中的效率损失较为严重。而在磁盘存储上,直接使用hdd(hard disk drive,硬盘驱动器)机械硬盘存储数据块降低了成本,但是读写速度达不到快速读取的要求。
7.此外,容器技术短期内无法完全替代虚拟机技术,所以较长一段时间内企业将处于虚拟机镜像和容器镜像共存的时期。基于上述内容,研究并实现一套虚拟化资源镜像存储系统是有必要的。


技术实现要素:

8.为了克服上述技术问题的缺点,本发明提供了一种虚拟化资源镜像存储系统及其实现方法。
9.术语解释:
10.1、docker registry,是docker官方提供的私有镜像仓库,用于存储docker镜像。
11.2、openstack glance,是openstack镜像服务组件,提供虚拟机镜像的发现、注册和获取服务。
12.3、r/w请求,读/写请求。
13.4、b树,是为磁盘存储而专门设计的一类平衡搜索树,b树的高度仅随着它所包含的节点数按对数增长。
14.5、hash算法,又称摘要算法,对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
15.本发明的技术方案为:
16.一种虚拟化资源镜像存储系统,包括fuse文件系统、镜像重复数据删除系统;
17.所述fuse文件系统接收来自若干镜像服务例如包括docker registry和openstack glance镜像服务的r/w请求,并将r/w请求发送给镜像重复数据删除系统,镜像重复数据删除系统分析r/w请求中r请求的内容,调用fuse文件系统从磁盘中取出所需的数据返回给镜像服务;根据r/w请求中w请求对镜像去重并通过fuse文件系统将去重产生的镜像元数据、索引数据和数据块存储到磁盘。
18.根据本发明优选的,所述镜像重复数据删除系统包括分块去重模块以及与其连接的元数据管理模块、索引单元、多级缓存管理模块;
19.所述分块去重模块用于:对虚拟机镜像和容器镜像进行分块并删除重复数据;所述元数据管理模块用于:对元数据表进行读/写操作,元数据表中存储虚拟机镜像(容器镜像层)指纹值、名称、作者、版本号、数据块指纹值及其数据块排列顺序;所述索引单元用于:对索引表进行读/写操作,索引表中存储键值对索引数据;所述多级缓存管理模块用于:处理磁盘间的数据提取、数据写入操作。
20.根据本发明优选的,所述分块去重模块包括虚拟机镜像分块去重单元和容器镜像分块去重单元;
21.根据虚拟机镜像中零块多的特点,所述虚拟机镜像分块去重单元用于:采用固定块长分块算法对虚拟机镜像按照8kb大小的固定长度分割,得到若干数据块,使用hash算法(sha

1算法)计算出数据块的指纹值,通过查询索引表中的节点key值,查看该指纹值是否存在于索引表中,如果存在,则证明该数据块及其指纹值已经存储在系统中;如果不存在,将该指纹值和数据块地址按照<key:value>的方式存储到索引表中;所述容器镜像分块去重单元用于:使用cdc(content

defined chunking)可变长分块算法对容器镜像分块,数据块的长度定义在最小值r和最大值d之间,可变长度的数据块用一个大小为w滑动窗口来划分,当滑动窗口在位置k的hash值f满足f mod d=r时,该位置k为数据块的一个边界,重复这个过程,直到整个容器镜像都被分块;分块结束后通过hash算法计算出数据块的指纹值,并将该指纹值和数据块地址按照<key:value>的方式存储到索引表中。
22.根据本发明优选的,所述元数据管理模块存储元数据表,并对元数据表中的数据包括虚拟机镜像(容器镜像层)指纹值、名称、作者、版本号、数据块指纹值及其数据块排列顺序进行增、删、改、查处理。
23.根据本发明优选的,所述多级缓存管理模块包括对hdd(hard disk drive,硬盘驱动器)机械硬盘、ssd(solid state disk,固态硬盘)硬盘、nvme(non

volatile memory express,非易失性存储器)磁盘和内存的管理;
24.在nvme磁盘中存储索引表和元数据表;ssd硬盘中存储容器镜像层、高热度的虚拟机镜像数据块,高热度的虚拟机镜像数据块是指访问次数多的数据块,即访问次数多于某一数值的数据块;hdd机械硬盘中存储容器镜像数据库、低热度的虚拟机镜像数据块,低热度的虚拟机镜像数据块是指访问次数少的数据块,即访问次数少于某一数值的数据块。
25.根据本发明优选的,所述索引单元为三级b树索引单元,每级索引均存放键值对数据<key:value>,其中,key为数据块指纹值,value为key所对应数据块地址;所述索引单元的三级索引的索引表均存储于nvme磁盘中。以提高访问速度。
26.进一步优选的,在索引单元中,通过数据块热度置换方法将被访问次数高的节点提高到更高层级的索引中,数据块热度置换方法具体步骤如下:
27.(1)设置初始基准值n;
28.(2)索引节点p0被访问,统计索引节点p0的访问次数n(p0);
29.(3)如果索引节点p0访问次数n(p0)大于初始基准值n,进入步骤(4);否则,返回步骤(2);
30.(4)如果索引节点p0为一级索引,则无需进行置换,结束;否则,进入步骤(5);
31.(5)将索引节点p0与其上一级索引中p
min
最小的p
min
比较被访问次数,n(p
min
)是指p
min
的访问次数,p
min
是指上一级索引中最小访问次数的节点,如果n(p0)<n(p
min
),则返回步骤(1),否则,进入步骤(6);
32.(6)如果p0是二级索引,直接执行步骤(7),如果p0是三级索引,将p0节点中的数据块地址所对应的数据块由hdd机械硬盘转存入ssd硬盘,并将p
min
中数据块地址所对应的数据块由ssd磁盘转存入hdd机械硬盘,更新p0与p
min
对应的数据块地址,执行步骤(7);
33.(7)将p
min
及其对应的数据块地址存入其右子树,并使用p0及其对应的数据块地址替换掉p
min
及其对应的数据块地址,删除原索引表中的p0及其对应的数据块地址;
34.(8)置换完成。
35.索引单元中,插入过程如下:
36.(9)存储系统获取到指纹值后,将数据块标识以及其指向数据块的地址存储到索引表中,如果索引节点中数据存储空间已满,则搜索下一级索引;
37.(10)从一级索引节点开始,沿搜索路径找到要插入的键值对数据的索引节点,如果该节点未满,则把数据段按照其中的指纹值数值大小插入到有序位置上,插入完成,否则进入步骤(11);
38.(11)如果该节点已满,节点数据量为k,需要新的存储空间存储数据,存储系统将产生新的节点,将已满节点的k/2个数据从该节点移动到新的节点中;
39.(12)新的节点产生后,将该新的节点与其父节点使用指针建立连接,插入过程完成。
40.索引单元中,查询过程如下:
41.(13)从根节点出发,按照二分查找数据结构查询一级索引中的数据,如果存在,则直接根据节点数据段中的数据块地址找到该数据块,如果不存在,则执行步骤(14);
42.(14)二分查找确定指纹值在索引中所处的区间,通过索引中的指针到下一级索引中查找,比对索引中的指纹值;
43.(15)如果未匹配到相同指纹值,则返回步骤(13),退出查询过程。
44.上述虚拟化资源镜像存储系统的实现方法,包括步骤如下:
45.a、所述fuse文件系统接收来自若干镜像服务的r/w请求;
46.b、如果是读请求,进入步骤c,如果是写请求,进入步骤d;
47.c、调用所述元数据管理模块,所述元数据管理模块通过查询元数据表中是否存在该镜像的指纹值来确定该镜像是否存在于存储系统中,如果存在指纹值,则证明镜像已存在,查找元数据表中该镜像所需的数据块指纹值,通过索引单元查询指纹值对应的数据块地址通过多级缓存管理模块找到数据块,通过元数据表中的数据块顺序恢复镜像数据,返回查询结果,结束;否则,直接返回查询结果,结束;
48.d、调用元数据管理模块查询镜像元数据,判断是否存在该镜像元数据,如果存在,直接返回查询结果,结束;否则,进入步骤e;
49.e、存储镜像元数据到元数据表,如果镜像为容器镜像,则存储容器镜像的元数据,进入步骤f,如果镜像为虚拟机镜像,直接进入步骤f;
50.f、通过分块去重模块将数据块分成大小相等的数据块,使用hash算法(sha

1算法)计算出数据块指纹值,元数据管理模块将数据块排列顺序以及数据块指纹值写入元数据表,查询索引单元中索引表的指纹值(key值),判断存储系统中是否存在该数据块,如果存在则不需要处理,如果不存在,通过多级缓存管理模块存储数据块,并将该数据块的指纹值和其数据块地址存入索引表中,结束。
51.本发明的有益效果为:
52.本发明实现了虚拟化资源镜像的高效存储,解决了虚拟机镜像与容器镜像统一存储的管理问题,并在一定程度上减轻了镜像数据日益增多导致的存储压力大等问题;根据虚拟机镜像与容器镜像的构建方式、存储特点对镜像使用相适应的去重存储策略,提高了系统的重复数据删除率image size为去重前的镜像大小,deduplicated size为去重后的镜像大小,尽可能的降低了存储性能损耗;通过数据块热度置换方法、b树索引和多级缓存架构降低系统性能开销,并且可以获得有序的索引表,b树索引相比hash索引查询、插入的速度更快,在一定程度上提高了系统性能;通过fuse文件系统解决了现存文件系统难以满足用户需求以及内核态定制开发文件系统难度较高的问题。
附图说明
53.图1为本发明虚拟化资源镜像存储系统的结构示意图;
54.图2为本发明虚拟化资源镜像存储系统的实现方法流程示意图;
55.图3为本发明三级b树文件索引的示意图;
56.图4为本发明多级缓存管理模块的示意图。
具体实施方式
57.下面结合说明书附图和实施例对本发明作进一步说明,但不限于此。
58.实施例1
59.一种虚拟化资源镜像存储系统,如图1所示,包括fuse文件系统、镜像重复数据删
除系统;
60.fuse文件系统接收来自若干镜像服务例如包括docker registry和openstack glance镜像服务的r/w请求,并将r/w请求发送给镜像重复数据删除系统,镜像重复数据删除系统分析r/w请求中r请求的内容,调用fuse文件系统从磁盘中取出所需的数据返回给镜像服务;根据r/w请求中w请求对镜像去重并通过fuse文件系统将去重产生的镜像元数据、索引数据和数据块存储到磁盘。
61.镜像重复数据删除系统包括分块去重模块以及与其连接的元数据管理模块、索引单元、多级缓存管理模块;分块去重模块用于:对虚拟机镜像和容器镜像进行分块并删除重复数据;元数据管理模块用于:对元数据表进行读/写操作,元数据表中存储虚拟机镜像(容器镜像层)指纹值、名称、作者、版本号、数据块指纹值及其数据块排列顺序;索引单元用于:对索引表进行读/写操作,索引表中按照<key:value>的方式存储索引数据;key是指数据块指纹值,value是指数据块地址;多级缓存管理模块用于:处理多级缓存间的数据提取、数据写入操作。
62.分块去重模块包括虚拟机镜像分块去重单元和容器镜像分块去重单元;根据虚拟机镜像中零块多的特点,虚拟机镜像分块去重单元用于:采用固定块长分块算法对虚拟机镜像按照8kb大小的固定长度分割,得到若干数据块,使用hash算法(sha

1算法)计算出数据块的指纹值,通过查询索引表中的节点key值,查看该指纹值是否存在于索引表中,如果存在,则证明该数据块及其指纹值已经存储在系统中;如果不存在,将该指纹值和数据块地址按照<key:value>的方式存储到索引表中;
63.容器镜像分块去重单元用于:使用cdc(content

defined chunking)可变长分块算法对容器镜像分块,数据块的长度定义在最小值r和最大值d之间,可变长度的数据块用一个大小为w滑动窗口来划分,当滑动窗口在位置k的hash值f满足f mod d=r时,该位置k为数据块的一个边界,本实施例中按照cdc可变长分块算法将容器镜像层按照4kb~16kb、平均8kb的数据块大小进行分块,重复这个过程,直到整个容器镜像都被分块;分块结束后通过hash算法计算出数据块的指纹值,并将该指纹值和数据块地址按照<key:value>的方式存储到索引表中。
64.元数据管理模块存储元数据表,并对元数据表中的数据包括虚拟机镜像(容器镜像层)指纹值、名称、作者、版本号、数据块指纹值及其数据块排列顺序进行增、删、改、查处理。在镜像重复数据删除系统接受到r/w请求后将访问元数据管理模块,用于查看所要操作的镜像是否存在于存储系统中。
65.实施例2
66.根据实施例1所述的一种虚拟化资源镜像存储系统,其区别在于:
67.如图4所示,多级缓存管理模块包括对hdd机械硬盘、ssd硬盘、nvme硬盘以及内存的管理;
68.多级缓存架构主要负责数据的存储,内存负责系统运行,在nvme磁盘中存储索引表和元数据表;ssd硬盘中存储容器镜像层(高热度容器镜像层不会被分块去重)、高热度的虚拟机镜像数据块(一、二级索引中所对应的数据块),高热度的虚拟机镜像数据块是指访问次数多的数据块,即访问次数多于某一数值的数据块;hdd机械硬盘中存储容器镜像数据库、低热度的虚拟机镜像数据块,低热度的虚拟机镜像数据块是指访问次数少的数据块,即
访问次数少于某一数值的数据块。
69.多级缓存架构在现有hdd机械硬盘、ssd硬盘、内存三级架构基础上增加一层nvme磁盘构成四级缓存架构。
70.实施例3
71.根据实施例2所述的一种虚拟化资源镜像存储系统,其区别在于:
72.索引单元为三级b树文件索引单元,如图3所示,图3中,p*代表指针,指向下一级索引节点,sum为每个节点的被索引次数,p*与sum中间的数字部分为存储的十六进制指纹值(key值),addr为指纹值key所对应的数据块地址(value);每级索引均存放键值对数据<key:value>,其中,key为数据块标识,value为key所对应数据块地址;索引单元包括一级索引、二级索引及三级索引,索引单元的三级索引的索引表均存储于nvme磁盘中。以提高访问速度。
73.在索引单元中,通过数据块热度置换方法将被访问次数高的节点提高到更高层级的索引中,以提高一、二级索引访问命中率,降低访问次数,提高索引性能。数据块热度置换方法具体步骤如下:
74.(1)设置初始基准值n;
75.(2)索引节点p0被访问,统计索引节点p0的访问次数n(p0);
76.(3)如果索引节点p0访问次数n(p0)大于初始基准值n,进入步骤(4);否则,返回步骤(2);
77.(4)如果索引节点p0为一级索引,则无需进行置换,结束;否则,进入步骤(5);
78.(5)将索引节点p0与其上一级索引中p
min
最小的p
min
比较被访问次数,n(p
min
)是指p
min
的访问次数,p
min
是指上一级索引中最小访问次数的节点,如果n(p0)<n(p
min
),则返回步骤(1),否则,进入步骤(6);
79.(6)如果p0是二级索引,直接执行步骤(7),如果p0是三级索引,将p0节点中的数据块地址所对应的数据块由hdd机械硬盘转存入ssd硬盘,并将p
min
中数据块地址所对应的数据块由ssd磁盘转存入hdd机械硬盘,更新p0与p
min
对应的数据块地址,执行步骤(7);
80.(7)将p
min
及其对应的数据块地址存入其右子树,并使用p0及其对应的数据块地址替换掉p
min
及其对应的数据块地址,删除原索引表中的p0及其对应的数据块地址;
81.(8)置换完成。
82.实施例4
83.实施例1

3任一所述的虚拟化资源镜像存储系统的实现方法,如图2所示,包括步骤如下:
84.a、fuse文件系统接收来自若干镜像服务的r/w请求;
85.本实施例选取的虚拟机镜像和容器镜像如表1所示。
86.表1
[0087][0088][0089]
b、如果是读请求,进入步骤c,如果是写请求,进入步骤d;
[0090]
c、调用元数据管理模块,元数据管理模块通过查询元数据表中是否存在该镜像的指纹值来确定该镜像是否存在于存储系统中,如果存在指纹值,则证明镜像已存在,查找元数据表中该镜像所需的数据块指纹值,通过索引单元查询指纹值对应的数据块地址通过多级缓存管理模块找到数据块,通过元数据表中的数据块顺序依次排列拼接数据块,直至镜像恢复完成,返回查询结果,结束;否则,直接返回查询结果,结束;
[0091]
d、调用元数据管理模块查询镜像元数据,判断是否存在该镜像元数据,如果存在,直接返回查询结果,结束;否则,进入步骤e;
[0092]
e、存储镜像元数据到元数据表,如果镜像为容器镜像,则存储容器镜像的元数据,进入步骤f,如果镜像为虚拟机镜像,直接进入步骤f;
[0093]
f、通过分块去重模块将数据块分成大小相等的数据块,使用hash算法(sha

1算法)计算出数据块指纹值,元数据管理模块将数据块排列顺序以及数据块指纹值写入元数据表,查询索引单元中索引表的指纹值(key值),判断存储系统中是否存在该数据块,如果存在则不需要处理,如果不存在,通过多级缓存管理模块存储数据块,并将该数据块的指纹值和其数据块地址存入索引表中,结束。
[0094]
所选取镜像的重复数据删除效果如表2所示:
[0095]
表2
[0096][0097][0098]
如图3所示,基于b树索引的索引单元存储<key:value>值,其中key值使用十六进制处理的数据,value值为数据块的地址,同时增加读写次数值,该值将记录该节点的访问次数,通过该值配合数据块热度置换算法,通过将访问命中率高的数据放在更高层的索引中,并在每个节点(索引表)中增加二分查找数据结构,以提高查询速度;
[0099]
索引单元中,插入过程如下:
[0100]
(9)存储系统获取到指纹值后,将数据块标识以及其指向数据块的地址存储到索引表中,如果索引节点中数据存储空间已满,则搜索下一级索引;
[0101]
(10)从一级索引节点开始,沿搜索路径找到要插入的键值对数据段的索引节点,如果该节点未满,则把数据段按照其中的指纹值key数值大小插入到有序位置上,插入完成,否则进入步骤(11);
[0102]
(11)如果该节点已满,节点数据量为k,需要新的存储空间存储数据,存储系统将产生新的节点,将已满节点的k/2个数据从该节点移动到新的节点中;
[0103]
(12)新的节点产生后,将该新的节点与其父节点使用指针建立连接,插入过程完成。
[0104]
索引单元中,查询过程如下:
[0105]
(13)从根节点出发,按照二分查找数据结构查询一级索引中的数据,如果存在,则直接根据节点数据段中的数据块地址找到该数据块,如果不存在,则执行步骤(14);
[0106]
(14)二分查找确定指纹值在索引中所处的区间,通过索引中的指针到下一级索引中查找,比对索引中的指纹值;
[0107]
(15)如果未匹配到相同指纹值,则返回步骤(13),退出查询过程。
[0108]
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜