应用于分布式存储系统的超安存编解码方法

文档序号:7861902阅读:411来源:国知局
专利名称:应用于分布式存储系统的超安存编解码方法
应用于分布式存储系统的超安存编解码方法技术领域
本方法涉及计算机数据存储安全领域,具体涉及一种保障分布式存储系统高可靠性的超安存编解码方法。
背景技术
目前云存储支撑方法一般是采用分布式文件系统的存储方法,将数据分块存放到廉价的普通计算机上,这样数据的安全问题,也就是容灾问题就成为了一般云存储支撑方法的重要考虑点。一般的云存储支撑方法大多采用简单冗余备份的方式对数据块进行复制备份,一个数据块在多台机器有几份完全一致的副本,但这种容灾方法造成了大量的磁盘空间的浪费,对系统的能耗、成本都有较大影响,本方法采用编解码方式的安全策略,在保证系统性能不降低的前提下,从磁盘利用方面大大提高了磁盘空间的利用率,相对应的也大大降低了系统的成本和能耗。
RS (Reed-Solomon)码是一类纠错能力很强的特殊的非二进制BCH码。对于任选正整数S可构造一个相应的码长为n=qS_l的q进制BCH码,而q作为某个素数的幂。当 S=l,q>2时所建立的码长n=q_l的q进制BCH码,称它为RS码。当q=2m(m>l),其码元符号取自于F(2m)的二进制RS码可用来纠正突发差错,它是最常用的RS码。一个RS码有以下几个参数块长度n(=2~m-l)个符号;消息长度k个符号;奇偶校验长度n-k=e个符号; 最小距离dmin=n-k+l个符号,通过缩短,(n, k)RS码的长度可以减少到具有相同符号长度的(n’,k’)RS码,其中η’和k’分别小于或者等于η和k。发明内容
本发明的目的在于将RS算法融入分布式存储系统,提供一种超安存编解码方法, 解决一般云存储支撑方法采用的简单复制备份方法所造成的磁盘空间的浪费问题,使大规模数据云存储解决方案在拥有超高性能的前提下,提高磁盘的利用率,保障数据的安全性, 降低系统总能耗,节约成本。
本发明的超安存编解码方案是在分布式云存储系统的基础上进行设计的。分布式云存储系统(如南京云创存储科技有限公司自行研发的cStor云存储系统,且本发明中涉及的元数据管理节点、客户端、块数据存储节点等技术名称与cStor云存储系统中使用的技术名称具有相同的定义)采用分布式的存储策略,主要包括元数据管理节点和多个块数据存储节点,其中,元数据管理节点负责组织调度块数据存储节点,存放及管理元数据信息,块数据存储节点负责存储数据块,客户端的读写操作需先与元数据管理节点交互获得块数据存储节点信息,再与块数据存储节点直接进行数据交互。元数据管理节点由元数据服务器构成,块数据存储节点由块数据服务器构成。
本发明具体采用如下技术方案一种应用于分布式存储系统的超安存编解码方法,包括配置编解码参数(M,N),其中M为原始数据块数目,N为RS编码后数据块数目;客户端写数据时将文件进行顺序分组,每组为X字节大小,X为任意正整数,再对每个组进行顺序分块成M块,每块为连续X/M字节的大小;对于每一个分组,客户端把该分组的 M个数据块存到M个不同的块数据服务器,元数据服务器记录该分组的块存储信息;客户端读数据时,当目标块数据服务器无法访问时,客户端从分组内的任意其余M台可访问的数据块服务器读取数据,并通过RS解码得到目标数据;块数据服务器收到元数据服务器的编解码任务时,把元数据管理节点指示的分组中的 M个数据块复制到本地,以每个块为矩阵的一行,构造成一个M行的矩阵,并根据块索引计算出当前需编解码的数据块在分组中所在的位置,如果小于等于M,则执行RS编码任务,产生冗余数据块;如果大于M小于等于N,则执行RS解码任务,产生原始数据块。
有益效果按照本发明的超安存编解码方法,以参数(M,N)配置系统,则系统中任意不大于N-M台块数据存储节点宕机,均可根据剩余节点解码出原数据,充分保证数据的安全性,元数据服务器能够不断的检测数据块的有效情况,对无效的数据块能够自动恢复原始数据块,又同时以比较小的冗余代价,降低了成本。


附图I :客户端写数据流程;附图2 :文件数据分组块分布示意图(M=4, N=6);附图3 :客户端读数据流程;附图4 :客户端解码读数据流程;附图5 :元数据服务控制块数据服务器编解码数据流程。具体 实施方式
下面结合附图对本发明的技术方案进行详细说明4. I客户端编解码方法客户端在向元数据管理节点注册成功后,元数据管理节点向客户端返回编解码参数 (M,N),其中,M为原始数据块数目,N为编码后数据块数目。客户端写数据时不进行编码, 这样保证了客户端写数据的性能,以及不会要求太高的机器硬件配置。客户端读数据时如果所读的原始数据块数据存储节点无法访问,客户端启动解码流程从任意其余M台可访问的块数据存储节点读取分组内的数据块,进行解码运算得到目标数据。
4. I. I客户端写数据流程客户端写数据流程如图I所示,文件系统驱动模块收到内核的写数据消息,回调编解码客户端函数,将数据写入写操作缓冲区,由线程负责将数据从缓冲区中取出并发送到块数据存储节点。客户端写数据的过程中,一个文件首先按64MB (以X=64MB大小为例说明) 大小为一个组进行顺序分组,再以64MB/M为一个数据块(chunk,lchunk=1024block)对每个分组进行均匀分块(不足的字节编解码时都用数字O填充),并分别存储到元数据管理节点指定的M个块数据存储节点,元数据服务器记录每个分组的块存储信息(块存储信息包含数据块的块标识、块版本号和存储的位置)。在写入数据的过程中,写数据时请求包括 offset (相对文件起始位置的偏移量)、size (当前写数据的大小)和data (当前请求的实际数据)等字段,客户端计算块索引、block编号以及block内部偏移量,计算过程如下1)根据block_no= offset>>16 得到 block 编号;2)根据chindx= (block_no>>10) *N + (block_no%1024) * M/1024,计算块索引位置,发送消息给元数据服务器,元数据服务器根据索引创建一个新的插槽,并记录新块的元数据信息;3)根据pos=(block_no % (Μ 10)) / M计算得到block在块数据服务器的block偏移量;4)根据from=offset&OxFFFF计算得到block中的偏移量;图2所示为(M=4,N=6)时客户端分块过程,客户端把64MB大小的数据分成连续的4块 (chunk 1> chunk2、chunk3、chunk4),每块大小为16MB。这4个原始数据块保存在4台不同的块数据服务器;chunk5和chunke为2台块数据服务器编码后生成的冗余数据块。
4. I. 2客户端读数据客户端不需解码读取数据流程如附图3所示,文件系统驱动模块收到内核的读数据消息,回调编解码客户端函数,客户端根据偏移量计算块索引,向元数据服务器发送请求消息获取该数据块所保存的块数据服务器,客户端从块数据服务器读取数据。在读数据的过程中,读数据时请求包括offset (相对文件起始位置的偏移量)、size (当前读数据的大小)和 data (返回数据的缓冲区)等字段。客户端不需解码读数据时计算块索引的算法如下1)根据block_no= offset>>16 得到 block 编号;2)indx= (block_no>>10) *N + (block_no%1024) *M/1024,计算块索引编号;客户端解码读取数据流程如附图4所示,当目标块数据服务器无法访问时,编解码客户端从分组中的任意其它M台可访问的数据块服务器读取数据,并通过解码运算得到目标数据。
4.2元数据管理节点模块编解码方法元数据管理节点控制整个编解码任务的调度、管理和控制,它并不执行具体的编解码操作。元数据管理节点编解码任务有两个触发点1)客户端写完一个数据块后,向元数据管理节点发送写完数据块消息,由于客户端写的都是原始数据,元数据管理节点只需产生N-M个编码任务记录,加入编码记录队列中,消息结构为Ucodechunk。由于客户端每写完一个块后,所对应分组内的编码块需重新编码, 可以延时到一个分组的M块都写成功后才开始触发编码,或者超过一段时间后元数据管理节点才开始真正调度编解码任务,向块数据服务器发送编解码任务请求消息,消息结构为 s3code ;2)元数据管理节点周期性的检查各个文件,当发现文件的某个块为空或者有效块数为O时,产生一个编解码任务,调度一个块数据存储节点执行编解码任务,恢复这个块的有效数据,块数据存储节点向元数据管理节点返回编解码状态,元数据管理节点清除队列中编解码任务记录;元数据服务器单个编码任务记录结构为typedef struct _s3codechunk{uint32_t inode; //文件节点标识 uint64_t chunkid; // 块节点标识uint32_t version;// 块版本号uint32_t indx;//块索引uint32_t savetime;//记录保存的时间uint8_t decodeable;//编码还是解码uint8_t sesflags;//会话标识uint32_t rootinode;//根节点标识uint32_t uid;// 用户标识uint8_t s3coding;//是否正在编码uint32_t s3codingstarttime; // 编码开始时间struct —s3codechunk 氺next;}s3codechunk;元数据服务器向数据块服务器发送的编码数据结构为 typedef struct _s3codearg {chindx; chunkid:version;srceptr;块索引 1块标识丨版本号Il数据块服务器信息_s3code{indx; // chunkid; version; savetime s3codeargm[M];编码数据块索引 //块标识 //版本号 ;//编码开始时间//编码组记录uint32_t uint64_t uint32_t void*} s3codearg;typedef struct uint32_t uint64_t uint32_t uint32_t s3codearg} s3code;编解码参数(M,N)由元数据服务器控制,编解码客户端和块数据存储节点向元数据管理节点注册时,元数据管理节点返回编解码参数。
4. 3块数据存储节点模块编码方法块数据存储节点收到元数据管理节点的块编码任务后,产生一个编解码任务加入到工作队列中。工作任务调用块复制流程(从不同块数据存储节点之间复制数据块),把元数据管理节点指示的分组中的M个数据块复制到本地,以每个块为矩阵的一行,构造成一个M行的矩阵,执行编码任务,产生冗余数据块。编解码参数(M,N)为块数据存储节点向元数据管理节点注册时返回。
块数据存储节点编解码流程如附图5所示1)元数据管理节点向块数据存储节点发送编码请求;2)块数据存储节点从任意M个块数据存储节点复制分组中的M个数据块;3)块数据存储节点编码M个数据块得到目标数据块并保存;4)块数据存储节点删除复制过来的M个数据块;5)块数据存储节点向元数据管理节点发送编码成功消息。
4.4块数据存储节点模块解码方法块数据存储节点收到元数据管理节点的块解码任务后,产生一个解码任务加入到工作队列中。工作任务调用块复制流程(从不同块数据存储节点之间复制数据块),把元数据管理节点指示的分组中的M个数据块复制到本地,以每个块为矩阵的一行,构造成一个M行的矩阵,执行解码任务,产生原始数据块。编解码参数(M,N)为块数据存储节点向元数据管理节点注册时返回。
块数据存储节点解码流程如附图5所示1)元数据管理节点向块数据存储节点发送解码请求;2)块数据存储节点从任意M个块数据存储节点复制分组中的M个数据块;3)块数据存储节点解码M个数据块得到目标数据块并保存;4)块数据存储节点删除复制过来的M个数据块;块数据存储节点向元数据管理节点发送解码成功消息。
权利要求
1.一种应用于分布式存储系统的超安存编解码方法,所述其特征在于包括 配置编解码参数(M,N),其中M为原始数据块数目,N为RS编码后数据块数目; 客户端写数据时将文件进行顺序分组,每组为X字节大小,X为任意正整数,再对每个组进行顺序分块成M块,每块为连续X/M字节的大小;对于每一个分组,客户端把该分组的M个数据块存到M个不同的块数据服务器,元数据服务器记录该分组的块存储信息; 客户端读数据时,当目标块数据服务器无法访问时,客户端从分组内的任意其余M台可访问的数据块服务器读取数据,并通过RS解码得到目标数据; 块数据服务器收到元数据服务器的编解码任务时,把元数据管理节点指示的分组中的M个数据块复制到本地,以每个块为矩阵的一行,构造成一个M行的矩阵,并根据块索引计算出当前需编解码的数据块在分组中所在的位置,如果小于等于M,则执行RS编码任务,产生冗余数据块;如果大于M小于等于N,则执行RS解码任务,产生原始数据块。
2.如权利要求I所述的应用于分布式存储系统的超安存编解码方法,其特征在于,元数据管理节点周期性的检查各个文件,当发现文件的某个块为空或者有效块数为O时,产生一个编解码任务,调度一台块数据存储节点执行编解码任务,恢复这个块的有效数据。
3.如权利要求I所述的应用于分布式存储系统的超安存编解码方法,其特征在于,编解码参数(M,N)由元数据服务器控制,客户端和块数据存储节点向元数据管理节点注册时,元数据管理节点返回编解码参数。
全文摘要
本发明公开一种应用于分布式存储系统的超安存编解码方法,该方法将RS算法融入分布式存储系统,解决一般云存储支撑方法采用的简单复制备份方法所造成的磁盘空间的浪费问题,使大规模数据云存储解决方案在拥有超高性能的前提下,提高磁盘的利用率,保障数据的安全性,降低系统总能耗,节约成本。按照本发明的超安存编解码方法,以参数(M,N)配置系统,则系统中任意不大于N-M台块数据存储节点宕机,均可根据剩余节点解码出原数据,充分保证数据的安全性,元数据服务器能够不断的检测数据块的有效情况,对无效的数据块能够自动恢复原始数据块,又同时以比较小的冗余代价,降低了成本。
文档编号H04L29/08GK102932331SQ20121037158
公开日2013年2月13日 申请日期2012年9月29日 优先权日2012年9月29日
发明者张真, 刘志明, 王义飞, 赵庆福, 蒋文佼 申请人:南京云创存储科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1