[发明专利]一种分布式文件系统中的存储数据修复结构及修复方法有效
| 申请号: | 201510533882.2 | 申请日: | 2015-08-27 |
| 公开(公告)号: | CN105072194B | 公开(公告)日: | 2018-05-29 |
| 发明(设计)人: | 万小勇;叶保留;陆桑璐 | 申请(专利权)人: | 南京大学;南京南瑞集团公司;国家电网公司;国网上海市电力公司;国网冀北电力有限公司信息通信分公司 |
| 主分类号: | H04L29/08 | 分类号: | H04L29/08 |
| 代理公司: | 江苏圣典律师事务所 32237 | 代理人: | 贺翔 |
| 地址: | 210000 江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | 本发明公开了一种分布式文件系统中的存储数据修复结构及其修复方法。本发明设计了一种通用的修复框架,包括修复树生成协议模块,编码数据传输协议模块,网络监测模块,编码模块;其可以很方便的应用到现有的分布式存储系统中。在树形结构修复中,能够结合网络的拓扑结构,根据节点之间链路的使用情况,构造合理的传输路径,并在中间节点进行编码和解码,以达到减少数据修复过程中产生的流量开销。同时还能够利用网络中资源较多的链路来降低整个数据修复过程中的时间开销。从另一方面来讲,这对于网络中的负载均衡也有很重要的意义,能很好的避免性能瓶颈的产生。 | ||
| 搜索关键词: | 修复 分布式文件系统 存储数据 数据修复 协议模块 修复结构 链路 分布式存储系统 编码数据传输 网络监测模块 编码模块 传输路径 负载均衡 时间开销 树形结构 拓扑结构 性能瓶颈 中间节点 网络 通用的 应用 | ||
【主权项】:
1.一种分布式文件系统中的存储数据修复方法,所述分布式文件系统中的数据存储采用主/从架构模式,并设有中心节点和从节点;在中心节点和从节点中都设有:修复树生成协议模块,即STNRP:以丢失数据所属文件id作为特征码标识编码块,构建一棵Stenier Tree修复树,以支持编码数据传输协议模块;编码数据传输协议模块,即CDTP:对每个特征码标识的编码块进行修复传输时,根据修复树生成协议模块生成的修复树,同步各个叶子节点和中间节点,使得编码块由叶子节点同步传输到根结点,并在中间过程转发或者做编码操作;网络监测模块:负责更新网络各链路资源的使用情况,由adjMatrix矩阵来表示,以展现整个网络的拓扑结构,其权值表示链路上的负载情况;编码模块:在中心节点,该模块负责计算修复向量;在从节点,该模块负责通过中间节点对编码块进行编码及解码操作;树形修复模块:负责根据网络的拓扑信息,构造出一棵修复树,然后将这颗树转发给STNRP协议模块;其特征在于修复方法包括以下步骤:1)生成修复树,其具体步骤包括:11)中心节点运行STNR算法,根据网络拓扑结构,构造一棵再生树用于数据修复,这棵树本质上是一棵Stenier Tree,其保证修复带宽和流量;12)中心节点实现stnrp_dispatch()函数,该函数通过Socket将再生树中的节点信息分发到每个从节点,包括其父节点,子节点信息以及修复系数;13)从节点实现stnrp_rcv()函数,该函数收到中心节点的节点信息后,在本地构造修复结构,包括数据源,数据目的地以及修复系数;然后构造一个接收队列和一个发送队列,一个接收线程和一个发送线程;然后调用stnrp_ack()将结果报告给中心节点;14)中心节点若收到节点构造失败消息,则调用stnrp_replace()函数,以stnrp_closest()函数来选择替代节点以代替再生树中构造失败的节点,接着调用stnrp_dispatch()向这些节点分发修复信息;选择替代节点的策略为:1) 如果节点是参与节点,则选择离其最近的一个节点替换;2) 如果节点是数据提供节点,则从提供节点集合中选取一个下一个瓶颈带宽值最大的节点;15)实现中心节点的stnrp_monitor()函数,统计节点的反馈信息;16)如果所有从节点都成功建立修复结构,则调用中心节点的stnrp_send(),通知再生树中所有叶子结点开始发送数据;2)编码数据传输,其具体步骤包括:21)以丢失数据所属文件id作为特征码标识编码块,并以id为关键字,将其映射到相应的修复管道;22)向其父节点发送一个消息,告诉其数据开始传输;当从节点接收到数据开始传输的消息,便根据其收到的特征标识码,找到该节点上缓存的对应的修复结构、唤醒接收线程、发送线程并设置好用于同步的条件向量参数;23)从节点实现cdtp_rcvData()函数,该函数负责接收并编码数据,并以编码块的特征标识码,将编码后的数据放入到对应的发送队列sendQueue之中;如果是数据提供节点,则数据源包括两部分:来自子节点的数据和存储在本地的编码块;叶子节点由于其子节点为空,所以其数据源为本地编码块;cdtp_rcvData()会每次从所有的数据源中取一个缓存块大小的数据,然后在本地进行编码,并将编码后的数据放入发送队列sendQueue之中;如果是参与节点,则其数据源为来自孩子节点的数据,cdtp_rcvData()每次从来自所有子节点的Socket中读取缓存块大小的数据,然后在本地进行编码,并将编码后的数据放入发送队列sendQueue之中;24)从节点实现cdtp_sendData()函数,该函数负责从发送队列sendQueue之中读取数据,然后将数据发送至目的地, cdtp_encodeData()函数主要负责对接收到的数据进行编码以得到最终生成的编码块以替换失效的编码块,如果节点是再生树中的根结点,则是数据流的终点,此时cdtp_sendData()调用cdtp_encodeData()函数,将数据在本地进行编码,得到最后生成的编码块;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)从节点的编码模块负责对编码块数据的编码;由于允许数据在中间节点进行编码,所有再生树中的所有节点都需要对接收到的数据进行编码处理;如果是数据提供节点,则需要知道本地存储的以及从Socket中读取的编码块的编码策略,包括各个编码块对应的系数以及该如何对这些编码块进行编码;如果是参与节点,则需要知道接收到来自若干子节点的编码数据块时的编码策略,即这些编码块对应的系数以及该如何对接收到的编码块进行编码;44)为了提高编码效率,对数据按块大小组织成数据队列;每编码完一块数据块,则将其放入发送队列,这样以一种流的形式来对数据进行编码、转发,数据块的大小在配置文件中配置;5)树形修复,其具体步骤包括:51)以网络拓扑矩阵adjMatrix,丢失编码块剩余的数据提供节点和选中的替换节点作为输入;52)运行最大带宽路径算法,找到从数据提供节点到替换节点的各自最大带宽路径,取最大的k个数据提供节点作为修复过程中的数据提供节点,并得到一个瓶颈带宽最优值;53)借鉴蚁群算法思想,分别找出步骤42)中选择的数据提供节点到替换节点的所有可行路径,并对这些路径上的边赋予新的权值,保存在ants矩阵中;在ants矩阵中,权值越低表示数据经由该条链路传输的代价越低;54)以 dijkstra 算法作为选路的基本算法,在步骤43)中获得的ants矩阵之上,初始化一棵Stenier Tree,最开始树中只包含替换节点,每次寻找从步骤42)获得的数据节点到Stenier Tree的最短路径,然后更新Stenier Tree,将这条路径上的链路和节点加入到Stenier Tree之中,直到数据提供节点集合中的节点都被添加到Stenier Tree之中,算法结束。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学;南京南瑞集团公司;国家电网公司;国网上海市电力公司;国网冀北电力有限公司信息通信分公司,未经南京大学;南京南瑞集团公司;国家电网公司;国网上海市电力公司;国网冀北电力有限公司信息通信分公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201510533882.2/,转载请声明来源钻瓜专利网。
- 上一篇:基于B/S模式的PC监控系统及方法
- 下一篇:一种医疗分流系统





