一种数据分发方法、数据存储方法、相关装置以及系统的制作方法_4

文档序号:9217094阅读:来源:国知局
据段 进行EC编码得到第二EC条带,其中第二EC条带包括m个第二数据块和k个第二校验块; 主节点确定第一EC条带与第二EC条带的串行分发顺序,并根据该串行分发顺序,将第一 EC条带与第二EC条带串行分发给该m+k个存储节点。具体的,若主节点先接收了第一数 据段,再接收了第二数据段,则主节点先将第一EC条带的m+k个第一ECblock分别分发给 m+k个存储节点以执行存储,待接收到该m+k个存储节点发送的响应消息之后,再将第二EC 条带的m+k个第二ECblock分别分发给m+k个存储节点以执行存储,其中,响应消息用于 表示第一数据段在该m+k个存储节点上存储成功,第二EC条带的版本号大于第一EC条带 的版本号;若主节点先接收了第二数据段,再接收了第一数据段,则主节点先将第二EC条 带的m+k个第二ECblock分别分发给m+k个存储节点以执行存储,再将第一EC条带的m+k 个第一ECblock分别分发给m+k个存储节点以执行存储,其中第一EC条带的版本号大于 第二EC条带的版本号。
[0199] 情况二:主节点接收第三数据段,其中第一数据段与第三数据段落在同一个逻辑 区域内,且第一数据段与第三数据段的逻辑地址不存在重叠。在这种情况下,主节点将第三 数据段合并到第一数据段中,然后将合并后的第一数据段作为步骤302中要编码的第一数 据段,然后继续执行步骤302与步骤303。例如,第一数据段的逻辑地址的范围为4M~5M, 第三数据段的逻辑地址的范围为5M~8M,第一数据段与第三数据段的逻辑地址均落在逻 辑区域4M~8M中。主节点将第三数据段合并到第一数据段中,然后根据合并后的第一数 据段进行EC编码,得到第一EC条带。
[0200] 情况三:主节点接收第四数据段,其中第一数据段与第四数据段落在不同的逻辑 区域内。这种情况一般发生在身为两个或多个存储节点组的主节点的存储节点身上,或对 多个逻辑区域对应的同一个存储节点组的主节点身上。这种情况下,第一数据段与第四数 据段落在不同的逻辑区域内,因此第一数据段与第四数据段的逻辑地址不存在重叠,主节 点只需正常对第一数据段与第四数据段进行编码与数据分发即可,不会造成存储冲突。上 述三种情况不仅可以用在主节点同时接收到两个数据段的场景下,也可以用在主节点同时 接收到三个或更多个数据段的场景中,本实施例中不做限定。
[0201] 其中,图2所示的实施例中已经说明了,分布式存储系统的每个逻辑区域对应有 唯一的key值,每个数据段所落在的逻辑区域的key值,就是该数据段的key值。由于情况 一中,第一数据段与第二数据段落在相同的逻辑区域内,因此第一数据段与第二数据段具 有相同的key值;情况二中,第一数据段与第三数据段落在相同的逻辑区域内,因此第一数 据段与第三数据段具有相同的key值;情况三中,第一数据段与第四数据段落在不同的逻 辑区域内,因此第一数据段与第四数据段具有不同的key值。主节点可以根据数据段的key 值判断两个数据段是否落在同一个逻辑区域内。
[0202] 特别的,可以将数据段的key值作为对应的EC条带的key值,以标识EC条带数据 部分的逻辑地址的范围。EC条带的key值可以在EC条带的每个ECblock中携带。
[0203] 步骤302中,主节点根据第一数据段进行EC编码得到第一EC条带。具体的,若第 一数据段的大小为Z,则第一数据段可以恰好被分为m个第一数据块,然后主节点对该m个 第一数据块进行校验编码得到k个第一校验块,这样就得到了第一EC条带。
[0204] 若第一数据段的大小小于Z,则第一数据段不足以被分为m个数据块,主节点需 要使用已存储的数据将第一数据段的大小补齐为Z,然后将补齐后的第一数据段作为步骤 302中要编码的第一数据段,执行将第一数据段分为m个第一数据块,并对该m个第一数据 块进行校验编码得到k个第一校验块的步骤。其中,为了保证第一数据段能够落在一个逻 辑区域中,主节点应该从已存储的数据中,选取与第一数据段处于同一逻辑区域的数据来 补齐第一数据段。例如,若第一数据段的逻辑地址为5M~8M,落在逻辑区域4M~8M中,则 主节点应选取已存储的逻辑地址为4M~5M的数据,将第一数据段补齐为4M~8M。
[0205] 主节点根据第二、第三、第四数据段进行EC编码的方法与据第一数据段进行EC编 码的方法类似,此处不做赘述。
[0206] 为了便于理解上述实施例,下面将以上述实施例的一个具体应用场景为例进行描 述。
[0207] 分布式存储系统上层有数据分发装置A与数据分发装置B。分布式存储系统通过 EC条带来存储数据,每个EC条带包括4个数据块和2个校验块。分布式存储系统包括100 个存储节点组,每个存储节点组均指定一个主节点。其中存储节点组1包括6个存储节点, 主节点为节点A,备节点为节点B、节点C、节点D、节点E和节点F。分布式存储系统的逻辑 卷分为多个逻辑区域,每个逻辑区域的大小为4M,即第一个逻辑区域的逻辑地址的范围为 0~4M、第二个逻辑区域的逻辑地址的范围为4M~8M、第三个逻辑区域的逻辑地址的范围 为8M~12M……,每个逻辑区域对应有唯一的key值,第一个逻辑区域对应的key值为1, 第二个逻辑区域对应的key值为2,第三个逻辑区域对应的key值为3……
[0208] 数据分发装置A接收用户的存储指令,该存储指令中携带有待存储的数据,待存 储的数据的逻辑地址为5M~7M。
[0209] 由于5M~8M落在第二个逻辑区域内,8M~12M落在第三个逻辑区域内,因此数据 分发装置A将待存储的数据划分为2个数据段,其中数据段1的逻辑地址为5M~8M,key 值为2 ;数据段2的逻辑地址为8M~12M,key值为3。
[0210] 数据分发装置A预先设置并记录有key值与存储节点组的对应关系,确定key值 2对应存储节点组1,key值3对应存储节点组6。
[0211] 数据分发装置A将数据段1分发到存储节点组1的主节点(即节点A)上,将数据 段2分发到存储节点组6的主节点上。
[0212] 节点A接收数据段1,之后还接收了数据分发装置B分发的数据段3,数据段3的 逻辑地址为4M~7M。节点A将数据段1的4M~5M部分的数据补齐,然后对补齐后的数据 段1进行EC编码,得到EC条带1,EC条带1的key值为2,版本号为1 ;节点A还将数据段 3的7M~8M部分的数据补齐,然后对补齐后的数据段3进行EC编码,得到EC条带3,EC条 带3的key值也为2,版本号为2。其中,每条EC条带包括6个ECblock,分别为4个数据 块和2个校验块。
[0213] 对于EC条带1,节点A自己存储EC条带1的一个ECblock,并将剩余的5个EC block分配给节点B~F存储,使得节点B~F分别存储一个EC条带1的ECblock。节点 B~F成功存储了EC条带1的ECblock后,向节点A发送响应消息,节点A接收到响应消 息后,自己存储EC条带2的一个ECblock,并将剩余的5个ECblock分配给节点B~F存 储,使得节点B~F分别存储一个EC条带2的ECblock。
[0214] 上面的方法详细描述了本发明实施例中数据分发与数据存储的方法,下面的实施 例将提供相应的装置,以实现上述方法。
[0215] 本发明实施例提供的数据分发装置的基本结构请参阅图4,包括:
[0216] 指令接收模块401,用于接收存储指令,其中存储指令携带待存储的数据;
[0217] 数据段划分模块402,用于将待存储的数据划分为P个数据段,其中,每个数据段 对应于一个EC条带,每个数据段的大小不大于Z,Z为m个数据块的大小,P为正整数;
[0218] 节点组确定模块403,用于确定每个数据段对应的存储节点组;
[0219] 数据段分发模块404,用于将每个数据段分发到节点组确定模块403确定的每个 数据段对应的存储节点组的主存储节点上。
[0220] 本实施例提供的一种数据分发装置中,指令接收模块401接收用户的存储指令, 数据段划分模块402将存储指令指示存储的待存储的数据划分为P个数据段,节点组确定 模块403确定每个数据段对应的存储节点组,数据段分发模块404将每个数据段分发到对 应的存储节点组的主节点上。由于本实施例中,数据分发装置直接将划分后的数据段分发 给存储节点,不再对待存储的数据进行EC编码,这样就无需采用分布式锁来解决冲突问 题,不会产生频繁的锁切换,提高了分布式存储系统的性能。
[0221] 优选的,作为本发明的又一个实施例,分布式存储系统的逻辑卷分为多个逻辑区 域,每个逻辑区域的大小为Z且互不重叠;数据段划分模块402具体用于:
[0222] 根据待存储的数据的逻辑地址,将待存储的数据划分为P个数据段,其中,每个数 据段落在一个逻辑区域中。
[0223] 优选的,作为本发明的又一个实施例,数据段划分模块402划分的P个数据段中, 第1个数据段的起始地址为待存储的数据的起始地址,第P个数据段的起始地址为第P个 数据段所落在逻辑区域的起始地址,2 <p<P。
[0224] 优选的,作为本发明的又一个实施例,数据分发装置还包括关系对应模块405,用 于预先设置并记录每个逻辑区域与每个存储节点组的对应关系;节点组确定模块403具体 用于:根据每个逻辑区域与每个存储节点组之间的对应关系,确定每个数据段所落在的逻 辑区域对应的存储节点组。其中,关系对应模块405为可选模块,数据分发装置也可以不具 有关系对应模块405。
[0225] 优选的,作为本发明的又一个实施例,分布式存储系统的每个逻辑区域唯一对应 一个key值,关系对应模块405具体用于:预先设置并记录存储节点组对应的key值;节点 组确定模块403具体用于:根据每个数据段所落在的逻辑区域,确定每个数据段的key值; 根据每个数据段的key值确定每个数据段对应的存储节点组。
[0226] 本发明实施例还提供了相关的数据存储装置,适用于分布式存储系统的任何一个 存储节点组的主节点上,其基本结构请参阅图5,包括:
[0227] 数据接收模块501,用于接收第一数据段,其中,第一数据段的大小不大于Z,Z为m 个数据块的大小;
[0228] 数据编码模块502,用于根据第一数据段进行EC编码得到第一EC条带,其中,第一 EC条带包括m个第一数据块和k个第一校验块;
[0229] 数据分发模块503,用于将第一EC条带分发给m+k个存储节点以执行存储,其中, 该m+k个存储节点中的每个存储节点负责存储第一EC条带的m个第一数据块或者k个第 一校验块中的任一个。
[0230]图4所示的实施例给出了一种数据分发装置,本实施例对应的提供了一种数据存 储装置,用于存储数据分发装置分发的数据。主节点的数据存储装置中,数据接收模块501 接收数据分发装置分发的第一数据段,数据编码模块502对第一数据段进行EC编码得到第 一EC条带,数据分发模块503将第一EC条带的m+k个数据块分配给m+k个存储节点进行 存储。与现有技术相比,本实施例将原本由数据分发装置执行的EC编码操作改为由数据存 储装置执行,由这样就不存在数据分发装置进行EC编码造成的冲突问题,进而无需采用分 布式锁来解决冲突问题,不会产生频繁的锁切换,提高了分布式存储系统的性能。
[0231] 优选的,作为本发明的又一个实施例,分布式存储系统的逻辑卷包括多个逻辑区 域,每个逻辑区域的大小为Z且互不重叠。其中第一数据段落在一个逻辑区域中。
[0232] 优选的,作为本发明的又一个实施例,数据接收模块501还用于:
[0233] 接收第二数据段,其中,第二数据段与第一数据段落在相同的逻辑区域且第二数 据段的逻辑地址与第一数据段的逻辑地址存在重叠;数据编码模块502还用于:根据第二 数据段进行EC编码得到第二EC条带,所述第二EC条带包括m个第二数据块和k个第二 校验块;数据分发模块503具体用于:确定第一EC条带与第二EC条带的串行分发顺序,并 根据该串行分发顺序,将第一EC条带与第二EC条带串行分发给m+k个存储节点以执行存 储,其中,该串行分发操作用于规避第一EC条带与第二EC条带在m+k个存储节点上的存储 冲突,该m+k个存储节点中的每个存储节点负责存储第一EC条带的m个第一数据块或者k 个第一校验块中的任一个,和第二EC条带的m个第二数据块或者k个第二校验块中的任一 个。优选的,作为本发明的又一个实施例,数据分发模块503通过如下方法将第一EC条带 与第二EC条带串行分发给m+k个存储节点以执行存储:
[0234] 若第一数据段的接收时间早于第二数据段的接收时间,则先将第一EC条带分发 给m+k个存储节点以执行存储;在接收到该m+k个存储节点成功存储第一EC条带的响应消 息之后,再将第二EC条带分发给该m+k个存储节点以执行存储;或者,
[0235] 若第一数据段的接收时间晚于所述第二数据段的接收时间,则先将第二EC条带 分发给m+k个存储节点以执行存储;在接收到该m+k个存储节点成功存储第二EC条带的响 应消息之后,再将第一EC条带分发给m+k个存储节点以执行存储。
[0236] 优选的,作为本发明的又一个实施例,数据接收模块501还用于:接收第三数据 段,其中,第三数据段与第一数据段落在相同的逻辑区域且第三数据段的逻辑地址与第一 数据段的逻辑地址不存在重叠;
[0237] 数据编码模块502还用于:将第三数据合并到所述第一数据段中,并触发根据第 一数据段进行EC编码得到第一EC条带的步骤。
[0238] 优选的,作为本发明的又一个实施例,数据编码模块502通过如下方法对第一数 据段进行EC编码:若第一数据段的大小等于Z,则将第一数据段划分为m个第一数据块,并 对m个第一数据块进行校验编码得到的k个第一校验块;若第一数据段的大小小于Z,则使 用已存储的数据将第一数据段的大小补齐为Z,然后将补齐后的第一数据段划分为m个第 一数据块,并对m个第一数据块进行校验编码得到的k个第一校验块。
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1