一种分布式存储ceph的纠删码覆盖写方法

文档序号:10569679阅读:512来源:国知局
一种分布式存储ceph的纠删码覆盖写方法
【专利摘要】本发明公开一种分布式存储CEPH的纠删码覆盖写方法,首先客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案后计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD;接着主OSD在接收完所有需要的读数据块后,更新数据块和校验块,发送到需要更新的对应OSD;然后数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD;最后主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端完成写请求。本发明解决了分布式存储系统CEPH不支持纠删码覆盖写的问题。
【专利说明】
_种分布式存储GEPH的纠删码覆盖写方法
技术领域
[0001]本发明涉及分布式存储领域,特别涉及一种分布式存储CEPH的纠删码覆盖写方法。
【背景技术】
[0002]传统分布式存储采用多副本的存储技术,通过一份数据保存多份来提供高可靠性。多副本带来高可靠性的同时,存储代价也是多倍的。纠删码作为以更小的存储代价获得相同可靠性的方法,已经得到越来越多的应用。
[0003]目前纠删码的主要应用领域是冷数据存储,读写模式多为一次写多次读,文件只支持在末尾添加数据的追加模式。追加写的修改模式和写全新文件类似,而纠删码的覆盖写,涉及到数据块的更新和校验块的更新,数据块的更新替换对应偏移数据即可,校验块的更新有两种方式:I)重构写:读取更新数据对应编码条带中不涉及更新的数据,合并新数据后重新编码,得到新的校验块,需要读一次数据块,写一次数据块和一次校验块;2)增量写:利用纠删码的线性性,读取更新数据范围的原始数据,计算原始数据块和更新数据差值并乘以编码系数得到A P,再读取校验块P,计算他们的和得到新校验块数据P’,即P’=Ρ+Δ P,需要读取一次数据块和校验块,写一次数据块和一次校验块。两种更新方式中,都需要先读取部分数据,才能重新计算新的校验块。
[0004]在分布式系统中,通常采用RS(k,m)的纠删码,即原始数据切片k块,编码出m块校验块,分别存储到k+m个节点中。纠删码覆盖写,需要至少m+1个节点的参与,包括I个数据节点,m个校验块节点。当覆盖数据范围变大时,需要的节点数也会更多。RS(k,m)的纠删码至多容忍m个节点丢失,需要k个节点才能解码原始数据,所以覆盖写更新需要保持至少k个节点数据版本一致,才能保证更新不会造成数据丢失。
[0005]纠删码的复杂更新方式使其很少在实际分布式系统中,但随着纠删码越来越多的应用于多读多写的场景,将传统的将覆盖写转化成追加或者全读全覆盖的方式,耗费大量磁盘开销和网络开销。

【发明内容】

