一种分布式文件系统中的存储数据修复结构及修复方法

文档序号:9352931阅读:552来源:国知局
一种分布式文件系统中的存储数据修复结构及修复方法
【专利说明】一种分布式文件系统中的存储数据修复结构及修复方法
[0001]
技术领域
[0002]本发明涉及数据中心(Data Center)网络系统,具体是一种分布式存储中的数据修复结构及方法。
【背景技术】
[0003]随着云计算的兴起,相关技术的迅猛发展,数据中心作为云计算的后台,提供可靠的,高效的云计算服务。目前的研究表明,数据中心的网络资源已经很大程度上成为了数据中心的一个性能瓶颈。而且随着编码技术的引入,这一瓶颈变得愈发明显。因为在数据中心,节点失效变得比较常见,因此数据修复操作变得相对频繁起来。而编码的引入使得数据修复的开销变得相当高昂。

【发明内容】

[0004]本发明所要解决的技术问题是提供一种分布式文件系统中的存储数据修复结构及其修复方法,其结合底层的网络拓扑,通过一系列协议模块和软件模块提供高效的树形结构的数据恢复,不仅大大降低了数据修复的流量开销,而且使得修复过程的持续时间大为缩短。
[0005]本发明所述的一种分布式文件系统中的数据修复结构,所述分布式文件系统中数据存储采用主/从架构模式,在中心节点和从节点中都设有:
修复树生成协议模块,即STNRP:以丢失数据所属文件id作为特征码标识编码块,构建一棵Stenier Tree修复树,以支持编码数据的传输协议模块;
编码数据传输协议模块,即CDTP:对于每个特征码标识的编码块通信,根据修复树生成协议模块生成的修复树,同步各个叶子节点和中间节点,使得编码块由叶子节点同步传输到根结点,并在中间过程或者转发,或者做编码操作;
网络监测模块:负责更新网络各链路资源的使用情况,由adjMatrix矩阵来表示,以展现整个网络的拓扑结构,其权值表示链路上的负载情况;
编码模块:在中心节点该模块负责计算修复向量,从节点则负责在中间节点上对编码块的编码解码操作;
树形修复模块:负责根据网络的拓扑信息,构造出一棵修复树,然后将这颗树转发给STNRP协议模块。
[0006]2、一种分布式文件系统中的数据修复方法,其特征在于包括以下步骤:
O生成修复树,其具体步骤包括:
11)中心节点运行STNR算法,根据网络拓扑结构,构造一棵再生树用于数据修复,这棵树本质上是一棵Stenier Tree,其保证修复带宽和流量;
12)中心节点实现stnrp_dispatch()函数,该函数通过Socket将再生树中的节点信息分发到每个从节点,包括其父节点,子节点信息以及修复系数;
13)从节点实现stnrp_rcv()函数,该函数收到中心节点的节点信息后,在本地构造修复结构,包括数据源,数据目的地以及修复系数;然后构造一个接收队列和一个发送队列,一个接收线程和一个发送线程;然后调用Stnrp_aCk()将结果报告给中心节点;
14)中心节点若收到节点构造失败消息,则调用stnrp_replaceO函数,以stnrp_closest O函数来选择替代节点以代替再生树中构造失败的节点,接着调用stnrp_dispatch O向这些节点分发修复信息;选择替代节点的策略为:1)如果节点是参与节点,则选择离其最近的一个节点替换;2)如果节点是数据提供节点,则从提供节点集合中选取一个下一个瓶颈带宽值最大的节点;
15)实现中心节点的stnrp_monitorO函数,统计节点的反馈信息;
16)如果所有从节点都成功建立修复结构,则调用中心节点的stnrp_send(),通知再生树中所有叶子结点开始发送数据;
2)编码数据传输,其具体步骤包括:
21)以丢失数据所属文件id作为特征码标识编码块,并以id为关键字,将其映射到相应的修复管道;
22)向其父节点发送一个消息,告诉其数据开始传输;当从节点接收到数据开始传输的消息,便根据其收到的特征标识码,找到该节点上缓存的对应的修复结构,唤醒接收线程,发送线程并设置好用于同步的条件向量等参数;
23)从节点实现cdtp_rcvDataO函数,该函数负责接收并编码数据,并以编码块的特征标识码,将编码后的数据放入到对应的发送队列sendQueue之中;
如果是数据提供节点,则数据源包括两部分:来自子节点的数据和存储在本地的编码块;叶子节点由于其子节点为空,所以其数据源为本地编码块;cdtp_rcvData()会每次从所有的数据源中取一个缓存块大小的数据,然后在本地进行编码,并将编码后的数据放入发送队列sendQueue之中;
如果是参与节点,则其数据源为来自孩子节点的数据,cdtp_rcvData()每次从来自所有子节点的Socket中读取缓存块大小的数据,然后在本地进行编码,并将编码后的数据放入发送队列sendQueue之中;
24)从节点实现cdtp_sendData()函数,该函数负责从发送队列sendQueue之中读取数据,然后将数据发送至目的地,Cdtp_enCOdeData()函数主要负责对接收到的数据进行编码以得到最终生成的编码块以替换失效的编码块,如果节点是再生树中的根结点,则是数据流的终点,此时cdtp_sendData()调用cdtp_encodeData O函数,将数据在本地进行编码,得到最后生成的编码块;cdtp_ack()函数主要负责向中心节点汇报数据修复的最终结果;如果节点不是再生树中的根结点,则cdtp_sendData()函数通过Socket将数据发送至其父节点;
25)当数据发送完成之后,向其父节点发送一个传输完成的消息,根据特征标识码,发送端关闭本地的发送线程,回收发送队列等资源,接收端收到消息后,关闭对应的接收线程,回收接收队列资源;
26)数据会经历接收,编码,发送三个过程;为了保证系统的正常运行,使用锁和条件变量来保证队列的同步与互斥;这种情况下,队列为空有两种可能:数据处理完成和数据正在前一个操作中处理,为了区分这两种情况,当数据处理完成之后,认为向队列中添加一块空的数据块。这样,当队列为空时,则下一操作等待直至新的数据到达。当数据块为空的时候,则表示数据处理完成;
3)网络监测,其具体步骤包括:
31)中心节点向网络中所有节点发送其相邻节点的地址信息,新开一个监听线程,用以监听来自从节点的拓扑更新消息;
32)从节点收到中心节点的消息后,更新其保存的相邻节点列表,新开两个线程,分别用于向相邻节点发送Ping消息和向中心节点报告拓扑更新消息,为了提高线程的利用率,这里采用线程池的形式来执行任务;
33)从节点向其相邻节点发送ping消息,消息格式就包含2个字段:消息类型字段和时间戳字段。消息类型表示这是一个网络探测消息,时间戳表明Ping消息发送的时间点;
34)从节点接收到来自其它节点的ping消息之后,根据接收到的时间和消息中的时间戳,更新与其相邻节点的链路使用情况;
35)从节点定期向中心节点报告其拓扑更新情况,消息格式分为两部分:消息类型字段以及如果序列对;序列对有地址和试验组成,表示节点和其相邻节点链路的链路的时延值;
36)中心节点接收到来自从节点的拓扑更新消息后,便更新其adjMatrix拓扑矩阵;
4)实现编码,其具体步骤包括:
41)无论是中心节点还是从节点,都需要编码模块,来对编码数据进行分析,处理;
42)中心节点的编码模块负责对编码块的分析以及修复向量的计算;一旦确定k个数据提供节点时,再生树中的节点需要知道对这k块编码块应该怎样处理;根据修复向量的计算方法,我们需要分析如下信息:a)k块编码块对应的编码向量。b)丢失编码块的编码向量。一旦获取到这些信息,我们就可以计算出丢失编码块的修复向量;
43)从节点的编码模块负责对编码块数据的编码;由于允许数据在中间节点进行编码,所有再生树中的所有节点都需要对接收到的数据进行编码处理;如果是数据提供节点
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1