CN110431538B - 存储系统控制 - Google Patents

存储系统控制 Download PDF

Info

Publication number
CN110431538B
CN110431538B CN201780088385.3A CN201780088385A CN110431538B CN 110431538 B CN110431538 B CN 110431538B CN 201780088385 A CN201780088385 A CN 201780088385A CN 110431538 B CN110431538 B CN 110431538B
Authority
CN
China
Prior art keywords
data
data blocks
storage system
updated
redundant storage
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.)
Active
Application number
CN201780088385.3A
Other languages
English (en)
Other versions
CN110431538A (zh
Inventor
任晶磊
T·莫斯希布罗达
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN110431538A publication Critical patent/CN110431538A/zh
Application granted granted Critical
Publication of CN110431538B publication Critical patent/CN110431538B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2064Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring while ensuring consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0653Monitoring storage devices or systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/82Solving problems relating to consistency

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

提出了一种用于控制冗余存储系统的新的方法。接收(310)对冗余存储系统的写入请求。确定(320)要通过写入请求写入到冗余存储系统中的数据集。将数据集的一部分记录日志(330)在冗余存储系统中,以用于在冗余存储系统中出现故障的情况下进行数据恢复。由此仅将数据集的一部分记录日志,并且与传统的冗余存储系统相比,可以减少所记录日志的数据的量。另外,可以响应于冗余存储系统中发生故障而恢复冗余存储系统。

Description

存储系统控制
背景技术
随着数据存储技术的发展,各种数据存储系统目前为用户提供更高的数据存储容量。同时,数据存储系统的可靠性,诸如崩溃一致性和容错性,也被显著改进。迄今为止,已经提出了基于独立硬盘冗余阵列(RAID)的存储系统,以便增加数据访问带宽并且增强容错能力。当RAID中的一个或多个存储节点失效时,可以从正常操作的其他节点中的数据恢复失效存储节点中的数据。
除了数据存储容量和可靠性的增加之外,用户还对数据访问的响应性提出了更高的要求。在传统的RAID系统中,为了提供容错能力,必须在系统中的存储节点之间维护与数据块相关的冗余数据。另外,在用于写入数据块的操作期间,数据块将被两次分别写入存储系统的日志区和数据区,以提供崩溃一致性机制。在维护此类数据存储系统时将产生附加的开销。
发明内容
根据本文描述的主题的实现,提出了一种用于控制冗余存储系统的新的解决方案。一般而言,如果接收到对冗余存储系统的写入请求,则确定要由该写入请求写入到冗余存储系统的数据集。将数据集的一部分记录日志到冗余存储系统中,以用于在冗余存储系统中发生故障时进行数据恢复。利用所提出的实现,仅将数据集的一部分记录日志,并且与传统冗余存储系统相比可以减少记录日志数据的量。另外,可以响应于冗余存储系统中发生的故障而恢复冗余存储系统。
需要理解,本发明内容不旨在标识本文描述的主题的实现的关键或者必要特征,也不旨在用于限制本文描述的主题的范围。本文描述的主题的其他特征将通过以下描述而变得易于理解。
附图说明
在附图和下文描述中阐述本文描述的主题的一个或多个实现的细节。公开内容的其他特征、方面和优点将从描述、附图和权利要求中变得易见,其中:
图1A是图示了存储系统的架构的示意图;并且图1B是图示了数据恢复过程的示意图,该数据恢复过程响应于存储系统中的存储节点中的一个存储节点发生故障;
图2是根据本文描述的主题的示例实现的存储系统的架构的框图;
图3是根据本文描述的主题的示例实现的用于控制数据存储的示例方法的流程图;
图4是根据本文描述的主题的示例实现的用于控制数据存储的示例方法的流程图;
图5是根据本文描述的主题的示例实现的一些指示符之间的关系的示意图;
图6是根据本文描述的主题的示例实现的用于将数据写入到存储系统的条带中的示例方法的流程图;
图7是展示本文描述的主题的示例实现的安全性的图;
图8A是根据本文描述的主题的示例实现的用于基于UNDO日志将数据写入到存储系统的条带中的示例方法的流程图;
图8B是根据本文描述的主题的示例实现的用于基于REDO日志将数据写入到存储系统的条带中的示例方法的流程图;
图9是根据本文描述的主题的示例实现的用于将数据写入到存储系统的多个条带中的条带中的示例方法的流程图;
图10是根据本文描述的主题的示例实现的用于从存储系统的多个条带中的条带恢复数据的示例方法的流程图;
图11A、图11B和图11C分别是根据本文描述的主题的各种示例实现的控制数据存储的架构的框图;以及
图12是适于实现本文描述的主题的一个或多个实现的设备的框图。
在全部附图中,相同或相似的附图标记将总是指示相同或相似的元件。
具体实施方式
现在将参考一些示例实现来描述本文描述的主题的原理。需要理解的是,这些实现仅是为了说明并且帮助本领域技术人员理解和实现本文描述的主题的目的而进行描述,而不是对公开内容的范围提出任何限制。本文描述的公开内容可以按照下文描述的方式之外的各种方式来实现。
如本文使用的,术语“包括”及其变体将被解读为开放式术语,其意思是“包括但不限于”。术语“基于”将被解读为“至少部分基于”。术语“一”将被解读为“一个或多个”,除非另外说明。术语“一个实现”和“实现”将被解读为“至少一个实现”。术语“另一实现”将被解读为“至少一个其他实现”。另外,需要理解的是,在本文描述的主题的上下文中,术语“第一”、“第二”等等用于指示个体元件或组件,而不对这些元件的顺序提出任何限制。另外,第一元件可以与第二元件相同或不相同。在下文中可能包括明确的和隐含的其他定义。
通常,RAID存储系统可以将多个存储设备组合到硬盘阵列中。通过提供冗余存储设备,整个硬盘组的可靠性可以显著超越单个存储设备。已知的RAID标准包括例如RAID 1、RAID 2、RAID 3、RAID 4、RAID 5、RAID 6、RAID 7等等。从操作系统的角度来看,包括多个存储设备的硬盘阵列可以被认为是单个逻辑存储单元或硬盘。通过将硬盘阵列划分为条带,数据可以跨多个存储设备分布,从而实现低延迟和高带宽。另外,在某些硬盘损坏时,可以在至少某种程度上恢复数据。
图1A是图示了冗余存储系统的架构的示意图。在该附图中,通过采用RAID 4作为示例来图示系统的工作原理,RAID 4包括四个独立的存储节点(110、120、130和140)。应当注意,虽然在图1A中示意性地示出了四个存储节点,但是根据RAID的不同标准,在其他实施方式中可以包括更多或更少的存储节点。另外,虽然在图1A中示出了条带152、154和156,但是在其他示例中,RAID系统还可以包括不同数目的条带。
在RAID中,条带可以跨越多个物理存储节点(例如,条带152跨越存储节点110、120、130和140)。条带152可以被解释为多个存储节点之中的存储区域,该存储区域满足给定地址范围。存储在条带152中的数据可以包括多个部分:存储在存储节点110中的数据块D1、存储在存储节点120中的数据块D2、存储在存储节点130中的数据块D3和存储在存储节点140中的数据块P。在条带152中,数据块D1、D2和D3用于存储数据,并且数据块P用于存储从数据块D1至D3确定的数据的校验。
其他条带154和156中的数据块类似于条带152中的那些数据块,并且区别在于条带154中的其他数据块的校验可以存储在另一存储节点中。以这种方式,当多个存储节点110至140中的一个存储节点失效时,可以从其他正常存储节点恢复失效节点中的数据。
图1B是图示了数据恢复过程的示意图,该数据恢复过程响应于存储系统中的存储节点中的一个存储节点中发生故障。如图1B中所示,当一个存储节点(例如,以阴影示出的存储节点140)失效时,可以从正常操作的其他存储节点110、120和130恢复数据。此时,可以将新的备用节点140B添加到存储系统以替换失效存储节点140。以这种方式,可以将恢复的数据写入到140B中以生成数据块P’,并且由此可以恢复存储系统。
虽然图1A和图1B中图示的冗余存储系统可以改善容错能力,但是存储系统本身仅充当底层物理存储,而不处理数据的崩溃一致性。在处理写入请求时,将要被写入到存储系统中的数据块将被记录日志到存储系统中,这通常由上层文件系统或数据库负责。因此,所有的相关联数据块将被写入两次(所谓的“两次写入”),一次用于记录日志,并且另一次用于实际更新到存储节点中,以使得在系统崩溃时任何数据块损坏的情况下将能够从记录日志数据恢复数据块。由于记录日志的成本,两次写入过程可能导致几个缺点。一方面,用于处理写入请求的时间可能增加,并且可能产生处理中的附加延时。另一方面,两次写入过程可能将额外数据写入到存储设备中,并且增加存储设备的写入磨损。另外,由于两次写入可能影响吞吐量。
为了至少部分解决以上和其他潜在问题,本文提出了一种用于控制冗余存储系统的新方法和设备。在下文中,冗余存储系统简称为“存储系统”。发明人的见解是,考虑到容错机制和崩溃一致性机制都引入了数据冗余,共同设计两种机制可以优化存储系统的可靠性,同时最小化数据冗余的量。基于这样的见解,在本文描述的主题的实现中,提出了存储系统的综合可靠性水平,该综合可靠性水平协同来自容错机制和崩溃一致性机制二者的数据冗余。此外,基于存储系统的综合可靠性水平,协同的数据冗余除了保证由底层物理存储提供的容错能力之外,还可以天然地保证崩溃一致性。
特别地,根据本文描述的主题的实现,在接收到对存储系统的写入请求时,确定要通过写入请求写入到存储系统中的数据集。数据集的一部分而不是全部被记录日志到存储系统中,以用于在存储系统中发生故障情况下的数据恢复。利用所提出的实现,仅将数据集的一部分记录日志,并且与传统存储系统相比,可以最小化被记录日志的数据的量。另外,响应于存储系统中发生的故障,可以恢复存储系统。
图2是根据本文描述的主题的示例实现的存储系统的架构200的框图。在图2中,存储系统中包括四个存储节点110、120、130和140。例如,这些存储节点可以按照与RAID 4存储系统的存储节点相似的方式进行工作。控制单元210被提供用于控制存储系统的操作,并且高速缓存220被提供用于在存储操作期间存储中间数据。在本文描述的主题的其他实现中,也可以采用各种数目的存储节点和RAID标准。
图3是根据本文描述的主题的示例实现的用于控制存储系统的示例方法300的流程图。方法300可以由如图2中所示的控制单元210来实现。在310处,接收对存储系统的写入请求。写入请求是用于将数据写入到存储系统中的请求。
在320处,确定要通过写入请求写入到存储系统中的数据集。通常,写入请求可以指示要被写入到存储系统中的数据集以及数据可以被写入到的目标地址。因此,可以从写入请求来确定数据集。例如,在一些实现中,可以在320处确定要被写入到存储系统中的第一数目的数据块。
在330处,将数据集的一部分记录日志到存储系统中,以用于在存储系统中发生故障的情况下进行数据恢复。以这种方式,不再需要将存储系统中的所有数据集记录日志。而是,仅将数据集的一部分记录日志,以用于在存储系统故障的情况下的潜在数据恢复。在一些实现中,可以确定小于第一数目的第二数目,以使得仅将第二数目的数据块记录日志到存储系统中。
利用所提出的方法300,可以减少要被记录日志的数据的量,并且由此可以在一定程度上减轻“两次写入”的缺点。转而可以改善存储设备的磨损和存储系统的吞吐量。在上文描述的实现中,可以将从第一数目的数据块中选择的第二数目的数据块记录日志到存储系统中。
现在将参考图4描述方法300的示例实现,图4示出了用于控制存储系统的示例方法400的流程图。如所示的,在410处,从写入请求确定第一数目(由u表示)的数据块。在一些实现中,可以根据存储系统中支持的数据块的大小来确定第一数目u。例如,如果写入请求涉及将128KB数据写入到存储系统中,并且每个数据块的大小是32KB,则应当将u=128/32=4个数据块写入到存储系统中。
在420处,基于存储系统的可靠性水平确定小于第一数目u的第二数目(由l表示)。在一些实现中,可以针对存储系统的不同可靠性水平设置l的最小值。针对存储系统的给定可靠性水平,则可以从等于或大于l的最小值的一个或多个值中选择l的值,该l的最小值是基于可靠性水平而确定的。也即,由存储系统的可靠性水平来限定l的值。在实现中,能够以多种方式来指定l的值。例如,作为一种直接的方式,根据存储系统的可靠性水平可以为各个l的值预先定义查找表。又例如,可以由预先定义的函数基于存储系统的可靠性水平来给定l的值。
在430处,可以将与第二数目的数据块相关联的数据记录日志到存储系统中,所述第二数目的数据块来自于第一数目的数据块。首先,可以从u个数据块中选择l个数据块。从u个数据块中选择l个数据块的方式在本文中不做限制。在一个实现中,可以随机地选择l个数据块,而在其他实现中,可以从u个数据块中选择前l个数据块或者后l个数据块。另外,可以将与所选择的l个数据块相关联的数据记录日志。基于记录日志的各种类型,与所选择的l个数据块相关联的数据可以具有各自的意义,并且细节将在下文中描述。
在一个实现中,如果采用UNDO记录日志,则可以将所选择的数据块中的原始版本记录日志。在另一实现中,如果使用REDO记录日志,则可以将由写入请求定义的数据的更新版本记录日志。在本文中,原始版本是指所选择的数据块中的原始数据,并且更新版本是指将要被写入到所选择的数据块中的数据。将在以下段落中描述记录日志的细节。
众所周知地,通常存储系统中的一个或多个存储节点用于存储校验数据。给定系统的可靠性水平,允许存储节点中的一些存储节点失效。因此,在本文描述的主题的一些实现中,可以基于存储系统的可靠性水平来确定存储系统中允许的失效存储节点的数目。继而可以从允许的失效存储节点的数目来确定第二数目。仅为了说明,将参考RAID存储系统作为示例来描述示例实现。
为了讨论的目的,假设RAID存储系统中包括第三数目(由n表示)的存储节点。在n个存储节点之中,可以具有第四数目(由m表示)的存储节点用于存储校验。对于条带,m个存储节点可以存储针对(n-m)个存储节点中的数据的校验。m的值反映存储系统的容错能力,并且当上至m个存储节点失效时,存储系统可以恢复。基于各个RAID标准下的RAID系统的容错水平,n和m可以具有各自的值。例如,在如图1A和图1B所图示的RAID 4中,n=4并且m=1。在RAID 6系统中,n=5并且m=2。
为清楚起见,在写入过程期间存储系统中允许的失效存储节点的数目称为第五数目(由f表示)。在本主题的上下文中,写入过程此处是指响应于接收到写入请求而执行的整个过程,并且写入过程在接收到写入请求时开始,并且在完成写入请求时结束。表1示出了本文描述的指示符的定义,其中它们的值是整数。
表1.指示符的定义
Figure BDA0002200731440000081
应当理解,在主题的上下文中,第四数目m和第五数目f具有本质上不同的含义。更具体地,m是由RAID系统的性质定义的,而f是用于配置存储系统中允许多少失效存储节点的定制的值。f的值反映了用于日志数据的存储空间和写入性能之间的权衡。因此,通过设置f<m,有可能减少甚至最小化要被记录日志的数据量。
在本文描述的主题的实现中,f总是被设置为小于m。否则,如果f=m,则在写入请求期间应当将所有的u个数据块记录日志,并且要被记录日志的数据的量不会减少。如果f>m,由于RAID的性质,将不能够从具有多于m个失效存储节点的降级存储系统中恢复数据。
在一些实现中,提出了独立非易失性主存储器(NVMM)冗余阵列存储系统(在下文中称为“RAIN”),其中RAIN可以基于RAID,并且因此就其性质而言具有与RAID相同的个体容错水平。
另外,在容错水平之上,可以通过定制RAIN存储系统中允许的失效存储节点的数目来配置期望的可靠性水平。表2示出了RAIN和RAID的对应关系。
表2.RAIN和RAID之间的对应关系
Figure BDA0002200731440000091
在表2中,第一列和第三列分别指示RAIN和RAID的可靠性水平,并且第二列和第四列分别指示RAIN和RAID的容错性。考虑最后一行“RAIN 7”作为示例,RAIN 7的容错性是f,其小于RAID 7的值m。此时,如果RAIN中n个存储节点中的f个存储节点失效,则可以从失效恢复RAIN。f的值可以由用户需求指定。
图5是根据本文描述的主题的示例实现的指示符之间的关系的示意图500。在该示例中,存储系统包括n个存储节点,并且一个或多个条带可以跨越n个存储节点配置。为了简单起见,图5图示了一种情景,其中存储系统仅包括一个条带,并且存储节点中的每个存储节点中仅具有一个数据块。此时,存储节点的数目等于数据块的数目,并且数据块510、512、514、516、518、520和522的数目是n。
在图5中,具有m个存储节点用于存储校验。在该示例中的总共n个存储节点中,允许f个失效存储节点。然而,需要理解的是,图5中的示意图仅是为了说明的目的。指示符被图示为示出2的值之间的关系,并且它们的位置仅是示意性的而不应当作为限制。例如,存储数据块510、……、512的备选m个存储节点可以用于存储校验数据,并且要被写入的u个数据块可以由任何其他数据块表示。在n个存储节点中,上至f个存储节点但是小于m个存储节点的任何存储节点允许失效。另外,指示符δ可以被设置为u-l,如图5中所示。因此,响应于写入请求,可以避免将δ个数据块记录日志到存储系统中,这样与传统RAID系统相比,可以减少用于将数据记录日志的存储空间。
需要注意,虽然图5中图示了连续的数据块,但是数据块本质上可以是虚拟的,并且在存储系统中无需是物理上连续的。而是,数据块应被理解为逻辑概念,其可以是以任何适当的方式物理地存储在存储系统中的一个或多个存储节点之中。在一些实现中,可以以分布式方式虚拟地组织RAIN,并且数据块的地址可以在各种物理位置处分布在多个存储节点之中。
在本文描述的主题的一些实现中,可以基于存储系统的可靠性水平来确定n、m和f的值。给定可靠性水平,可以确定RAID的相对应的容错水平。继而可以确定包括在存储系统中的存储节点的第三数目n和用于存储校验的存储节点的第四数目m。另外,基于可靠性水平,可以确定存储系统中允许的失效存储节点的第五数目f,其中f小于m。在已经确定了n、m和f的值的情况下,响应于写入请求,相对于要被写入到存储节点中的第一数目u的数据块,可以确定要被记录日志的第二数目l的数据块。
应当理解,虽然本文的主题通过采用NVMM阵列作为RAIN中的冗余阵列描述了一些实现,但是这仅是示例,而并不对主题的范围提出任何限制。除了如上文所例示的基于硬盘的RAID存储系统之外或者作为其备选,也可以使用任何其他适当类型的冗余阵列。众所周知NVMM具有高可用性和高带宽,与硬盘相比可以提高存储性能。话虽如此,然而,RAIN仅是实现的一种,并且不应当被视为主题的必要元素。
在RAID实现中,可以将存储节点划分为多个条带,并且响应于写入请求而要被写入到存储节点中的数据可以跨多个条带分布。当涉及不止一个条带时,也可以从写入请求来确定要被写入到个体条带中的数据块的数目。针对每个条带,以相似的方式执行写入过程,写入过程包括记录日志程序和更新程序。将参考图5、图6、图7、图8A和图8B来描述实现的细节,其中要被写入的数据块在存储系统的条带内。
在这些实现中,存储节点可以包括日志区和数据区,其中日志区用于在处理写入请求时存储所记录日志的数据块,数据区用于存储数据。参考图5,为了将l个数据块记录日志到存储节点中,可以将与l个数据块中的给定数据块相关联的数据记录日志到给定数据块所驻留于其上的存储节点的日志区。例如,对于l个数据块中的数据块512,可以将与数据块512相关联的数据记录日志到数据块512所驻留于其上的存储节点中。针对l个数据块中的另一数据块514,可以将与数据块514相关联的数据记录日志到数据块514所驻留于其上的存储节点中。
在本文描述的主题的一些实现中,与给定数据块相关联的数据可以具有不同的含义。如果采用UNDO记录日志,则给定数据块中的原始版本是与给定数据块相关联的数据。在另一实现中,如果使用REDO记录日志,则将要通过写入请求写入的数据的更新版本是与给定数据块相关联的数据。
在本文描述的主题的一些实现中,可以基于以下因素来确定第二数目l:第一数目u,其表示要被写入的数据块的数目;第三数目n,其表示包括在存储系统中的存储节点的数目;第四数目m,其表示用于存储校验的存储节点的数目;以及第五数目f,其表示存储系统中允许的失效存储节点的数目。
通过示例的方式,在本文描述的主题的一些实现中,可以基于如下公式(1)来确定第二数目:
Figure BDA0002200731440000121
其中,u表示第一数目,l表示第二数目,n表示第三数目,m表示第四数目,并且f表示第五数目,如上文所述。基于以上公式(1),可以根据n、m和f的值来确定l的值。应当理解,公式(1)仅为了说明的目的而给出,而不对本文描述的主题的范围提出任何限制。可以以任何其他适当的方式来使用这些因素。备选地,在其他实现中,可以将更多或更少的因素纳入考虑。
响应于在写入过程期间存储节点中发生的故障,应当能够基于日志数据和非失效存储节点中的数据来恢复失效存储节点中的数据。本文中故障可以包括硬件失效、数据传输超时以及节点崩溃时的数据损坏。因为故障可能在写入过程期间的任何阶段发生,所以当故障发生的任何阶段,日志数据和非失效存储节点中的数据都应当足以恢复失效存储节点中的数据。在这样的考虑下,在主题的一些实现中,提出了一种用于将数据写入到u个数据块中的方法。图6是根据本文描述的主题的示例实现的用于将数据写入到存储系统的条带中的方法600的流程图。基于方法600,在失效存储节点的数目不超过f的范围内,无论在写入过程期间任何时候发生故障,都可以恢复数据。
在本文描述的主题的一些实现中,取决于REDO/UNDO记录日志,可以将原始版本和更新版本中的任何一个记录日志以用于数据恢复。具体地,可以确定与l个数据块相关联的数据的原始版本,并且可以基于写入请求确定与l个数据块相关联的数据的更新版本。可以将与l个数据块相关联的数据的原始版本和更新版本中的任何一个版本记录日志到l个数据块的相应存储节点中的相应日志区中;并且可以在l个数据块中维护与l个数据块相关联的数据的其他版本。
如图6中所示,在610处,将l个数据块的原始版本和更新版本中的任一个记录日志。针对UNDO记录日志,可以将原始版本记录日志到日志区中,并且可以将更新版本写入到l个数据块中。针对REDO记录日志,可以将更新版本存储到日志区中,并且可以将原始版本保持在l个数据块中。此时,不管所选择的记录日志策略如何,l个数据块的原始版本和更新版本都存储在存储系统中。接下来,在多个阶段中,可以基于写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版本来更新(u-l)个数据块。
图6中的框620至640图示了多个阶段中的每个阶段的细节。在620处,在多个阶段的第一阶段中,基于写入请求,可以利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本来更新上至(m-f)个数据块。可以以随机方式或预先定义的方式从没有被记录日志的(u-l)个数据块中选择(m-f)个数据块。
在630处,在多个阶段的第二阶段中,在既没有被记录日志也没有被更新的剩余数据块中,可以基于写入请求,利用与上至(δ-2*(m-f))个数据块相关联的数据的更新版本,来更新上至(δ-2*(m-f))个数据块,其中δ=u-l。应当理解,如果δ-2*(m-f)≤0,则可以从方法600中省略在630处的更新程序。
在多个阶段的第三阶段中,可以更新u个数据块的其余未更新部分。具体地,在640处,可以基于写入请求,利用与该剩余部分相关联的数据的更新版本来更新u个数据块的该部分。此时u个数据块的未更新部分可以包括类型1的数据块,其中类型1是指到目前为止既没有被记录日志也没有更新的(u-l)个数据块的剩余部分。另外,在使用REDO记录日志时,u个数据块的未更新部分可以另外包括类型2的数据块,其中类型2是指在记录日志程序期间其更新版本被记录日志到日志区中的l个数据块。利用REDO记录日志,将l个数据块的更新版本记录日志,同时数据区中的l个数据块仍然是原始版本。由此,应当利用更新版本来更新类型2的数据块。当更新了以上两种类型的数据块时,成功地更新了u个数据块中的所有数据。
图7是示出了本文描述的主题的示例实现的安全性机制的图。此处,安全性意味着:即使在存储系统中的f个存储节点中的任何或全部存储节点可能发生故障的情况下,主题的实现也可以保证写入过程期间的数据可恢复性。可以对于以下两个动作来证明安全性:
动作1.并行地将相应的l个数据块记录日志和更新到存储节点
中相应的日志区中是安全的(此时,l个数据块可以具有原始版
本和更新版本二者);
动作2.更新(u-l)个数据块也是安全的。
关于动作1,如果f<m个存储节点失效,则RAID的性质可以保证动作1是安全的,本领域技术人员可以理解并且本文将不详细描述。
关于动作2,可以在多个阶段中更新(u-l)个数据块,并且如果每个阶段是安全的,则将满足安全性要求。这将参考图7和以下表3进行详细解释,表3示出了写入程序期间的条带的状态。此处,写入程序是指用于更新(u-l)个数据块的多个阶段中的每个阶段中执行的程序。
表3.条带的状态
Figure BDA0002200731440000141
写入过程中无论何时发生故障时,都需要从非失效存储节点中的现有数据恢复数据(例如,基于回滚或前滚策略)。在本文描述的主题的一些实现中,响应于存储系统中的f个存储节点中的任何存储节点发生故障,可以从现有数据分别确定具有原始版本的数据块的第一群组以及具有更新版本的数据块的第二群组。通过比较两个群组中分别包括的数据块的量,可以决定数据恢复策略,基于该数据恢复策略可以从非失效存储节点中的现有数据来恢复数据。
特别地,为了讨论的目的,假设已经更新了(u-l)个数据块中的d个数据块(d=0指示动作2的开始状态),并且更新程序中正在更新∈个块,如图7中的点(d,∈)所图示,其中,横轴表示d,而纵轴表示∈。
图7中图示的三个区域710、720和730分别与图6中框620、630和640处描述的阶段相对应。在整个回滚区域710中,其中回滚区域710与框620处的第一阶段相对应,可以更新没有被记录日志的上至(m-f)个数据块。如果并行更新(m-f)个数据块,而此时f个存储节点失效,则将有总共(m-f)+f=m个数据块不可用于数据恢复。然而,由于RAID的性质,将能够从条带的其余(n-m)个数据块中的可用数据而恢复数据。这证明了在框620处的第一阶段中并行更新上至(m-f)个数据块是安全的。易于理解的是,在第一阶段中,具有原始版本的数据块的量总是多于具有更新版本的数据块的量。因此,基于回滚策略,将能够恢复数据。
同样地,在整个前滚区域730中,其中前滚区域730与框640处的第三阶段相对应,可以更新既没有被记录日志也没有被更新的上至(m-f)个数据块。如上文所解释,可以证明在框640处的第三阶段并行更新上至(m-f)个数据块是安全的。再一次,由于在第三阶段中,具有更新版本的数据块的量总是多于具有原始版本的数据块的量,所以基于前滚策略将能够恢复数据。
返回自主区域720,其与如框630处描述的第二阶段相对应。在该阶段中,可以更新既没有被记录日志也没有被更新的上至(δ-2*(m-f))个数据块。在区域720中,将从故障之后的非失效存储节点中可用的数据来确定数据块的哪个版本是多数,并且因此确定要使用哪种类型的数据恢复策略。如果现有数据中存在比数据块的更新版本更多的数据块的原始版本,则基于回滚策略将能够恢复数据;否则,基于前滚策略将能够恢复数据。
在区域720中,证明可以并行更新∈=(2m-f)-n+1个数据块,如下文中解释。参考公式(1),在n≤2m-f时l=0的极端情况下,在写入过程期间完全没有数据块被记录日志。即使在这些极端情况下,也可以看出∈=(2m-f)-n+1≥1。这证明了逐个更新数据块(∈=1)直到更新全部的(δ-2*(m-f))个数据块至少是安全的。在将一个或多个数据块记录日志的任何其他情况下,可以并行更新多个数据块(∈>1),由此可以加速更新程序。
在上文前述段落中,描述了这样的实现,其中可以在每个阶段中并行更新不止一个数据块。然而应当理解,在备选实现中,可以在每个阶段中逐个更新数据块。在又一实现中,在每个阶段中,可以串行更新一些数据块,同时并行更新其他数据块。
为了在故障之后恢复数据,可以对现有数据中原始版本的数据块的数目进行计数,也可以对现有数据中更新版本的数据块的数目进行计数。基于两个数目的比较,可以选择具有较多数目的数据块作为数据恢复的基础。例如,如果第一群组包括比第二群组更多的数据块,则第一群组的大小大于第二群组的大小,并且可以在恢复时使用数据块的原始版本。在另一示例中,如果第二群组包括比第一群组更多的数据块,则第一群组的大小小于第二群组的大小,并且可以在恢复时使用数据块的更新版本。在又一示例中,如果第一群组和第二群组的大小相同,则可以在恢复时使用两个版本中的任何一个。
在本文描述的主题的一些实现中,基于UNDO记录日志的详细写入程序不同于基于REDO记录日志的详细写入程序,并且将分别描述针对UNDO记录日志和REDO记录日志的实现。首先将参考图8A,图8A是根据本文描述的主题的示例实现的用于基于UNDO记录日志将数据写入到存储系统的条带中的示例方法800A的流程图。在810A处,可以将l个数据块的原始版本记录日志到日志区中。在820A处,基于写入请求,可以利用相关联的更新版本来更新l个数据块以及没有被记录日志的上至(m-f)个数据块。另外,如果δ-2*(m-f)>0,则在830A处,可以基于写入请求,利用与既没有被记录日志也没有被更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至δ-2*(m-f)个数据块。在840A处,可以基于写入请求,利用与u个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。应当理解,由于UNDO记录日志已经利用更新版本替换了l个数据块中包括的原始数据,840A处应当仅更新“类型1”数据块。
图8B是根据本文描述的主题的示例实现的用于基于REDO记录日志来将数据写入到存储系统的条带中的示例方法800B的流程图。图8B仅图示了写入过程的一部分,并且图8B中未图示的部分与图8A中的830A和840A相同。在图8B中,由于存储系统中使用REDO记录日志,则在810B处,可以将l个数据块的更新版本记录日志到日志区中。在820B处,可以基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至(m-f)个数据块。
另外,例如,方法800B还可以更新u个数据块的剩余部分。如果δ-2*(m-f)>0,则可以基于写入请求,利用与既没有被记录日志也没有被更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至δ-2*(m-f)个数据块。可以基于写入请求,利用与u个数据块的剩余部分相关联的数据的更新版本来更新该剩余部分。为了基于REDO记录日志完成写入程序,可以利用更新版本来替换l个数据块(类型2数据块)中包括的原始数据。例如,可以利用与写入请求相关联的数据来更新l个数据块;备选地,可以利用在日志区中被记录日志的数据的更新版本来更新l个数据块。
在本文描述的主题的一些实现中,如果u个数据块分布在存储系统中的多个条带中,则可以解析写入请求以确定条带的数目以及写入程序中涉及的条带中每一个条带中的数据块的数目。通常,写入请求可以指定u个数据块的地址。基于地址,可以确定u个数据块的具体位置(诸如条带ID和条带中的偏移)。
一般地,对于多个条带中的每个条带的写入过程类似于参考图6、图7、图8A和图8B在前述段落中所描述的。将参考图9,采用存储系统中的多个条带中的一个条带来描述该方面的示例实现。
在本文描述的主题的一些实现中,对于多个条带中的条带,可以确定要被写入到该条带中的数据块的第六数目,其中ui表示该第六数目。可以基于存储系统的可靠性水平来确定小于ui的第七数目,其中li表示该第七数目。可以将与来自ui个数据块的li个数据块相关联的数据记录日志到存储系统中。
在这些实现中,可以确定个体数目ui,该个体数目li指示要被写入到每个条带中的数据块的数目,并且继而可以确定个体数目li,该个体数目li指示要被记录日志到每个条带中的数据块的数目。在每个条带中,可以将相应的li个数据块记录日志到li个存储节点的日志区中。针对多个条带的个体数目ui可以具有相同或不同的值,并且由此针对多个条带的个体数目li也可以具有相同或不同的值。在针对每个条带的写入过程期间,可以基于相对应的个体数目ui和li来实现记录日志和更新程序。
在本文描述的主题的一些实现中,对于多个条带中的条带,可以确定与li个数据块相关联的数据的原始版本,并且可以基于写入请求确定与li个数据块相关联的数据的更新版本。另外,可以将与li个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到条带中li个数据块的相应存储节点中的相应日志区中;并且可以在li个数据块中维护与li个数据块相关联的数据的另一版本。
在以上实现中,可以使用UNDO记录日志或REDO记录日志,并且由此用于存储两个版本的程序类似于单个条带中的写入过程中的程序。下文中省略了通过使用UNDO记录日志和REDO记录日志的实现的细节。
现在将参考图9描述用于将数据写入到每个条带中的示例实现,图9图示了根据本文描述的主题的示例实现的用于将数据写入到存储系统中的多个条带中的条带中的示例方法900的流程图。
在本文描述的主题的一些实现中,对于多个条带中的条带,可以基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新该上至(m-f)个数据块。如图9中所示,可以对于多个条带中的每个条带实现920处所图示的更新程序,并且可以从每个条带中随机选择(m-f)个数据块。例如,在第一条带中,可以从u1个数据块中随机选择(m-f)个数据块;在第二条带中,可以从u2个数据块中随机选择(m-f)个数据块。在这些实现中,可以更新每个条带中的(m-f)个数据块。
在本文描述的主题的一些实现中,对于多个条带中的条带,可以基于写入请求,利用与ui个数据块的剩余部分相关联的数据的更新版本来更新该剩余部分。如图9中所示,当在920处成功更新了每个条带中的(m-f)个数据块时,继而在930处,可以基于写入请求,利用与ui个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。不同条带中的相应剩余部分中的数据块的数目可以相同或不同,并且可以逐个更新相应剩余部分中的数据块。备选地,可以并行更新这些数据块。
根据本文描述的主题的实现,在相同阶段中完成针对多个条带的更新程序。例如,在关于框920的阶段中,应当在每个条带中更新上至(m-f)个数据块。仅在针对所有条带成功完成了920处所图示的更新的情况下,第一阶段才终止。继而在930处,可以更新每个条带中的剩余部分。如果针对所有条带成功完成了框930处的更新,则完成了整个更新程序。
在存储系统的操作期间,可能在框910、920和930处的操作中的任何时间点发生故障。应当理解,上述写入程序中的步骤可以保证存储系统总是包括即使在发生故障时也可以用于恢复的足够数据,并且可以将数据回滚至原始版本或者前滚至更新版本。
在写入请求更新存储系统中的多个条带的情况下,针对所有条带的恢复策略(回滚或前滚)应当是相同的,以使得可以将所有条带恢复至相同版本。图10是根据本文描述的主题的示例实现的用于从存储系统中的多个条带中的条带恢复数据的示例方法1000的流程图。针对多个条带的写入过程可以保证存储系统总是包括即使在故障发生时也可以用于恢复的足够数据。
在本文描述的主题的一些实现中,对于多个条带中的条带,可以从现有数据分别确定具有原始版本的数据块的第一群组和具有更新版本的数据块的第二群组。可以通过比较第一群组和第二群组的大小来恢复数据,其中第一群组和第二群组的大小是对于多个条带中的条带而确定的。
在1010处,从每个条带中的现有数据,可以分别确定具有原始版本的数据块的第一群组和具有更新版本的数据块的第二群组。在一个示例中,如果写入请求关于两个条带,则可以在两个条带中的每个条带中对原始版本和更新版本的数据块进行计数。
在1020处,可以基于第一群组和第二群组的大小的比较来恢复数据,其中第一群组和第二群组的大小是对于多个条带中的条带而确定的。如果第一条带包括较多原始版本的块,而第二条带包括相等数目的两种版本的块,则可以使用原始版本,并且可以采用回滚策略用于数据恢复。在另一示例实现中,如果第一条带包括较多更新版本的块,并且第二条带包括相等数目的两种版本的块,则可以使用更新版本,并且可以采用前滚策略用于数据恢复。
在本文描述的主题的一些实现中,响应于现有数据的条带中不存在原始版本和更新版本中的一个版本的数据块,可以基于具有原始版本和更新版本中的另一个的数据块来恢复多个条带中的数据。在这些实现中,如果在一个条带中不存在原始版本和更新版本中的一个版本,则可以选择另一个版本作为用于数据恢复的基础。这些实现反映了一个版本的数据块是零的极端情况。
在本文描述的主题的一些实现能够,可以利用NVMM实现存储节点。与硬盘驱动器相比较,NVMM可以提供更好的访问速度和其他优点。因此,NVMM提出了用于存储持久性数据的新的解决方案,并且将NVMM与传统的RAID系统进行结合可以提供良好的容错性、高可用性和高带宽。另外,RAID之上的上层文件系统/数据库也可以与基于NVMM的存储系统相结合。
利用传统的RAID,存储系统的用户需要通过调用RAID之上部署的文件系统或数据库系统的函数来处理崩溃一致性问题。然而,利用主题的实现,崩溃一致性和容错性都可以处理,并且在更大的程度上使用存储系统中的冗余数据。另外,实现除了RAID中的传统容错性之外,还天然地支持崩溃一致性,而不依赖于文件系统或数据库系统。换言之,在用户向存储系统提交写入请求之后,与写入和恢复程序相关的所有详细操作都是透明的,并且不需要与用户交互。
在本文描述的主题的一些实现中,响应于写入请求被完成,可以从日志区中移除所存储的数据。l个数据块记录日志的目的是为了维护处理存储系统中的写入请求期间的崩溃一致性。当写入请求完成时,被记录日志的数据不再有用,并且可以被移除。备选地,被记录日志的数据可以保留在日志区,并且由新的写入请求相关联的新数据来替换。
本文描述的主题的实现可以基于各种架构,现在将参考图11A、图11B和图11C来描述实现的细节。图11A是根据本文描述的主题的各种示例实现的控制数据存储的架构1100A的框图。
如图11A中所示,图示了芯片级RAIN。通过将RAIN应用于存储器芯片,可以使得存储系统能够提供崩溃一致性和容错性的能力。可以由应用通过运行连接至总线1150A的存储器卡中的指令来实现控制单元210。高速缓存220可以提供用于保存操作中的中间数据的临时空间。相应的存储节点(诸如NVMM节点)110、120、130和140可以经由相应的通道1110A、1120A、1130A和1140A连接至总线1150A。基于总线1150A,控制单元210可以访问存储节点110至140,并且执行用于数据写入和恢复的方法。
图11B是根据本文描述的主题的各种示例实现的控制数据存储的架构1100B的框图。在该示例中,示出了分布式RAIN。诸如NVMM节点110-140的存储节点可以经由分布式网络1150B连接至高速缓存220和控制单元210。基于分布式网络1150B,控制单元210可以访问存储节点110至140,并且可以执行用于写入和恢复数据的方法。
图11C是根据本文描述的主题的各种示例实现的控制数据存储的架构1100C的框图。在图11C中,图示了分解RAIN。存储节点(诸如NVMM节点)110至140可以经由专用网络1150C连接至高速缓存220和控制单元210。基于分布式网络1150C,控制单元210可以访问存储节点110至140,并且执行用于数据写入和恢复的方法。
在该实现中,可以将存储节点中的NVMM组织为集合池。专用网络1150C可以使用存储节点110至140中的高速端口来提供架构1100C内的高速通信。控制单元210可以经由专用网络1150C高速访问池中的NVMM,并且执行用于数据写入和恢复的方法。
以下段落将描述基于RAIN 1、RAIN 4/5、RAIN 6和RAIN 7的一些实现,以及这些实现的优点。利用主题的实现,可以改善存储系统的若干方面,诸如延时、磨损和吞吐量。
延时是用于完成写入请求的理论时间。延时的单位是持续更新一个数据块的时间。如果并行更新多个块,则对所有数据块仅计数一个时间段。磨损是在处理写入请求中被写入到任何存储节点的数据块的总数目,包括被记录日志到日志区的数据块。写入磨损越小,则存储耐久性越长。吞吐量是每个时间段被执行的写入操作的数目。其可以通过(聚合)存储带宽除以一次操作写入的数据量来确定。吞吐量的相对值可以在以下段落中说明。
对于相同的RAIN配置,这些特性也可能受到u的影响。我们定义umax作为在写入整个条带时要被更新的数据块的数目,并且定义umin作为在仅写入条带的一个数据块时要被更新的数据块的数目。在实现中,umax=n,并且umin=m+1。RAIN配置的特性的性能位于由umax和umin确定的范围内。
为简洁起见,采用UNDO记录日志作为示例,并且可以以相似的方式确定REDO记录日志的性能。表4至表7示出了根据主题的一些实现的RAIN 1、RAIN 4/5、RAIN 6和RAIN 7的性能。在这些表中,“RAID+log”是指相对应的传统RAID存储系统中的普通记录日志实现,而没有日志和校验的协同。在RAID+log上的写入的延时总是2,因为可以在一个步骤中并行地将所有数据块记录日志,并且另外可以在另一步骤中并行更新所有数据块。同时,相对应的传统RAID中的写入磨损总是2u,因为每个数据块应当被写入两次。
表4示出了根据主题的一个实现的RAIN 1的性能。
表4.RAID 1与RAIN 1之间的性能比较
Figure BDA0002200731440000231
在RAIN 1中,每个条带包括n个数据副本。采用n=3作为示例,在执行写入过程的情况下,RAIN 1可以忍受上至两个节点失效(m=2),与传统的RAID(RAID+log)相当,传统的RAID在写入过程期间维持相同水平的容错性。设置f=1意味着在写入过程期间允许最多1个失效存储节点。在这种情况下,可以避免完成记录日志。RAIN 1的写入延时是3,其大于RAID+log的写入延时。同时,因为RAIN 1将每个块仅写入一次,所以与RAID+log相比,可以节省写入磨损的一半。此外,在特定总带宽下,一半写入量表示双倍的吞吐量。基于上文,利用主题的实现,在没有牺牲延时的情况下,RAIN1中改善了磨损和吞吐量二者。
表5示出了根据主题的一个实现的RAIN 4/5的性能。
表5.RAID 4/5与RAIN 4/5之间的性能比较
Figure BDA0002200731440000232
Figure BDA0002200731440000233
RAIN 4/5共享相同的校验编码,并且每三个数据块加一个校验块组成一个条带。采用f=0作为示例,对于完整条带写入(u=4),可以节省2个数据块不被记录日志,并且RAIN 4/5的延时是3。总共应当写入6个数据块,导致与RAID+log相比节省25%。对于一个块写入(u=2),延时仅是2,并且可以实现半写入磨损。关于吞吐量,umax和umin二者的吞吐量都可以好于传统的RAID 4/5。在处理RAIN4/5中的写入请求期间,可以节省一些数据块不被记录日志。因此,可以在某种程度上改善RAIN 4/5的磨损和吞吐量性能。
表6示出了根据主题的一个实现的RAIN 6的性能,并且表7示出了了根据主题的一个实现的RAIN 7的性能。基于表6和表7中的统计,通过使用主题的实现,可以改善延时、磨损和吞吐量性能。
表6.RAID 6与RAIN 6之间的性能比较
Figure BDA0002200731440000241
Figure BDA0002200731440000242
表7.RAID 7与RAIN 7之间的性能比较
Figure BDA0002200731440000243
Figure BDA0002200731440000244
图12是适于实现本文描述的主题的一个或多个实现的设备的框图。在这些实现中,设备1200可以是用于实现控制单元210的单独计算。备选地,设备1200可以是包括在存储节点110至140中的任何一个中的组件。应当理解,设备1200不旨在对本文描述的主题的使用或功能性的范围提出任何限制,因为可以在不同的通用或专用计算环境中实现各种实现。
如所示的,设备1200包括至少一个处理单元(或处理器)1210和存储器1220。处理单元1210执行计算机可执行指令,并且可以是真实的或者虚拟的处理器。在多处理系统中,多个处理单元运行计算机可执行指令以增加处理能力。存储器1220可以是易失性存储器(例如,寄存器、高速缓存、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器)或者其某些组合。
在图12中所示的示例中,设备1200还包括存储1230、一个或多个输入设备1240、一个或多个输出设备1250以及一个或多个通信连接1260。诸如总线、控制器或网络的互连机制(未示出)将设备1200的组件互连。通常,操作系统软件(未示出)为设备1200中运行的其他软件提供操作环境,并且协调设备1200的组件的活动。
存储1230可以是可移除的或不可移除的,并且可以包括计算机可读存储介质,诸如闪速驱动器、磁盘或者可以用于存储信息并且可以在设备1200内被访问的任何其他介质。输入设备1240可以是各种不同的输入设备中的一种或多种。例如,输入设备1240可以包括用户设备,诸如鼠标、键盘、轨迹球等。输入设备1240可以实现一种或多种自然用户接口技术,诸如语音识别或者触摸和触笔识别。作为其他示例,输入设备1240可以包括扫描设备、网络适配器或者向设备1200提供输入的其他设备。输出设备1250可以是显示器、打印机、扬声器、网络适配器或者提供来自设备1200的输出的其他设备。输入设备1240和输出设备1250可以并入单个系统或设备中,诸如触摸屏或者虚拟显示系统。
通信连接1260支持通过通信介质与另一计算实体进行通信。附加地,设备1200的组件的功能性可以在单个计算机器或者能够通过通信连接进行通信的多个计算机器中实现。由此,设备1200可以使用对一个或多个其他服务器、网络PC或另一公共网络节点的逻辑连接,在联网环境中操作。通过示例而不是限制的方式,通信介质包括有线或无线联网技术。
根据本文描述的主题的实现,控制单元210可以在设备1200上运行,以便响应于对文档存储库的查询而提供排序的文档。
现在仅为了说明的目的,将在下文中列出一些示例实现。
在一些实现中,本文描述的主题可以体现为一种设备。该设备包括处理单元和存储器。存储器耦合至处理单元,并且存储由处理单元运行的指令。当指令在由处理单元运行时,使得设备执行包括以下的动作:接收对冗余存储系统的写入请求;确定要通过写入请求写入到冗余存储系统中的数据集;以及,将数据集的一部分记录日志到冗余存储系统中,以用于在冗余存储系统中发生故障的情况下进行数据恢复。
在一些实现中,确定要被写入到冗余存储系统中的数据集包括:确定要被写入到冗余存储系统中的第一数目的数据块;并且将数据集的一部分记录日志到冗余存储系统中包括:基于冗余存储系统的可靠性水平来确定小于第一数目的第二数目;以及将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,基于冗余存储系统的可靠性水平来确定第二数目包括:基于冗余存储系统的可靠性水平,确定在冗余存储系统中允许的失效存储节点的数目;以及根据允许的失效存储节点的数目来确定第二数目。
在一些实现中,u表示第一数目,l表示第二数目,动作还包括:在多个阶段中,基于写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版本,来更新(u-l)个数据块。
在一些实现中,f表示允许的失效存储节点的数目,并且动作还包括:在多个阶段中的第一阶段中,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本来更新上至(m-f)个数据块。
在一些实现中,动作还包括:在多个阶段中的第二阶段中,基于写入请求,利用与没有被记录日志或更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至δ-2*(m-f)个数据块,其中δ=u-l。
在一些实现中,动作还包括:在多个阶段中的第三阶段中,基于写入请求,利用与u个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中包括:响应于u个数据块位于冗余存储系统中的条带内,将与l个数据块相关联的数据记录日志到l个数据块的相应存储节点中的相应日志区中。
在一些实现中,将与l个数据块相关联的数据记录日志到l个数据块的相应存储节点中的相应日志区中包括:确定与l个数据块相关联的数据的原始版本,并且基于写入请求确定与l个数据块相关联的数据的更新版本;以及将来自与l个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到l个数据块的相应存储节点中的相应日志区中;以及在l个数据块中维护与l个数据块相关联的数据的另一个版本。
在一些实现中,恢复冗余存储系统中的数据包括:响应于冗余存储系统中的f个存储节点中的任何存储节点发生故障,从现有数据分别确定具有原始版本的数据块的第一群组以及具有更新版本的数据块的第二群组;以及基于第一群组和第二群组的大小的比较来恢复数据。
在一些实现中,u表示第一数目,l表示第二数目,并且将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中包括:响应于u个数据块位于冗余存储系统中的多个条带内,对于多个条带中的条带,确定要被写入到该条带中的数据块的第六数目,其中,ui表示第六数目;基于冗余存储系统的可靠性水平来确定小于ui的第七数目,其中li表示第七数目;以及将与来自ui个数据块的li个数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,动作还包括:对于多个条带中的条带,确定与li个数据块相关联的数据的原始版本,并且基于写入请求确定与li个数据块相关联的数据的更新版本;以及将来自与li个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到该条带中的li个数据块的相应存储节点中的相应日志区中;以及在li个数据块中维护与li个数据块相关联的数据的另一个版本。
在一些实现中,f表示第五数目,并且动作还包括:对于多个条带中的条带,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至(m-f)个数据块。
在一些实现中,动作还包括:对于多个条带中的条带,基于写入请求,利用与ui个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,恢复冗余存储系统中的数据包括以下中的任一项:对于多个条带中的条带,从现有数据分别确定具有原始版本的数据块的第一群组和具有更新版本的数据块的第二群组;以及基于对于多个条带中的条带确定的第一群组和第二群组的大小的比较,来恢复数据。
在一些实现中,本文描述的主题可以体现为一种计算机实现的方法,包括:接收对冗余存储系统的写入请求;确定要通过写入请求写入到冗余存储系统中的数据集;以及将数据集的一部分记录日志到冗余存储系统中,以用于在冗余存储系统中发生故障的情况下进行数据恢复。
在一些实现中,确定要被写入到冗余存储系统中的数据集包括:确定要被写入到冗余存储系统中的第一数目的数据块;并且将数据集的一部分记录日志到冗余存储系统中包括:基于冗余存储系统的可靠性水平来确定小于第一数目的第二数目;以及将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,基于冗余存储系统的可靠性水平来确定第二数目包括:基于冗余存储系统的可靠性水平,确定在冗余存储系统中允许的失效存储节点的数目;以及根据允许的失效存储节点的数目来确定第二数目。
在一些实现中,u表示第一数目,l表示第二数目,该方法还包括:在多个阶段中,基于写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版本,来更新(u-l)个数据块。
在一些实现中,f表示允许的失效存储节点的数目,并且该方法还包括:在多个阶段中的第一阶段中,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至(m-f)个数据块。
在一些实现中,该方法还包括:在多个阶段中的第二阶段中,基于写入请求,利用与没有被记录日志或更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至δ-2*(m-f)个数据块,其中,δ=u-l。
在一些实现中,该方法还包括:在多个阶段中的第三阶段中,基于写入请求,利用与u个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中包括:响应于u个数据块位于冗余存储系统中的条带内,将与l个数据块相关联的数据记录到l个数据块的相应存储节点中的相应日志区中。
在一些实现中,将与l个数据块相关联的数据记录日志到l个数据块的相应存储节点中的相应日志区中包括:确定与l个数据块相关联的数据的原始版本,并且基于写入请求确定与l个数据块相关联的数据的更新版本;以及将来自与l个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到l个数据块的相应存储节点中的相应日志区中;以及在l个数据块中维护与l个数据块相关联的数据的另一个版本。
在一些实现中,恢复冗余存储系统中的数据包括:响应于冗余存储系统中的f个存储节点中的任何存储节点发生故障,从现有数据分别确定具有原始版本的数据块的第一群组以及具有更新版本的数据块的第二群组;以及基于第一群组和第二群组的大小的比较来恢复数据。
在一些实现中,u表示第一数目,l表示第二数目,并且将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中包括:响应于u个数据块位于冗余存储系统中的多个条带内,对于多个条带中的条带,确定要被写入到该条带中的数据块的第六数目,其中ui表示第六数目;基于冗余存储系统的可靠性水平来确定小于ui的第七数目,其中li表示第七数目;以及将与来自ui个数据块的li个数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,该方法还包括:对于多个条带中的条带,确定与li个数据块相关联的数据的原始版本,并且基于写入请求确定与li个数据块相关联的数据的更新版本;以及将来自与li个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到该条带中的li个数据块的相应存储节点中的相应日志区中;以及在li个数据块中维护与li个数据块相关联的数据的另一个版本。
在一些实现中,f表示第五数目,并且该方法还包括:对于多个条带中的条带,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至(m-f)个数据块。
在一些实现中,该方法还包括:对于多个条带中的条带,基于写入请求,利用与ui个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,恢复冗余存储系统中的数据包括以下中的任一项:对于多个条带中的条带,从现有数据分别确定具有原始版本的数据块的第一群组和具有更新版本的数据块的第二群组;以及基于对于多个条带中的条带确定的第一群组和第二群组的大小的比较,来恢复数据。
在一些实现中,本文描述的主题可以体现为一种计算机程序产品。该计算机程序产品可以有形地存储在非暂时性机器可读介质上,并且包括机器可运行指令。当指令在电子设备上运行时,使得电子设备:接收对冗余存储系统的写入请求;确定要通过写入请求写入到冗余存储系统中的数据集;以及将数据集的一部分记录日志到冗余存储系统中,以用于在冗余存储系统中发生故障的情况下进行数据恢复。
在一些实现中,指令还使得电子设备:确定要被写入到冗余存储系统中的第一数目的数据块;基于冗余存储系统的可靠性水平来确定小于第一数目的第二数目;以及将与来自第一数目的数据块的第二数目的数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,指令还使得电子设备:基于冗余存储系统的可靠性水平,确定在冗余存储系统中允许的失效存储节点的数目;以及根据允许的失效存储节点的数目来确定第二数目。
在一些实现中,u表示第一数目,l表示第二数目,并且指令还使得电子设备:在多个阶段中,基于写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版,本来更新(u-l)个数据块。
在一些实现中,f表示允许的失效存储节点的数目,并且指令还使得电子设备:在多个阶段中的第一阶段中,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版,本来更新上至(m-f)个数据块。
在一些实现中,指令还使得电子设备:在多个阶段中的第二阶段中,基于写入请求,利用与没有被记录日志或更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至δ-2*(m-f)个数据块,其中δ=u-l。
在一些实现中,指令还使得电子设备:在多个阶段中的第三阶段中,基于写入请求,利用与u个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,指令还使得电子设备:响应于u个数据块位于冗余存储系统中的条带内,将与l个数据块相关联的数据记录日志到l个数据块的相应存储节点中的相应日志区中。
在一些实现中,指令还使得电子设备:确定与l个数据块相关联的数据的原始版本,并且基于写入请求确定与l个数据块相关联的数据的更新版本;以及将来自与l个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到l个数据块的相应存储节点中的相应日志区中;以及在l个数据块中维护与l个数据块相关联的数据的另一个版本。
在一些实现中,指令还使得电子设备:响应于冗余存储系统中的f个存储节点中的任何存储节点发生故障,从现有数据分别确定具有原始版本的数据块的第一群组以及具有更新版本的数据块的第二群组;以及基于第一群组和第二群组的大小的比较来恢复数据。
在一些实现中,u表示第一数目,l表示第二数目,并且指令还使得电子设备:响应于u个数据块位于冗余存储系统中的多个条带内,对于多个条带中的条带,确定要被写入到该条带中的数据块的第六数目,其中ui表示第六数目;基于冗余存储系统的可靠性水平来确定小于ui的第七数目,其中li表示第七数目;以及将与来自ui个数据块的li个数据块相关联的数据记录日志到冗余存储系统中。
在一些实现中,指令还使得电子设备:对于多个条带中的条带,确定与li个数据块相关联的数据的原始版本,并且基于写入请求确定与li个数据块相关联的数据的更新版本;以及将来自与li个数据块相关联的数据的原始版本和更新版本中的一个版本记录日志到该条带中的li个数据块的相应存储节点中的相应日志区中;以及在li个数据块中维护与li个数据块相关联的数据的另一个版本。
在一些实现中,f表示第五数目,并且指令还使得电子设备:对于多个条带中的条带,基于写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至(m-f)个数据块。
在一些实现中,指令还使得电子设备:对于多个条带中的条带,基于写入请求,利用与ui个数据块的剩余部分相关联的数据的更新版本,来更新该剩余部分。
在一些实现中,指令还使得电子设备:对于多个条带中的条带,从现有数据分别确定具有原始版本的数据块的第一群组和具有更新版本的数据块的第二群组;以及基于对于多个条带中的条带确定的第一群组和第二群组的大小的比较,来恢复数据。
一般而言,各种示例实现可以在硬件或专用电路、软件、逻辑或者其任何组合中实现。一些方面可以在硬件中实现,而其他方面可以在固件或软件中实现,软件可以由控制器、微处理器或其他计算设备运行。虽然将本文描述的主题的示例实现的各种方面图示和描述为框图、流程图,或者使用一些其他图形表示来图示和描述,但是将可以理解,作为非限制性示例,本文描述的框、装置、系统、技术或方法可以在硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或者其某些组合中实现。
在本文描述的主题的上下文中,机器可读介质可以是任何有形介质,其可以包含或者存储程序,程序用于由指令运行系统、装置或设备使用或者与其结合使用。机器可读介质可以是机器可读信号介质或者机器可读存储介质。机器可读介质可以包括但不限于电子、磁性、光学、电磁、红外或半导体系统、装置或设备,或者以上的任何适当组合。机器可读存储介质的更具体示例包括具有一个或多个线路的电气连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪速存储器)、光纤、便携式致密盘只读存储器(CD-ROM)、光学存储设备、磁性存储设备,或者以上的任何适当组合。
用于执行本文描述的主题的方法的计算机程序代码能够以一种或多种编程语言的任何组合来编写。可以向通用计算机、专用计算机或其他可编程数据处理装置的处理器提供这些计算机程序代码,以使得程序代码在由计算机或其他可编程数据处理装置的处理器运行时,使得流程图和/或框图中指定的功能或操作得到实现。程序代码可以完全在计算机上运行,部分在计算机上运行,作为独立的软件包运行,部分在计算机上并且部分在远程计算机上运行,或者完全在远程计算机或服务器上运行。
另外,虽然以特定顺序描绘了操作,但是这不应被理解为要求以所示的特定顺序或者按顺序次序执行此类操作,或者执行所有图示的操作,以实现期望的结果。在某些情况下,多任务和并行处理可以是有益的。同样地,虽然上文讨论中包含若干具体实现细节,但是这些不应被解释为对任何公开内容或者可要求保护的范围的限制,而是作为可以是特定于特定公开内容的特定实现的特征的描述。在分离的实现的上下文中本说明书中描述的某些特征也可以在单个实现中组合地实现。相反,在单个实现的上下文中描述的各种特征也可以相分离地或者在任何适当的子组合中的多个实现中实现。
当结合附图阅读时,鉴于前面的描述,对本公开内容的前述示例实现的各种修改和适应可以对本领域技术人员变得易见。任何和全部修改将仍然落入本公开内容的非限制性的示例实现的范围内。另外,本公开内容的实现所属领域的技术人员将想到本文阐述的公开内容的其他实现,其具有前面的描述和附图中提出的教导的益处。
因此,应当理解,本公开内容的实现不限于所公开的具体实现和修改,并且其他实现旨在包括在所附权利要求的范围内。虽然本文使用了特定术语,但是这些特定术语仅在一般性和描述性的意义上使用,而不是为了限制的目的。

