一种基于任务负载感知的纠删码归档方法及系统与流程

文档序号:12664987阅读:172来源:国知局
一种基于任务负载感知的纠删码归档方法及系统与流程

本发明属于计算机存储技术领域,更具体地,涉及一种基于任务负载感知的纠删码归档方法及系统。



背景技术:

为了保障集群数据的可靠性和提高计算并行度,现有的分布式存储集群(HDFS,GFS)大多使用副本形式保存数据,即每个数据块在分布式集群中保存两个或者三个副本。副本形式的数据存储,虽然可以提高数据可靠性和并行度,但是存储开销较大,空间利用率不高。针对数据一次写多次读的集群环境,通过纠删码归档不经常被访问的数据,可以降低数据的存储开销,提高存储空间的利用率。在随机布局归档过程中,负载不均衡是影响归档性能的重要因素。

在现有的随机布局归档中,一般都采用集中式数据归档和分布式数据归档。归档以条带为单位,条带主节点从条带从节点获取源数据,编码出校验数据。主节点还可以同时作为从节点,从本地磁盘获取源数据。

在集中式数据归档中,随机选择存储集群中的一个节点作为所有条带的编码节点,编码节点磁盘上的数据块,直接以随机读的方式从磁盘获取,编码需要但是不在编码节点磁盘上的数据块则通过网络传输的方式从其他节点上获取。

在分布式数据归档中,针对归档的每一个条带,根据数据局部性,选择局部性最大的数据节点作为该条带的编码节点,对于不在编码主节点上的数据块,通过网络从其它节点上获取。

现有的随机布局归档方案的主要存在以下问题:如果编码节点需要通过网络获取大量的非本地数据块,并且集群中的数据块分布不均匀,即不同的存储节点上存储的数据块数量差异较大,集群节点负载不均衡,那么整个集群的归档性能将会大幅度下降。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于任务负载感知的纠删码归档方法及系统,其目的在于实时感知各存储节点的任务负载,根据各存储节点的任务负载实时更新编码模块和供给模块,完成校验数据的计算和分配,最终完成数据的归档,由此解决现有随机布局归档方案中存在的:任务负载不均衡和任务堆积,进一步降低磁盘随机读的性能,以及网络资源带宽分配不均匀导致网络性能降低的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种基于任务负载感知的纠删码归档方法,该方法包括:

(1)选取编码节点:获取当前归档条带每个存储节点的任务数和每个存储节点所含有本条带数据分块的个数,选取任务数最小且含有当前条带数据分块最多的一个存储节点作为编码节点,编码节点的任务数更新为任务数加纠删码的校验分块数;

(2)选取供给节点:依次获取当前条带中各个数据分块的供给节点,并更新供给节点的任务数;

(3)编码计算分配:编码节点获取所有供给节点中的数据分块进行编码计算,得到校验分块,并将校验分块传输给其他非供给节点;

(4)循环编码分配:判断是否还有其他条带没有进行归档,若有则选定该条带返回步骤(1);否则结束归档。

进一步地,所述步骤(2)包括以下子步骤:

(21)获取当前数据分块所在的所有存储节点,选取任务数最小的存储节点作为候选节点;

(22)候选节点中若有编码节点,则选编码节点同时作为当前数据分块的供给节点;

(23)候选节点中若无编码节点,则任选一个候选节点作为供给节点;供给节点任务数加1,编码节点任务数加1;

(24)判断是否还有其他数据分块没有选取供给节点,若有则选定该数据分块返回子步骤(21);否则结束供给节点的选择。

进一步地,所述步骤(3)包括以下子步骤:

(31)每个供给节点从本地磁盘中读取相应的数据分块;非编码节点的供给节点通过网络将数据分块发送给编码节点;

(32)编码节点根据所有供给节点提供的数据分块进行编码计算,获取校验分块;

(33)编码节点通过网络将生成的校验分块传输给存储集群中的非供给节点。

按照本发明的另一方面,提供了一种基于任务负载感知的纠删码归档系统,该系统包括:

