CN116069545A - 一种用于数据异步冗余编码的方法、装置及设备 - Google Patents
一种用于数据异步冗余编码的方法、装置及设备 Download PDFInfo
- Publication number
- CN116069545A CN116069545A CN202310109068.2A CN202310109068A CN116069545A CN 116069545 A CN116069545 A CN 116069545A CN 202310109068 A CN202310109068 A CN 202310109068A CN 116069545 A CN116069545 A CN 116069545A
- Authority
- CN
- China
- Prior art keywords
- data
- sub
- original data
- original
- redundancy
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种用于数据异步冗余编码的方法、装置及设备,应用于分布式存储系统。其方法包括:获取数据写入请求;基于写入请求和预先确定的参数,确定对应的子对象及其副本、冗余子对象;基于预先确定的参数及子对象,确定覆盖的条带化数据冗余组的范围和该范围内相应的子对象及其副本、冗余子对象;将数据切分,并逐个写入相应的子对象副本,创建每个子对象副本的元数据文件,记录对应子对象的写入偏移量和数据大小;基于异步冗余编码服务,根据子对象副本的元数据文件,对数据进行异步冗余编码,删除已完成异步冗余编码的子对象副本及其元数据文件。通过该方法,可在新写入数据完成纠删码冗余保护之前,采用副本冗余保护,提升数据可用性。
Description
技术领域
本申请涉及计算机数据处理技术领域,尤其涉及应用于分布式存储系统的一种用于数据异步冗余编码的技术。
背景技术
在分布式存储系统中,数据的高可用至关重要。为达到数据高可用的目的,分布式存储系统通常采用数据冗余策略对数据进行冗余保护,以当一定容忍度范围内的数据异常(比如因磁盘故障,导致其中存储的数据无法正常访问)情况发生时,可根据数据冗余策略保证数据的正常访问。
纠删码是目前常用的数据冗余策略之一,先将要写入到分布式存储系统的用户数据切分为若干大小相同的原始数据分片,然后每n份原始数据分片组成一组,通过纠删码编码计算,得到m份大小相同的冗余数据分片,将n份原始数据分片和m份冗余数据分片组成一个条带化数据冗余组。通常一个条带化数据冗余组中的不同数据分片是保存在不同存储节点(或者同一存储节点的不同磁盘)的不同子对象中,不同条带化数据冗余组的相同顺位的数据分片存储在同一子对象中。当一个条带化数据冗余组有任意不超过m份原始数据分片异常,都可以通过其他n份数据分片的解码恢复。因此,在因故导致一个条带化数据冗余组内有异常数据分片时,只要异常数据分片的数量小于m份,都可以利用其它任意n份正常数据分片来恢复,从而达到数据高可用的目的。
由于纠删码数据冗余策略是通过将用户数据分片成原始数据分片后采用纠删码编码计算得到冗余数据分片,原始数据分片和相应的冗余数据分片以条带化数据冗余组的方式存储在分布式存储系统中,而非简单地对用户数据进行复制拷贝,因此,对于新写入的用户数据,为了完成冗余数据的计算和/或更新,有时不仅需要读取相关的每个条带化数据冗余组中已更新的原始数据分片,还需要读取相应条带化数据冗余组中其它未更新的原始数据分片,然后进行纠删码编码计算,得到新的冗余数据分片,完成冗余数据更新。若每次用户数据写入时都采用同步方式同时完成原始数据分片和冗余数据分片的更新,则会给分布式存储系统带来较大的读写开销。
现有技术中可采用异步方式来完成用户数据写入时原始数据分片和冗余数据分片的更新,即每次用户数据写入时只要将更新的原始数据分片写入相应子对象,就认为本次用户数据的写入完成,之后再异步方式通过后台的异步服务程序来完成冗余数据分片的更新。
但是,在异步方式通过后台的异步服务程序来完成冗余数据分片的更新前,已完成更新的原始数据分片是处于无冗余保护的状态,此时若这些已完成更新的原始数据分片发生任何异常,甚至其它未更新的原始数据分片发生某种程度异常,就会导致对应的用户数据无法读写,造成用户数据不可用,这对于数据读写频繁的分布式存储系统来说是不能接受的。
发明内容
本申请的目的是提供一种用于数据异步冗余编码的方法、装置及设备,适用于分布式存储系统,用以至少部分解决现有技术中分布式存储系统中未完成数据异步冗余编码的用户数据无冗余保护的技术问题。
根据本申请的一个方面,提供了一种用于数据异步冗余编码的方法,应用于分布式存储系统,其中,所述方法包括:
获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
基于所述数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
可选地,其中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
读取每个原始数据子对象副本的元数据文件,以确定每个原始数据子对象对应的第一数据覆盖的条带化数据冗余组;
针对所述第一数据覆盖的每个条带化数据冗余组,从原始数据子对象副本中获取对应的原始数据分片,以及从原始数据子对象中获取对应的其它原始数据分片,合并成所述条带化数据冗余组的原始数据分片;
对合并后的条带化数据冗余组的原始数据分片进行异步冗余编码,得到所述条带化数据冗余组的新的冗余数据分片,并将相应原始数据子对象副本中的原始数据分片和生成的新冗余数据分片复制到相应的原始数据子对象和对应的冗余数据子对象;
遍历所述第一数据覆盖的每个条带化数据冗余组,以完成所述第一数据的异步冗余编码。
可选地,其中,若所述从原始数据子对象中获取对应的其它原始数据分片时,存在不能成功获取的原始数据分片,所述方法还包括:
基于条带化数据冗余组相应的原始数据子对象和冗余数据子对象中成功获取的数据分片,对所述不能成功获取的原始数据分片进行数据恢复;
获取数据恢复后的原始数据分片。
可选地,其中,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第二数据写入请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本;
若不存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码。
可选地,其中,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第三数据读取请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
可选地,其中,所述一种用于数据异步冗余编码方法还包括:
获取包括所述标识信息的第四数据读取请求;
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
根据本申请的另一方面,提供了一种用于数据异步冗余编码的装置,部署于分布式存储系统,其中,所述装置包括:
第一模块,用于获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
第二模块,用于:基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
第三模块,用于:基于所述分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
第四模块,用于:基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
第五模块,用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
可选地,其中,若在对所述第一数据进行异步冗余编码之前,所述第一模块获取到包括所述标识信息的第二数据写入请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块还用于:基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,若不存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述第五模块用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象或者其副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
可选地,其中,若在对所述第一数据进行异步冗余编码之前,所述第一模块获取到包括所述标识信息的第三数据读取请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块还用于:将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
可选地,其中,若在对所述第一数据进行异步冗余编码之后,所述第一模块获取到包括所述标识信息的第四数据读取请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
其中,所述第四模块还用于:逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
与现有技术相比,本申请提供了一种用于数据异步冗余编码的方法、装置及设备,应用于分布式存储系统。其方法包括:获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;基于所述分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。通过该方法,在采用纠删码异步编码提供数据冗余保护的分布式存储系统中,针对新写入的用户数据,可在对该用户数据进行异步冗余编码,完成纠删码冗余保护之前,对该用户数据采用副本冗余保护,以避免新写入的用户数据处于无冗余保护状态,影响其高可用性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出一种用户数据纠删码冗余编码后的数据存储组织形式示意图;
图2示出本申请一个方面的一种用于数据异步冗余编码的方法流程示意图;
图3示出本申请一个方面的一个可选实施例的一种用于数据异步冗余编码的数据存储组织形式示意图;
图4示出本申请一个方面的一个可选实施例的第一数据异步冗余编码后的数据存储组织形式示意图;
图5示出本申请一个方面的一个可选实施例的第一数据和第二数据异步冗余编码后的数据存储组织形式示意图;
图6示出本申请另一个方面的一种用于数据异步冗余编码的装置示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请的各实施例的一个典型的配置中,设备、系统各可信方和/或装置各模块均可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或者任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
纠删码是分布式存储系统中常用的数据冗余策略之一。分布式存储系统在部署过程中,会根据其应用场景确定软硬件配置、编码效率及存储空间利用率等,确定纠删码的相关参数(n,m),数据分片的大小chunk size(数据分片的大小理论上没有限制,但考虑到编码效率、存储空间利用率等因素,通常是2KB的倍数,比如,2KB,4KB,16KB,64KB,128KB等,对于同一分布式存储系统来说,该参数一旦确定后,一般不更改)。进而规划用于存储由用户数据根据chunk size划分的原始数据分片的原始数据子对象及其对应的冗余数据分片的冗余数据子对象,其中,同一用户标识信息相关的原始数据子对象及冗余数据子对象相同顺位存储的数据分片构成一个条带化数据冗余组,每个条带化数据冗余组包括原始数据分片的份数n和冗余数据分片的份数m。通常来说,n,m,chunk size这些参数与冗余编码效率相关,这些参数的值越大,计算耗时越长,编码效率越低。
纠删码常用的(n,m)组合有:(4,2),(5,3),(6,2),(8,3),(10,2),(12,4)等,通常是根据允许丢失的数据分片份数和分布式存储系统的存储空间利用率等来设定。其中,m为冗余数据分片份数,也是允许丢失的最大数据分片份数,也就是说,在一个条带化数据冗余组中,即(n+m)份数据分片中,任意丢失不超过m份的数据分片,都可以通过其他的任意n份数据分片来恢复。其中,分布式存储系统的存储空间利用率通常指一个条带化数据冗余组中n份原始数据分片的占比,即n/(n+m),若n=4,m=2,则存储空间利用率为4/(4+2),约为66%。
纠删码编码计算原理可以n=4,m=2为例简要描述如下:
根据chunk size将用户数据分成若干份原始数据分片,一个条带化数据冗余组包括4份原始数据分片,假设为a,b,c,d,要得到对应的2份冗余数据分片,假设为x,y,则可构建如下方程组:
x=α1×a+α2×b+α3×c+α4×d
y=β1×a+β2×b+β3×c+β4×d
可以解出2个未知数,也就是说a,b,c,d,x,y这6份数据分片,丢失任意2份数据分片,都可以被恢复。
其中,α1,α2,α3,α4和β1,β2,β3,β4是为计算大小为chunk size的冗余数据分片x,y而预设的系数矩阵,常用的系数矩阵有柯西矩阵和范德蒙矩阵。
通常一个条带化数据冗余组中的不同数据分片是保存在分布式存储系统的不同存储节点的不同子对象中,不同条带化数据冗余组的相同顺位的数据分片存储在同一子对象中。如果存储节点的数量少于(n+m),则有些数据分片可能会保存在同一个存储节点的不同子对象中,但应保证为每个子对象分配不同的硬盘(通常每个存储节点包括多个硬盘,分布式存储系统中每个存储节点的硬盘总数量应多于(n+m)),以尽可能降低异常数据分片同时出现的风险。
为便于理解,示例性的,一种采用(4,2)组合纠删码的数据冗余策略的用户数据纠删码冗余编码后的数据存储组织形式如图1所示,用户数据被划分成若干份大小相同的原始数据分片,每4份原始数据分片通过纠删码编码计算得到相应的2份冗余数据分片,这4份原始数据分片和相应的2份冗余数据分片构成一个条带化数据冗余组。原始数据分片顺序写入相应的子对象0,1,2,3,冗余数据分片顺序写入相应的子对象4,5。其中,规律性地,分属于不同条带化数据冗余组的相同顺位的数据分片写入同一子对象,比如,用户数据被划分成若干原始数据分片,属于不同条带化数据冗余组的原始数据分片0,4,8……都顺序写入子对象0,原始数据分片1,5,9……都顺序写入子对象1,原始数据分片2,6……都顺序写入子对象2,原始数据分片3,7……都顺序写入子对象2,同样地,属于不同条带化数据冗余组的2份冗余数据分片都顺序写入子对象4和5。
其中,分布式存储系统的存储节点可以是各种计算机存储设备,所述计算机存储设备包括但不限于存储服务器、存储服务器集群。在此,所述计算机存储设备仅为举例,其他现有的或者今后可能出现的设备和/或资源共享平台如适用于本申请也应包括在本申请的保护范围内,在此,以引用的方式包括于此。
为更进一步阐述本申请所采取的技术手段及取得的效果,下面结合附图及优选实施例,对本申请的技术方案,进行清楚和完整的描述。
图2示出根据本申请一个方面的一种用于数据异步冗余编码的方法流程示意图,应用于分布式存储系统,其中,一个实施例的方法包括:
S101获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
S102基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
S103基于所述数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
S104基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
S105基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
在该实施例中,在步骤S101中,分布式存储系统或者其客户端接收用户通过业务系统发送的第一数据写入请求,其中,所述数据写入请求包括第一数据的标识信息,写入偏移量,数据大小和待写入的第一数据。
其中,分布式存储系统或者其客户端可根据数据的标识信息,为与该用户相关的数据分配相应的存储节点的子对象。写入偏移量是指第一数据相对于与该用户相关的数据的起始存储位置的偏移量。
继续在该实施例中,在步骤S102中,基于该分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片。
其中,根据该分布式存储系统部署时确定的纠删码组合(n,m),可预先确定组成每个条带化数据冗余组的原始数据分片的数量n和冗余数据分片的数量m,并可根据该分布式存储系统部署时确定的存储空间使用规划,预先确定要对写入数据进行复制的副本数量,副本数量至少为1(如果副本数量多于1个,可确定一个主副本和若干个从副本,若访问主副本异常,可根据预设顺序访问从副本,以提升数据的可用性)。根据这些参数,以及所述第一数据的标识信息,可确定存储第一数据的对应的存储节点的子对象,包括:用于存储被切分成原始数据分片的第一数据的原始数据子对象、存储对应原始数据分片拷贝的原始数据子对象副本和存储对应的冗余数据分片。
其中,原始数据子对象及其副本、冗余数据子对象应分布在不同的存储节点,或者至少是分布在同一个存储节点的不同硬盘,以尽可能降低异常数据分片同时出现的风险。
示例性的,采用(4,2)组合纠删码数据冗余策略的分布式存储系统中,写入的用户数据会根据预设数据分片的大小chunk size及与该用户数据相应的用户标识信息所对应的4个原始数据子对象0,1,2,3,被划分成原始数据分片,分配到这4个原始数据子对象0,1,2,3中存储,根据纠删码异步冗余编码计算得到的冗余数据分片分配到2个冗余数据子对象4、5中存储。若预先确定的副本数量为1,相应地,将划分成原始数据分片的用户数据写入原始数据子对象0,1,2,3对应的子对象副本,以实现对新写入的用户数据的副本冗余保护,当完成异步纠删码冗余编码后,实现对包括新写入的所有用户数据的纠删码冗余保护。一个包括2份副本的用于数据异步冗余编码的数据存储组织形式可如图3所示。若分布式存储系统包括6个存储节点,对应编号0,1,2,3,4,5,假如通过对第一数据写入请求中的标识信息进行哈希(hash)计算得到的结果是14,用14对存储节点数6进行模运算,模运算结果是2,则可确定要存储上述标识信息的相关数据对应的4个原始数据子对象0,1,2,3及其副本、2个冗余数据子对象4,5分布如下:原始数据子对象0及其副本分别在存储节点2,3;原始数据子对象1及其副本分别在存储节点3,4;原始数据子对象2及其副本分别在存储节点4,5;原始数据子对象3及其副本分别在存储节点5,0;冗余数据子对象4在存储节点0;冗余数据子对象5在存储节点1。如果预先确定的副本数量为2,包括1个主副本和1个从副本,则4个原始数据子对象0,1,2,3的主副本应分别在存储节点3,4,5,0,而4个原始数据子对象0,1,2,3的从副本应分别在存储节点4,5,0,1。
继续在该实施例中,在步骤S103中,基于该分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象。
其中,根据该分布式存储系统在部署阶段预先确定的数据分片的大小chunksize,要写入的第一数据的写入偏移量offset,数据长度data size,以及根据上述标识信息确定的各子对象信息,可确定该第一数据写入所覆盖的条带化数据冗余组的范围和该范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象。
示例性的,若采用(4,2)组合的纠删码数据冗余策略的分布式存储系统预先确定的数据分片的大小chunk size为64KB,则一个条带化数据冗余组中,4个原始数据分片的原始数据长度stripe original data size是256KB,加上2个冗余数据分片的数据长度,一个条带化数据冗余组中,总的数据长度stripe total data size是384KB。假设要写入的第一数据的写入偏移量offset为0KB(通常在同一标识信息相关的用户数据首次写入时),数据长度data size为352KB,可根据offset和data size计算第一数据写入覆盖的条带化数据冗余组的范围,比如,起始条带化数据冗余组start stripe可根据offset/stripe datasize取下整运算结果确定,此处为0,结束条带化数据冗余组end stripe可根据(offset+data size)/stripe data size取下整运算结果确定,此处为1。因此,要写入的352KB第一数据覆盖会stripe0和stripe1两个条带化数据冗余组。
每个条带化数据冗余组包括4个原始数据分片,最多256KB数据,再根据stripe0和stripe1两个条带化数据冗余组对应的原始数据子对象的可用存储区域block(每个block存储一个数据分片)情况,可进一步确定具体要覆盖stripe0和stripe1两个条带化数据冗余组内哪些子对象对应的存储区域block。其中,第一数据为上述标识信息相关数据的首次写入(若非首次写入,写入请求中的offset通常不是0KB),可确定,stripe0对应的写入偏移量offset0为0KB,stripe0对应原始数据子对象0,1,2,3的存储区域block00~block03都会被覆盖,stripe1对应的写入偏移量offset1为256KB,stripe1对应原始数据子对象0,1的存储区域block10~block11会被覆盖。
继续在该实施例中,在步骤S104中,基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象的元数据文件副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小,以完成所述第一数据的写入。
其中,根据该分布式存储系统在部署时预先确定的数据分片的大小chunk size,将上述写入数据请求中的第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件IOMetaFile,在元数据文件IOMetaFile中,记录对应原始数据子对象的写入偏移量和数据大小。
继续上述示例,可将352KB的第一数据划分成6份64KB的原始数据分片,其中,最后1份原始数据分片包括32KB有效数据和32KB的数据0(划分原始数据分片时,若用户数据不是chunk size的整数倍,可在数据尾部补零)。前4份原始数据分片可写入原始数据子对象0,1,2,3副本的存储区域block00~block03,后2份原始数据分片可写入原始数据子对象0,1,2,3副本的存储区域block10和block11,并且创建原始数据子对象0,1,2,3副本各自的元数据文件IOMetaFile,记录对应原始数据子对象的写入偏移量和实际写入的数据大小。具体地,先将原始数据子对象0,1,2,3副本的存储区域block00~block03的数据写入请求分别发送至原始数据子对象0,1,2,3副本所在的存储节点,其中,每个相关存储节点接收到的数据写入请求中包括相应的子对象的写入偏移量、数据大小(写入偏移量都为0KB,数据大小都为64KB)和原始数据分片,各存储节点在收到数据写入请求后,根据数据写入请求将相应的原始数据分片写入对应的子对象副本的block,并创建元数据文件IOMetaFile,其中记录对应原始数据子对象的写入偏移量0KB和实际写入的数据大小64KB;再将原始数据子对象0,1副本的存储区域block10~block11的数据写入请求分别发送至原始数据子对象0,1副本所在的存储节点,其中,数据写入请求中包括相应的写入偏移量、数据大小(写入偏移量都为64KB,block10对应的数据大小为64KB,block10对应的数据大小为32KB)和原始数据分片。并在原始数据子对象0,1副本各自的元数据文件IOMetaFile增加记录,比如,原始数据子对象0副本的元数据文件IOMetaFile中增加记录本次写入偏移量64KB和实际写入的数据大小64KB,原始数据子对象1副本的元数据文件IOMetaFile中增加记录本次写入偏移量64KB和实际写入的数据大小32KB(补零数据无需写入,因此,写入block11的实际数据大小为32KB)。由于第一数据的写入并不涉及到原始数据子对象2,3副本的block12~block13,因此,原始数据子对象2,3副本各自的元数据文件IOMetaFile中记录不变。
继续在该实施例中,在步骤S105中,基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
其中,分布式存储系统或者其客户端通过各存储节点后台运行的异步冗余编码服务,针对与上述标识信息相关的第一数据,会监测到对应的每个原始数据子对象副本的元数据文件IOMetaFile,其中,如有多个副本,可先监测原始数据子对象主副本的元数据文件IOMetaFile,如果不能成功,再监测原始数据子对象从副本的元数据文件IOMetaFile。根据解析元数据文件IOMetaFile获得的记录,对相关的写入数据进行异步冗余编码。在相关的写入数据异步冗余编码完成后,相关的写入数据都已处于纠删码冗余保护中,没有必要再保留相关的第一数据副本,可删除相关存储节点上的与第一数据的原始数据子对象副本及其元数据文件IOMetaFile,避免相关存储节点后台运行的异步冗余编码服务重复进行异步冗余编码操作,并可释放存储资源,提高存储资源利用率。
可选地,在步骤S105中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
读取每个原始数据子对象副本的元数据文件,以确定每个原始数据子对象对应的第一数据覆盖的条带化数据冗余组;
针对所述第一数据覆盖的每个条带化数据冗余组,从原始数据子对象副本中获取对应的原始数据分片,以及从原始数据子对象中获取对应的其它原始数据分片,合并成所述条带化数据冗余组的原始数据分片;
对合并后的条带化数据冗余组的原始数据分片进行异步冗余编码,得到所述条带化数据冗余组的新的冗余数据分片,并将相应原始数据子对象副本中的原始数据分片和生成的新冗余数据分片复制到相应的原始数据子对象和对应的冗余数据子对象;
遍历所述第一数据覆盖的每个条带化数据冗余组,以完成所述第一数据的异步冗余编码。
其中,分布式存储系统或者其客户端通过与第一数据对应的标识信息相关的存储节点上后台运行的异步冗余编码服务,监测到该标识信息相关的一个或者多个原始数据子对象副本的元数据文件IOMetaFile,解析每个元数据文件IOMetaFile中的记录,可得到与第一数据相关的原始数据子对象对应的已更新但还未完成异步冗余编码的原始数据分片及其覆盖的条带化数据冗余组的范围。再针对该第一数据覆盖的每个条带化数据冗余组,从相应的原始数据子对象副本中获取对应的原始数据分片,若该条带化数据冗余组还存在旧的原始数据分片,则分布式存储系统或者其客户端还从相关存储节点中获取相关原始数据子对象中的相应的旧的原始数据分片,合并成该条带化数据冗余组的全部原始数据分片。然后对合并后的全部原始数据分片进行纠删码异步冗余编码,得到该条带化数据冗余组的新的冗余数据分片,并分别向存储原始数据子对象和冗余数据子对象的相关存储节点发送原始数据分片和冗余数据分片写入请求,相关存储节点接收到该写入请求后,执行写入操作,将原始数据子对象副本中的原始数据分片以及得到的新的冗余数据分片分别写入对应的子对象,并将写入结果返回并同步给相关存储节点(若相关存储节点收到的是执行写入操作失败的写入结果,则会通过后台异步冗余编码服务后续监测到该元数据文件IOMetaFile时,会再次进行异步冗余编码)。遍历第一数据覆盖的每个条带化数据冗余组,直到处理完涉及到的每个条带化数据冗余组,以完成对第一数据和原有数据的纠删码冗余保护。
继续上述示例,在第一数据写入对应的子对象副本后,分布式存储系统或者其客户端通过相关标识信息对应的原始数据子对象0,1,2,3副本所在存储节点后台运行的异步编码服务,监测到各原始数据子对象副本的元数据文件IOMetaFile,解析该文件后,根据其中的记录,可得到每个原始数据子对象副本中对应的条带化数据冗余组中的原始数据(stripe0的block00~block03,stripe1的block10~block11中存储的数据)还未完成异步冗余编码,则针对每个条带化数据冗余组stripe0和stripe1进行纠删码异步冗余编码计算,得到对应的新的冗余数据。其中,针对stripe0,会从原始数据子对象0,1,2,3副本中block00~block03获取原始数据,进行纠删码编码计算后得到新的冗余数据分片,向存储原始数据子对象0,1,2,3以及存储冗余数据子对象4,5的相关存储节点分别发送写入请求,相关存储节点接收到写入请求后,执行写入操作,将原始数据子对象0,1,2,3副本中的相关原始数据以及得到的新的冗余数据分片分别写入对应的原始数据子对象0,1,2,3和冗余数据子对象的相应block(对应stripe0的block00~block05),并将写入结果返回并同步给相关存储节点。针对stripe1,会从原始数据子对象0,1,2,3副本中block10~block11获取原始数据(其中block10为64KB数据,block11为32KB数据),若原始数据子对象1,2,3的block11,block12,block13中存储有旧的原始数据,则从原始数据子对象1,2,3的存储节点的block11,block12,block13获取与第一数据无关的旧的原始数据(其中block11为32KB数据,block12,block13为64KB,如无有效数据,补齐数据零),合并后得到stripe1的完整原始数据分片,进行纠删码冗余编码计算后得到新的冗余数据分片,向存储原始数据子对象0,1及存储冗余数据子对象4,5的相关存储节点分别发送写入请求,相关存储节点接收到该写入请求后,执行写入操作,将原始数据子对象0,1副本中的相关原始数据以及得到的新的冗余数据分片分别写入对应的冗余数据子对象的相应block(对应stripe1的block10,block11,block14~block15),并将写入结果返回并同步给相关存储节点。第一数据写入并异步冗余编码后处于纠删码冗余保护状态的数据组织形式如图4所示。
当所有条带化数据冗余组的异步冗余编码执行成功后,写入分布式存储系统相关存储节点的与第一数据相关的原始数据分片以及原有的原始数据分片都已处于纠删码冗余保护中,没有必要再保留与第一数据相关的原始数据子对象0,1,2,3的副本,可删除相关存储节点上的原始数据子对象副本及其元数据文件IOMetaFile。
可选地,若所述从原始数据子对象中获取对应的其它原始数据分片时,存在不能成功获取的原始数据分片,所述方法还包括:
基于条带化数据冗余组相应的原始数据子对象和冗余数据子对象中成功获取的数据分片,对所述不能成功获取的原始数据分片进行数据恢复;
获取数据恢复后的原始数据分片。
其中,若该条带化数据冗余组还存在旧的原始数据分片,则分布式存储系统或者其客户端还从相关存储节点中获取原始数据子对象中的相应的旧的原始数据分片,合并成该条带化数据冗余组的全部原始数据分片。如果相关存储节点中的原始数据子对象中的相应的旧的原始数据分片异常不能成功获取,且异常的旧的原始数据分片数量不超过m份,则可以从该条带化数据冗余组的其它原始数据子对象和/或冗余数据子对象相应的正常的旧的数据分片(旧的原始数据分片和/或旧的冗余数据分片)中获取n份,然后通过纠删码编码计算,可恢复相应的旧的原始数据分片。获取数据恢复后的旧的原始数据分片后,再与该条带化数据冗余组的新写入的原始数据分片合并。
现有分布式存储系统中,冗余数据分片的异步冗余更新的耗时可达分钟级,比较耗时,而分布式存储系统的数据更新很频繁,如果每次都做异步冗余更新,会大大增加系统的读写开销,降低系统的服务性能。因此,分布式存储系统并不需要在每次写入数据时都对更新的原始数据分片进行异步冗余编码,而是可以通过轮询方式或预设一定周期定时进行,只在轮询到或者到期时针对相应的写入的原始数据分片进行异步冗余编码。比如,假设相同用标识信息的用户数据在一个轮询周期或者定时周期内更新了10次(每次写入的数据存储区域可以不重叠或部分重叠),分布式存储系统并不需要做10次异步冗余编码,只需要在轮询到或者到期时对第10次更新后的累计写入的用户数据进行纠删码异步冗余编码即可。
若针对前次写入的第一数据还未完成异步冗余编码,又接收到同一标识信息的第二数据写入请求,可选地,其中,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第二数据写入请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本;
若不存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述步骤S105中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码。
其中,根据该分布式存储系统在部署阶段预先确定的数据分片(data block)的大小chunk size,根据接收到的第二数据写入请求中的要写入的第二数据的写入偏移量offset,数据长度data size,以及根据上述标识信息确定的各子对象信息,可确定第二数据写入所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象。
继续上述示例,假设要写入的第二数据的写入偏移量offset为416KB,数据长度data size为256KB,可根据offset和data size计算第二数据写入覆盖的条带化数据冗余组的范围,根据取下整运算结果,可确定,起始条带化数据冗余组start stripe为1,结束条带条带化数据冗余组end stripe为2,因此,要写入的256KB第二数据会覆盖stripe1和stripe2两个条带化数据冗余组。
其中,根据数据分片的大小chunk size,将第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象及其副本。
继续上述示例,第二数据的写入偏移量为416KB,而每个条带化数据冗余组包括4份原始数据分片,每个数据分片的大小chunk size为64KB,再根据stripe1和stripe2两个条带化数据冗余组对应的原始数据子对象的可用存储区域block(每个block存储一个数据分片)情况,可进一步确定具体要覆盖stripe1和stripe2两个条带化数据冗余组内哪些子对象对应的存储区域block。具体地,可确定stripe1对应的写入偏移量offset1为160KB,stripe1对应原始数据子对象0,1,2,3的存储区域block12~block13会被覆盖,可写入96KB数据,则第二数据其它160KB数据会被写入stripe2,stripe2对应的写入偏移量offset2为512KB,可确定stripe2对应原始数据子对象0,1,2的存储区域block20~block22会被覆盖。
将256KB第二数据划分成原始数据分片,写入原始数据子对象0,1,2,3副本的存储区域block12~block13,以及block20~block22,其中,block12和block22存储32KB,其它block存储64KB,以实现对新写入的第二数据的副本冗余保护。
其中,若不存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小。
继续上述示例,在第一数据写入原始数据子对象0,1,2,3副本后,因还未完成异步纠删码冗余编码,原始数据子对象0,1,2,3副本的元数据文件IOMetaFile存在,无需新创建,在原始数据子对象0,1,2,3副本各自的元数据文件IOMetaFile中增加相关记录。
第一数据的相关原始数据分片写入原始数据子对象副本,涉及到相关存储节点的原始数据子对象0,1,2,3副本,对应原始数据子对象0(也即对应原始数据子对象0副本)的元数据文件IOMetaFile中有两条记录:
1、(对应条带化数据冗余组stripe0的)对应原始数据子对象0的写入偏移量0KB,数据大小64KB;
2、(对应条带化数据冗余组stripe1的)对应原始数据子对象0的写入偏移量64KB,数据大小64KB。
因为这两条记录内容正好相邻接,可合并,简化成一条记录,减少占用存储空间:
1、对应原始数据子对象0的写入偏移量0KB,数据大小128KB(若是重叠情况也可合并)。
对应原始数据子对象1(也即对应原始数据子对象1副本)的元数据文件IOMetaFile中有两条记录:
1、(对应条带化数据冗余组stripe0的)对应原始数据子对象1的写入偏移量0KB,数据大小64KB;
2、(对应条带化数据冗余组stripe1的)对应原始数据子对象1的写入偏移量64KB,数据大小32KB。
这两条记录内容正好相邻接,可合并,简化成一条记录:
1、对应原始数据子对象1的写入偏移量0KB,数据大小96KB。
对应原始数据子对象2(也即对应原始数据子对象2副本)的元数据文件IOMetaFile中有一条记录:
1、(对应条带化数据冗余组stripe0的)对应原始数据子对象2的写入偏移量0KB,数据大小64KB。
对应原始数据子对象3(也即对应原始数据子对象3副本)的元数据文件IOMetaFile中有一条记录:
1、(对应条带化数据冗余组stripe0的)对应原始数据子对象3的写入偏移量0KB,数据大小64KB。
第二数据的相关原始数据分片写入原始数据子对象副本,涉及到相关存储节点的原始数据子对象0,1,2,3副本,原始数据子对象0,1,2,3副本各自的元数据文件IOMetaFile中新增相关记录。
对应原始数据子对象0(也即对应原始数据子对象0副本)的元数据文件IOMetaFile中新增一条记录:
2、(对应条带化数据冗余组stripe2的)对应原始数据子对象0的写入偏移量128KB,数据大小64KB。
与原有的记录内容相邻接,可合并,简化成一条记录:
1、对应原始数据子对象0的写入偏移量0KB,数据大小192KB。
对应原始数据子对象1(也即对应原始数据子对象1副本)的元数据文件IOMetaFile中新增一条记录:
2、(对应条带化数据冗余组stripe2的)对应原始数据子对象1的写入偏移量128KB,数据大小64KB。
与原有记录内容不符合合并条件,则该元数据文件IOMetaFile中包括两条记录:
1、对应原始数据子对象1的写入偏移量0KB,数据大小96KB;
2、对应原始数据子对象1的写入偏移量128KB,数据大小64KB。
对应原始数据子对象2(也即对应原始数据子对象2副本)的元数据文件IOMetaFile中增加两条记录:
2、(对应条带化数据冗余组stripe1的)对应原始数据子对象2的写入偏移量96KB,数据大小32KB;
3、(对应条带化数据冗余组stripe2的)对应原始数据子对象2的写入偏移量128KB,数据大小32KB。
这两条记录内容相邻接,可合并,简化成一条记录,因此,该元数据文件IOMetaFile中包括两条记录:
1、对应原始数据子对象2的写入偏移量0KB,数据大小64KB;
2、对应原始数据子对象2的写入偏移量96KB,数据大小64KB。
对应原始数据子对象3(也即对应原始数据子对象3副本)的元数据文件IOMetaFile中增加一条记录:
2、(对应条带化数据冗余组stripe1的)对应原始数据子对象3的写入偏移量64KB,数据大小64KB。
与原有的记录内容相邻接,可合并,简化成一条记录:
1、对应原始数据子对象3的写入偏移量0KB,数据大小128KB。
若通过相关存储节点后台运行的异步冗余编码服务,轮询到或到期,则对写入的第一数据和第二数据进行异步冗余编码。步骤S105中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码。
其中,分布式存储系统或者其客户端通过各存储节点后台运行的异步冗余编码服务,针对与上述标识信息相关的第一数据和第二数据,会轮询或定期监测到对应的每个原始数据子对象副本的元数据文件IOMetaFile,根据解析元数据文件IOMetaFile获得的记录,对相关的写入数据进行异步冗余编码。在相关的写入数据异步冗余编码完成后,与上述标识信息相关的数据都已处于纠删码冗余保护中,没有必要再保留相关的第一数据和第二数据副本,可删除相关存储节点上的与第一数据和第二数据对应的原始数据子对象副本及其元数据文件IOMetaFile,避免相关存储节点后台运行的异步冗余编码服务重复进行异步冗余编码操作,并可释放存储资源,提高存储资源利用率。
继续上述示例,在第一数据和第二数据写入对应的子对象副本后,分布式存储系统或者其客户端通过相关标识信息对应的原始数据子对象0,1,2,3副本所在存储节点后台运行的异步编码服务,监测到各原始数据子对象副本的元数据文件IOMetaFile,解析该文件后,根据其中的记录,可得到每个原始数据子对象副本中对应的条带化数据冗余组中的原始数据分片(stripe0的block00~block03,stripe1的block10~block11,stripe1的block12~block13以及stripe2的block20~block22中存储的数据)还未完成异步冗余编码,则针对每个条带化数据冗余组stripe0,stripe1和stripe2,进行纠删码异步冗余编码计算,得到对应的新的冗余数据分片。其中,针对stripe0,会从原始数据子对象0,1,2,3副本中block00~block03获取原始数据,进行纠删码编码计算后得到新的冗余数据分片,向存储原始数据子对象0,1,2,3以及存储冗余数据子对象4,5的相关存储节点分别发送写入请求,相关存储节点接收到写入请求后,执行写入操作,将原始数据子对象0,1,2,3副本中的相关原始数据以及得到的新的冗余数据分片分别写入对应的原始数据子对象0,1,2,3和冗余数据子对象的相应block(对应stripe0的block00~block05),并将写入结果返回并同步给相关存储节点。针对stripe1,会从原始数据子对象0,1,2,3副本中block10~block13获取原始数据(其中block10,block13为64KB数据,block11,block12为32KB数据),若原始数据子对象1,2的block11,block12中存储有旧的原始数据,则还从相关存储节点的原始数据子对象1,2的block11,block12获取与第一数据和第二数据无关的旧的原始数据(其中block11,block12各为32KB数据,如无有效数据,补齐数据零),合并后得到stripe1的完整原始数据分片,进行纠删码冗余编码计算后得到新的冗余数据分片,向存储原始数据子对象0,1,2,3及存储冗余数据子对象4,5的相关存储节点分别发送写入请求,相关存储节点接收到该写入请求后,执行写入操作,将原始数据子对象0,1,2,3副本中的相关原始数据以及得到的新的冗余数据分片分别写入对应的冗余数据子对象的相应block(对应stripe1的block10,block13的全部区域,block11,block 12的部分区域,block14~block15),并将写入结果返回并同步给相关存储节点。针对stripe2,会从原始数据子对象0,1,2副本中block20~block22获取原始数据(其中block20,block21为64KB数据,block22为32KB数据),若原始数据子对象2,3的block22,block23中存储有旧的原始数据,则还从相关存储节点的原始数据子对象2,3的block22,block23获取与第一数据和第二数据无关的旧的原始数据(其中block22为32KB数据,block23为64KB数据,如无有效数据,补齐数据零),合并后得到strip2的完整原始数据分片,进行纠删码编码计算后得到新的冗余数据分片,向存储原始数据子对象0,1,2以及存储冗余数据子对象4,5的相关存储节点分别发送写入请求,相关存储节点接收到写入请求后,执行写入操作,将原始数据子对象0,1,2副本中的相关原始数据以及得到的新的冗余数据分片分别写入对应的原始数据子对象0,1,2和冗余数据子对象的相应block(对应stripe2的block20,block21的全部区域,block 22的部分区域,block24~block25),并将写入结果返回并同步给相关存储节点。第一数据和第二数据写入并异步冗余编码后处于纠删码冗余保护状态的数据组织形式如图5所示。
如果在所述第一数据进行异步冗余编码之前,分布式存储系统或者其客户端获取到数据读取请求,若待读取的数据中,一部分处于纠删码冗余保护状态,但还有一部分属于第一数据覆盖的区域,则为了准确读取最新数据,可选地,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第三数据读取请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
其中,根据获取的读取请求中的标识信息,可确定待读取的第三数据覆盖哪些存储节点的原始数据子对象及其副本,以及冗余数据子对象,进一步根据获取的读取请求中的读取偏移量和数据大小,可确定待读取的第三数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象。再将获取的读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件IOMetaFile中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,说明相关原始数据分片还未进行异步冗余编码,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
继续上述示例,在第一数据写入后还未进行异步冗余编码之前,处于副本冗余保护状态,获取的第三数据的读取请求中的标识信息与第一数据的相同(即涉及原始数据子对象0,1,2,3及其副本,以及冗余数据子对象4,5),假设读取偏移量是0KB,数据大小是512KB,可根据分布式存储系统确定的数据分片的大小,确定待读取的第三数据所覆盖的条带化数据冗余组包括条带化数据冗余组stripe0的block00~block03和stripe1的block10~block13中的原始数据分片,可知,覆盖的数据除了第一数据,还包括条带化数据冗余组stripe1的block12中存储的部分以及block13中存储的旧的原始数据(旧的原始数据通常已经完成异步冗余编码,处于纠删码冗余保护状态)。经与原始数据子对象0,1,2,3副本各自的元数据文件中记录逐个进行比较,涉及的条带化数据冗余组stripe0的block00~block03和stripe1的block10~block11全部以及block12中前32KB存储的原始数据都覆盖到,则从原始数据子对象副本中读取相应的原始数据;stripe1的block12中后32KB存储的原始数据以及block13中存储的原始数据未覆盖,则从该条带化数据冗余组相应的原始数据子对象对应的block12和block13读取,如果个别原始数据分片异常不能成功读取,可通过结合该条带化数据冗余组相应的原始数据子对象0,1,2,3中能正常读取的原始数据分片和/或冗余数据子对象4、5中的冗余数据分片来确定相应的原始数据分片(比如,block13中原始数据读取异常,可根据相关原始数据子对象的block10,block11,block12和冗余数据子对象的block14,block15中任意4个来确定),从而完成512KB第三数据的读取。
在第一数据完成异步冗余编码之后,相同标识信息的新的用户数据写入之前,该标识信息相关的所有数据都处于纠删码冗余保护状态。可选地,该一种用于数据异步冗余编码的方法还包括:
获取包括所述标识信息的第四数据读取请求;
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
其中,根据获取的第四数据读取请求中的标识信息,可确定待读取的第四数据覆盖哪些存储节点的原始数据子对象及其副本,以及冗余数据子对象,进一步根据获取的读取请求中的读取偏移量和数据大小,可确定待读取的第四数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本,以及冗余数据子对象。针对范围内的每个条带化数据冗余组,通过该条带化数据冗余组相应的原始数据子对象副本相应的存储节点后台运行的异步冗余编码服务,未监测到原始数据子对象副本的元数据文件IOMetaFile,说明与上述标识信息相关的数据都处于纠删码冗余保护状态,可逐个从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第四数据的读取。
继续上述示例,在新写入的第一数据、第二数据完成异步冗余编码之后,处于纠删码冗余保护状态,因为获取的第四数据的读取请求中的标识信息与第一数据、第二数据的相同,涉及到原始数据子对象0,1,2,3及其副本,以及冗余数据子对象4,5,假设第四数据的读取偏移量是0KB,数据大小是640KB,可根据分布式存储系统确定的数据分片的大小,确定待读取的第四数据所覆盖的条带化数据冗余组包括条带化数据冗余组stripe0的block00~block03、stripe1的block10~block13和stripe2的block20~block21中的全部原始数据。通过原始数据子对象0,1,2,3副本相应的存储节点后台运行的异步冗余编码服务,未监测到原始数据子对象副本的元数据文件IOMetaFile,说明要读取的第四数据都处于纠删码冗余保护状态。可逐个条带化数据冗余组读取,从stripe0的block00~block03、stripe1的block10~block13和stripe2的block20~block21中读取原始数据分片,如果个别原始数据分片异常不能成功读取,可通过结合该条带化数据冗余组相应的原始数据子对象0,1,2,3中能正常读取的原始数据分片和/或冗余数据子对象4、5中的冗余数据分片来确定相应的原始数据分片(比如,block13中原始数据读取异常,可根据相关原始数据子对象的block10,block11,block12和冗余数据子对象的block14,block15中任意4个来确定),从而完成640KB第四数据的读取。
本申请的上述各实施例和/或可选实施例中,先采用原始数据子对象副本对新写入的用户数据进行冗余保护,采用元数据文件IOMetaFile来记录新写入的用户数据的对应的写入偏移量和数据大小,可根据原始数据子对象副本的元数据文件IOMetaFile是否存在来判断分布式存储系统中是否存在未完成纠删码异步冗余编码的原始数据,若元数据文件IOMetaFile不存在,则说明没有新写入的用户数据需要进行纠删码异步冗余编码,若存在,说明有新写入的用户数据需要进行纠删码异步冗余编码,则解析元数据文件IOMetaFile,根据其中的记录确定还未进行异步冗余编码的新写入的用户数据覆盖范围,通过存储节点后台运行的异步冗余编码服务进行异步冗余编码。据此,使得新写入的用户数据在完成异步冗余编码前处于副本冗余保护状态,在完成异步冗余编码后处于纠删码冗余保护状态,可确保其高可用性。
图6示出根据本申请另一个方面的一种用于数据异步冗余编码的装置示意图,部署于分布式存储系统,其中,一个实施例的所述装置包括:
第一模块210,用于获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
第二模块220,用于:基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
第三模块230,用于:基于所述分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
第四模块240,用于:基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
第五模块250,用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
在该实施例中,该装置集成在分布式存储系统100中。其中,该分布式存储系统100与前述方法实施例和/或可选实施例中的分布式存储系统的软硬件环境相同。
在该实施例中,分布式存储系统100或者其客户端通过该装置的第一模块210,接收用户通过业务系统发送的第一数据写入请求,其中,所述数据写入请求包括第一数据的标识信息,写入偏移量,数据大小和待写入的第一数据。
继续在该实施例中,通过该装置的第二模块220,根据分布式存储系统100部署时确定的纠删码组合(n,m),可预先确定组成每个条带化数据冗余组的原始数据分片的数量n和冗余数据分片的数量m,并可根据分布式存储系统100部署时确定的存储空间使用规划,预先确定要对写入数据进行复制的副本数量,副本数量至少为1(如果副本数量多于1个,可确定一个主副本和若干个从副本,若访问主副本异常,可根据预设顺序访问从副本,以提升数据的可用性)。根据这些参数,以及所述第一数据的标识信息,可确定存储第一数据的对应的存储节点的子对象,包括:用于存储被切分成原始数据分片的第一数据的原始数据子对象、存储对应原始数据分片拷贝的原始数据子对象副本和存储对应的冗余数据分片。
继续在该实施例中,通过该装置的第三模块230,根据分布式存储系统100在部署阶段预先确定的数据分片的大小chunk size,要写入的第一数据的写入偏移量offset,数据长度data size,以及根据上述标识信息确定的各子对象信息,可确定该第一数据写入所覆盖的条带化数据冗余组的范围和该范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象。
继续在该实施例中,通过该装置的第四模块240,根据分布式存储系统100在部署时预先确定的数据分片的大小chunk size,将上述写入数据请求中的第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件IOMetaFile,在元数据文件IOMetaFile中,记录对应原始数据子对象的写入偏移量和数据大小。
继续在该实施例中,通过该装置的第五模块250,协调各存储节点后台运行的异步冗余编码服务,针对与上述标识信息相关的第一数据,会监测到对应的每个原始数据子对象副本的元数据文件IOMetaFile,其中,如有多个副本,可先监测原始数据子对象主副本的元数据文件IOMetaFile,如果不能成功,再监测原始数据子对象从副本的元数据文件IOMetaFile。根据解析元数据文件IOMetaFile获得的记录,对相关的写入数据进行异步冗余编码。在相关的写入数据异步冗余编码完成后,相关的写入数据都已处于纠删码冗余保护中,没有必要再保留相关的第一数据副本,可删除相关存储节点上的与第一数据的原始数据子对象副本及其元数据文件IOMetaFile,避免相关存储节点后台运行的异步冗余编码服务重复进行异步冗余编码操作,并可释放存储资源,提高存储资源利用率。
若针对前次写入的第一数据还未完成异步冗余编码,又接收到同一标识信息的第二数据写入请求,可选地,其中,若在对所述第一数据进行异步冗余编码之前,所述第一模块210获取到包括所述标识信息的第二数据写入请求,第三模块230还用于:
基于分布式存储系统100确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块240还用于:基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,若不存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述第五模块250用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
如果在所述第一数据进行异步冗余编码之前,分布式存储系统100或者其客户端获取到数据读取请求,若待读取的数据中,一部分处于纠删码冗余保护状态,但还有一部分属于第一数据覆盖的区域,则为了准确读取最新数据,可选地,其中,若在对所述第一数据进行异步冗余编码之前,所述第一模块获取到包括所述标识信息的第三数据读取请求,所述第三模块230还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块240还用于:将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
在第一数据完成异步冗余编码之后,相同标识信息的新的用户数据写入之前,该标识信息相关的所有数据都处于纠删码冗余保护状态。如果分布式存储系统100获取到新的数据读取请求,可选地,所述第三模块230还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
其中,所述第四模块240还用于:逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
上述装置的各个实施例和/或可选实施例中,装置各模块执行的方法步骤中未提及之处与前述各个相关的方法实施例中相同,在此不再赘述。
根据本申请的又一方面,还提供了一种计算机可读介质,所述计算机可读介质存储有计算机可读指令,所述计算机可读指令可被处理器执行以实现前述各方法实施例。
需要注意的是,本申请中各方法实施例和/或可选实施例并不严格限定各步骤执行的顺序,只要各方法实施例能解决现有技术存在的缺陷,实现本申请的发明目的,获得有益效果。本申请中各方法实施例可在软件和/或软件与硬件的组合体中被实施。本申请中涉及的软件程序可以通过处理器执行以实现上述各实施例的步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中。
另外,本申请的一部分或者全部可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。
根据本申请的再一方面,还提供了一种用于数据异步冗余编码的设备,该设备包括:存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该设备运行前述各实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件和/或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (12)
1.一种用于数据异步冗余编码的方法,应用于分布式存储系统,其特征在于,所述方法包括:
获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
基于所述分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
2.根据权利要求1所述的方法,其特征在于,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
读取每个原始数据子对象副本的元数据文件,以确定每个原始数据子对象对应的第一数据覆盖的条带化数据冗余组;
针对所述第一数据覆盖的每个条带化数据冗余组,从原始数据子对象副本中获取对应的原始数据分片,以及从原始数据子对象中获取对应的其它原始数据分片,合并成所述条带化数据冗余组的原始数据分片;
对合并后的条带化数据冗余组的原始数据分片进行异步冗余编码,得到所述条带化数据冗余组的新的冗余数据分片,并将相应原始数据子对象副本中的原始数据分片和生成的新冗余数据分片复制到相应的原始数据子对象和对应的冗余数据子对象;
遍历所述第一数据覆盖的每个条带化数据冗余组,以完成所述第一数据的异步冗余编码。
3.根据权利要求2所述的方法,其特征在于,若所述从原始数据子对象中获取对应的其它原始数据分片时,存在不能成功获取的原始数据分片,所述方法还包括:
基于条带化数据冗余组相应的原始数据子对象和冗余数据子对象中成功获取的数据分片,对所述不能成功获取的原始数据分片进行数据恢复;
获取数据恢复后的原始数据分片。
4.根据权利要求1所述的方法,其特征在于,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第二数据写入请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本;
若不存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码包括:
根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码。
5.根据权利要求1所述的方法,其特征在于,若在对所述第一数据进行异步冗余编码之前,获取到包括所述标识信息的第三数据读取请求,所述方法还包括:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取包括所述标识信息的第四数据读取请求;
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
7.一种用于数据异步冗余编码的装置,部署于分布式存储系统,其特征在于,所述装置包括:
第一模块,用于获取第一数据写入请求,其中,所述数据写入请求包括标识信息,写入偏移量,数据大小和待写入的第一数据;
第二模块,用于:基于所述分布式存储系统确定的条带化数据冗余组的原始数据分片的数量和冗余数据分片的数量,副本数量,以及所述标识信息,确定对应存储节点的子对象,其中,所述子对象包括原始数据子对象及对应的原始数据子对象副本和冗余数据子对象,分别用于存储原始数据分片,原始数据分片副本和冗余数据分片;
第三模块,用于:基于所述分布式存储系统确定的数据分片的大小,所述写入偏移量和所述数据大小,以及所述原始数据子对象,确定所述第一数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
第四模块,用于:基于所述数据分片的大小,将所述第一数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,以及创建每个原始数据子对象副本的元数据文件,记录对应原始数据子对象的写入偏移量和数据大小;
第五模块,用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
8.根据权利要求7所述的装置,其特征在于,若在对所述第一数据进行异步冗余编码之前,所述第一模块获取到包括所述标识信息的第二数据写入请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第二数据写入请求中的写入偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第二数据写入请求中的待写入的第二数据所覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块还用于:基于所述数据分片的大小,将所述第二数据分成若干原始数据分片,并逐个写入对应条带化数据冗余组相应的原始数据子对象副本,若不存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则创建所述原始数据子对象副本的元数据文件并记录对应原始数据子对象的写入偏移量和数据大小,若存在对应条带化数据冗余组相应的原始数据子对象副本的元数据文件,则更新所述元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小,其中,若本次的写入偏移量和数据大小与所述元数据文件中记录的写入偏移量和数据大小在范围上相邻接或有重叠,则进行合并,记录合并后对应原始数据子对象的写入偏移量和数据大小;
其中,所述第五模块用于:基于存储节点上运行的异步冗余编码服务,根据每个原始数据子对象副本的元数据文件,对所述第一数据和所述第二数据进行异步冗余编码,并删除已完成异步冗余编码的原始数据子对象副本及其元数据文件。
9.根据权利要求7所述的装置,其特征在于,若在对所述第一数据进行异步冗余编码之前,所述第一模块获取到包括所述标识信息的第三数据读取请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第三数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第三数据读取请求中的待读取的第三数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及其副本、冗余数据子对象;
其中,所述第四模块还用于:将所述第三数据读取请求中的读取偏移量和数据大小与所述范围内的每个条带化数据冗余组相应的原始数据子对象副本的元数据文件中记录的对应原始数据子对象的写入偏移量和数据大小逐个进行比较,若包括,则从原始数据子对象副本中读取相应的原始数据分片,若不包括,则从该条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定相应的原始数据分片,以完成所述第三数据的读取。
10.根据权利要求7所述的装置,其特征在于,若在对所述第一数据进行异步冗余编码之后,所述第一模块获取到包括所述标识信息的第四数据读取请求,所述第三模块还用于:
基于所述分布式存储系统确定的数据分片的大小,所述第四数据读取请求中的读取偏移量和数据大小,以及所述对应存储节点的子对象,确定所述第四数据读取请求中的待读取的第四数据覆盖的条带化数据冗余组的范围和所述范围内的每个条带化数据冗余组相应的原始数据子对象及冗余数据子对象;
其中,所述第四模块还用于:逐个从所述范围内的每个条带化数据冗余组相应的原始数据子对象和/或冗余数据子对象中确定原始数据分片,以完成所述第四数据的读取。
11.一种计算机可读介质,其特征在于,
其上存储有计算机程序指令,所述计算机程序指令被处理器执行以实现如权利要求1至6中任一项所述的方法。
12.一种用于数据异步冗余编码的设备,其特征在于,所述设备包括:
一个或多个处理器;以及
存储有计算机程序指令的存储器,所述计算机程序指令在被执行时使所述处理器执行如权利要求1至6中任一项所述方法的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310109068.2A CN116069545A (zh) | 2023-02-13 | 2023-02-13 | 一种用于数据异步冗余编码的方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310109068.2A CN116069545A (zh) | 2023-02-13 | 2023-02-13 | 一种用于数据异步冗余编码的方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116069545A true CN116069545A (zh) | 2023-05-05 |
Family
ID=86181809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310109068.2A Pending CN116069545A (zh) | 2023-02-13 | 2023-02-13 | 一种用于数据异步冗余编码的方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116069545A (zh) |
-
2023
- 2023-02-13 CN CN202310109068.2A patent/CN116069545A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106547859B (zh) | 一种多租户数据存储系统下的数据文件的存储方法及装置 | |
US9507788B2 (en) | Methods and apparatus for distributed data storage | |
US11537659B2 (en) | Method for reading and writing data and distributed storage system | |
CN109683826B (zh) | 用于分布式存储系统的扩容方法和装置 | |
US8285689B2 (en) | Distributed file system and data block consistency managing method thereof | |
CN106776130B (zh) | 一种日志恢复方法、存储装置和存储节点 | |
US9846540B1 (en) | Data durability using un-encoded copies and encoded combinations | |
US20150310054A1 (en) | Data mobility, accessibility, and consistency in a data storage system | |
US11531488B2 (en) | Copy-on-write systems and methods | |
US7761431B2 (en) | Consolidating session information for a cluster of sessions in a coupled session environment | |
US11093387B1 (en) | Garbage collection based on transmission object models | |
CN109582213B (zh) | 数据重构方法及装置、数据存储系统 | |
JP2010079886A (ja) | 拡張可能な2次ストレージシステムと方法 | |
CN111221678A (zh) | Hbase数据备份/恢复系统、方法、装置及电子设备 | |
EP3598289B1 (en) | Data storage, distribution, reconstruction and recovery methods and devices, and data processing system | |
US20190347165A1 (en) | Apparatus and method for recovering distributed file system | |
KR101441059B1 (ko) | 분산 파일 시스템에서 효율적인 자료 저장 방법 | |
CN114416665B (zh) | 一种数据一致性检测和修复的方法、装置及介质 | |
US20220129346A1 (en) | Data processing method and apparatus in storage system, and storage system | |
CN109254958B (zh) | 分布式数据读写方法、设备及系统 | |
CN112579550B (zh) | 一种分布式文件系统的元数据信息同步方法及系统 | |
CN114153395B (zh) | 一种对象存储数据生命周期管理方法、装置及设备 | |
CN116069545A (zh) | 一种用于数据异步冗余编码的方法、装置及设备 | |
US11645333B1 (en) | Garbage collection integrated with physical file verification | |
CN111400098A (zh) | 一种副本管理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |