一种纠删码存储中负载感知的数据归档方法
【专利摘要】本发明公开了一种纠删码存储中负载感知的数据归档方法,包括步骤:获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中,并根据节点负载权重值来确定不同条带在生产集群中的归档节点集合。对第i个条带,初始化其归档节点集合为空,从第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果为是,则将该节点对应的数据块填充在该条带的归档节点集合中,并更新所涉及节点的负载权重值;如果为否,则选择该条带数据分布集合中负载权值第二高的节点。本发明解决了现有方法中编码节点不考虑节点权值,仅从固定节点获取条带上所有数据块而导致的性能瓶颈问题。
【专利说明】一种纠删码存储中负载感知的数据归档方法
【技术领域】
[0001]本发明属于计算机存储【技术领域】,更具体地,涉及一种纠删码存储中负载感知的数据归档方法。
【背景技术】
[0002]分布式存储集群利用本身不可靠的单节点提供的冗余数据保证数据的可靠性。在GFS,HDFS和amazon S3等分布式存储环境下采用三副本的冗余方式,在三副本的情况下可以很好地获得数据可靠性以及负载均衡特性。在大规模集群中,三副本带来的缺陷是存储效率低,进而存储成本过高。对于数据一次写多次读集群环境,纠删码数据归档,可以有效的提高存储效率。大规模集群环境下,由于不同方式的I/O服务请求导致集群中节点的异构。在归档过程中归档速度过慢的节点是影响归档性能的重要因素。
[0003]传统上是使用基于Reed-Solomon (简称RS)编码的归档方法,即RS (N, K)码归档方法,如果满足HDFS机架感知的三副本数据需要归档,该集中式归档过程包括以下六步:
(I)集群管理节点向归档管理节点提交数据归档请求;(II)归档管理节点向数据生产集群提交一个条带上K个数据块的请求;(III)生产集群依据归档管理节点数据请求,从K个数据块的三副本中随机选取一个副本发送给归档管理节点;(IV )归档管理节点由接收的K个数据块编码生成N个块的归档条带,发送给归档集群;(V )重复步骤(II ) (III) (IV )直到编码生成所有归档数据;(VI)删除生产集群中旧有的三个副本的数据。如图1所示,为传统的HDFS集群的集中式归档过程,该过程是对于一个条带上的K个数据块{D1; D2,D3,...DJ,随机选取三副本中的一个副本,将该副本数据发送给归档管理节点,归档节点对这K个数据块进行RS编码计算,得到r(r = N-K)个校验分块{P1;P2,…,Pj,归档管理节点将K个数据块以及r个校验块发送给归档集群,重复之前的步骤完成不同条带上的数据归档。如图2所示是传统的集中式归档流程图。
[0004]在上述的传统集中式归档过程中,如果生产集群中各个节点的负载相近,并且归档管理节点的网络带宽以及性能远远高于生产集群中节点,则生产集群中负载过大的节点和归档管理节点不会成为归档过程中的性能拼颈。但是,当生产集群中的各个节点负载相差很大,归档管理节点带宽以及性能与生产集群节点相近时,传统的集中式归档会存在如下两方面问题:
[0005]一方面,在归档管理节点在生产集群中拉取数据时,得到K个数据块的时间,取决于K个数据块中最晚到达的数据块的时间,当生产集群中某一个提供数据的节点负载过重,发送数据块给编码节点的时间过长,编码节点一直在等待数据,该节点就会成为单条带归档过程中的性能瓶颈。
[0006]另一方面,归档管理节点是整个归档过程的“中心节点”,完成所有条带的归档请求,所有的数据块都是经过归档管理节点,由生产集群到归档集群。对于单条带的归档过程,归档管理节点需要等待K个数据块到达才能进行编码操作,归档管理节点接收数据过程是影响单条带归档的主要因素;对于整个归档过程,所有条带的数据归档都是由归档管理节点完成,这样在归档节点带宽与性能与生产集群中节点相近时,归档管理节点会成为整个归档过程的性能瓶颈。
【发明内容】
[0007]针对现有技术的以上缺陷或改进需求,本发明提供了一种纠删码存储中负载感知的数据归档方法,其目的在于,解决现有集中式归档方法中存在的编码节点一直在等待数据从而成为单条带归档过程中的性能瓶颈、以及所有归档编码任务均有归档管理节点完成所形成的该管理节点成为整个归档过程的性能瓶颈的技术问题。
[0008]为实现上述目的,按照本发明的一个方面,提供了一种纠删码存储中负载感知的数据归档方法,包括如下步骤:
[0009](I)获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中;
[0010](2)设置计数器i = I ;
[0011](3)对第i个条带,初始化其归档节点集合为空;
[0012](4)从纠删码存储集群中的管理节点读取数据分布位图,以获取不同条带在生产集群中的数据分布集合;
[0013](5)从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果大于则进入步骤(6),否则进入步骤(9);
[0014](6)将该节点对应的数据块填充在该条带的归档节点集合中,将该数据块的三个副本均从该条带的数据分布集合中删除,并将该节点对应的负载权重值减去该节点添加至归档节点集合中的数据块数量。
[0015](7)重复上述步骤(5)和步骤¢),直到第i个条带的数据分布集合变为全空为止;
[0016](8)设置计数器i = i+Ι,并返回步骤⑶;
[0017](9)计时器启动,根据上述步骤(2)至步骤(8)得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群;
[0018](10)在T2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据步骤(I)计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值;
[0019](11)重复步骤⑵至步骤(10),直到每个节点的数据块均被编码完成为止。
[0020]优选地,步骤⑴具体为,首先,计算生产集群中节点j的过去T1时间内的AJPPTj值,其次,计算生产集群中节点j的ARJPj值,再计算T2时间内节点j的负载权重值^ =Wj =T2* (AJPPTj-ARJPj) /BS,其中BS为数据块大小,最后,将所有生产节点的负载权重值存入数组中。
[0021]优选地,步骤(9)具体包括以下子步骤:
[0022](9-1)对于每一个条带的归档节点集合ANS,依据每个节点的数据块个数由多到少进行排序;
[0023](9-2)依据由多到少的排序结果,由数据块少的节点发送数据至数据块多的节点,当某个节点的数据块个数累计> =(N-K)个时,该节点作为编码节点进行流水线式编码,以生成校验块,其中K表示原始分块的个数,N表示编码生成的编码分块的个数;
[0024](9-3)判断条带中所有数据编码是否完成,若是,则将校验块发送到编码集群,否则返回步骤(9-2)。
[0025]按照本发明的另一方面,提供了一种纠删码存储中负载感知的数据归档系统,其特征在于,包括:
[0026]第一模块,用于获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中;
[0027]第二模块,用于设置计数器i = I ;
[0028]第三模块,用于对第i个条带,初始化其归档节点集合为空;
[0029]第四模块,用于从纠删码存储集群中的管理节点读取数据分布位图,以获取不同条带在生产集群中的数据分布集合;
[0030]第五模块,用于从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果大于则进入第六模块,否则进入第九模块;
[0031]第六模块,用于将该节点对应的数据块填充在该条带的归档节点集合中,将该数据块的三个副本均从该条带的数据分布集合中删除,并将该节点对应的负载权重值减去该节点添加至归档节点集合中的数据块数量;
[0032]第七模块,用于重复上述第五模块和第六模块,直到第i个条带的数据分布集合变为全空为止;
[0033]第八模块,用于设置计数器i = i + Ι,并返回第三模块;
[0034]第九模块,用于计时器启动,根据上述第二模块至第八模块得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群;
[0035]第十模块,用于在T2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据第一模块计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值;
[0036]第十一模块,用于重复第二模块至第十模块,直到每个节点的数据块均被编码完成为止。
[0037]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
[0038](I)由于本发明采用了步骤(2)中结合节点负载分配权重值和步骤(5)中在负载权重值高的节点上选取归档数据块,可以实现在负载轻、性能好的节点上选取跟多的数据块的效果,因此解决了现有集中式归档方法中存在的编码节点一直在等待数据从而成为单条带归档过程中的性能瓶颈的问题;
[0039](2)由于本发明中采用了步骤(9)中的分布式编码,一个条带的编码由多个节点完成并且每个条带的最终的编码节点不再是固定的某一个节点,解决了所有归档编码任务均有归档管理节点完成所形成的该管理节点成为整个归档过程的性能瓶颈的技术问题;
[0040](3)本发明归档过程结合集群异构,提高了纠删码存储集群的归档效率,进而提高了集群的工作效率。
【专利附图】
【附图说明】
[0041]图1是现有技术中集群集中式归档、读取数据块分布示意图;
[0042]图2是现有技术中纠删码存储集群集中式归档流程图;
[0043]图3是本发明纠删码存储中负载感知的数据归档方法的流程图;
[0044]图4是数据块分布图;
[0045]图5是本发明中一个实例的数据条带归档数据流。
【具体实施方式】
[0046]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0047]以下首先就本发明的相关术语进行解释和说明:
[0048]节点数据块以及条带:在归档的编码过程中,读取数据的单元就是数据块。在存储集群中,一个条带就是由多个数据块组成的整体,可以独立地恢复出失效数据的信息集合。
[0049]生产集群:本发明中是指在归档过程中提供归档数据的同时仍然需要给整个集群提供数据服务的节点总称。
[0050]归档集群:归档完成后存储完整数据条带的集群,可以由生产集群本身的空闲空间替代,本发明中为一种抽象的概念。
[0051]负载权重值:本发明中以W表不,其表达的意思是在过去的一段时间内生产集群节点负载和性能情况,负载权重值W包括的因素有CPU处理能力、网络带宽、I/O能力等特性。在本发明中负载权重值反映的是:在一段时间内,所有节点在网络1处理能力与网络1负载的差值。负载权重值越大表示节点当前性能越好。
[0052]分布式编码:依据编码特性,由多个节点共同完成同一条带数据块的编码操作,并得到校验块。具体地,可依据部分数据块得到编码的中间结果,再利用剩余的数据块以及中间结果得到最终的编码结果。
[0053]流水线式编码:一种特殊的分布式编码方式,由多个节点按固定次序排列,其中任一节点生成中间校验块,并发送给下一节点,直至生成最终的校验块。这样,这些参与编码的节点会按流水线方式完成中间校验块的传输和编码操作。
[0054]编码节点:一个条带的数据归档过程中,实施了编码计算操作的节点。
[0055]本发明提供了一种纠删码存储中负载感知的数据归档方法,本实例采用的是RS(N7K)编码方式。其中,K表示原始分块的个数,N表示编码生成的编码分块的个数,N个编码分块中任意K个都可以解码出K个原始分块。本发明不局限于RS码,它适用于编码过程可以分步进行的纠删码。
[0056]如图4所示,假定纠删码存储集群的生产集群上共有18个节点,6个节点放置在同一机架上,数据块按三副本方式分布,并满足机架感知的放置策略。集群管理节点负责归档有关的操作,当归档操作被触发时,向生产集群中18个节点(生产节点编号为N1?N18)发出数据块读取请求,再进行数据块编码计算,最后完成归档过程。
[0057]如图3所示,本发明提供了一种纠删码存储中负载感知的数据归档方法,具体包括如下步骤:
[0058](I)获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中;具体而言,首先,计算生产集群中节点j的过去!\时间内的AJPPL值(AJPPT是Average Job length Per Processing Time的简写,其表示单位处理时间内任务长度的平均值),其中T1的大小取决于任务处理时间,任务处理时间越大,则T1越大。其次,计算生产集群中节点 j 的 ARJPj 值(ARJP 是 Average Request Job length Per second 的简写,其表示节点j每秒所接收的任务数),再计算T2时间内节点j的负载权重值Wj,其中,Wj =T2* (AJPPTj-ARJPj) /BS, T2受数据块大小和节点带宽影响,本发明中,T2设为5秒,BS为数据块大小(Block Size),BSSS64MB。最后,将所有生产节点的负载权重值存入数组中。
[0059](2)设置计数器i = I ;
[0060](3)对第i个条带(条带数据为D1?D6),初始化其归档节点集合(Archival NodeSet,简称 ANS)为空,即,ANS= {};
[0061](4)从纠删码存储集群中的管理节点读取数据分布位图,以获取不同条带在生产集群中的数据分布集合(Data Distribute Set,简称DDS);例如,如图4所示,第一个条带的数据分布集合DDS为:
[0062](N1 (D2, D5),N2 (D1, D2, D3),N3 (D3, D6),N4 (D4, D5, D6),N5 (D1),N6 (D4),N7 (D4),N8 (D5),N9(D6),N1。(空),N11(空),N12(空),N13(D1, D2, D3),N14(空),N15(空),N16(空),N17(空),N18(空)}。其中N表示生产节点,D表示数据块,N1(DyD5)表示节点N1上存有数据块D2和D5 ;
[0063](5)从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果大于则进入步骤(6),否则进入步骤(9);
[0064](6)将该节点对应的数据块填充在该条带的归档节点集合中,将该数据块的三个副本均从该条带的数据分布集合中删除,并将该节点对应的负载权重值减去该节点添加至归档节点集合中的数据块数量。例如,如果发现第13个节点N13的负载权重值最大,则将N13 (D1, D2, D3)填充在第i个条带的归档节点集合中从而ANS = (N13 (D1, D2, D3) },并从该条带的DDS中删除D1, D2, D3的三个副本,从而第一个条带的DDS为:(N1 (D5),N2 (空),N3 (D6),N4 (D4, D5, D6),N5 (空),N6(D4),N7(D4),N8(D5),N9(D6),N1。(空),N11 (空),N12 (空),N13 (空),N14(空),N15(空),N16(空),N17(空),N18(空)},最后,将第13个节点对应的负载权重值减去添加至归档节点集合中的数据块数量3 ;
[0065](7)重复上述步骤(5)和步骤¢),直到第i个条带的数据分布集合变为全空为止;
[0066](8)设置计数器i = i+Ι,并返回步骤(3);
[0067](9)计时器启动,根据上述步骤(2)至步骤(8)得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群;本步骤具体包括以下子步骤:
[0068](9-1)对于每一个条带的归档节点集合ANS,依据每个节点的数据块个数由多到少进行排序;
[0069](9-2)依据由多到少的排序结果,由数据块少的节点发送数据至数据块多的节点,当某个节点的数据块个数累计>=(N-K)个时,该节点作为编码节点进行流水线式编码,即对于一个数据块大小为64MB的条带,归档的过程中以IMB为数据的发送和编码单元,发送分布式编码后的结果给下一个节点,其中K表示原始分块的个数,N表示编码生成的编码分块的个数,以生成校验块,其中K表示原始分块的个数,N表示编码生成的编码分块的个数;
[0070](9-3)判断条带中所有数据编码是否完成,若是,则将校验块发送到编码集群,否则返回步骤(9-2)。
[0071](10)在T2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据步骤(I)计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值;
[0072](11)重复步骤⑵至步骤(10),直到每个节点的数据块均被编码完成为止。
[0073]实例
[0074]本发明方法纠删码存储中负载感知的归档方法是应用在三副本存储集群中,下面以参数配置“生产节点数=18,K = 6,N = 9”为例,具体描述上述归档过程,主要包括以下步骤:
[0075](I)根据生产集群上节点在过去的Tl时间段内,网络1处理能力与网络1负载的差值,初始化生产节点的负载权重值,假定各节点负载权重值为〈0,0,0,5,2,2,0,0,0,4,2,0,6,0,0,0,0,0>。
[0076](2)设置计数器i = I ;
[0077](3)对第i个条带,初始化其归档节点集合ANS = {};
[0078](4)从纠删码存储集群中的管理节点读取数据分布位图,获取第一个条带的数据分布集合 DDS 为:(N1 (D2,D5),N2 (D1, D2, D3),N3 (D3, D6),N4 (D4, D5, D6),N5 (D1),N6 (D4),N7 (D4),N8(D5), N9(D6), N1。(空),N11(空),N12(空),N13 (D1, D2, D3),N14 (空),N15 (空),N16(空),N17(空),N18(空)}
[0079](5)从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,N13节点负载权重值最大为5,大于N13 (D1, D2, D3)节点上数据块个数3,进入步骤(6)。
[0080](6)将节点N3上的数据块D1, D2, D3填充在该条带的归档节点集合中ANS = (N13 (D1,D2, D3) },将数据块D1, D2, D3的三个副本均从该条带的数据分布集合中删除,该条带DDS变为:(N1 (D5),N2(空),N3(D6),N4(D4, D5, D6),N5(空),N6(D4),N7(D4),N8(D5),N9(D6),N1?(空),N11 (空),N12(空),N13(空),N14(空),N15(空),N16(空),N17(空),N18(空)}。并将该节点对应的负载权重值5减去该节点添加至归档节点集合中的数据块数量3,各节点负载权重值变为:
[0081]〈0,0,0,2,2,2,0,0,0,4,2,0,3,0,0,0,0,0>
[0082](7)重复上述步骤(5)和步骤(6),第二个添加到归档节点集合的节点为N4,添加至归档节点集合ANS = (N13 (D1, D2, D3),N4 (D4, D5, D6)},将数据块D4, D5, D6的三个副本均从该条带的数据分布集合中删除,该条带DDS变为JN1 (空),N2(空),N3(空),N4(空),N5(空),N6(D4), N7(D4), N8(D5), N9(D6), N10(空),N11 (空),N12 (空),N13 (空),N14 (空),N15(空),N16 (空),N17 (空),N18 (空)}。并将该节点N4对应的负载权重值4减去该节点添加至归档节点集合中的数据块数量3,各节点负载权重值变为:〈0,O,O,2,2,2,O,O,O,4,2,O,3,O,O,0,0,0>。;
[0083]此时第I个条带的数据分布集合全变为空,进入步骤(8);
[0084](8)设置计数器i = i+Ι,对于第2个条带,依据数据分布位图得到数据分布集合DDS 为:(N1 (空),N2 (D7),N3 (D8, D9, D10, D11, D12),N4 (D7, D10),N5 (D8, D11),N6 (D9, D12),N7 (D7,D8, D9),N8(D10, D11, D12),N9(空),N1?(空),N11(空),N12(空),N13(空),N14(空),N15(D7),N16(D8, D9) ,N17(Dltl, D11, D12) ,N18(空)}。
[0085]重复步骤(3)?步骤(7),得到归档节点集合为:
[0086]ANS = (N4 (D7,D10),N5 (D8, D11),N6 (D9, D12)}
[0087]各节点负载权重值变为:
[0088]<0,0,0,0,0,0,0,0,0,4, 2,0, 3,0,0,0,0,0> ;
[0089]设置计数器i = i+Ι,对于第3个条带,依据数据分布位图得到数据分布集合DDS为 HN1(空),N2(空),N3(空),N4(空),N5(空),N6(空),N7(D13) ,N8(D14) ,N9(D15),N1(I(D13,D16, D17, D18), N11 (D14J D15), N12 (D16, D17, D18), N13 ( ),N14 (D13,D14),N15 (D15, D16), N16 (D17, D18),N17(空),N18(空)}。
[0090]重复步骤(3)?步骤(7),得到归档节点集合为:
[0091 ] ANS = (N10 (D13, D16, D17, D18),N11 (D14, D15)}
[0092]各节点负载权重值变为:
[0093]<0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0> ;
[0094]设置计数器i = i+Ι,对于第4个条带,显然负载权重值小于归档数据块,进入步骤
(9);
[0095](9)计时器启动,根据上述步骤(2)至步骤(8)得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群;
[0096]本步骤具体包括以下子步骤:
[0097]当K = 6时,可能的数据块分割情况有十一种组合情况,分别是
[0098][6,0,0,0,0,0]、
[0099][5,1,0,0,0,0]、
[0100][4,2,0,0,0,0]、
[0101][4,1,1,0,0,0]、
[0102][3,3,0,0,0,0]、
[0103][3,2,1,0,0,0]、
[0104][3,1,1,1,0,0]、
[0105][2,2,2,0,0,0]、
[0106][2,2,1,1,0,0]、
[0107][2,1,1,1,1,0]、
[0108][I,I,I,I,I,l]o
[0109]第一列上数值6表示某一节点上存在某一条带上的6个不同数据块
[0110]对于每一种布局进行分析:
[0111][6]:直接选择该节点做为编码节点
[0112][1,5]、[2,4],[1,1,4]、[1,2,3]、[1,1,1,3]:选择最后一个节点为编码节点,直接接收其余节点数据块数据块。
[0113][3,3]:第一个节点进行编码,发送给第二个节点再次编码得到最终校验块。
[0114][2,2,2]、[1,1,2,2]、[1,1,1,1,2]:将倒数第二个节点作为编码中间节点,即将除最后两个节点之外的数据均集中在倒数第二个节点上,将其编码得到中间结果P/,p2’,p3’传送给最终编码节点。这样仍然可以保证每个节点的接收数据块以及发送数据块〈=3。此方式相对与直接在最后一个节点上采用集中编码有一个劣势在于网络中会增加一个数据块的流量,但是保证了单条带归档负载均衡。
[0115][1,1,1,1,1,I]:在三副本的情况下,存有单条带多个数据块的节点性能过差时才会选择这样的归档链。同样是选择倒数第二个节点为编码中间节点得到p/,p2’,p3’,发送给最终的编码的节点,这样相对于直接在最终编码节点上采用集中编码时的接收数据块/发送数据块的5/3,增加了网络中的两个数据块的流量来达到负载均衡。
[0116]如图5所示,以第I个条带举例,本发明通过将传统的集中式归档的归档管理节点的编码功能由生产集群中的节点代替。选择节点N2, N4采用流水线(即每次发送的数据不是完整的64MB的数据块,而是一个个IMB的子块)的方式生成校验块P1, P2, P3发送给归档集群。具体过程为,N2节点读取数据块D1, D2, D3,编码生成三个IMB的校验块{P/,P2’,P3,}发送给N4节点,N4节点读取数据块D4, D5, D6,结合校验块{P/,P2,,P3,}编码生成最终校验{PpPyPj发送给归档集群,对于这个条带上的64MB数据,怳,队,归档集群}三者形成归档流水线直到完成的校验均发送给归档集群。对于数据块D1?D6的发送过程,采用相同的负载权重值方式,选择节点N7, N8, N9, N13将原始数据块发送给归档集群,增加单条带归档并行性,加快归档速度。第2个条带和第3三个条带采用同第I个条带的步骤完成归档。
[0117](10)在T2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据步骤(I)计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值;
[0118](11)重复步骤(2)至步骤(10),直到每个节点的数据块均被编码完成为止。
[0119]当集群产生归档请求时,两种方式的归档过程如下:
[0120]传统的集群归档如图1所示,归档管理节点随机读取条带D1?D6三副本中的一个副本,编码生成3个校验块,归档节点将数据块D1?D6发送给归档集群的同时将校验块IP1, P2, P3I发送给归档集群。每个条带上数据块的选择都是随机的,无法同时考虑节点负载以及数据分布。
[0121]本发明方法的操作为:
[0122]第一步:分配节点权重值
[0123]第二步:结合权重值与数据块的分布得到归档数据块布局
[0124]第三步:结合不同归档数据块布局选择对应方式的流水线式编码。
[0125]第四步:重复第一步至三步完成所有数据的归档。
[0126]总而言之,本发明的方法具有以下优化效果:
[0127]1、归档选择数据块时结合代表节点负载特性的负载权重值以及三副本数据分布特征,在负载轻,数据块多的节点上进行归档。避免了负载过重的节点拖慢归档过程,以及过多的节点之间数据块的传输。
[0128]2、生产集群中的不同节点做为编码节点代替归档管理节点的编码过程,增加的归档过程的并行度,消除了归档管理节点性能瓶颈的隐患。
[0129]3、单条带归档过程的优化,采用流水线分步编码的方式加速编码过程,减少编码节点等待数据块的时间,通过优化单条带的归档,提高了归档的整体效率。
[0130]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种纠删码存储中负载感知的数据归档方法,其特征在于,包括如下步骤: (1)获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中; (2)设置计数器i= I ; (3)对第i个条带,初始化其归档节点集合为空; (4)从纠删码存储集群中的管理节点读取数据分布位图,以获取不同条带在生产集群中的数据分布集合; (5)从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果大于则进入步骤(6),否则进入步骤(9); (6)将该节点对应的数据块填充在该条带的归档节点集合中,将该数据块的三个副本均从该条带的数据分布集合中删除,并将该节点对应的负载权重值减去该节点添加至归档节点集合中的数据块数量。 (7)重复上述步骤(5)和步骤¢),直到第i个条带的数据分布集合变为全空为止; (8)设置计数器i= i+Ι,并返回步骤(3); (9)计时器启动,根据上述步骤(2)至步骤(8)得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群; (10)在1~2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据步骤(I)计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值; (11)重复步骤(2)至步骤(10),直到每个节点的数据块均被编码完成为止。
2.根据权利要求1所述的数据归档方法,其特征在于,步骤(I)具体为,首先,计算生产集群中节点j的过去T1时间内的AJPPL值,其次,计算生产集群中节点j的ARJPj值,再计算T2时间内节点j的负载权重值Wj =Wj = T2* (AJPPTj-ARJPj)/BS,其中BS为数据块大小,最后,将所有生产节点的负载权重值存入数组中。
3.根据权利要求1所述的数据归档方法,其特征在于,步骤(9)具体包括以下子步骤: (9-1)对于每一个条带的归档节点集合ANS,依据每个节点的数据块个数由多到少进行排序; (9-2)依据由多到少的排序结果,由数据块少的节点发送数据至数据块多的节点,当某个节点的数据块个数累计> =(N-K)个时,该节点作为编码节点进行流水线式编码,以生成校验块,其中K表示原始分块的个数,N表示编码生成的编码分块的个数; (9-3)判断条带中所有数据编码是否完成,若是,则将校验块发送到编码集群,否则返回步骤(9-2)。
4.一种纠删码存储中负载感知的数据归档系统,其特征在于,包括: 第一模块,用于获取纠删码存储集群中生产集群的每个节点的负载权重值,并将负载权重值存储在数组中; 第二模块,用于设置计数器i = I ; 第三模块,用于对第i个条带,初始化其归档节点集合为空; 第四模块,用于从纠删码存储集群中的管理节点读取数据分布位图,以获取不同条带在生产集群中的数据分布集合; 第五模块,用于从纠删码存储集群的第i个条带的数据分布集合中选择负载权重值最高的节点,并判断该节点的负载权重值是否大于该节点的数据块个数,如果大于则进入第六模块,否则进入第九模块; 第六模块,用于将该节点对应的数据块填充在该条带的归档节点集合中,将该数据块的三个副本均从该条带的数据分布集合中删除,并将该节点对应的负载权重值减去该节点添加至归档节点集合中的数据块数量; 第七模块,用于重复上述第五模块和第六模块,直到第i个条带的数据分布集合变为全空为止; 第八模块,用于设置计数器i = i+ι,并返回第三模块; 第九模块,用于计时器启动,根据上述第二模块至第八模块得到的条带的归档节点集合对该条带中的数据块进行分布式编码,以得到校验块,并将该校验快发送到归档集群;第十模块,用于在T2时间点观察生产集群中的每个节点,并判断其数据块的编码是否完成,如果完成则根据第一模块计算该节点的负载权重值,否则根据该节点的数据块已经被编码的数量减去未完成编码的数据块数量作为该节点的负载权重值; 第十一模块,用于重复第二模块至第十模块,直到每个节点的数据块均被编码完成为止。
【文档编号】G06F11/14GK104391759SQ201410631962
【公开日】2015年3月4日 申请日期:2014年11月11日 优先权日:2014年11月11日
【发明者】黄建忠, 曹强, 谢长生, 代尔卫, 罗海兵 申请人:华中科技大学