编码节点选取模块,用于获取当前归档条带每个存储节点的任务数和每个存储节点所含有本条带数据分块的个数,选取任务数最小且含有当前条带数据分块最多的一个存储节点作为编码节点,编码节点的任务数更新为任务数加纠删码的校验分块数;

供给节点选取模块,用于依次获取当前条带中各个数据分块的供给节点,并更新供给节点的任务数;

编码计算分配模块,用于利用编码节点获取所有供给节点中的数据分块进行编码计算,得到校验分块,并将校验分块传输给其他非供给节点;

循环编码分配模块,用于判断是否还有其他条带没有进行归档,若有则选定该条带返回编码节点选取模块;否则结束归档。

进一步地,所述供给节点选取模块包括以下部分:

候选节点选取单元,用于获取当前数据分块所在的所有存储节点,选取任务数最小的存储节点作为候选节点;

第一供给节点选取单元,用于判断若候选节点中有编码节点,则选编码节点同时作为当前数据分块的供给节点;

第二供给节点选取单元,用于判断若候选节点中没有编码节点,则任选一个候选节点作为供给节点;供给节点任务数加1,编码节点任务数加1;

循环选取单元,用于判断是否还有其他数据分块没有选取供给节点,若有则选定该数据分块返回候选节点选取单元;否则结束供给节点的选择。

进一步地,所述编码计算分配模块包括以下部分:

数据传输单元,用于控制每个供给节点从本地磁盘中读取相应的数据分块;非编码节点的供给节点通过网络将数据分块发送给编码节点;

校验获取单元,用于控制编码节点根据所有供给节点提供的数据分块进行编码计算,获取校验分块;

校验储存单元,用于控制编码节点通过网络将生成的校验分块传输给存储集群中的非供给节点。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下技术特征及有益效果:

(1)本发明根据集群节点任务数,考虑整个集群节点的任务负载感知,同时考虑到节点数据的局部性,选取编码节点和供给节点,实现了负载均衡的效果,提高整体归档性能;

(2)本发明根据集群节点的工作情况,动态更新编码节点和供给节点的任务数,再对整体进行优选选择,减轻了网络资源的竞争,实现高效归档的目标。

附图说明

图1是本发明方法的流程示意图;

图2是本发明方法实施例的流程图;

图3是本发明方法实施例中的数据块分布图;

图4是本发明方法实施例中的条带1归档前后节点任务数示意图;

图5是本发明方法实施例中的当前归档条带1的归档数据流示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

以下首先就本发明的相关术语进行解释和说明:

任务数:各条带节点归档前任务数为当前条带每个节点需要响应用户请求的个数;各节点任务数的更新包括:编码节点发送r个校验分块,其任务数加r;编码节点每接收一个数据分块,其任务数增加1;供给节点每传输一个数据分块,其任务数增加1;

纠删码归档:为保证数据可用性,数据通常按副本方式存放在存储系统中,如双副本、三副本;随着系统的运行,这些副本数据的访问频度将降低,如果仍旧按副本方式进行存放,将导致很低的存储空间利用率,如采用三副本备份方式的空间利用率仅为33.3%,为了提高存储空间利用率,通常采用纠删码进行存放,将数据从副本方式转存为纠删码方式的过程被称为纠删码归档;

节点数据块以及条带:在归档的编码过程中,读取数据的单元就是数据块,在存储集群中,一个条带就是由多个数据块组成的整体,可以独立地恢复出失效数据的信息集合;

编码节点:从副本集群中选择某一节点来完成编码操作,以生成校验分块,这个节点就称为编码节点;

供给节点:在进行校验生成之前,编码节点需要获得当前条带的所有数据分块,这些数据分块可能在编码节点上,也可能在其它存储节点之上,这些提供数据分块的节点统称为供给节点。

以下以实施例的方式说明本发明技术方案:

如图1所示,本发明方法包括以下步骤:

(1)选取编码节点:获取当前归档条带每个存储节点的任务数和每个存储节点所含有本条带数据分块的个数,选取任务数最小且含有当前条带数据分块最多的一个存储节点作为编码节点,编码节点的任务数更新为任务数加纠删码的校验分块数;

(2)选取供给节点:依次获取当前条带中各个数据分块的供给节点,并更新供给节点的任务数;

(3)编码计算分配:编码节点获取所有供给节点中的数据分块进行编码计算,得到校验分块,并将校验分块传输给其他非供给节点;

(4)循环编码分配:判断是否还有其他条带没有进行归档,若有则选定该条带返回步骤(1);否则结束归档。

如图2所示,本发明方法实施例的流程如下:

(1)设置条带计数器Num_Stripe=1;

(2)获取当前归档条带的每个存储节点任务数和每个存储节点所含有本条带数据分块个数,并分别存入数组;

如图3所示,可以得出每个存储节点所含有当前归档条带1的数据分块个数<2,1,1,1,1,1,1,0>;

如图4所示,获取当前归档条带1的存储节点归档前任务数<1,2,3,2,1,4,3,5>;

(3)根据归档条带每个存储节点的任务数,选择任务数最小的存储节点作为编码节点EN(EN是Encoding Node的缩写,表示编码节点),如果存在多个存储节点任务数相同的情况,则优先选择含有本归档条带数据分块较多的存储节点作为编码节点;

例如:根据图4节点任务数选取编码节点,节点SN1和节点SN5具有相同的任务数;此时,如图3所示由于节点SN1含有归档条带的两个数据分块,节点SN5含有归档条带的一个数据分块,所以优选选择节点SN1作为编码节点;

(4)更新编码节点的任务数,即编码节点需要增加r个任务数,其中r指RS纠删码中校验分块数;

例如:根据图4,该纠删码归档采用RS(5,4)编码,校验分块个数为1,所以编码节点SN1的任务数增加1,当前归档条带1的节点目前任务数更新为<2,2,3,2,1,4,3,5>;

(5)设置当前归档条带的数据分块计数器Num_Data_block=1;

如图3所示,当前归档条带1的第一个数据分块为D1,1

(6)根据供给节点DPN(DPN是Data-block Provider Node的缩写,表示数据分块供给节点)选取规则,选取当前数据分块的供给节点,并更新集群中所涉及节点的任务数;本步骤具体包括以下子步骤:

(61)根据任务数最小原则,选取含有当前数据分块的节点作为供给节点DPN。

(62)若当前数据分块有多个候选的供给节点,且其中包含编码节点,则选编码节点作为供给节点DPN,并进入步骤(64);否则,从候选的供给节点中任选一节点作为供给节点DPN,进入步骤(62);

(62)编码节点EN任务数增加1;

(63)供给节点DPN任务数增加1;

(64)将供给节点存入供给节点集合;

结合图3和图4,根据任务数最小原则,选取含有数据分块D1,1的供给节点。其中SN1和SN4的任务数都为2,又因为SN1是编码节点,所以优先选择SN1作为D1,1的供给节点,并存放在供给节点集合中;

(7)设置当前数据分块计数器Num_Data_block=Num_Data_block+1;如图5所示,完成数据分块D1,1供给节点的选取,然后下一步进行D1,2供给节点的选取,原理同上;

(8)判断当前归档条带所有数据分块是否都有对应的供给节点,如果是,则进入步骤(9),否则返回步骤(6);

如图4和图5完成所有数据分块供给节点的选取后,当前归档条带1的节点目前任务数为<5,3,4,2,2,4,3,5>;

(9)编码节点根据所有供给节点提供的数据分块进行编码计算,生成校验分块,并传输;本步骤具体包括以下子步骤:

(91)供给节点集合中的所有供给节点从本地磁盘中读取各数据分块;

(92)非编码节点的供给节点将数据分块通过网络发送给编码节点;

(93)编码节点根据所有供给节点提供的数据分块进行编码计算,获取校验分块;

(94)编码节点通过网络将生成的校验分块传输给集群中的其他节点,且这些节点不属于供给节点集合;

(10)设置当前条带计数器Num_Stripe=Num_Stripe+1;

(11)重复步骤(2)到步骤(10),直到所有的条带都完成归档任务。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1