[0006]发明目的:针对现有技术中存在的问题,本发明提供一种基于分布式存储CEPH的纠删码覆盖写方法,解决了分布式存储系统CEPH不支持纠删码覆盖写的问题。
[0007]技术方案:为实现上述目的,本发明提出一种分布式存储CEPH的纠删码覆盖写方法,包括以下步骤:
[0008]步骤I:客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案(重构写或者增量写)后,计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主OSD ;
[0009]该方法确定最优编码方案的具体步骤为:
[0010]I)计算写请求涉及的编码条带范围:首先对齐写请求偏移到所在编码条带的首位置;然后根据写请求长度计算写范围的末尾偏移,并对齐到所在条带的末位置;最后根据对齐后的首偏移和尾偏移,得到覆盖写请求的条带覆盖范围偏移和长度;
[0011]2)根据写请求的偏移和长度结合条带覆盖范围,计算不同编码方案需要预先读取的数据量:重构写需要读取数据量=对齐后计算得到的范围减去实际更新数据量;增量写需要读取数据量=实际更新数据量;
[0012]3)根据需要读取的数据量动态选择编码方案:若对齐后计算得到的范围超过2个编码条带且至少有I个条带已经全覆盖,或者重构读取数据量小于增量写读取数据量,则采用重构写;否则,采用增量写。
[0013]该方法主OSD从缓存中读取数据块的具体方法为:
[0014]I)根据请求客户端cid检索缓存组,如果存在,则直接提取,如果没有则分配新的缓存组,如果空间足够,则直接分配,如果已分配数超过预定客户端缓存数时,从LRU链表中删除末尾客户端id,新建当前客户端cid的缓存组索引,并加入LRU结构;
[0015]2)从缓存组中,根据对象oid和读取范围对应的数据块序号num检索Hashmap的索引结构,如果存在对应数据块,则直接返回;如果不存在,则发起读请求,在读数据返回后将数据块加入缓存组,在缓存满时,根据LRU算法删除最近最久未使用的数据块。
[0016]步骤2:主OSD在接收完所有需要的读数据块后,将数据块存入缓存结构,并根据对应编码方法计算校验块更新所需的数据,然后更新数据块和校验块,发送到需要更新的对应 0SD;
[0017]该方法选择不同的编码方案时,更新校验块所需的数据量和方法不同,具体为:采用重构写时,读取覆盖写范围以外的条带数据,在读取对应数据后,和覆盖数据合并成新的完整块,编码出新的校验块;采用增量写时,读取覆盖写范围以内的条带数据,直接读取新数据并返回,在读取对应数据后,计算覆盖数据D ’和原始数据D的有限域差值△ D,然后计算△ D乘以对应编码系数的有限域乘后发送到对应的校验块存储节点。
[0018]步骤3:数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD。[0019 ]步骤4:主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端,完成写请求。
[0020]当主OSD接收所有更新节点的ACK回复超,即更新失败时,该方法还包括恢复数据的步骤,采用基于PGLOG日志的回滚机制恢复数据,具体为:
[0021]I )PG层周期性进行Peering操作,拉取同组各OSD的PGLOG版本,对比各OSD的版本是否和权威版本一致,若一致,则不做处理,若不一致,则发送PGLOG权威版本到不一致节占.V ,
[0022]2)不一致节点收到Peering后的权威PGL0G,进行本地的PGLOG对比合并,发现本地版本超前后,遍历超前的PGLOG,将其加入to_rol Iback列表;
[0023]3)处理完PGLOG版本后,PGLogEntryHand Ier遍历 to_ro 11 back列表,读取每一条Pglog的回滚信息,并调用对应的回滚函数,读取pglog中记录的对象id,版本V,根据id和V索引更新时新分配的存储块,然后删除存储块;
[0024]4)所有超前pglog回滚完成后,删除这部分pglog,更新本地pglog为权威版本。
[0025]该方法不同编码方案对应的更新后校验块读取过程不同,具体为:
[0026]I)根据对象id查找主节点的元数据信息对应的更新记录,遍历更新记录,检查是否和读请求偏移和长度有重叠,如果没有重叠,则按原始方法直接构造读请求发送对应节点;如果有重叠,则跳转步骤2;
[0027]2)计算读请求和各重叠部分相关的偏移和长度,将这些构造为读请求的额外读中,根据数据块大小将读请求和额外读划分到各个分片的读请求中,并发送对应各节点;校验块节点根据读请求和额外读请求,读取对应对象数据,并将额外读请求数据按版本从小到大顺序合并入原始数据,合并过程中,检查额外读数据元数据信息中的更新方法,如果是重构写,则直接合并,如果是增量写,则计算对应位置原始数据和额外读数据的和,再合并,然后返回主节点。
[0028]有益效果:本发明结合了CEPH系统的纠删码框架和恢复框架,以日志形式存储覆盖数据,利用日志回滚机制解决更新失败时数据一致性问题;结合动态选择编码方案,自适应大块写和小块写的复杂场景;利用主节点的缓存机制,减少频繁局部写时的预读请求,以及通过隔离不同客户端的缓存,防止大块写影响小块写的命中率。这些机制的配合从整体上可以减少纠删码覆盖写的磁盘开销和网络开销。
【附图说明】
[0029]图1是CEPH中纠删码条带存储示意图;
[0030]图2是CEPH中纠删码覆盖写请求时序图;
[0031 ]图3是CEPH中纠删码覆盖写的重构更新方式示意图;
[0032]图4是CEPH中纠删码覆盖写的增量更新方式示意图。
【具体实施方式】
[0033]下面结合实施例对本发明做更进一步的说明。
[0034]分布式存储CEPH的纠删码覆盖写方法,具体包括如下步骤:
[0035]1、客户端节点根据CEPH的CRUSH算法和节点映射,将写请求的对象id定位到数据存储的主OSD,然后将写请求包括对象id,偏移offset,长度length和数据buffer等发送到的主OSD。
[0036]2、主OSD从网络消息中解析出写请求,经过PG层事务处理后,进入纠删码后端处理,判断是覆盖写后进入新的写路径,然后以对象id为key为覆盖写请求构造状态机,并对该对象的加写锁。
[0037]3、状态机进入读状态,首先计算写请求涉及的编码条带范围,具体步骤:(I)对齐写请求偏移到所在编码条带的首位置;(2)根据写请求长度计算写范围的末尾偏移,并对齐到所在条带的末位置;(3)根据对齐后的首偏移0fT_begin和尾偏移ofT_end,得到覆盖写请求的条带覆盖范围偏移和长度(off_begin,off_end_off_begin)。
[0038]4、主OSD根据写请求的偏移和长度结合条带覆盖范围,计算不同编码方案需要预先读取的数据量:(I)重构写需要读取数据量:对齐后计算得到的范围减去实际更新数据量,得到重构写需要读取的数据量;(2)增量写需要读取数据量:实际更新数据量即为增量需要读取的数据量;
[0039]然后,根据需要读取的数据量动态选择编码方案,具体方法为:(I)如果对齐后计算得到的范围超过2个编码条带,至少有I个条带已经全覆盖,则直接采用重构写;(2)如果前述计算得到的重构读取数据量小于增量写读取数据量时,则采用重构写;(3)以上情况以外的采用增量写。
[0040]5、主OSD根据偏移、长度和不同更新方案计算预读范围,具体为:(I)重构写的读取范围:对齐后的首偏移off_begin到请求偏移off set之间为前段读取范围,偏移off_begin,长度(offset_off_begin);请求尾偏移offset+length到对齐后的尾偏移off_end之间为后端读取范围,偏移(offset+length),长度(off_end-offset_length) ; (2)增量写的读取范围就是实际覆盖写的范围,偏移off set,长度length;
[0041 ]然后检查缓存中是否存在对应数据。根据请求客户端cid检索缓存组,如果存在,则直接提取,如果没有则分配新的缓存组,如果空间足够,则直接分配,如果已分配数超过预定客户端缓存数时,从LRU链表中删除末尾客户端id,新建当前客户端cid的缓存组索引,并加入LRU结构。从缓存组中,根据对象oid和读取范围对应的数据块序号num检索Hashmap的索引结构,如果存在对应数据块,则直接返回;如果不存在,则发起读请求,在读数据返回后将数据块加入缓存组,在缓存满时,根据LRU算法删除最近最久未使用的数据块;
[0042]检索缓存未命中时主节点构造读请求,并将构造好的读请求发送到各个数据节点,步骤如下:(I)把读取范围根据每个节点的数据块chunk长度切分,得到每个数据节点需要读取的范围,多个范围在一个节点时进行合并;(2)根据偏移计算所在编码条带序号,将序号乘以数据块大小,得到每个节点需要读取的范围的实际偏移。
[0043]6、主OSD接收完所有节点的读取数据后,调用读完成的回调函数,准备各节点需要更新的数据,其中数据块节点的更新数据即为写请求中数据,校验块的更新数据根据不同更新方法来编码构造,重构写方法具体步骤:(I)合并读取数据和更新数据,得到完整的编码条带;(2)调用编码函数,编码出新的校验块,得到更新数据;增量写方法的具体步骤:(I)以编码数据块大小为界,切分读取数据和写请求数据;(2)计算切分后每组对应的请求数据和原始数据的差值;(3)根据编码矩阵,计算差值乘以编码矩阵中对应系数,得到每一个校验块需要对应记录的数据;
[0044]准备好更新数据后状态机进入写状态,根据计算后得到的更新数据构造写请求,如果数据节点和主节点为同一个节点,则直接本地处理,如果数据节点和主节点为不同节点,则通过网络发送到对应的数据节点和校验块节点,发送完后,主节点异步等待节点ACK回复;数据块节点写请求包括对象id,写请求id,版本V,写偏移,写长度和其余附带信息;校验块节点写请求包括对象id,写请求id,版本V,写偏移,写长度、更新方式和其余附带信息。其中版本V指处理写请求时获取的PG中记录日志PGLOG的最新版本号,随着每次写单调递增加I;更新方式为I比特长度,O表示重构写,I表示增量写。
[0045]7、数据块节点接收写请求后,根据对象id和版本V申请新存储块,同时将本次更新的对象id,版本V,偏移和长度记录到本地更新日志PGLOG,数据块和日志持久化后,节点发送ACK给主节点。存储块所在文件名为对象id,分片id,版本V的组合,每个数据块节点的对象id和分片id固定,原始数据版本为O。这样的分配方式,新分配的存储块磁盘位置会在原始对象位置附近。节点根据偏移和长度,写入申请得新存储块。同时,节点将本次更新的对象id,版本V,偏移和长度记录到本地更新日志PGL0G。数据块和日志持久化后,节点发送ACK给主节点。
[0046]校验块节点接收写请求后,同样根据对象id和版本V申请新存储块,节点根据偏移和长度,写入申请的新存储块,并将更新方式的I比特写入对象元数据中,同时将本次更新的对象id,版本V,偏移和长度记录到更新日志PGLOG,数据块和日志持久化后,节点发送ACK给主节点。
[0047]8、主节点异步处理完所有节点的ACK后,状态机进入完成状态,记录本次更新到更新元数据信息,将版本V、偏移off set、长度length封装为value保存到内存数据结构中以对象id为key的列表中,然后更新PG中记录的上一次完成操作的版本变量last_complete为本次版本V,最后返回ACK给客户端完成本次写请求。
[0048]主OSD维护着所属PG组的权威日志版本,变量last_complete记录了PGLOG中上一次更新完成的版本号。前述主OSD在写请求超时后,本次写失败,last_complete就不会更新,但是节点数据可能有不一致状态,部分节点完成了本次写操作,部分节点还处于上一次一致状态。通过PG层的周期性peering机制,检查不一致节点发现更新超前,通过原子性的回滚操作保持所有节点数据一致性。具体步骤如下:
[0049]I )PG层周期性进行Peering操作,拉取同组各OSD的PGLOG版本,对比计算权威日志版本,然后各OSD的版本是否和权威版本一致,如果不一致则发送PGLOG权威版本到不一致节点;
[0050]2)不一致节点收到Peering后的权威PGL0G,进行本地的PGLOG对比合并。发现本地版本超前后,遍历超前的PGLOG,将其加入to_rol Iback列表;
[0051 ] 3)处理完PGLOG版本后,PGLogEntryHand Ier遍历 to_ro 11 back列表,读取每一条Pglog的回滚信息,并调用对应的回滚函数,读取pglog中记录的对象id,版本V,根据id和V索引更新时新分配的存储块,然后删除存储块;
[0052]4)所有超前pglog回滚完成后,删除这部分pglog,更新本地pglog为权威版本。
[0053]本发明方法根据覆盖写请求的块大小自适应不同更新方法,减少磁盘和网络开销。更新后的校验块读取时,需要根据对象id查找主节点的元数据信息对应的更新记录,遍历更新记录,检查是否和读请求偏移和长度有重叠,如果没有重叠,则按原始方法直接构造读请求发送对应节点;如果有重叠,则计算读请求和各重叠部分相关的偏移和长度,将这些构造为读请求的额外读中,根据数据块大小将读请求和额外读划分到各个分片的读请求中,并发送对应各节点,校验块节点根据读请求和额外读请求,读取对应对象数据,并将额外读请求数据按版本从小到大顺序合并入原始数据,合并过程中,检查额外读数据元数据信息中的更新方法,如果是重构写,则直接合并,如果是增量写,则计算对应位置原始数据和额外读数据的和,再合并,然后返回主节点。
[0054]读取过程需要读取额外的更新数据,所以更新数据需要定期合并入原始数据,以加快读取过程。在每次写完成后,主节点根据对象元数据,检查累计更新次数,更新大小,默认达到10次更新大小达到一个编码条带大小后,由主节点生成更新请求,将对象id,所有合并版本,发送到各个节点。各节点接收请求,以版本从小到大开始处理,根据对象i d,版本V,检索出该次更新偏移和长度,读取对应数据,类似于读请求的处理,利用复制函数,将新数据写入原始数据对应偏移。校验块的更新合并需要检查对应更新方法,重构写可以直接写入,增量写需要类似读取原始数据,计算后再写入。各节点的数据写入操作为原子操作。主节点接收所有节点回滚ACK后删除对应对象的更新元数据,完成合并操作。
[0055]下面以纠删码RS(4,2)为例说明本发明方法,即原始数据块切成4块,经过RS编码出2块校验块,所有涉及的运算皆为RS编码中的有限域运算。以4MB大小作为编码条带,其中每个节点都会存储编码条带中IMB大小的数据块,原始文件会以4MB为大小切分成多个编码条带。一个PG组包含6个存储节点OSD,其中前4个节点存储原始数据块,称为数据节点,第2个节点存储编码块,称为校验块节点,并且数据节点中第I块数据块所在节点为主0SD。写请求由额外的I个客户端节点发起。
[0056]图1中表示CEPH系统中纠删码实现的条带化存储。原始对象数据按照预定的条带大小4冊切分,最后不足时补零。条带数据按等大切分为4块(10、(11、(12、(13,然后编码出校验块p0、pl,分别存储到6个OSD节点。然后再取下一个条带,编码后追加到之前存储的数据之后。一个PG组包含了以条带形式存储的6个0SD,其中第一个节点即O号节点为主0SD,负责接收客户端写请求,以及分发存储数据,维护着数据的一致性。
[0057]图2中表示CEPH系统中实现的纠删码覆盖写时序图。包括客户端发起写请求到主节点,主节点分析写请求,选定编码方法后构造对应的读请求,发送给对应数据块OSD,然后异步等待数据返回。主OSD收到所有数据后,根据选定的编码方法编码校验块数据,然后将需要更新的校验块和数据块发送给对应OSD,各节点保存完数据后,回复ACK给主OSD,主OSD接收所有回复后将本地更新元数据写入本地的缓存并返回客户端完成写请求。上述过程分别对应状态机中读状态、写状态、完成状态的请求的处理与发送过程。
[0058]图3中表示CEPH系统中纠删码覆盖写更新的重构写样例。其DO’、D1’、D2’表示更新数据。主OSD接收覆盖写数据后,计算重构写需要预读D3,增量写需要预读D0、D1、D2,判断重构写需要预读的数据块较少,所以选择重构写方案。主OSD确定方案后向D3所在的OSD发起读请求,对应OSD回复数据后,主OSD能够组成完整的编码条带,重新编码出校验块PO’和P1’,然后将更新数据发送给各个0SD,并把更新元数据记录到pglog中。其中D3没有更新数据,所以只记录本次的更新元数据。
[0059]为保证数据更新不丢失原始数据,保持数据一致性,所以更新数据不写入原始数据块。根据对象id和版本V,索引并分配新的存储块,例如图中新分配的灰色块。在更新失败触发回滚时,需要删除对应的更新块。
[0060]图4中CEPH中纠删码覆盖写的增量更新方式示意图。D0’表示覆盖写更新数据,其余概念同图3说明。主OSD接收覆盖写数据后,计算重构写需要预读D1、D2、D3,增量写需要预读D0,判断增量写需要预读的数据块较少,所以选择重构写方案。主OSD确定方案后向DO所在的OSD发起读请求,对应OSD回复数据后,主OSD计算更新校验块需要的△ P,然后将对应更新数据块和校验块发送到对应0SD。同样,Dl、D2、D3所在OSD没有参与数据更新,只记录Pglog,保持数据版本一致。
【主权项】
1.一种分布式存储CEPH的纠删码覆盖写方法,其特征在于,包括以下步骤: 1)客户端节点发送写请求到Ceph的存储节点中的主OSD,主OSD自动选择最优编码方案后,计算需要读取的数据块,并根据客户端id和对象id,从缓存中读取数据块返回主0SD; 2)主OSD在接收完所有需要的读数据块后,将数据块存入缓存结构,并根据对应编码方法计算校验块更新所需的数据,然后更新数据块和校验块,发送到需要更新的对应0SD; 3)数据块节点和校验块节点接收写请求,分配原始数据块附近的新存储位置存储新更新,并记录本次写请求元数据到日志PGLOG,数据和日志落盘后发送ACK给主OSD; 4)主OSD接收所有更新节点的ACK后,记录本次更新元数据到内存,并回复ACK给客户端,完成与请求。2.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤I确定最优编码方案的具体步骤为: 1)计算写请求涉及的编码条带范围:首先对齐写请求偏移到所在编码条带的首位置;然后根据写请求长度计算写范围的末尾偏移,并对齐到所在条带的末位置;最后根据对齐后的首偏移和尾偏移,得到覆盖写请求的条带覆盖范围偏移和长度; 2)根据写请求的偏移和长度结合条带覆盖范围,计算不同编码方案需要预先读取的数据量:重构写需要读取数据量=对齐后计算得到的范围减去实际更新数据量;增量写需要读取数据量=实际更新数据量; 3)根据需要读取的数据量动态选择编码方案:若对齐后计算得到的范围超过2个编码条带且至少有I个条带已经全覆盖,或者重构读取数据量小于增量写读取数据量,则采用重构写;否则,采用增量写。3.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤I主OSD从缓存中读取数据块的具体方法为: 1)根据请求客户端cid检索缓存组,如果存在,则直接提取,如果没有则分配新的缓存组,如果空间足够,则直接分配,如果已分配数超过预定客户端缓存数时,从LRU链表中删除末尾客户端id,新建当前客户端cid的缓存组索引,并加入LRU结构; 2)从缓存组中,根据对象oid和读取范围对应的数据块序号num检索Hashmap的索引结构,如果存在对应数据块,则直接返回;如果不存在,则发起读请求,在读数据返回后将数据块加入缓存组,在缓存满时,根据LRU算法删除最近最久未使用的数据块。4.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,步骤2选择不同的编码方案时,更新校验块所需的数据量和方法不同,具体为: 采用重构写时,读取覆盖写范围以外的条带数据,在读取对应数据后,和覆盖数据合并成新的完整块,编码出新的校验块; 采用增量写时,读取覆盖写范围以内的条带数据,直接读取新数据并返回,在读取对应数据后,计算覆盖数据D’和原始数据D的有限域差值△ D,然后计算△ D乘以对应编码系数的有限域乘后发送到对应的校验块存储节点。5.根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,当主OSD接收所有更新节点的ACK回复超即更新失败时,该方法还包括恢复数据的步骤。6.根据权利要求5所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,采用基于PGLOG日志的回滚机制恢复数据,具体为: I)PG层周期性进行Peering操作,拉取同组各OSD的PGLOG版本,对比各OSD的版本是否和权威版本一致,若一致,则不做处理,若不一致,则发送PGLOG权威版本到不一致节点; 2)不一致节点收到Peering后的权威PGL0G,进行本地的PGLOG对比合并,发现本地版本超前后,遍历超前的PGLOG,将其加入to_rol Iback列表; 3)处理完PGLOG 版本后,PGLogEntryHandl er 遍历 to_ro I Iback 列表,读取每一条 pglog的回滚信息,并调用对应的回滚函数,读取Pglog中记录的对象id,版本V,根据id和V索引更新时新分配的存储块,然后删除存储块; 4)所有超前pglog回滚完成后,删除这部分pglog,更新本地pglog为权威版本。7.根据根据权利要求1所述的分布式存储CEPH的纠删码覆盖写方法,其特征在于,该方法不同编码方案对应的更新后校验块读取过程不同,具体为: 1)根据对象id查找主节点的元数据信息对应的更新记录,遍历更新记录,检查是否和读请求偏移和长度有重叠,如果没有重叠,则按原始方法直接构造读请求发送对应节点;如果有重叠,则跳转步骤2; 2)计算读请求和各重叠部分相关的偏移和长度,将这些构造为读请求的额外读中,根据数据块大小将读请求和额外读划分到各个分片的读请求中,并发送对应各节点;校验块节点根据读请求和额外读请求,读取对应对象数据,并将额外读请求数据按版本从小到大顺序合并入原始数据,合并过程中,检查额外读数据元数据信息中的更新方法,如果是重构写,则直接合并,如果是增量写,则计算对应位置原始数据和额外读数据的和,再合并,然后返回主节点。
【文档编号】G06F11/10GK105930103SQ201610305978
【公开日】2016年9月7日
【申请日】2016年5月10日
【发明人】瞿天善, 叶保留, 陆桑璐
【申请人】南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1