本发明专利技术提供了一种对象存储使用块设备作为数据存储的方法,当收到处理请求后,首先利用协议网关进行基础处理,然后判断是否具有写请求;如果有写请求则判断是否有可用卷,如果没有则先创建卷,然后转换为卷地址后写入,更新元数据记录后返回客户端;如果没有写请求则从元数据查询位置,转换为卷地址后读取数据内容后,返回客户端。本发明专利技术有益效果:一种对象存储使用块设备作为数据存储的方法,移除硬盘上的文件系统层,对象协议网关直接对接裸设备,去除了文件系统层的性能衰减。去除了文件系统层的性能衰减。去除了文件系统层的性能衰减。
【技术实现步骤摘要】
一种对象存储使用块设备作为数据存储的方法
[0001]本专利技术属于分布式存储领域,尤其是涉及一种对象存储使用块设备作为数据存储的方法。
技术介绍
[0002]对象存储大多由协议层和数据引擎层和元数据服务构成,其中协议层负责S3/SWIFT或者私有对象协议的实现,往往呈现为无状态应用,数据引擎层则负责实际数据的持久化及冗余恢复等功能。目前多数的协议层和数据引擎层之间采用kv接口或文件系统接口对接,以当前流行的开源对象存储为例,ceph的rgw通过kv接口访问数据引擎rados,minio对象存储则直接使用本地文件系统作为数据引擎。虽然使用kv或者文件协议对接会使得方案更加通用,但是在某些特定场景下,例如已有资源池中,块存储本身已经通过RAID或三副本机制实现了可靠性和高性能,在不增加额外存储资源的前提下,通过部署一个简单的对象协议网关,使用已有的块设备和元数据服务,从而快速具备高性能对象存储能力不失为一种更加容易让人接受的解决办法。
技术实现思路
[0003]有鉴于此,本专利技术旨在提出一种对象存储使用块设备作为数据存储的方法,以至少解决
技术介绍
中的至少一个问题。
[0004]为达到上述目的,本专利技术的技术方案是这样实现的:
[0005]一种对象存储使用块设备作为数据存储的方法,当收到处理请求后,首先利用协议网关进行基础处理,然后判断是否具有写请求;
[0006]如果有写请求则判断是否有可用卷,如果没有则先创建卷,然后转换为卷地址后写入,更新元数据记录后返回客户端;
[0007]如果没有写请求则从元数据查询位置,转换为卷地址后读取数据内容后,返回客户端。
[0008]进一步的,对象存储启动时候,从配置文件读取后端数据存储类型,如果类型是块设备,则ping块管理接口是否正常,确保可以正常调用。
[0009]进一步的,当写IO到达时,判断是否有可用块用于写入,如果没有,则调用块设备管理接口创建块,创建成功后调用open接口,将其置于打开状态,如果有可用块可用于写入,则直接写入。
[0010]进一步的,每一个block进行编号,写入时候从0开始并以此向后写入,写入成功之后更新当前卷的写入位置,当一个写IO到来时,从请求中获取到size信息,通过size计算出需要的4K个数,且对最后一个数据块的余位置0对齐,对齐之后,读取当前卷的写入位置,并以此写入位置为offset,将对齐后的buffer写入到卷中,写入成功之后,更新当前卷的写入位置,同时将原来的写入offset作为对象在这个块的offset返回给协议层,协议层将其持久化到元数据数据库中。
[0011]进一步的,当读请求到达时,首先从元数据服务中获取到offset和length,根据相同算法,在访问块设备之前,将其转化为对齐之后的offset和block个数,将相关的block读出,读出之后根据length大小,在内存buffer中将用于补位的超过length的数据丢弃,然后将结果返回给客户端,完成读取操作。
[0012]进一步的,本方案公开了一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,所述处理器用于执行一种对象存储使用块设备作为数据存储的方法。
[0013]进一步的,本方案公开了一种服务器,包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如一种对象存储使用块设备作为数据存储的方法。
[0014]进一步的,本方案公开了一种计算机可读取存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现一种对象存储使用块设备作为数据存储的方法。
[0015]相对于现有技术,本专利技术所述的一种对象存储使用块设备作为数据存储的方法具有以下有益效果:
[0016](1)本专利技术所述的一种对象存储使用块设备作为数据存储的方法,移除硬盘上的文件系统层,对象协议网关直接对接裸设备,去除了文件系统层的性能衰减;
[0017](2)本专利技术所述的一种对象存储使用块设备作为数据存储的方法,块存储是数据中心的基础设施,直接使用块存储,不需要额外增加服务器部署数据节点,节省资源;
[0018](3)本专利技术所述的一种对象存储使用块设备作为数据存储的方法,数据可靠性由块设备保证,协议网关作为无状态应用,维护简单。
附图说明
[0019]构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:
[0020]图1为本专利技术实施例所述的一种对象存储使用块设备作为数据存储的方法示意图。
具体实施方式
[0021]需要说明的是,在不冲突的情况下,本专利技术中的实施例及实施例中的特征可以相互组合。
[0022]下面将参考附图并结合实施例来详细说明本专利技术。
[0023]在本方案中,使用kv存储作为数据存储的对象存储系统中,一个putobject流程首先会创建一个kv对象,随后将数据内容写入到此KV对象当中,写入成功后在元数据服务中更新位置信息。当getobject请求到来时候,先从元数据当中获取到该对象对应的位置,然后从kv存储中将该对象读出并返回给客户端。
[0024]在支持块设备作为数据存储时,增加一个后端存储类型字段type,来区别处理KV存储和块存储类型的后端存储,根据配置文件来指定协议层选择哪种存储类型。对于KV存储,数据读写流程保持不变,对于块存储类型,数据处理上主要有如下不同:
[0025]1.一块盘上会有多个对象存储数据,所以对于单个对象来说,它会存放在一个“共享卷”上,写入返回时候,不仅要记录存放在哪个卷上,还要记录这个对象在卷的偏移位置,同样,读取该对象时候,根据卷ID和偏移位置将内容读出。
[0026]2.原本对象被删除时候,会把对象对应的数据kv对象也删除掉,但是使用块设备作为后端时,当对象被删除时,不会直接删掉数据,而是在元数据当中将其置为deleted,同时记录其所在卷的实际使用量变化。后台进程会定期分析卷的使用量,当达到阈值时候,对多个卷进行过合并操作,合并完成之后,将旧的卷整体删除。
[0027]具体流程如下:
[0028]1.对象存储启动时候,从配置文件读取后端数据存储类型,如果类型是块设备,则ping块管理接口是否正常,确保可以正常调用。
[0029]2.当写IO到达时,判断是否有可用块用于写入,如果没有,则调用块设备管理接口创建块,创建成功后调用open接口,将其置于打开状态。如果有可用块可用于写入,则直接写入。
[0030]3.我们把卷看成连续的地址空间组成的一个存储空间,并且以4K为粒度,对每一个block进行编号,写入时候从0开始并以此向后写入,写入成功之后更新当前卷的写入位置(可以记录在卷元数据中或者卷的特定块里面)。因此当一个写IO到来时,从请求中获取到si本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种对象存储使用块设备作为数据存储的方法,其特征在于:当收到处理请求后,首先利用协议网关进行基础处理,然后判断是否具有写请求;如果有写请求则判断是否有可用卷,如果没有则先创建卷,然后转换为卷地址后写入,更新元数据记录后返回客户端;如果没有写请求则从元数据查询位置,转换为卷地址后读取数据内容后,返回客户端。2.根据权利要求1所述的一种对象存储使用块设备作为数据存储的方法,其特征在于:对象存储启动时候,从配置文件读取后端数据存储类型,如果类型是块设备,则ping块管理接口是否正常,确保可以正常调用。3.根据权利要求2所述的一种对象存储使用块设备作为数据存储的方法,其特征在于:当写IO到达时,判断是否有可用块用于写入,如果没有,则调用块设备管理接口创建块,创建成功后调用open接口,将其置于打开状态,如果有可用块可用于写入,则直接写入。4.根据权利要求3所述的一种对象存储使用块设备作为数据存储的方法,其特征在于:每一个block进行编号,写入时候从0开始并以此向后写入,写入成功之后更新当前卷的写入位置,当一个写IO到来时,从请求中获取到size信息,通过size计算出需要的4K个数,且对最后一个数据块的余位置0对齐,对齐之后,读取当前卷的写入位置,并以此写入位置为offset,将对齐后的buffer写入到卷中,写入成功之后,更新当前卷的写入位置,同时将原来的...
【专利技术属性】
技术研发人员:李韶雄,
申请(专利权)人:紫光云技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。