Claims (18)

1.一种设备,包括:
处理单元;以及
存储器,所述存储器耦合至所述处理单元,并且存储用于由所述处理单元运行的指令,所述指令在由所述处理单元执行时,使得所述设备执行包括以下的动作:
接收对冗余存储系统的写入请求,所述冗余存储系统包括多个存储节点;
确定要通过所述写入请求写入到所述冗余存储系统中的数据集,包括:确定要被写入到所述冗余存储系统中的第一数目的数据块;以及
将所述数据集的一部分记录日志到所述冗余存储系统中,以用于在所述冗余存储系统中发生故障的情况下进行数据恢复,包括:
基于所述冗余存储系统的可靠性水平来确定小于所述第一数目的第二数目,所述可靠性水平指示所述冗余存储系统的所述多个存储节点中的允许的失效存储节点的数目;以及
将与来自所述第一数目的数据块的所述第二数目的数据块相关联的数据记录日志到所述冗余存储系统中。
2.根据权利要求1所述的设备,其中基于所述冗余存储系统的可靠性水平来确定第二数目包括:根据所述允许的失效存储节点的所述数目来确定所述第二数目。
3.根据权利要求2所述的设备,其中u表示所述第一数目,l表示所述第二数目,所述动作还包括:
在多个阶段中,
基于所述写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版本,来更新所述(u-l)个数据块。
4.根据权利要求3所述的设备,其中f表示所述允许的失效存储节点的数目,并且所述动作还包括:
在所述多个阶段中的第一阶段中,
基于所述写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至所述(m-f)个数据块,m表示在所述冗余存储系统中用于存储数据的校验的存储节点的数目。
5.根据权利要求4所述的设备,其中所述动作还包括:
在所述多个阶段中的第二阶段中,
基于所述写入请求,利用与没有被记录日志或被更新的上至δ-2*(m-f)个数据块相关联的数据的更新版本,来更新上至所述δ-2*(m-f)个数据块,其中δ=u-l。
6.根据权利要求5所述的设备,其中所述动作还包括:
在所述多个阶段中的第三阶段中,
基于所述写入请求,利用与所述u个数据块的剩余部分相关联的数据的更新版本,来更新所述剩余部分,所述u个数据块的所述剩余部分表示u个数据块中的未更新部分。
7.根据权利要求6所述的设备,其中将与来自所述第一数目的数据块的所述第二数目的数据块相关联的数据记录日志到所述冗余存储系统中包括:
响应于所述u个数据块位于所述冗余存储系统中的条带内,将与所述l个数据块相关联的所述数据记录日志到所述l个数据块的相应存储节点中的相应日志区中。
8.根据权利要求7所述的设备,其中将与所述l个数据块相关联的数据记录日志到所述l个数据块的相应存储节点中的相应日志区中包括:
确定与所述l个数据块相关联的所述数据的原始版本,并且基于所述写入请求确定与所述l个数据块相关联的所述数据的更新版本;以及
将来自与所述l个数据块相关联的所述数据的所述原始版本和所述更新版本中的一个版本记录日志到所述l个数据块的所述相应存储节点中的所述相应日志区中;以及
在所述l个数据块中维护与所述l个数据块相关联的所述数据的另一个版本。
9.根据权利要求8所述的设备,其中恢复所述冗余存储系统中的所述数据包括:响应于所述冗余存储系统中的f个存储节点中的任何存储节点中发生故障,
从现有数据分别确定具有所述原始版本的数据块的第一群组以及具有所述更新版本的数据块的第二群组;以及
基于所述第一群组和所述第二群组的大小的比较来恢复所述数据。
10.根据权利要求3所述的设备,其中u表示所述第一数目,l表示所述第二数目,并且将与来自所述第一数目的数据块的所述第二数目的数据块相关联的数据记录日志到所述冗余存储系统中包括:
响应于所述u个数据块位于所述冗余存储系统中的多个条带内,对于所述多个条带中的条带,
确定要被写入到所述条带中的数据块的第六数目,其中ui表示所述第六数目;
基于所述冗余存储系统的所述可靠性水平来确定小于ui的第七数目,其中li表示所述第七数目;以及
将与来自所述ui个数据块的li个数据块相关联的数据记录日志到所述冗余存储系统中。
11.根据权利要求10所述的设备,其中所述动作还包括:
对于所述多个条带中的所述条带,
确定与所述li个数据块相关联的所述数据的原始版本,并且基于所述写入请求确定与所述li个数据块相关联的所述数据的更新版本;以及
将来自与所述li个数据块相关联的所述数据的所述原始版本和所述更新版本中的一个版本记录日志到所述条带中的所述li个数据块的相应存储节点中的相应日志区中;以及
在所述li个数据块中维护与所述li个数据块相关联的所述数据的另一个版本。
12.根据权利要求11所述的设备,其中f表示所述数目,并且所述动作还包括:
对于所述多个条带中的所述条带,
基于所述写入请求,利用与没有被记录日志的上至(m-f)个数据块相关联的数据的更新版本,来更新上至所述(m-f)个数据块。
13.根据权利要求12所述的设备,其中所述动作还包括:
对于所述多个条带中的所述条带,
基于所述写入请求,利用与所述ui个数据块的剩余部分相关联的数据的更新版本,来更新所述剩余部分,所述ui个数据块的所述剩余部分表示ui个数据块中的未更新部分。
14.根据权利要求12所述的设备,其中恢复所述冗余存储系统中的所述数据包括以下中的任一项:
对于所述多个条带中的所述条带,从现有数据分别确定具有所述原始版本的数据块的第一群组和具有所述更新版本的数据块的第二群组;以及
基于对于所述多个条带中的所述条带而确定的所述第一群组和所述第二群组的大小的比较,来恢复数据。
15.一种计算机实现的方法,包括:
接收对冗余存储系统的写入请求,所述冗余存储系统包括多个存储节点;
确定要通过所述写入请求写入到所述冗余存储系统中的数据集,包括:确定要被写入到所述冗余存储系统中的第一数目的数据块;以及
将所述数据集的一部分记录日志到所述冗余存储系统中,以用于在所述冗余存储系统中发生故障的情况下进行数据恢复,包括:
基于所述冗余存储系统的可靠性水平来确定小于所述第一数目的第二数目,所述可靠性水平指示所述冗余存储系统的所述多个存储节点中的允许的失效存储节点的数目;以及
将与来自所述第一数目的数据块的所述第二数目的数据块相关联的数据记录日志到所述冗余存储系统中。
16.根据权利要求15所述的方法,其中基于所述冗余存储系统的可靠性水平来确定第二数目包括:根据所述允许的失效存储节点的所述数目来确定所述第二数目。
17.根据权利要求16所述的方法,其中u表示所述第一数目,l表示所述第二数目,所述方法还包括:
在多个阶段中,
基于所述写入请求,利用与没有被记录日志的(u-l)个数据块相关联的数据的更新版本,来更新所述(u-l)个数据块。
18.一种非暂时性机器可读介质,包括机器可运行指令,当所述指令在电子设备上运行时,使得所述电子设备:
接收对冗余存储系统的写入请求,所述冗余存储系统包括多个存储节点;
确定要通过所述写入请求写入到所述冗余存储系统中的数据集,包括:确定要被写入到所述冗余存储系统中的第一数目的数据块;以及
将所述数据集的一部分记录日志到所述冗余存储系统中,以用于在所述冗余存储系统中发生故障的情况下进行数据恢复,包括:
基于所述冗余存储系统的可靠性水平来确定小于所述第一数目的第二数目,所述可靠性水平指示所述冗余存储系统的所述多个存储节点中的允许的失效存储节点的数目;以及
将与来自所述第一数目的数据块的所述第二数目的数据块相关联的数据记录日志到所述冗余存储系统中。
CN201780088385.3A 2017-03-16 2017-03-16 存储系统控制 Active CN110431538B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2017/077000 WO2018165958A1 (en) 2017-03-16 2017-03-16 Storage system control

Publications (2)

Publication Number Publication Date
CN110431538A CN110431538A (zh) 2019-11-08
CN110431538B true CN110431538B (zh) 2023-04-28

Family

ID=63521752

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780088385.3A Active CN110431538B (zh) 2017-03-16 2017-03-16 存储系统控制

Country Status (4)

Country Link
US (1) US11762568B2 (zh)
EP (1) EP3596606B1 (zh)
CN (1) CN110431538B (zh)
WO (1) WO2018165958A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360868B2 (en) * 2019-06-07 2022-06-14 Micron Technology, Inc. Redundant cloud memory storage for a memory subsystem
US11748029B2 (en) * 2019-07-26 2023-09-05 Salesforce, Inc. Protecting writes to shared storage in a distributed search system

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104809032A (zh) * 2014-01-23 2015-07-29 Dssd股份有限公司 用于存储系统中服务感知的奇偶校验放置的方法和系统
CN105376307A (zh) * 2015-10-27 2016-03-02 浪潮(北京)电子信息产业有限公司 一种数据中心间的异步备份方法
CN106255953A (zh) * 2013-11-19 2016-12-21 桑迪士克科技有限责任公司 持久性数据存储体中的前向参考记录的方法和系统

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173293B1 (en) 1998-03-13 2001-01-09 Digital Equipment Corporation Scalable distributed file system
US6219800B1 (en) * 1998-06-19 2001-04-17 At&T Corp. Fault-tolerant storage system
JP4131894B2 (ja) * 2000-02-29 2008-08-13 株式会社東芝 ランダムディスクライトに好適なディスク制御機構
US7047358B2 (en) 2001-12-26 2006-05-16 Boon Storage Technologies, Inc. High-performance log-structured RAID
US20100017650A1 (en) 2008-07-19 2010-01-21 Nanostar Corporation, U.S.A Non-volatile memory data storage system with reliability management
US8176360B2 (en) 2009-08-11 2012-05-08 Texas Memory Systems, Inc. Method and apparatus for addressing actual or predicted failures in a FLASH-based storage system
US9275071B2 (en) * 2010-08-12 2016-03-01 Security First Corp. Systems and methods for secure remote storage
US8775868B2 (en) 2010-09-28 2014-07-08 Pure Storage, Inc. Adaptive RAID for an SSD environment
WO2012052800A1 (en) * 2010-10-21 2012-04-26 Oracle International Corp. Two stage checksummed raid storage model
US9823981B2 (en) 2011-03-11 2017-11-21 Microsoft Technology Licensing, Llc Backup and restore strategies for data deduplication
KR101801147B1 (ko) 2011-08-30 2017-11-27 삼성전자주식회사 데이터 신뢰성을 개선하는 데이터 관리 방법 및 그에 따른 데이터 저장 장치
US8990495B2 (en) * 2011-11-15 2015-03-24 Emc Corporation Method and system for storing data in raid memory devices
KR20130111821A (ko) 2012-04-02 2013-10-11 삼성전자주식회사 Raid 메모리 시스템
US9569310B2 (en) 2013-02-27 2017-02-14 Netapp, Inc. System and method for a scalable crash-consistent snapshot operation
US9098445B2 (en) 2013-03-14 2015-08-04 Apple Inc. Selection of redundant storage configuration based on available memory space
IN2013KO01274A (zh) 2013-11-08 2015-05-15 Lsi Corp
US9830110B2 (en) * 2014-06-20 2017-11-28 Dell Products, Lp System and method to enable dynamic changes to virtual disk stripe element sizes on a storage controller
US9946607B2 (en) * 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US10133743B2 (en) * 2016-02-10 2018-11-20 Dell Products L.P. Systems and methods for data migration using multi-path input/output and snapshot-based replication
CN105808376B (zh) 2016-02-24 2019-06-14 北京金山安全软件有限公司 一种数据备份方法、装置及电子设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106255953A (zh) * 2013-11-19 2016-12-21 桑迪士克科技有限责任公司 持久性数据存储体中的前向参考记录的方法和系统
CN104809032A (zh) * 2014-01-23 2015-07-29 Dssd股份有限公司 用于存储系统中服务感知的奇偶校验放置的方法和系统
CN105376307A (zh) * 2015-10-27 2016-03-02 浪潮(北京)电子信息产业有限公司 一种数据中心间的异步备份方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于日志结构的软raid系统LogRaid的设计与实现;熊伟等;《计算机工程与应用》;20041001(第10期);全文 *

