著录项信息
专利名称 | 一种实现高效安全存储的系统和方法 |
申请号 | CN200910078364.0 | 申请日期 | 2009-02-26 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2009-07-22 | 公开/公告号 | CN101488104 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F11/14 | IPC分类号 | G;0;6;F;1;1;/;1;4查看分类表>
|
申请人 | 北京世纪互联宽带数据中心有限公司 | 申请人地址 | 北京市朝阳区酒仙桥东路1号M5楼三层
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京世纪互联宽带数据中心有限公司 | 当前权利人 | 北京世纪互联宽带数据中心有限公司 |
发明人 | 蒋建平;杨耀敏 |
代理机构 | 中国国际贸易促进委员会专利商标事务所 | 代理人 | 李玲 |
摘要
本发明公开了一种实现高效安全存储的系统和方法,包括:设置存储服务器、协议服务器、编码服务器、解码服务器和元数据服务器;写操作时,协议服务器将待写原始数据写入到存储服务器,并同时指示编码服务器对待写数据进行编码,编码服务器对数据进行编码生成冗余数据,并分发到指定存储服务器,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;读操作时,协议服务器访问元数据服务器,获取待读原始数据的存储位置,从数据的存储位置中获取数据,组合成文件数据;在原始数据无法正常读取时,访问元数据服务器,获取冗余数据的存储位置,将冗余数据读入解码服务器。通过本发明可以有效提高数据存储的效率和可靠性。
1.一种实现高效安全存储的系统,其特征在于,包括:
存储服务器,用于存储原始数据和冗余数据;
元数据服务器,用于保存所有文件数据的基本信息;
协议服务器,在收到写操作请求时,访问元数据服务器获取存储位置信息,将待写的原始数据分发到存储服务器,并同时指示编码服务器对所述待写原始数据进行编码以及将编码生成的冗余数据分发到指定的存储服务器,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;在收到读操作请求时,访问元数据服务器,从文件数据的基本信息中获取待读原始数据的存储位置,从数据的存储位置中获取数据,组合成文件数据;如果有原始数据无法正常读取,访问元数据服务器,从文件数据的基本信息中获取冗余数据的存储位置,将冗余数据读入解码服务器;
编码服务器,对数据进行编码生成冗余数据,并分发到指定存储服务器;
解码服务器,对冗余数据进行解码恢复为原始数据。
2.根据权利要求1所述的系统,其特征在于,该系统还包括:存储缓存Cache,用于缓存尚未编码的文件;
协议服务器还用于在将待写原始数据写入到存储服务器的同时将待写原始数据写入到存储Cache,指示编码服务器对存储Cache中的待写入数据进行编码。
3.根据权利要求2所述的系统,其特征在于,所述编码服务器还用于在数据编码和分发完成后,才从存储Cache中删除存放的原始数据;
协议服务器在执行读操作时,若根据文件数据的基本信息判断出存储Cache中有所述待读的原始数据,则直接从存储Cache中读取。
4.根据权利要求2所述的系统,其特征在于,所述编码服务器还用于将存储Cache中的原始数据首先分片,由n个片段构成片段组,使用n个间隔等于片段长度的指针指向片段组内的片段起始位置,对指针当前所指位置的字节进行编码,然后,后移指针到下一个字节位置,指针指向新的字节,重复上述过程,直至片段组的原始数据全部编码完成,最后将编码生成的冗余片段分发存储,实现对一个片段组的编码;重复上述过程,直至全部原始数据编码和分发完成。
5.根据权利要求1所述的系统,其特征在于,该系统还包括:应用服务器,用于接收待读写的原始数据,向协议服务器发起读写数据的操作请求。
6.根据权利要求1所述的系统,其特征在于,所述编码服务器,在编码时,对矩阵中每行的数据进行按位异或,形成第一组冗余码,然后对矩阵中每行的数据进行数量不等的循环移位,形成新的矩阵,并进行按位异或计算,从而形成第二组冗余码,重复上述过程直到编码完成;
或者在冗余数据个数为1的情况下,按照Parity算法或者Reed-Solomon算法进行编码;在冗余数据个数大于1的情况下,采用Reed-Solomon算法进行编码。
7.根据权利要求1所述的系统,其特征在于,所述解码服务器进行解码处理时确保数据的I/O效率受到的影响率低于1%。
8.根据权利要求1所述的系统,其特征在于,存储服务器的数量为多个,并且分散设置在网络中;
所述编码服务器和解码服务器为各自独立的系统。
9.根据权利要求1所述的系统,其特征在于,所述元数据服务器记录和管理的基本信息包括:原始数据个数n与冗余数据个数m的比值、原始数据存放的存储服务器、冗余数据存放的存储服务器、以及文件数据的状态。
10.根据权利要求5所述的系统,其特征在于,所述协议服务器,用于通过实现NFS协议、CIFS协议向应用服务器提供通用文件系统;通过实现iSCSI协议,向应用服务器提供虚盘功能;通过实现标准的SOAP、REST协议,提供基于HTTP的标准文件访问。
11.根据权利要求1所述的系统,其特征在于,所述编码服务器,还用于在编码开始前,定期访问元数据服务器,获取需要被编码的文件;编码服务器更新文件数据在元数据服务器中的状态为等待编码分发状态,并同时确认编码方式。
12.根据权利要求1所述的系统,其特征在于,在所述将待写的原始数据分发到存储服务器的同时,所述编码服务器在后台自动执行异步工作,对所述待写原始数据进行编码,把编码的冗余数据块分发到相应的存储服务器。
13.根据权利要求1所述的系统,其特征在于,所述各个存储服务器独立管理其存储内容。
14.一种实现高效安全存储的方法,其特征在于,在存储系统中设置存储服务器、协议服务器、编码服务器、解码服务器和元数据服务器,并包括以下步骤:
在收到写操作请求时,协议服务器访问元数据服务器获取存储位置信息,将待写原始数据分发到存储服务器,并同时指示编码服务器对所述待写数据进行编码,编码服务器对数据进行编码生成冗余数据,并分发到指定存储服务器,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;
在收到读操作请求时,协议服务器访问元数据服务器,从元数据服务器保存的文件数据的基本信息中获取待读原始数据的存储位置,从数据的存储位置中获取数据,组合成文件数据;
在原始数据无法正常读取时,访问元数据服务器,从元数据服务器保存的文件数据的基本信息中获取冗余数据的存储位置,将冗余数据读入解码服务器。
15.根据权利要求14所述的方法,其特征在于,所述存储系统中还设置有存储缓存Cache;
所述协议服务器将待写原始数据写入到存储服务器时,还同时将所述原始数据写入到存储Cache中;
所述编码服务器对所述原始数据进行编码步骤中编码服务器对存储Cache中的原始数据进行编码。
16.根据权利要求15所述的方法,其特征在于,所述编码服务器对数据进行编码的过程还包括:
编码服务器访问元数据服务器,确认当前需要被编码的文件数据;
更新元数据服务器中文件数据的状态为等待编码分发状态,并同时确认编码方式;
读取协议服务器写入到存储Cache中的文件数据,依次进行编码;
将编码的冗余数据块分发并写入到存储服务器;
完成编码和分发后,更新元数据服务器中的文件数据的状态为已编码分发状态;
锁定文件,如果没有其它的访问,删除存储Cache中的文件数据。
17.根据权利要求16所述的方法,其特征在于,该方法进一步包括存储数据删除过程:
所述存储系统发起删除文件操作请求;
协议服务器访问元数据服务器,确认能否删除,如果不能删除,则直接返回,如果能够被删除,则继续;
内部流程是否正在处理,如果是,则进入删除列表,等待后台调度;如果否,则继续;
如果存储Cache中有未删除数据,则删除存储Cache内的数据;
如果存储服务器中有未删除的原始数据,则删除原始数据块;
如果存储服务器中有未删除的冗余数据,则删除冗余数据块;
更新元数据服务器,如果完全成功,则从元数据服务器中删除文件记录;如果出错,则记录错误信息,并将该文件数据状态转变为僵化状态。
18.根据权利要求15所述的方法,其特征在于,协议服务器在读操作过程中,若根据文件数据的基本信息判断出存储Cache中有所述待读的原始数据,则直接从存储Cache中读取。
19.根据权利要求15所述的方法,其特征在于,协议服务器在读操作过程中,若根据文件数据的基本信息判断出存储Cache中没有所述待读的原始数据,则包括:
步骤1006,判断是否所有存放原始数据块的存储服务器都可访问,若是,则进入步骤
1007;否则,进入步骤1010和步骤1011的处理流程;
步骤1007,从存放原始数据块的存储服务器读取所有原始数据块;
步骤1008,判断是否读取成功,若是,则直接进入步骤1017;否则,进入步骤1009;
步骤1009,从存放冗余数据块的存储服务器读取适合数量的冗余数据块,进入步骤
1012;
步骤1010,从存放冗余数据块的存储服务器读取适合数量的冗余数据块,进入步骤
1012;
步骤1011,读取可以获得的原始数据块,进入步骤1012;
其中步骤1010和步骤1011同时进行;
步骤1012,协议服务器搜集恢复原始数据所需数据块量;
步骤1013,判断是否成功搜集,若是,进入步骤1014;否则,进入步骤1016;
步骤1014,把确定位置的所有数据块传送给相应的解码服务器;
步骤1015,解码服务器将恢复的原始数据返回给协议服务器,进入步骤1017;
步骤1016,报告错误,进入步骤1018;
步骤1017,协议服务器将获得的数据返回给应用服务器,进入步骤1018;
步骤1018,完成数据块的读操作。
20.根据权利要求15所述的方法,其特征在于,所述将所述原始数据写入到存储Cache中后进一步包括:将所述原始数据的位置信息保存在元数据服务器中;
如果所述写操作过程失败,则进一步包括:
所述存储系统重新发送写操作请求;
协议服务器访问元数据服务器,获取待写原始数据在存储Cache中的存储位置信息;
将待写的原始数据写入到存储服务器,并同时指示编码服务器对所述待写原始数据进行编码,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中。
21.根据权利要求15所述的方法,其特征在于,所述编码过程包括:将存储Cache中的原始数据首先分片,由n个片段构成片段组,使用n个间隔等于片段长度的指针指向片段组内的片段起始位置,对指针当前所指位置的字节进行编码,然后,后移指针到下一个字节位置,指针指向新的字节,重复上述过程,直至片段组的原始数据全部编码完成,最后将编码生成的冗余片段分发存储,实现对一个片段组的编码;重复上述过程,直至全部原始数据编码和分发完成。
22.根据权利要求14所述的方法,其特征在于,在编码时,对矩阵中每行的数据进行按位异或,形成第一组冗余码,然后对矩阵中每行的数据进行数量不等的循环移位,形成新的矩阵,并进行按位异或计算,从而形成第二组冗余码,重复上述过程直到编码完成;
或者在冗余数据个数为1的情况下,按照Parity算法或者Reed-Solomon算法进行编码;在冗余数据个数大于1的情况下,采用Reed-Solomon算法进行编码。
23.根据权利要求14所述的方法,其特征在于,将存储服务器的数量设置为多个,并且分散设置在网络中;
所述编码过程和解码过程分别由各自独立的编码服务器和解码服务器执行。
24.根据权利要求14所述的方法,其特征在于,所述写入过程中进一步包括:将所述原始数据和冗余数据以数据块的形式写入到存储服务器中。
25.根据权利要求14所述的方法,其特征在于,在存储系统中还设置有应用服务器,应用服务器接收待读写的原始数据,向协议服务器发起所述读操作请求和写操作请求。
26.根据权利要求25所述的方法,其特征在于,所述协议服务器通过实现NFS协议、CIFS协议向应用服务器提供通用文件系统;通过实现iSCSI协议,向应用服务器提供虚盘功能;通过实现标准的SOAP、REST协议,提供基于HTTP的标准文件访问。
27.根据权利要求14所述的方法,其特征在于,在所述编码开始前还包括:编码服务器定期访问元数据服务器,获取需要被编码的文件;编码服务器更新文件数据在元数据服务器中的状态为等待编码分发状态,并同时确认编码方式。
28.根据权利要求14所述的方法,其特征在于,在所述协议服务器将待写的原始数据写入到存储服务器的同时,通过异步方式执行所述编码步骤。
29.根据权利要求14所述的方法,其特征在于,所述各个存储服务器独立管理其存储内容。
30.根据权利要求14所述的方法,其特征在于,所述解码服务器进行解码处理时确保数据的I/O效率受到的影响率低于1%。
31.根据权利要求15所述的方法,其特征在于,当数据能够存放在本地存储Cache,但原始数据块的分发和冗余数据块的分发由于全部或部分的失败而不能建立分布式存储的时候,存储Cache中的数据会被锁定,直到下次调度,成功分发后才会从存储Cache中删除。
32.根据权利要求31所述的方法,其特征在于,所述下次调度的分发过程包括:
步骤1101,协议服务器通过定时处理服务功能发出重新发送命令;
步骤1102,协议服务器访问元数据服务器,获取存储节点和存储服务器的位置信息;
步骤1103,协议服务器开始接收原始数据;
步骤1104,通知编码服务器,更新元数据服务器中对应文件数据的状态,调整为正在编码状态;
步骤1105,编码服务器开始编码;
步骤1106,编码服务器分发冗余数据块;
步骤1107,判断是否全部成功分发,如果是,则直接进入步骤1111,否则,进入步骤
1108;
步骤1108,访问元数据服务器,重新获取可接收分发数据的存储节点和存储服务器的位置信息,分发未成功的冗余数据块;
步骤1109,判断是否获取到可接收分发数据的存储节点和存储服务器的位置信息,若是则返回步骤1106;否则,进入步骤1110;
其中,若未获取可接收分发数据的存储节点和存储服务器的位置信息,则说明所有的供冗余数据块的存储服务器处于故障态,原始数据块分发失效;
步骤1110,系统报警;
步骤1111,编码服务器更新元数据服务器,并锁定存储Cache中的文件;
步骤1112,判断所有成功分发的数据块是否足够恢复原文件,若是,则进入步骤1113,否则进入步骤1114;
步骤1113,编码服务器删除存储Cache中的数据;
步骤1114,编码服务器保留存储Cache中的数据,并通知协议服务器;
与步骤1104-1114异步进行如下步骤1115-1121:
步骤1115,分发原始数据块到存储服务器;
步骤1116,判断是否全部成功分发,若是,则直接进入步骤1120,否则,进入步骤1117;
步骤1117,访问元数据服务器,重新获取可接收分发数据的存储节点和存储服务器的位置信息,分发未成功的原始数据块;
其中,在没有存储服务器可以选择的情况下,可以在一个存储服务器内存放多个原始数据块;
步骤1118,判断是否获取到可接收分发数据的存储节点和存储服务器的位置信息,若是,则返回步骤1115;否则,进入步骤1119;
步骤1119,系统报警;
步骤1120,更新元数据服务器;
步骤1121,向应用服务器返回写成功信息。
一种实现高效安全存储的系统和方法\n技术领域\n[0001] 本发明涉及数据安全存储技术领域,特别是指一种实现高效安全存储的系统和方法。\n背景技术\n[0002] 在数据存储领域,访问效率、存储效率、可靠性、安全性、平台兼容性、可拓展性以及易管理性是存储系统设计的几个主要方向,其直接关系到用户的直接成本、维护成本、升级成本以及设备的保值性等。\n[0003] 数据存储的安全性、有效性是大型企业、互联网服务提供商所头疼的事情,特别是在今天在线备份、在线存储、网络硬盘、云计算以及云存储等服务提供商风起云涌之际。\n[0004] 过去30多年来,存储方式经历了以下几个典型的时期:直连式存储(DAS)时期,独立冗余磁盘阵列(RAID)+DAS时期,网络附属存储(NAS)和存储区域网络(SAN)、集群文件系统。如今,在存储领域有两个热门,分别是集群文件系统和基于异或算法为基础的编码存储系统。集群文件系统逐步成为应用的主流技术之一,多家国外著名公司已独立开发出不同的集群文件系统,国内最近几年也先后出现了蓝鲸集群文件系统和龙存集群文件系统。\n[0005] 作为流行的、也最有潜力的集群文件系统在很大程度上解决了原有存储系统的局限性,其主要特征表现为:系统具有更大的伸缩性,容量可以动态扩展;较高的数据处理能力(IOPS);统一存储;可管理性;高可用性,避免单节点故障;独立于硬件系统,能够包容大部分遗留的存储设备;与各类应用兼容。\n[0006] 集群文件系统对于传统存储方式来说,是一场变革,也是各大企业关注的主要技术之一。但对于以存储为特征的运营商和服务商来说,集群文件系统依然会带来成本、安全、易用性的压力,其主要缺点是:集群文件系统都是以多份拷贝为特征的数据冗余机制,存储效率低;集群文件系统会占用更多的带宽,大容量高密度数据应用环境对于带宽的占用比较敏感;集群文件系统一般只适合在局域网内应用,跨广域网应用是个事实难题;网络传输的安全性难以保障,异地文件的安全管理也是成为难题,特别是敏感的数据。\n[0007] 为解决集群文件系统的这些不足,对数据的处理必须借助于其他技术。\n[0008] 在建立冗余编码体系中,需要解决的问题包括:(1)计算必然会带来时间的开销,而时间上的延迟会一定程度上影响系统的处理能力;(2)编码后的数据不能局限于唯一的通道进行访问,比如RAID卡、NAS,均高度依赖数据读写头,访问通道会带来单节点故障;\n(3)编码后的数据在存储上具有一定的拓扑规律,数据访问要求具有很强的可预期性,才能保证数据能够快速读取;(4)存储体系要求具有很强的扩展性,可以按需进行配置;(5)编码体系必须在存储、计算、部署等方面具有可分离的特点,即以上元素不能耦合在一起;(6)数据的处理顺序与物理存储顺序具有一致性。\n[0009] 目前,在通信与存储领域中,常用的冗余编码算法有:错误检查和纠正(ECC)算法、Parity算法、Reed-Solomon算法、BCH算法、多维二进制编码、EVENODD阵列码、RDP阵列码、Liberation码、B-Code、X-Code、DH1/DH2混合码、HDD1/HDD2混合码、以及其它数学方式的容错编码等。\n[0010] 下面对Parity算法和Reed-Solomon算法的原理进行说明。\n[0011] Parity算法本质是对对应位置数据进行异或计算,通过存储原始数据和异或结果来达到数据冗余的目的,籍此提高存储的可靠性。表1是异或算法的基本原理。\n[0012] \n A值 B值 异或结果\n 0 0 0\n 0 1 1\n 1 0 1\n 1 1 0\n[0013] 表1\n[0014] 参见图1所示,附图1是典型的RAID3体系结构,说明了一个4+1结构模型的冗余存储方式,原始数据序列(A0、A1、A2、A3、B0、B1、B2、B3、C0、C1、C2、C3、D0、D1、D2、D3)被分成4组(A0、A1、A2、A3)、(B0、B1、B2、B3)、(C0、C1、C2、C3)和(D0、D1、D2、D3),分别进行异或运算,得到冗余数据A、B、C和D。具体计算如下:\n[0015] \n[0016] \n[0017] \n[0018] \n[0019] 以上计算和存储的过程控制都由RAID卡的芯片控制,其中,通过计算和存储,数据就如附图1所示,分散存储在RAID中的5个磁盘上,其中,前4个存储原始数据,最后一个存储冗余数据。这样,(A、B、C、D)形成一组冗余熵,当原始数据中任何一个字节出现问题时,都可以通过冗余熵恢复数据,此即为RAID3工作的原理。\n[0020] 比如,当A2被破坏时,则可以通过对应的(A0、A1、A3、A)计算出原始数据中的A2:\n[0021] \n[0022] 相应的,附图1中每一行中,任何1个原始数据出错,都可以通过剩余3个原始数据和冗余数据进行恢复,这样就可以确保在读取的时候,原始数据都能够进行恢复。但如果同一行中,两个数据(包括冗余数据)同时不可读或者出错,比如,C0和C2同时不可读,则根据(C1,C3,C)只能计算出 的值。\n[0023] \n[0024] 那么,就不能确定C0和C2分别是什么值。由此可以看出,Parity算法不能纠正一组中的多个错误,这是由Parity算法的的冗余性所决定的。因为从冗余数据(A、B、C、D)计算方法分析,每个原始数据所代表的信息只在冗余数据中出现过一次,比如,C代表了(C0、C1、C2、C3)的冗余熵,恢复其中任意一个数据,都需要借助其它3个数据。所以,C的含义是,(C0、C1、C2、C3)中的任意一个丢失,都能够恢复数据,但不能同时恢复多个。\n[0025] 下面分析Parity算法的价值:\n[0026] 不考虑其它因素的情况下,分析比较数据存储后的可靠性和独立磁盘存储的可靠性。假设所有的磁盘都有相同的可靠性R,则独立磁盘存储的可靠性等同于磁盘的可靠性R1file:\n[0027] R1file=R\n[0028] 按照附图1所示的案例,存储的可靠性的描述为:任意5个磁盘中,只要不少于4个磁盘的数据是可靠的,则数据是可访问的。由此计算出存储的可靠性R2file为:\n[0029] \n[0030] 假设R=99.9%,则代入上面的式子,可以得出:\n[0031] R1file=99.9%\n[0032] \n[0033] 从以上两个计算结果,不难看出,系统的可靠性提高了2个9,相当于可靠性提高了100倍,由此可以得出,Parity算法是一种能够极大提高数据可靠性的一个算法。\n[0034] 结合上述描述,Parity算法具有如下几个特点:\n[0035] 顺序处理原始数据;\n[0036] 顺序存储原始数据和冗余数据;\n[0037] 存储中有一份完整的原始数据,但分散存储;\n[0038] 读取数据具有可预期特点,即任意n个节点构成的系统,只要(n-1)个节点可读,则能够恢复原始数据;\n[0039] 能够大幅度提高数据存储的可靠性。\n[0040] Reed-Solomon算法的原理:\n[0041] 如果把附图1中的每个磁盘当作一个节点,那么,Parity算法很好的解决了单节点失效带来的问题,很大程度上提高了系统的可靠性。当数据越来越重要,数据量越来越大的情况下,解决单节点失效依然不能满足对数据的安全性的要求,这就需要能够同时容许2个甚至更多节点失效的情况下,数据依然安全可靠的要求,这就对存储系统的可靠性提出了更高的要求,Reed-Solomon算法是其中的一个思路,从数学上论证了保障可以多节点失效做法,当然,还有其它很多算法,比如多维二进制编码等。\n[0042] RAID6是解决两个节点故障的新型RAID,不同的厂家使用了不同的算法实现,比如,Intel的P+Q实现、NetApp的RAID-DP实现、HP的RAID5-DP实现、Intel的Dual-XOR\n算法实现、以及其他算法,如X-Code编码、ZZS编码、Park编码等。但从理论上来讲,这些方法都借鉴了Reed-Solomon算法或多维二进制编码算法,下面简要介绍Reed-Solomon算法。\n[0043] 参见图2所示,附图2是Reed-Solomon算法的示意图,每组数据经过编码后,生成多个冗余码,下面演示算法的编码过程和解码过程:\n[0044] 如附图3所示,将一组n个数据当作一个列向量D;\n[0045] 如附图4所示,定义一个(n+m)×n的分布矩阵B,矩阵B的前n行为一个单位矩\n阵;\n[0046] 如附图5所示,将分布矩阵B与数组矩阵D进行矩阵相乘运算,得到一个(n+m)×1的列矩阵,该矩阵由两部分组成,原始数据构成的矩阵B和编码的矩阵C,分别是n列矩阵和m列矩阵;\n[0047] 如附图6所示,对于生成的矩阵,每一个原始数据和冗余数据与一行分布矩阵对应,在算术上形成一一对应的关系。\n[0048] 通过上述步骤,把(D1、D2、D3、D4、D5)构成的数据经过打散和重新编码,分散存储在\n8个不同的位置,即n∶m=5∶3的关系,最大允许任意3个节点同时出现问题。下面进\n一步演示说明如何恢复:\n[0049] 如附图7所示,假设有3个节点出现问题,分别是(D1、D4、C2);\n[0050] 从分散存储的节点上读取幸存数据,即(D2、D3、D5、C1、C3),同时,将分布矩阵中对应的行单独拿出来,组建成一个新的矩阵B′;\n[0051] 如果矩阵B′是可逆矩阵,则可求得其逆矩阵B′-1,从而可以从(D2、D3、D5、C1、C3)计算得到(D1、D2、D3、D4、D5),实现了存储的冗余。\n[0052] 以上过程说明了构造n=5,m=3的Reed-Solomon算法的过程,从上述过程可以看到,该算法的核心是如何构造分布式矩阵B,使之满足任意n行能够组成一个可逆矩阵,这就变成了一个纯数学问题,根据线性代数的一些性质分析,理论上分布矩阵B只要满足范德蒙德矩阵或者Cauchy矩阵,就能够对数据实现编码和解码。\n[0053] 下面分析Reed-Solomon算法的价值:\n[0054] 与分析Parity算法相同,同样不考虑其他因素的情况下,分析比较数据存储后的可靠性和独立磁盘存储的可靠性,依然假设所有的磁盘都有相同的可靠性R,则独立磁盘存储的可靠性等同于磁盘的可靠性R1file与Parity算法中计算相同。\n[0055] 按照上述案例中n∶m=5∶3的情况来计算Reed-Solomon存储系统的可靠性\nR3file。\n[0056] 对于系统的可靠性,可以描述为:任意大于等于5个存储节点有效,则数据能够可靠恢复,由此建立如下函数关系:\n[0057] \n[0058] 同样假设R=99.9%,则代入上面的式子,可以得出:\n[0059] R3file=99.999999993%\n[0060] 从这个结果可以看出,5∶3体系结构下,存储的冗余数据量是原始数据的m/n,即\n60%的情况下,数据的可靠性由3个9猛增至10个9,提高了1000万倍。\n[0061] 再分析一种情况,如果采用传统的多拷贝方式,如果需要达到这样的可靠程度,如果采用传统的备份方式(包含集群文件系统采用的模式),需要多少份数数据才能接近这个可靠性。\n[0062] 如果是x份拷贝,则系统的可靠性描述为:任何一个拷贝能够被访问,则数据是可靠的,那么,可以得出如下的可靠性R4file:\n[0063] \n[0064] 将R=99.9%代入,x分别用2、3和4代入,得到如下可靠性值:\n[0065] x=2:R4file=99.9999% 6个9\n[0066] x=3:R4file=99.9999999% 9个9\n[0067] x=4:R4file=99.9999999999% 12个9\n[0068] 根据上述计算结果,在同等设备条件下,Reed-Solomon算法只用了0.6倍的冗余,就创造了比3份拷贝(2份冗余)还高10倍的可靠性,在大规模存储环境中,这是一个可观的效用。\n[0069] Reed-Solomon算法的几个特征:\n[0070] 原始数据块和冗余数据块可以是任意的n∶m关系(n≥1,m≥1);\n[0071] 对于由(n+m)个数据块组成的数据内容,容许任意m个数据块的丢失,依然能够恢复原始数据;\n[0072] 支持顺序编码;\n[0073] 顺序处理原始数据;\n[0074] 顺序存储原始数据和冗余数据;\n[0075] 存储中有一份完整的原始数据,但分散存储;\n[0076] 读取数据具有可预期特点,即任意n+m个存储节点构成的系统,只要n个节点可读,则能够恢复原始数据;\n[0077] 能够大幅度提高数据存储的可靠性。\n[0078] Parity算法已经广泛应用于RAID等存储系统,其重要的特点之一是用异或算法,冗余编码不会导致溢位,且算法简单,容易在片上芯片系统SOC上实现;而Reed-Solomon算法至今已有几十年的时间,但其算法需要消耗大量的计算,由于矩阵计算及其逆运算需要花费大量的时间,对于以存储为特征的应用来说,它会降低I/O的效率,不容易在SOC系统上实现。\n发明内容\n[0079] 有鉴于此,本发明的目的在于提出一种实现高效安全存储的系统和方法,提高数据存储的效率和可靠性。\n[0080] 基于上述目的本发明提供的实现高效安全存储的系统,包括:\n[0081] 存储服务器,用于存储原始数据和冗余数据;\n[0082] 元数据服务器,用于保存所有文件数据的基本信息;\n[0083] 协议服务器,在收到写操作请求时,将待写的原始数据写入到存储服务器,并同时指示编码服务器对所述待写原始数据进行编码,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;在收到读操作请求时,访问元数据服务器,从文件数据的基本信息中获取待读原始数据的存储位置,从数据的存储位置中获取数据,组合成文件数据;如果有原始数据无法正常读取,访问元数据服务器,从文件数据的基本信息中获取冗余数据的存储位置,将冗余数据读入解码服务器;\n[0084] 编码服务器,对数据进行编码生成冗余数据,并分发到指定存储服务器;\n[0085] 解码服务器,对冗余数据进行解码恢复为原始数据。\n[0086] 可选的,该系统还包括:存储缓存(Cache),用于缓存尚未编码的文件;\n[0087] 协议服务器还用于在将待写原始数据写入到存储服务器的同时将待数据写入到存储Cache,指示编码服务器对存储Cache中的待写入数据进行编码。\n[0088] 可选的,该系统所述编码服务器还用于在数据编码和分发完成后,才从存储Cache中删除存放的原始数据;\n[0089] 协议服务器在执行读操作时,若根据文件数据的基本信息判断出存储Cache中有所述待读的原始数据,则直接从存储Cache中读取。\n[0090] 可选的,该系统所述编码服务器还用于将存储Cache中的原始数据首先分片,由n个片段构成片段组,使用n个间隔等于片段长度的指针指向片段组内的片段起始位置,对指针当前所指位置的字节进行编码,然后,后移指针到下一个字节位置,指针指向新的字节,重复上述过程,直至片段组的原始数据全部编码完成,最后将编码生成的冗余片段分发存储,实现对一个片段组的编码;重复上述过程,直至全部原始数据编码和分发完成。。\n[0091] 可选的,该系统还包括:应用服务器,用于接收待读写的原始数据,向协议服务器发起读写数据的操作请求。\n[0092] 可选的,该系统所述编码服务器,在编码时,对矩阵中每行的数据进行按位异或,形成第一组冗余码,然后对矩阵中每行的数据进行数量不等的循环移位,形成新的矩阵,并进行按位异或计算,从而形成第二组冗余码,重复上述过程直到编码完成;\n[0093] 或者在冗余数据个数为1的情况下,按照Parity算法或者Reed-Solomon算法进行编码;在冗余数据个数大于1的情况下,采用Reed-Solomon算法进行编码。\n[0094] 可选的,该系统所述解码服务器进行解码处理时确保数据的I/O效率受到的影响率低于1%。\n[0095] 可选的,该系统存储服务器的数量为多个,并且分散设置在网络中;\n[0096] 所述编码服务器和解码服务器为各自独立的系统。\n[0097] 可选的,该系统所述元数据服务器记录和管理的基本信息包括:原始数据个数n与冗余数据个数m的比值、原始数据存放的存储服务器、冗余数据存放的存储服务器、以及文件数据的状态。\n[0098] 基于上述目的,本发明还提供了一种实现高效安全存储的方法,在存储系统中设置存储服务器、协议服务器、编码服务器、解码服务器和元数据服务器,并包括以下步骤:\n[0099] 在收到写操作请求时,协议服务器将待写原始数据写入到存储服务器,并同时指示编码服务器对所述待写数据进行编码,编码服务器对数据进行编码生成冗余数据,并分发到指定存储服务器,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;\n[0100] 在收到读操作请求时,协议服务器访问元数据服务器,从元数据服务器保存的文件数据的基本信息中获取待读原始数据的存储位置,从数据的存储位置中获取数据,组合成文件数据;\n[0101] 在原始数据无法正常读取时,访问元数据服务器,从元数据服务器保存的文件数据的基本信息中获取冗余数据的存储位置,将冗余数据读入解码服务器。\n[0102] 可选的,该方法在所述存储系统中还设置有存储缓存Cache;\n[0103] 所述协议服务器将待写原始数据写入到存储服务器时,还同时将所述原始数据写入到存储Cache中;\n[0104] 所述编码服务器对所述原始数据进行编码步骤中编码服务器对存储Cache中的原始数据进行编码。\n[0105] 可选的,该方法在所述编码服务器对数据进行编码的过程中还包括:\n[0106] 编码服务器访问元数据服务器,确认当前需要被编码的文件数据;\n[0107] 更新元数据服务器中文件数据的状态为等待编码分发状态,并同时确认编码方式;\n[0108] 读取协议服务器写入到存储Cache中的文件数据,依次进行编码;\n[0109] 将编码的冗余数据块分发并写入到存储服务器;\n[0110] 完成编码和分发后,更新元数据服务器中的文件数据的状态为已编码分发状态;\n[0111] 锁定文件,如果没有其它的访问,删除存储Cache中的文件数据。\n[0112] 可选的,该方法进一步包括存储数据删除过程:\n[0113] 所述存储系统发起删除文件操作请求;\n[0114] 协议服务器访问元数据服务器,确认能否删除,如果不能删除,则直接返回,如果能够被删除,则继续;\n[0115] 内部流程是否正在处理,如果是,则进入删除列表,等待后台调度;如果否,则继续;\n[0116] 如果存储Cache中有未删除数据,则删除存储Cache内的数据;\n[0117] 如果存储服务器中有未删除的原始数据,则删除原始数据块;\n[0118] 如果存储服务器中有未删除的冗余数据,则删除冗余数据块;\n[0119] 更新元数据服务器,如果完全成功,则从元数据服务器中删除文件记录;如果出错,则记录错误信息,并将该文件数据状态转变为僵化状态。\n[0120] 可选的,该方法协议服务器在读操作过程中,若根据文件数据的基本信息判断出存储Cache中有所述待读的原始数据,则直接从存储Cache中读取。\n[0121] 可选的,该方法所述将所述原始数据写入到存储Cache中后进一步包括:将所述原始数据的位置信息保存在元数据服务器中;\n[0122] 如果所述写操作过程失败,则进一步包括:\n[0123] 所述存储系统重新发送写操作请求;\n[0124] 协议服务器访问元数据服务器,获取待写原始数据在存储Cache中的存储位置信息;将待写的原始数据写入到存储服务器,并同时指示编码服务器对所述待写原始数据进行编码,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中。\n[0125] 可选的,该方法所述编码过程包括:将存储Cache中的原始数据首先分片,由n个片段构成片段组,使用n个间隔等于片段长度的指针指向片段组内的片段起始位置,对指针当前所指位置的字节进行编码,然后,后移指针到下一个字节位置,指针指向新的字节,重复上述过程,直至片段组的原始数据全部编码完成,最后将编码生成的冗余片段分发存储,实现对一个片段组的编码;重复上述过程,直至全部原始数据编码和分发完成。。\n[0126] 可选的,该方法在编码时,对矩阵中每行的数据进行按位异或,形成第一组冗余码,然后对矩阵中每行的数据进行数量不等的循环移位,形成新的矩阵,并进行按位异或计算,从而形成第二组冗余码,重复上述过程直到编码完成;\n[0127] 或者在冗余数据个数为1的情况下,按照Parity算法或者Reed-Solomon算法进行编码;在冗余数据个数大于1的情况下,采用Reed-Solomon算法进行编码。\n[0128] 可选的,该方法将存储服务器的数量设置为多个,并且分散设置在网络中;\n[0129] 所述编码过程和解码过程分别由各自独立的编码服务器和解码服务器执行。\n[0130] 可选的,该方法所述写入过程中进一步包括:将所述原始数据和冗余数据以数据块的形式写入到存储服务器中。\n[0131] 从上面所述可以看出,本发明提供的实现高效安全存储的系统和方法,通过对存储系统的重新整合部署,对读写、编码、备份等过程进行优化,大幅提高了系统的存储效率,在同等冗余的基础上,系统的可靠性要远远高于传统的存储系统。并还具有如下优点:\n[0132] 解决了应用与编码计算耦合的问题,从而解决I/O受到计算制约的问题;\n[0133] 使得Reed-Solomon算法对存储系统访问的影响下降到最低,不高于一般情况的\n5%;\n[0134] 提高了存储的安全性,在网络传输和存储节点上均需要有很高的要求,即使遭到窃听、设备失窃,依然确保用户数据的安全性;\n[0135] 可以部署在包括局域网(LAN)、城域网(MAN)以及广域网(WAN)等不同的网络环境中;\n[0136] 支持弹性能力的部署,包括I/O、编码、解码以及网络传输速率。\n附图说明\n[0137] 图1为现有技术Parity算法示意图;\n[0138] 图2为现有技术Reed-Solomon编码示意图;\n[0139] 图3为现有技术原始数据分块示意图;\n[0140] 图4为现有技术编码的分布矩阵示意图;\n[0141] 图5为现有技术解码矩阵示意图;\n[0142] 图6为现有技术解码矩阵计算示意图;\n[0143] 图7为现有技术解码矩阵运算结果示意图;\n[0144] 图8为本发明实施例系统部署示意图;\n[0145] 图9为本发明实施例系统写数据流程示意图;\n[0146] 图10为本发明实施例数据读取过程流程示意图;\n[0147] 图11为本发明实施例数据重新分发流程示意图;\n[0148] 图12为本发明实施例删除流程示意图。\n具体实施方式\n[0149] 下面参照附图对本发明进行更全面的描述,其中说明本发明的示例性实施例。\n[0150] 为解决现有技术中存在的问题,本发明提出的实现高效安全存储的系统,主要包括以下部分:\n[0151] 存储服务器,用于存储原始数据和冗余数据;\n[0152] 元数据服务器,用于保存所有文件数据的基本信息;\n[0153] 协议服务器,在收到写操作请求时,将待写的原始数据写入到存储服务器,并同时指示编码服务器对所述待写原始数据进行编码,在写入完成后,将写入文件数据的基本信息保存在元数据服务器中;在收到读操作请求时,访问元数据服务器,从文件数据的基本信息中获取待读原始数据的存储位置,并从数据的存储位置中获取数据,组合成文件数据;如果有原始数据无法正常读取,访问元数据服务器,从文件数据的基本信息中获取冗余数据的存储位置,将冗余数据读入解码服务器;\n[0154] 编码服务器,用于对数据进行编码生成冗余数据,并分发到指定存储服务器;\n[0155] 解码服务器,用于对冗余数据进行解码恢复为原始数据。\n[0156] 在本发明中,引入了集群文件系统的元数据服务器,该服务器可对文件的属性、位置、算法、状态等进行管理,并对文件的访问进行有效的控制、统计和分析。元数据服务器属于信息集中地带,包括协同存储服务器、协议服务器、编码服务器、集群服务器、以及存储Cache的信息与流程。元数据服务器还可以控制原始数据块的分发策略和冗余数据块的分发策略,包括存储的均衡性控制、网络的均衡性控制、访问热点的控制、故障率排序的控制等。通过建立元数据服务器建立存储按需分配的策略,各个存储服务器不需要预先或预留划分存储容量。\n[0157] 较佳的,由于集中存储受I/O、单节点故障、部署等方面的制约,因此本发明中优选对存储服务器采用分散部署的方式,以便解决硬件依赖问题。\n[0158] 并且本发明较佳实施例中,对于原始数据块和冗余数据块在分发、存储、访问、恢复过程中,进行区别对待,确保原始数据块分散存储,而冗余数据块可以单独存放在局域网(LAN)内的存储服务器或者与原始数据无差别对待。\n[0159] 在本发明实现高效安全存储的方法中:\n[0160] 当数据需要写入的时候,原始数据不需要重新装配,可以直接写入到各个存储服务器;而冗余数据需要编码处理。\n[0161] 由于Parity算法和Reed-Solomon算法都需要大量计算,计算冗余数据块是一个需要消耗大量计算和时间的过程,从而延缓了数据的分发能力和响应速度,对于业务系统来说,数据的快速访问是其基本特征,所以耦合了编码过程的数据存储方式,不利于系统能力的发挥。为了数据的快速访问,本发明中增加了存储缓存(Cache)。\n[0162] 因此本发明的数据写操作流程包括:\n[0163] 1)数据需要写入时,由于原始数据不需要额外处理,直接写入到相应存储服务器;\n同时,还将原始数据写入到存储Cache上,其中优选将所述存储Cache放置在独立的局域网网段内。\n[0164] 写入过程中,可将原始数据和冗余数据以数据块的形式进行存储。\n[0165] 2)编码服务器在后台自动调度,将目标数据进行编码,把编码的冗余数据块分发到相应的存储服务器。\n[0166] 3)编码和分发完成后,编码服务器锁定目标数据,然后删除它。\n[0167] 读数据过程中有所选择读取数据块,优先考虑原始数据块。读取数据的过程为:\n[0168] 1)确定所有原始数据块的位置,并判断其可访问性。\n[0169] 2)判断原始数据块读取正常,如果是,则将数据直接读出,并组合成文件数据流,完成数据读操作;否则判断需要多少个冗余数据块来恢复数据,其中如果判断结果超出了冗余能力,则放弃。\n[0170] 3)将原始数据块读入到解码服务器;同时,读取需要的冗余数据块到解码服务器。\n[0171] 4)解码服务器开始运算,恢复完整的原始数据。\n[0172] 5)将数据输出到应用服务器,完成数据访问操作。\n[0173] 通过上述过程,一方面保障了数据的可靠性,另一方面,不影响正常情况下的数据I/O操作,只有当原始数据块存储服务器出现问题,才会启动对冗余数据块的访问和解码。\n[0174] 为了改善数据读写流程,本发明实施例中还对编码服务器和解码服务器进行配置。将编、解码从物理上分为两个独立的系统,分为编码服务器(群)和解码服务器(群)。\n[0175] 下面结合附图,对本发明具体实施方案进行详细说明。\n[0176] 参见图8所示,本发明实施例的系统部署主要包括:应用服务器801、协议服务器\n802、存储Cache 803、编码服务器804、解码服务器805、元数据服务器806和存储服务器\n807。其中,\n[0177] 应用服务器801,用于系统对外应用的处理,包括应用于大型数据灾备中心、视频/音乐网站、在线存储、在线备份、企业内部数据的灾备系统等。\n[0178] 协议服务器802,用于通过实现NFS协议、CIFS协议向应用服务器801提供通用文件系统;通过实现iSCSI协议,向应用服务器801提供虚盘功能;通过实现标准的SOAP、REST协议,提供基于HTTP的标准文件访问。协议服务器802是整个系统流程控制的核心,负责管理和维护数据的I/O流。\n[0179] 存储Cache 803,用于缓存尚未编码的文件,同时,在存储数据未建立冗余数据之前,其自身保存的未编码文件不删除,作为原始数据的冗余而存在,避免了单节点故障发生时数据丢失。\n[0180] 编码服务器804,用于数据编码,生成冗余数据块,并分发到指定存储服务器(可以是本地存储节点内的存储服务器,也可以是远程存储节点内的存储服务器),并及时处理存储Cache 803中的文件。\n[0181] 解码服务器805,当原始数据块部分或者全部不能访问时(对于后者,冗余节点数m>=n时,可以恢复原始数据),对获取的n个数据块 进行解码,恢复原始数据,并返回给协议服务器802;协议服务器802与解码服务器805进行合作,前者获取解码所需的数据块,后者进行解码,返回给前者。整个过程中,整个数据流是边读边解码边返回的流程,通过适当配置和缓存,解码服务器805确保数据的I/O效率受到的影响率低于1%。\n[0182] 元数据服务器806,用于记录和管理所有存放文件的基本信息,包括原始数据个数n与冗余数据个数m的比值、原始数据块存放的存储服务器、冗余数据块存放的存储节点、以及文件数据的状态。\n[0183] 存储服务器807,用于管理和维护数据块,包括原始数据块和冗余数据块。存储服务器807可以存储原始数据块,也可以用于存储冗余数据块,还可以同时存储原始数据块和冗余数据块;另外,该存储服务器807可以与协议服务器802、编码服务器804等在同一个局域网段内,或者也可以是异地,并且与存储数据块的类型无关。\n[0184] 一般,网络中的一个存储节点中会设置有一台或若干台存储服务器。\n[0185] 该系统内部各个组件之间采用的私有协议,主要应用于如下的数据交换:\n[0186] 协议服务器与元数据服务器之间;\n[0187] 协议服务器与编码服务器之间;\n[0188] 协议服务器与解码服务器之间;\n[0189] 协议服务器与存储服务器之间;\n[0190] 编码服务器到元数据服务器之间;\n[0191] 编码服务器到存储服务器。\n[0192] 下面结合图8所示系统部署,对本发明实现高效安全存储方法的实施例进行详细描述。\n[0193] 关于写数据流程:\n[0194] 正常写入时,主要流程描述如下:\n[0195] 应用服务器发起写数据的请求;\n[0196] 协议服务器在元数据服务器中记录需要写入的文件数据的信息;\n[0197] 协议服务器开始接收数据,如下两项工作同时进行:\n[0198] 1)将需要写入的文件数据写入到存储Cache;\n[0199] 2)数据分成数据块(每个数据块可以是1024字节),依次分发并写入到远程存储节点内的存储服务器;\n[0200] 协议服务器更新元数据服务器中的该文件数据的状态为已写入状态。\n[0201] 为了保证数据安全,在上述分发存储的同时,编码服务器还在后台自动执行异步工作,将目标数据进行编码,把编码的冗余数据块分发到相应的存储服务器,主要包括如下几个步骤:\n[0202] 编码服务器会定期访问元数据服务器,获取需要被编码的文件;\n[0203] 编码服务器更新文件数据在元数据服务器中的状态为等待编码分发状态,并同时确认编码方式;\n[0204] 以上为编码服务器预先的后台处理工作,在编码过程中,\n[0205] 编码服务器读取协议服务器写入到存储Cache中的文件数据,依次进行编码;\n[0206] 将编码的冗余数据块分发并写入到存储服务器;\n[0207] 完成编码和分发后,更新元数据服务器中的文件数据状态为已编码分发状态;\n[0208] 锁定文件,如果没有其它的访问,删除存储Cache中的文件数据。\n[0209] 参见图9所示,图9将数据从应用服务器的启动写入,到最后数据处理完成的流程进行了描述,其中,核心点在协议服务器、元数据服务器和编码服务器,通过协议数据服务器和编码服务器的异步配合,确保数据在最大程度上快速写入到系统中。具体包括:\n[0210] 步骤901,应用服务器发起写操作请求,该请求可通过NFS协议或者CIFS协议发送。\n[0211] 步骤902,协议服务器访问元数据服务器,获取存储节点和存储服务器等存储位置信息。\n[0212] 步骤903,协议服务器开始接收原始数据。\n[0213] 以下处理同时进行:写入存储Cache和原始数据接收存储服务器,该过程具体包括:\n[0214] 步骤904,协议服务器将数据写入到存储Cache。\n[0215] 步骤905,判断是否写入成功,若是,则直接进入步骤907;否则进入步骤906。\n[0216] 步骤906,系统报警更新元数据服务器,跳出流程。\n[0217] 此后,协议服务器也可以再进行重新分发存储,具体参见图11所示的流程。\n[0218] 步骤907,编码服务器开始编码。\n[0219] 本实施例中,可根据用户使用参数的配置选择最佳编码算法,Parity算法适合m=1的情况,Reed-Solomon算法适合m>=1的情况。由于Reed-Solomon的基本计算(加\n法和乘法)会带来溢位问题,会带来性能损失,所以在本实施例中,采用一种基于指数移位的异或算法体系,其理论基础来源于Reed-Solomon算法,在编码时,对矩阵中每行的数据进行按位异或,形成第一组冗余码,然后对矩阵中每行的数据进行数量不等的循环移位,形成新的矩阵,并进行按位异或计算,从而形成第二组冗余码,重复上述过程直到编码完成。\n[0220] 以上所举例子是通过Reed-Solomon和Parity这样的算法来描述,但是本发明并不限于此,熟悉本领域的技术人员应该可以认识到,采用其他算法也是能够实现的,如:基于Park算法实现。\n[0221] 另外,在步骤907编码开始前,可能还会执行所述的后台处理:编码服务器会定期访问元数据服务器,获取需要被编码的文件;编码服务器更新文件数据在元数据服务器中的状态为等待编码分发状态,并同时确认编码方式。\n[0222] 步骤908,编码服务器分发冗余数据块。\n[0223] 现有技术中,Reed-Solomon算法和Parity算法都是以逐个字节或逐个字(Byte after Byte或者word after word)的方式进行编码和解码。但在存储方面,需要其顺序性的特点,为了在软件开发过程中,提高数据分解和组合的效率,可以将数据首先分成一个一个的数据块,比如1024字节。\n[0224] 假如有一列数据,D1、D2、D3、...、Dn,如果按照原始数据个数n与冗余数据个数m之比为5∶3来计算,则现有编码处理流程是:\n[0225] 建立8个字符串缓存数组,B1、B2、B3、B4、B5、B6、B7、B8;\n[0226] 读取第1组数据:D1、D2、D3、D4、D5,分别写入到B1、B2、B3、B4、B5数组的第1个 位置,分别计算出C11、C12、C13,写入到数组B6、B7、B8的第1个位置;\n[0227] 读取第2组数据,D6、D7、D8、D9、D10,分别写入到B1、B2、B3、B4、B5数组的第2个位置分别计算出C21、C22、C23,写入到数组B6、B7、B8的第2个位置;\n[0228] 依此类推,直到所有的字符都进行编码,写入到B1、B2、B3、B4、B5、B6、B7、B8数组中,如果n不是5的倍数,则不够的部分用0替代;\n[0229] 将B1、B2、B3、B4、B5、B6、B7、B8数组写入到相应存储服务器上;如果是硬件设计实现,则硬件上有相应的缓冲区,最后通过flush操作,将数据写入存储服务器上。\n[0230] 从编码过程可以看出,对于数据流的编码采用了按字节顺序处理的方式,此方式的缺点是数据的装配会花费相当多的时间,还需要额外分配存储空间。\n[0231] 为了解决字节流装配问题,减少数据装配计算,本发明优选实施例的编码处理流程是:将存储Cache中的原始数据首先分片,由n个片段构成片段组,使用n个间隔等于片段长度的指针指向片段组内的片段起始位置,对指针当前所指位置的字节进行编码,然后,后移指针到下一个字节位置,指针指向新的字节,重复上述过程,直至片段组的原始数据全部编码完成,最后将编码生成的冗余片段分发到存储服务器,实现对一个片段组的编码;重复上述过程,直至全部原始数据编码和分发完成。\n[0232] 比如按照一个存储块的大小1024个字节组成一个片断,5个片断B1、B2、B3、B4、B5组成片断组,使用5个间隔1024个字节的数据指针,分别指向第1、1025、2049、3073、4097个字节位置,而在计算冗余数组B6、B7、B8时候,原始数据的分组方式不再是顺序的字节流,而是取B1、B2、B3、B4、B5相应位置的字节作为一组,在写入到存储服务器上时,前5个缓冲区数组直接写入到各个存储服务器,冗余信息B6、B7、B8分别写入相应存储服务器。\n[0233] 步骤909,判断是否全部成功分发,如果是,则直接进入步骤913,否则,进入步骤\n910。\n[0234] 步骤910,访问元数据服务器,重新获取可接收分发数据的存储节点、存储服务器位置信息,以便继续分发未成功的原始数据块。\n[0235] 步骤911,判断是否获取到可接收分发数据的存储节点和存储服务器的位置信息,若是则返回步骤908;否则,进入步骤912。\n[0236] 其中,若未获取可接收分发数据的存储节点和存储服务器的位置信息,则说明所有的供冗余数据块的存储服务器处于故障态,原始数据块分发失效。\n[0237] 步骤912,系统报警。\n[0238] 步骤913,编码服务器更新元数据服务器,并锁定存储Cache中的文件。\n[0239] 步骤914,判断所有成功分发的数据块是否足够恢复原文件,若是,则进入步骤\n915,否则进入步骤916。\n[0240] 步骤915,编码服务器删除存储Cache中的数据。\n[0241] 步骤916,编码服务器保留存储Cache中的数据,并通知协议服务器。\n[0242] 与步骤904-916异步进行的是如下步骤917-925。\n[0243] 步骤917,协议服务器分发原始数据块到存储服务器。\n[0244] 步骤918,判断是否全部成功分发,若是,则直接进入步骤922,否则,进入步骤\n919。\n[0245] 步骤919,访问元数据服务器,重新获取可接收分发数据的存储节点、存储服务器的位置信息,分发未成功的原始数据块。\n[0246] 其中,在没有存储服务器可以选择的情况下,可以在一个存储服务器内存放多个原始数据块。\n[0247] 步骤920,判断是否获取到接收分发数据的存储节点和存储服务器的位置信息,若是,则返回步骤915;否则,进入步骤921。\n[0248] 其中,若未获取到可接收分发数据的存储节点和存储服务器的位置信息,说明所有的供原始数据块的存储服务器处于故障态,原始数据块分发实效。\n[0249] 步骤921,系统报警。\n[0250] 步骤922,更新元数据服务器。\n[0251] 步骤923,判断通过存储Cache或者存储服务器能否够恢复数据,若是,则进入步骤924;否则,进入步骤925。\n[0252] 步骤924,向应用服务器返回写成功信息。\n[0253] 步骤925,向应用服务器返回写失败信息。\n[0254] 读数据流程:\n[0255] 读取数据的来源可以有如下三种可能途径:分散在各个存储服务器的原始数据块;分散在各个存储服务器的部分原始数据块和部分冗余数据块,经过解码获取;存储Cache中完整的数据文件。\n[0256] 具体采用以上三种情况哪一种,需要实验法来判断。首先访问元数据服务器,判断是否可以从本地存储Cache读取数据,若不可以,则试图读取分散在各个存储服务器所有原始数据,若以上都不行才考虑通过冗余数据块解码原始数据。\n[0257] 正常访问情况下读数据主要流程包括:\n[0258] 应用服务器发起读取操作;\n[0259] 协议服务器访问元数据服务器,确认数据读取来源;\n[0260] 如果存储Cache中的数据还没有删除,则从存储Cache直接读取;否则,访问所有的原始数据块,组合成文件数据;若有原始数据块读取失败,则通过部分原始数据块和部分冗余数据块,解码出原始数据;\n[0261] 更新元数据服务器。\n[0262] 参见图10所示,附图10中描述了读数据的完整流程,包括如下步骤:\n[0263] 步骤1001,应用服务器发起读操作。\n[0264] 步骤1002,协议服务器访问元数据服务器,确定待读数据块的位置。\n[0265] 步骤1003,协议服务器访问元数据服务器分析原始数据块的读写记录,并试图确定可读的原始数据块。\n[0266] 步骤1004,判断是否能够从存储Cache访问,若是,则进入步骤1005;否则,进入步骤1006。\n[0267] 步骤1005,锁定存储Cache,读取数据,直到读取完成后释放锁定,直接进入步骤\n1018。\n[0268] 步骤1006,判断是否所有存放原始数据块的存储服务器都可访问,若是,则进入步骤1007;否则,进入步骤1010和步骤1011的处理流程。\n[0269] 步骤1007,从存放原始数据块的存储服务器读取所有原始数据块。\n[0270] 步骤1008,判断是否读取成功,若是,则直接进入步骤1017;否则,进入步骤1009。\n[0271] 步骤1009,从存放冗余数据块的存储服务器读取适合数量的冗余数据块,进入步骤1012。\n[0272] 步骤1010,从存放冗余数据块的存储服务器读取适合数量的冗余数据块,进入步骤1012。\n[0273] 以上两个步骤所述适合数量的具体值可以根据实际情况和系统读写能力等确定。\n[0274] 步骤1011,读取可以获得的原始数据块,进入步骤1012。\n[0275] 其中步骤1010和步骤1011同时进行。\n[0276] 步骤1012,协议服务器搜集恢复原始数据所需数据块(包括原始数据块和冗余数据块)量。\n[0277] 步骤1013,判断是否成功搜集,若是,进入步骤1014;否则,进入步骤1016。\n[0278] 步骤1014,把确定位置的所有数据块(包括原始数据块和冗余数据块)传送给相应的解码服务器。\n[0279] 步骤1015,解码服务器将恢复的原始数据返回给协议服务器,进入步骤1017。\n[0280] 步骤1016,报告错误,进入步骤1018。\n[0281] 步骤1017,协议服务器将获得的数据返回给应用服务器,进入步骤1018。\n[0282] 步骤1018,完成数据块的读操作。\n[0283] 试图重发数据流程:\n[0284] 当数据能够存放在本地存储Cache,但原始数据块的分发和冗余数据块的分发由于全部或部分的失败而不能建立分布式存储的时候,存储Cache中的数据会被锁定,直到下次调度,成功分发后才会从存储Cache中删除。重新分发过程中的主要流程与写数据的过程比较类似,但也略有不同,主要的不同是:\n[0285] 发起对象不一样,重新分发流程由后台调度系统启动;\n[0286] 协议服务器与存储Cache的数据流向不同,且过程较为简单;\n[0287] 无论是否成功分发,协议服务器都会得到成功处理的返回,因为所有操作的结果都会记录在元数据服务器中,如果已经成功调度,则存储Cache会在未来某个时刻删除;如果没有成功调度,则存储Cache的数据会保留到下一次重新分发的调度,这样就保障了无论何时,都有至少一份完整的原始数据可被访问;而这一过程并不需要协议服务器关心。\n[0288] 参见11所示,数据重新分发流程包括:\n[0289] 步骤1101,协议服务器通过定时处理服务功能发出重新发送命令。\n[0290] 步骤1102,协议服务器访问元数据服务器,获取存储节点和存储服务器的位置信息。\n[0291] 步骤1103,协议服务器开始接收原始数据。\n[0292] 同时进行以下处理:写入存储Cache和准备原始数据接收存储服务器,该过程具体包括:\n[0293] 步骤1104,通知编码服务器,更新元数据服务器中对应文件数据的状态,调整为正在编码状态。\n[0294] 步骤1105,编码服务器开始编码。\n[0295] 步骤1106,编码服务器分发冗余数据块。\n[0296] 步骤1107,判断是否全部成功分发,如果是,则直接进入步骤1111,否则,进入步骤1108。\n[0297] 步骤1108,访问元数据服务器,重新获取可接收分发数据的存储节点和存储服务器的位置信息,分发未成功的原始数据块。\n[0298] 步骤1109,判断是否获取到可接收分发数据的存储节点和存储服务器的位置信息,若是则返回步骤1106;否则,进入步骤1110。\n[0299] 其中,若未获取可接收分发数据的存储节点和存储服务器的位置信息,则说明所有的供冗余数据块的存储服务器处于故障态,原始数据块分发失效。\n[0300] 步骤1110,系统报警。\n[0301] 步骤1111,编码服务器更新元数据服务器,并锁定存储Cache中的文件。\n[0302] 步骤1112,判断所有成功分发的数据块是否足够恢复原文件,若是,则进入步骤\n1113,否则进入步骤1114。\n[0303] 步骤1113,编码服务器删除存储Cache中的数据。\n[0304] 步骤1114,编码服务器保留存储Cache中的数据,并通知协议服务器。\n[0305] 与步骤1104-1114异步进行的是如下步骤1115-1121。\n[0306] 步骤1115,分发原始数据块到存储服务器。\n[0307] 步骤1116,判断是否全部成功分发,若是,则直接进入步骤1120,否则,进入步骤\n1117。\n[0308] 步骤1117,访问元数据服务器,重新获取可接收分发数据的存储节点和存储服务器的位置信息,分发未成功的原始数据块。\n[0309] 其中,在没有存储服务器可以选择的情况下,可以在一个存储服务器内存放多个原始数据块。\n[0310] 步骤1118,判断是否获取到可接收分发数据的存储节点和存储服务器的位置信息,若是,则返回步骤1115;否则,进入步骤1119。\n[0311] 其中,若未获取到可接收分发数据的存储节点和存储服务器的位置信息,说明所有的供原始数据块的存储服务器处于故障态,原始数据块分发实效。\n[0312] 步骤1119,系统报警。\n[0313] 步骤1120,更新元数据服务器。\n[0314] 步骤1121,向应用服务器返回写成功信息。\n[0315] 文件删除流程:\n[0316] 文件的删除过程需要注意一些中间过程的影响,比如:存储Cache内的文件、异步编码过程、被访问情况等,综合上述情况,如果应用服务器在提交删除请求时,一方面要确认其能否被删除,比如是否正在被访问;如果删除过程中是内部流程正在处理,比如清除存储Cache、编码服务器正在编码分发,就应该将删除请求进行延迟处理,但对应用服务器来说,此时删除可以作为成功而结束。\n[0317] 主要的过程包括:\n[0318] 应用服务器发起删除文件操作;\n[0319] 协议服务器访问元数据服务器,确认能否删除,如果不能删除,则直接返回,如果能够被删除,则继续;\n[0320] 内部流程是否正在处理,如果是,则进入删除列表,等待后台调度;如果否,则继续;\n[0321] 试图删除存储Cache内的数据(如果有的话);\n[0322] 试图删除原始数据块(如果有的话);\n[0323] 试图删除冗余数据块(如果有的话);\n[0324] 更新元数据服务器,如果完全成功,则从元数据服务器中删除文件记录;如果出错,则记录错误信息,并将文件数据状态转变为僵化(zombie)状态;\n[0325] 返回应用程序。\n[0326] 如附图12所示,具体的文件删除流程包括:\n[0327] 步骤1201,应用服务器发起删除操作。\n[0328] 步骤1202,协议服务器访问元数据服务器。\n[0329] 步骤1203,判断待删除的文件数据能否被删除,若是,进入步骤1204,否则进入步骤1214;。\n[0330] 步骤1204,判断待删除的文件数据是否正在被内部过程处理,若是,则进入步骤\n1205;否则,进入步骤1206。\n[0331] 步骤1205,将待删除文件放入删除队列,进入步骤1213。\n[0332] 步骤1206,协议服务器锁定该待删除文件,通过元数据服务器获取待删除文件的分布情况。\n[0333] 步骤1207,判断存储Cache中是否还有该文件副本,若是,则进入步骤1208;否则,进入步骤1209。\n[0334] 步骤1208,删除存储Cache中的数据,进入步骤1209。\n[0335] 步骤1209,判断存储待删除文件原始数据块的存储服务器是否有数据,若是,进入步骤1210;否则,进入步骤1211。\n[0336] 步骤1210,协议服务器向所述存储服务器发送删除命令,并逐一确认原始数据已删除。\n[0337] 步骤1211,判断冗余数据块是否已分发,若是,则进入步骤1212;否则,进入步骤\n1213。\n[0338] 步骤1212,向存储所述冗余数据块的存储服务器发送删除命令,并逐一确认冗余数据已删除。\n[0339] 步骤1213,更新元数据服务器。\n[0340] 步骤1214,将处理结果返回给应用服务器。\n[0341] 另外,本发明存储系统在工作中可能还会涉及的其它一些流程,比如:\n[0342] 部分文件在传输过程中,由于设备或网络中间在传输过程中失败,当设备在网络或者故障恢复后,会有部分垃圾数据存在,故需要在系统间建立垃圾数据清理的协议;\n[0343] 当系统中部分存储服务器因为故障不能访问时或者彻底损坏后,系统对相关数据的冗余效果便降低,这时需要重建相应的数据块(原始数据块或者冗余数据块);\n[0344] 断点续传/文件appending功能的流程。\n[0345] 以上流程由于不是本发明涉及的主要流程,并且熟悉本领域的技术人员都可以通过现有技术实现,这里不再赘述。\n[0346] 通过上述方案的描述可以看出,本发明的系统与现有技术的集群文件系统、普通备份管理系统进行比较,可以得到如下的数据:\n[0347] 对于本发明系统而言,n∶m=5∶3,意味着需要的最小存储空间是:\n[0348] S1容量=原始数据大小×(n+m)/n\n[0349] 而对于集群文件系统或者备份管理系统而言,假设数据保存的份数为s(s大于等于2),其所需空间则为:\n[0350] S2容量=原始数据大小×s\n[0351] 从上述不难得出,两者所需容量的比例关系为:\n[0352] S2容量∶S1容量=s∶((n+m)/n))\n[0353] 比如,通常情况下x=2,而本系统的经典配置是5∶3,则可以计算得出:\n[0354] S2容量∶S1容量=s∶((n+m)/n))=2∶(8/5)=5∶4\n[0355] 由此可以看出,本系统的冗余数据的存储效率提高了:\n[0356] p=(1-(m/n)/(x-1))×100%=40%\n[0357] 通过本发明系统和方法提高了数据的可靠性:\n[0358] 在n∶m=5∶3、存储服务器可靠性为99.9%的情况下,存储的冗余数据量是原始数据的m/n,即60%的情况下,数据的可靠性由3个9猛增至10个9,相对于单一拷贝的存储提高了1000万倍;相对于2个拷贝的集群或者备份管理,依然还高出10000倍的可靠性。\n[0359] 这就意味着,本系统用更少的存储容量,换得了更高的存储可靠性。\n[0360] 为系统容灾提供了基础、安全性得到了保障:\n[0361] 由于存储系统的分散存储,且通过剥离冗余数据编码与分发,为数据的异地部署提供了可靠的方式,并且对数据的网络间传输提供了可预期的配置,在n=m的环境中,数据的容量只需要增加一倍,则可靠性有可能提高到16个9,这在一般的情况下,数据几乎不会丢失;而同样的配置应用集群文件系统,则数据的可靠性只会有4~6个9,在大量文件访问的情况下,数据的不可靠性会变成必然事件,而提高数据的可靠性,则需要花费庞大的带宽资源和存储资源。\n[0362] 基于Reed-Solomon算法和Parity算法为基础的编码算法,数据块的大小一般都不会选择太大,可以通过配置,将数据块变小,比如64字节为一个数据块,那么,存储在各个存储服务器的数据相对于原文件,就是些支离破碎的片段,甚至有些是通过编码生成的冗余数据块,这样即使被网络监听、存储设备丢失,都不至于数据会泄密。\n[0363] 按需配置组件的能力,可以支持各种类型的应用:\n[0364] 本系统由编码、解码、存储Cache、元数据构成了算法系统的解耦,将应用、数据管理、网络、分发等过程分解成一个个独立的过程,解决了系统的耦合性问题,特别是对时间要求比较高的应用环境中,不会因为需要提高可靠性而降低应用系统的易用性,降低数据管理能力,对于网络资源,也可以进行有效的控制和利用。\n[0365] 同时,各个独立的功能系统可以独立设置,以满足不同应用系统的需要,比如,读比写多的环境里,则多配置一些解码服务器,而写比读多的环境里,则可以少配置一些解码服务器;在存储服务器变得越来越不可靠时,则增加解码服务器即可。同样,如果应用环境大多数是些小文件的频繁访问,则相应增加元数据服务器,反之,则可少配置一些。\n[0366] 存储系统的复合利用:\n[0367] 存储服务器的存储采用通用管理方式,并不需要预分配,也不需要强制配置,在本系统中,各个存储服务器独立管理其存储内容,只要是基于本地文件系统即可,所以从根本上解决了存储服务器依赖的问题。\n[0368] (1)存储服务器可以是任意的既存存储设备,也可以是与本地的应用共享;(2)对于大型应用或大型机构,可以同时在不同地方部署多套本系统,而存储服务器可以共享,即使是DAS系统,也可以同时被使用;(3)对于n和m关系固定的应用,存储服务器数可以大于(n+m),对于任一文件,系统会动态选择(n+m)个存储服务器存储数据块,从而不需要各个存储服务器提供相同的存储容量。\n[0369] 对应用系统的影响非常低:\n[0370] 传统的备份管理措施会对应用产生比较大的影响,比如,备份管理软件对于数据的访问,需要严格的进行文件控制,比如应用快照技术等,避免与业务系统的冲突,由于此类行为与应用服务属于并发行为,所以,对应用系统的影响会非常大。同时,如果出现I/O故障时,需要进行恢复,则应用系统需要暂停服务,即使不暂停,也会限制某些数据的访问。\n[0371] 与传统备份管理方式相比,本系统在数据存储和冗余属于一次性行为,通过异步方式处理,对计算进行了剥离,对应用产生的影响只在于存储Cache的写操作。\n[0372] 本发明的描述是为了示例和说明起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。
法律信息
- 2012-10-17
专利权的转移
登记生效日: 2012.09.12
专利权人由北京云快线软件服务有限公司变更为北京世纪互联宽带数据中心有限公司
地址由100015 北京市朝阳区酒仙桥东路1号院5号楼5层变更为100016 北京市朝阳区酒仙桥东路1号M5楼三层
- 2011-05-04
- 2010-10-13
专利申请权的转移
登记生效日: 2010.08.30
申请人由北京世纪互联宽带数据中心有限公司变更为北京云快线软件服务有限公司
地址由100016 北京市朝阳区酒仙桥东路1号M5楼三层变更为100015 北京市朝阳区酒仙桥东路1号院5号楼5层
- 2009-09-16
- 2009-07-22
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2006-07-19
|
2006-01-09
| | |
2
| |
2008-10-22
|
2008-06-06
| | |
3
| |
2004-11-17
|
2002-08-02
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 1 | | 2012-09-29 | 2012-09-29 | | |