用于存储数据的方法和装置技术领域
本申请涉及计算机技术领域,具体涉及计算机存储技术领域,尤其涉及用于存储
数据的方法和装置。
背景技术
随着互联网技术的快速发展及智能手机的全面普及,用户(含企业用户)产生的数
据量呈现爆炸式增长,对于这些数据的保存也提出来越来越高的要求。
用户希望能够长期持久的保存数据,确保不会丢失。现有的网盘提供给用户大量
的免费空间可用,这些都是基于单机房的存储方案,如果机房出现火灾或者其它某些情况,
就会导致用户数据丢失。有些用户数据特别重要,用户愿意付费以追求更高的可靠性,这部
分用户希望能将其数据同时存放在多个机房中,以保证机房故障的数据损失保障。现有的
多机房数据备份方案,是2套或者多套独立的系统以复制的方式在多机房部署,存储集群之
间彼此独立,每个存储集群维护了多个数据副本。每个存储集群要独立运作起来,就必须有
一定的副本冗余度,传统的是3副本,最新的基于纠删码编码(Erasure Coding,EC)技术的
是1.x副本,这样2个集群就需要2x3=6副本,或者2*1.x副本,成本居高不下。
发明内容
本申请的目的在于提出一种改进的用于存储数据的方法和装置,来解决以上背景
技术部分提到的技术问题。
第一方面,本申请提供了一种用于存储数据的方法,该方法包括:获取存储节点的
数量作为分组数,其中,在存储节点之间存在地理隔离和/或电源总线隔离;接收待存储的
原始数据并将原始数据进行纠删码编码以生成包含校验数据的新数据;将新数据按照分组
数进行分组并为每个分组设置分组编号;将每个分组中的新数据发送给不同的存储节点进
行存储并记录分组编号和存储节点的对应关系;响应于接收到存储节点发送的包括存储地
址的存储成功的响应消息,记录存储地址。
在一些实施例中,将原始数据进行纠删码编码以生成包含校验数据的新数据包
括:将原始数据分成大小相同的多个原始数据块,并对每个原始数据块进行编号;将多个原
始数据块进行纠删码编码以生成包含校验数据块的新数据块,并对每个校验数据块进行编
号。
在一些实施例中,在将每个分组中的新数据发送给不同的存储节点进行存储之
后,该方法还包括:若在预设的超时时间内未收到存储节点发送的包括存储地址的存储成
功的响应消息,则查找到存储节点对应的分组数据并将分组数据重新发送给存储节点。
在一些实施例中,在将每个分组中的新数据发送给不同的存储节点进行存储之
后,该方法还包括:若在预设的超时时间内未收到存储节点发送的包括存储地址的存储成
功的响应消息,则查找到存储节点对应的分组数据并将分组数据发送给发送了存储成功的
响应消息的存储节点。
在一些实施例中,当存储节点的数量大于2时,纠删码编码的编码率大于50%。
第二方面,本申请提供了一种用于存储数据的装置,该装置包括:获取单元,配置
用于获取存储节点的数量作为分组数,其中,在存储节点之间存在地理隔离和/或电源总线
隔离;编码单元,配置用于接收待存储的原始数据并将原始数据进行纠删码编码以生成包
含校验数据的新数据;分组单元,配置用于将新数据按照分组数进行分组并为每个分组设
置分组编号;发送单元,配置用于将每个分组中的新数据发送给不同的存储节点进行存储
并记录分组编号和存储节点的对应关系;记录单元,配置用于响应于接收到存储节点发送
的包括存储地址的存储成功的响应消息,记录存储地址。
在一些实施例中,编码单元配置用于:将原始数据分成大小相同的多个原始数据
块,并对每个原始数据块进行编号;将多个原始数据块进行纠删码编码以生成包含校验数
据块的新数据块,并对每个校验数据块进行编号。
在一些实施例中,该装置还包括重传单元,配置用于:在将每个分组中的新数据发
送给不同的存储节点进行存储之后,若在预设的超时时间内未收到存储节点发送的包括存
储地址的存储成功的响应消息,则查找到存储节点对应的分组数据并将分组数据重新发送
给存储节点。
在一些实施例中,该装置还包括重选单元,配置用于:在将每个分组中的新数据发
送给不同的存储节点进行存储之后,若在预设的超时时间内未收到存储节点发送的包括存
储地址的存储成功的响应消息,则查找到存储节点对应的分组数据并将分组数据发送给发
送了存储成功的响应消息的存储节点。
在一些实施例中,当存储节点的数量大于2时,纠删码编码的编码率大于50%。
本申请提供的用于存储数据的方法和装置通过将数据进行纠删码编码后再分组
发向存在地理隔离和/或电源总线隔离的存储节点,从而提高了数据存储的容灾性并且降
低了成本。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它
特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的用于存储数据的方法的一个实施例的流程图;
图3是根据本申请的用于存储数据的方法的一个应用场景的示意图;
图4是根据本申请的用于存储数据的方法的又一个实施例的流程图;
图5是根据本申请的用于存储数据的装置的一个实施例的结构示意图;
图6是适于用来实现本申请实施例的服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描
述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了
便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相
互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于存储数据的方法或用于存储数据的装置的实施
例的示例性系统架构100。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104、服务器105和
存储节点106、107、108。网络104用以在终端设备101、102、103和服务器105之间提供通信链
路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。服
务器105与存储节点106、107、108之间通过有线、无线通信链路或者光纤电缆等线路连接。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发
送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应
用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是具有将数据上传至远程服务器的功能的各种电子设
备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture
Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving
Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝
上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上传的数
据提供支持的后台存储服务器。后台存储服务器可以对接收到的待存储数据分发到存储节
点106、107、108进行分布式存储等处理。
存储节点106、107、108可以是提供存放数据存储服务器的机房,它们之间彼此存
在地理隔离和/或电源总线隔离。每个机房中存放多个数据存储服务器。
需要说明的是,本申请实施例所提供的用于存储数据的方法一般由服务器105执
行,相应地,用于存储数据的装置一般设置于服务器105中。
应该理解,图1中的终端设备、网络、服务器和存储节点的数目仅仅是示意性的。根
据实现需要,可以具有任意数目的终端设备、网络和服务器。
继续参考图2,示出了根据本申请的用于存储数据的方法的一个实施例的流程
200。该用于存储数据的方法,包括以下步骤:
步骤201,获取存储节点的数量作为分组数。
在本实施例中,用于存储数据的方法运行于其上的电子设备(例如图1所示的服务
器)可以通过有线连接方式或者无线连接方式从第三方服务器上存储的可用于存储数据的
存储节点信息,其中,存储节点信息可以包括以下至少一项:位置、访问速度、剩余存储空
间,并将可用于存储数据的存储节点的数量作为分组数。或者通过由上述电子设备本身维
护的存储节点的状态信息获取存储节点的数量。还可以使用心跳机制检测机房是否可用。
该存储节点可以是存储数据存储服务器的机房。存储节点的数量是可以动态变化的。机房
之间存在地理隔离和/或电源总线隔离。例如,获取到的三个机房分别位于北京、天津和保
定。需要指出的是,上述无线连接方式可以包括但不限于3G/4G连接、WiFi连接、蓝牙连接、
WiMAX连接、Zigbee连接、UWB(ultra wideband)连接、以及其他现在已知或将来开发的无线
连接方式。
步骤202,接收待存储的原始数据并将原始数据进行纠删码编码以生成包含校验
数据的新数据。
在本实施例中,用于存储数据的方法运行于其上的电子设备(例如图1所示的服务
器)可以通过有线连接方式或者无线连接方式从用户利用其进行数据上传的终端接收待存
储的原始数据,并将原始数据进行纠删码编码以生成包含校验数据的新数据。纠删码编码
是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同
的位置,比如磁盘、存储节点或者其它地理位置。纠删码会创建一个数学函数来描述一组数
字,这样就可以检查它们的准确性,而且一旦其中一个数字丢失,还可以恢复。可以采用最
常见的RS码(又称里所码,即Reed-solomon codes)进行编码。
在本实施例的一些可选的实现方式中,将待存储的原始数据进行纠删码编码以生
成包含校验数据的新数据包括:将原始数据分成大小相同的多个原始数据块,并对每个原
始数据块进行编号;将多个原始数据块进行纠删码编码以生成包含校验数据块的新数据
块,并对每个校验数据块进行编号。例如,原始数据为11MB,分成11块1MB大小的数据块,经
过EC编码后,产生21个1MB大小的数据块,并将每个数据块进行编号。并且若最后一块数据
小于1MB时可对最后一块数据进行填充使其大小正好为1MB。
在本实施例的一些可选的实现方式中,当存储节点的数量大于2时,纠删码编码的
编码率大于50%。即,产生的校验数据的数量小于原始数据的数量。由于产生的副本的数量
较少,因此可以节约成本。
步骤203,将新数据按照分组数进行分组并为每个分组设置分组编号。
在本实施例中,将步骤202生成的包含校验数据的新数据按照分组数进行分组并
为每个分组设置分组编号。分组时可以平均分配,也可以不均分。例如,若步骤201获取到的
存储节点数量为3,则将步骤202产生的21个1MB大小的数据块分成3组,每组7个数据块。也
可以根据不同存储节点的状态信息不平均分配(例如,若三个机房中某个机房剩余的存储
空间比较大则可给其多分配数据)。并将每个分组设置分组编号:分组1、分组2、分组3。
步骤204,将每个分组中的新数据发送给不同的存储节点进行存储并记录分组编
号和存储节点的对应关系。
在本实施例中,将步骤203中已经分组的数据分别发向不同的存储节点进行存储
并记录分组编号和存储节点的对应关系。可以随机选择存储节点,也可根据存储节点的信
息(例如,访问速度、剩余存储空间)进行分配。并记录分配好的分组编号和存储节点的对应
关系。例如,可以随机将分组1发向北京的机房,将分组2发向天津的机房,将分组3发向天津
的机房,或者在分组数据大小不一致的情况下,将数据量大的分组发送给访问速度快的机
房或者发送给剩余存储空间大的机房。
步骤205,响应于接收到存储节点发送的包括存储地址的存储成功的响应消息,记
录存储地址。
在本实施例中,在将数据发送给存储节点后等待存储节点的响应,若接收到存储
节点发送的包括存储地址的存储成功的响应消息,记录存储地址。该存储地址用于寻址,可
以包括IP地址,也可以包括诸如机房的地理位置、机架号、服务器编号等信息。
在本实施例的一些可选的实现方式中,若在预设的超时时间内未收到存储节点发
送的包括存储地址的存储成功的响应消息,则查找到存储节点对应的分组数据并将分组数
据重新发送给存储节点。超时时间的设置可以与本地缓存相关联,本地缓存大的可以将超
时时间设置的长一些,否则将超时时间设置的短一些。还可以设置多次重传,并设置最大重
传次数。如果多次重传失败后则可以将数据发往其它已经发送存储成功的响应消息的存储
节点。
继续参见图3,图3是根据本实施例的用于存储数据的方法的应用场景的一个示意
图。在图3的应用场景中,用户首先通过客户端向上述电子设备发送待存储的数据,数据大
小为11MB,上述电子设备接收到待存储的数据后查找到可用的存储节点为3个机房(机房1、
机房2和机房3),然后进行EC编码生成21个1MB大小的数据块后再按照存储节点的数量分成
3组(数据分组1、数据分组2和数据分组3),每个分组中有7个数据块。通过统一存储集群来
管理存储节点,将数据分组1、数据分组2和数据分组3分别发送到机房1、机房2和机房3。最
终产生的总的副本数为21/11=1.9副本,当一个机房的数据因故障丢失后,还有其它2个机
房的数据,当数据损失不超过10块时,都可以经过EC解码获取到原始数据,保证了高可靠
性。相比传统方案的3机房3*3=9副本方案,3*1.x的EC编码方案,本方案大幅降低了存储成
本。
本申请的上述实施例提供的方法通过将经纠删码编码后的数据分组发往不同的
存储节点,以保证数据的安全性,避免由于掉电或火灾等原因导致数据丢失,并且产生的冗
余较小,节省了成本。
进一步参考图4,其示出了用于存储数据的方法的又一个实施例的流程400。该用
于存储数据的方法的流程400,包括以下步骤:
步骤401,获取存储节点的数量作为新数据的分组数。
步骤402,接收待存储的原始数据并将原始数据进行纠删码编码以生成包含校验
数据的新数据。
步骤403,将新数据按照分组数进行分组并为每个分组设置分组编号。
步骤404,将每个分组中的新数据发送给不同的存储节点进行存储并记录分组编
号和存储节点的对应关系。
上述步骤401-404与步骤201-204基本相同,因此不再赘述。
步骤405,若在预设的超时时间内未收到存储节点发送的包括存储地址的存储成
功的响应消息,则查找到存储节点对应的分组数据并将分组数据发送给发送了存储成功的
响应消息的存储节点。
在本实施例中,若在预设的超时时间内未收到存储节点发送的包括存储地址的存
储成功的响应消息,意味着发送失败,则可重新选择存储节点。可以从已经发送存储成功的
响应消息的存储节点中随机选择一个存储节点作为发送失败的分组数据的下一次发送的
目的地址,还可以将第一个发送存储成功的响应消息的存储节点作为发送失败的分组数据
的下一次发送的目的地址。还可以采用负载均衡的调度算法从已经发送存储成功的响应消
息的存储节点中选择负载数据量最小的存储节点作为发送失败的分组数据的下一次发送
的目的地址。此外,还可以设置最大重传次数,可以在之后的数据重传中重新选择其它存储
节点作为目的地址。
从图4中可以看出,与图2对应的实施例相比,本实施例中的用于存储数据的方法
的流程400突出了对数据发送失败后进行重传的步骤。将已经发送存储成功的响应消息的
存储节点作为下一次发送的目的地址,可以显著提高重传的成功率。从而保证数据存储的
高可靠性、提高存储速度。
进一步参考图5,作为对上述各图所示方法的实现,本申请提供了一种用于存储数
据的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应
用于各种电子设备中。
如图5所示,本实施例的用于存储数据的装置500包括:获取单元501、编码单元
502、分组单元503、发送单元504和记录单元505。其中,获取单元501配置用于获取存储节点
的数量作为分组数,其中,存储节点之间存在地理隔离和/或电源总线隔离;编码单元502配
置用于接收待存储的原始数据并将原始数据进行纠删码编码以生成包含校验数据的新数
据;分组单元503配置用于将新数据按照分组数进行分组并为每个分组设置分组编号;发送
单元504配置用于将每个分组中的新数据发送给不同的存储节点进行存储并记录分组编号
和存储节点的对应关系;记录单元505配置用于响应于接收到存储节点发送的包括存储地
址的存储成功的响应消息,记录存储地址。
在本实施例中,编码单元502将待存储的数据进行纠删码编码后按照获取单元501
获取的存储节点数量通过分组单元503进行分组,然后由发送单元504发送给不同的存储节
点,等接收到存储节点的存储成功响应消息后由记录单元505记录存储地址等相关信息。
在本实施例的一些可选的实现方式中,编码单元502配置用于:将原始数据分成大
小相同的多个原始数据块,并对每个原始数据块进行编号;将多个原始数据块进行纠删码
编码以生成包含校验数据块的新数据块,并对每个校验数据块进行编号。
在本实施例的一些可选的实现方式中,装置500还包括重传单元(未示出),配置用
于:在将每个分组中的新数据发送给不同的存储节点进行存储之后,若在预设的超时时间
内未收到存储节点发送的包括存储地址的存储成功的响应消息,则查找到存储节点对应的
分组数据并将分组数据重新发送给存储节点。
在本实施例的一些可选的实现方式中,装置500还包括重选单元(未示出),配置用
于:在将每个分组中的新数据发送给不同的存储节点进行存储之后,若在预设的超时时间
内未收到存储节点发送的包括存储地址的存储成功的响应消息,则查找到存储节点对应的
分组数据并将分组数据发送给发送了存储成功的响应消息的存储节点。
在本实施例的一些可选的实现方式中,当存储节点的数量大于2时,纠删码编码的
编码率大于50%。
下面参考图6,其示出了适于用来实现本申请实施例的服务器的计算机系统600的
结构示意图。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读
存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而
执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。
CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总
线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如液晶显
示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN
卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行
通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光
盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根
据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机
软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读
介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样
的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸
介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本申请的方法中限
定的上述功能。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程
序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代
表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用
于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标
注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上
可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注
意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执
行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令
的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬
件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包
括获取单元、编码单元、分组单元、发送单元和记录单元。其中,这些单元的名称在某种情况
下并不构成对该单元本身的限定,例如,编码单元还可以被描述为“接收待存储的原始数据
并将原始数据进行纠删码编码以生成包含校验数据的新数据的单元”。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算
机存储介质可以是上述实施例中装置中所包含的非易失性计算机存储介质;也可以是单独
存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有
一个或者多个程序,当一个或者多个程序被一个设备执行时,使得该设备:获取存储节点的
数量作为新数据的分组数,其中,存储节点之间存在地理隔离和/或电源总线隔离;接收待
存储的原始数据并将原始数据进行纠删码编码以生成包含校验数据的新数据;将新数据按
照分组数进行分组并为每个分组设置分组编号;将每个分组中的新数据发送给不同的存储
节点进行存储并记录分组编号和存储节点的对应关系;响应于接收到存储节点发送的包括
存储地址的存储成功的响应消息,记录该存储地址。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人
员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术
方案,同时也应涵盖在不脱离本发明构思的情况下,由上述技术特征或其等同特征进行任
意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能
的技术特征进行互相替换而形成的技术方案。