Also Published As

Publication number Publication date
WO2018165958A1 (en) 2018-09-20
US11762568B2 (en) 2023-09-19
CN110431538A (zh) 2019-11-08
EP3596606A4 (en) 2020-12-02
US20200089406A1 (en) 2020-03-19
EP3596606B1 (en) 2022-03-30
EP3596606A1 (en) 2020-01-22

Similar Documents

Publication Publication Date Title
US11442651B2 (en) Method and device for rebuilding data in storage array group
US10613934B2 (en) Managing RAID parity stripe contention
CN109213618B (zh) 用于管理存储系统的方法、设备和计算机程序产品
EP3109757B1 (en) Data storage method, data recovery method, related apparatus, and system
CN109725822B (zh) 用于管理存储系统的方法、设备和计算机程序产品
US10346245B2 (en) Data storage system and data storage method
US8392752B2 (en) Selective recovery and aggregation technique for two storage apparatuses of a raid
US20150286531A1 (en) Raid storage processing
US11449400B2 (en) Method, device and program product for managing data of storage device
US11403215B2 (en) Using a raw mirror to initialize a storage system
US20120089799A1 (en) Data backup processing method, data storage node apparatus and data storage device
CN112764661B (zh) 用于管理存储系统的方法、设备和计算机程序产品
CN109725830B (zh) 管理独立磁盘冗余阵列的方法、设备和存储介质
CN112749039B (zh) 用于数据写入和数据恢复的方法、设备和程序产品
US10346247B1 (en) Adjustable error sensitivity for taking disks offline in a mapped RAID storage array
CN110413208B (zh) 用于管理存储系统的方法、设备和计算机程序产品
CN110427156B (zh) 一种基于分片的mbr的并行读方法
US11449402B2 (en) Handling of offline storage disk
US10324782B1 (en) Hiccup management in a storage array
CN113377569B (zh) 用于恢复数据的方法、设备和计算机程序产品
CN110413694A (zh) 元数据管理方法及相关装置
CN110431538B (zh) 存储系统控制
US10977130B2 (en) Method, apparatus and computer program product for managing raid storage in data storage systems
CN110046065A (zh) 一种存储阵列重建方法、装置、设备及存储介质
EP4170499A1 (en) Data storage method, storage system, storage device, and storage medium

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
GR01 Patent grant
GR01 Patent grant