发明内容
为解决上述现有技术所存在的问题,本发明提出了一种基于私有云的多点数据传输方法,包括:
一种基于私有云的多点数据传输方法,用于在私有云平台中对文件进行分布式存储和传输,其特征在于,包括:
步骤一,在私有云平台中构建分布式存储系统,所述系统包括一个主节点和多个存储节点,存储节点保存多个数据备份;
步骤二,客户端通过预取的方式获得主节点的寻址信息,通过主节点获得特定存储节点的寻址信息及状态信息;
步骤三,当客户端请求传输数据时,直接发起与特定存储节点集合的数据连接,在连接成功后进行多点数据传输。
优选地,所述分布式存储系统包括一个主节点和多个存储节点,构成一个环状结构,主节点保存所有存储节点的寻址信息及状态信息,当存储数据时采用多点存储,在存储节点之间以功能对等的方式组建存储网络,所有的存储节点都构建在通用PC之上。
所述数据备份进一步包括:对于每个文件,在私有云平台上保存其多个拷贝,并且分布于私有云平台中的不同存储节点上,当某个存储节点退出时,其他存储节点发起数据拷贝,数据被备份在不同的物理区域,将文件按照目录的形式进行组织,文件和目录使用元数据来描述,文件的元数据包括文件名、文件大小、创建者、创建时间、最后一次修改时间和访问控制列表;
所述数据备份基于分布式散列表协议,在主节点上保存所有存储节点的状态信息和寻址信息,主节点管理所有其他节点的状态,主节点发起退出节点上的数据拷贝,对于一个有N个存储节点的云平台,主节点表项个数为N,表项根据散列值字典序从小到大排序;N个数据备份依次存放在逻辑环上当前节点的后N-1个后继节点上,存储节点每隔预定时间向主节点发送心跳信号,主节点通过心跳信号维护状态信息,若在N个时间周期T内没有收到某一个节点的心跳信号,则将此节点标记为临时故障,阻止新的I/O请求发给该节点;若在大于N个时间的周期内没有收到某一个节点的心跳信号,则将其标记为永久故障,由主节点发起数据拷贝。
所述多点数据传输包括在多个存储节点进行文件存储,文件读取和文件删除;
所述文件存储的过程包括:
4.1客户端使用散列算法计算文件名的散列值;
4.2客户端从主节点预取存储节点的寻址信息,根据预取的寻址信息,选取散列值所属的存储节点,客户端发起与该存储节点的连接;
4.3存储节点接收数据完毕后,直接写入到存储器,同时计算整个文件的散列值,并且一起写入到存储器中,然后向客户端发送确认信息;
4.4存储节点发起与其后继节点的数据备份;
所述文件读取的过程包括:
客户端根据预取的寻址信息,选取散列值所属的存储节点,然后发起与该节点的数据连接,在读取文件的同时读取文件的散列值,客户端计算文件的散列值,若计算得到的散列值与读取的散列值相同,则读取成功;若散列值不同,客户端发起与上次连接节点的后继节点的数据连接,执行相同的读取过程;若对N次读取均不同,则文件读取失败;
所述文件删除的过程包括:
在文件删除时将文件进行标记,而不释放存储空间,并且周期性清除被标记的文件;
其中,文件在存储节点的存储支持目录操作,同一个目录下的文件分布存放在不同的节点上,在文件存储过程时,采用多线程的方式,在存储文件本身的同时,修改文件的目录文件;
并且其中在客户端预取主节点的寻址信息之后和进行文件存储之前,当客户端发起与节点的数据连接并返回操作失败时,重新读取主节点的寻址信息。
本发明相比现有技术,具有以下优点:
提出了多点存储和传输方法.通过改进节点寻址算法,使资源的查询时间复杂度缩短,具有较高的可靠性,在多文件存取方面明显优于现有云存储系统。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种基于私有云的多点数据传输方法。图1是根据本发明实施例的基于私有云的多点数据传输方法流程图。如图1所示,实施本发明的具体步骤如下:
步骤一,在私有云平台中构建分布式存储系统,所述系统包括一个主节点和多个存储节点,存储节点保存多个数据备份;
步骤二,客户端通过预取的方式获得主节点的寻址信息,通过主节点获得特定存储节点的寻址信息及状态信息;
步骤三,当客户端请求传输数据时,直接发起与特定存储节点集合的数据连接,在连接成功后进行多点数据传输。
本发明首先在步骤一构建面向多文件的分布式存储系统,在该系统中实现数据多点传输,各个存储节点构成一个环状结构,主节点保存所有存储节点的寻址信息及状态信息,客户端通过预取的方式获得主节点的寻址信息。当客户端请求数据时,直接发起与具体存储节点的数据连接。
对于多文件来说,分块不能带来性能的提升,对于网络开销大的系统反而会降低其性能。为了提升多文件的存储性能,去掉了中心服务器,这样可以减少元数据操作的开销。本发明在实现时采用多点存储,在存储节点之间以功能对等的方式组建存储网络的技术,完全由存储节点组成的存储系统,并且所有的存储节点都构建在通用PC基础之上。
为了保证系统的高可靠性,采用数据备份的方法。对于每个文件,在私有云平台上保存其N个拷贝,N可以进行设置,并且每个拷贝分布于私有云平台中的不同存储节点上。当某个存储节点退出时,其他存储节点可以发起数据拷贝,在实际应用中,将数据备份在不同的物理区域。另外,在系统设计时考虑用户数据请求的位置、磁盘I/O速度、存储节点的负载及网络带宽等因素。
本发明私有云存储系统中存储的对象是文件,按照目录的形式进行组织,目录本身也属于文件,本发明所指的文件名指目录或者包含路径的文件。文件和目录使用元数据来描述,文件的元数据包括文件名、文件大小、创建者、创建时间、最后一次修改时间和访问控制列表。文件的组织直接利用了存储节点的文件系统,存储节点的文件系统本身具有缓存的功能。读取多文件的时间在整个分布式文件读取过程的时间比例较小,实现缓存是不可取的。
本发明基于分布式散列表协议的文件分布,利用散列算法,使每个节点只需处理落在它和前驱节点之间的数据,由于私有云平台构建在通用PC之上,出错的概率较高,当发生增删节点时对系统造成的振荡较小。另外,该散列算法满足平衡性能够保证数据均匀分布。
以下以云存储系统中包括4个存储节点(N=4)为实施例,详细描述本发明的散列算法,算法分为2个部分:
1)计算设备节点的散列值,4个节点被映射到一个逻辑环上;
2)计算文件的散列值,按顺时针方向将其映射到环上距其最近的节点上,当添加新的节点时,调整数据对象到新的距其最近的存储节点上。同理,当存储节点被删除时,映射在被删除节点上的数据被迁移到它的后继节点上。
传统的路由算法是给定一个关键字,有效地将该关键字映射到网络中的某个节点上。每个关键字和节点都拥有一个m比特的标示符,对于文件可以是文件的散列值;对于节点可以是节点IP地址的散列值,所有标识符构成一个逻辑环。每个节点只要维护环上的后继节点和其IP地址就可以完成资源的查询过程,对于特定关键字的标识符,第一个收到查询命令的节点检查标识符是否落在本节点上,如果不是则将查询传递给后继节点,最终能够查到目标节点。在这种简单的查询方式中,每个节点需要维护的状态信息很少,但是查询速度很慢。
本发明改进的算法是在节点上保存更多的状态信息,如保存存储节点的指数分布的m个表项记录(m>1)可以明显地加速查询过程。
本发明提出具有主节点的网络拓扑结构,在主节点上保存所有网络节点的寻址信息,主节点管理所有其他节点的状态,主节点发起退出节点上的数据拷贝。对于一个有N个存储节点的网络,主节点表项个数为N,表项根据散列值字典序从小到大排序。
存储节点每隔时间T向主节点发送心跳信号,主节点通过心跳信号维护状态信息。若在N个时间周期T内没有收到心跳信号,则将此机器标记为临时故障,不会有新的I/O请求发给它;若在M(M>N)个时间周期T内没有收到心跳信号,则认为此机器发生永久故障,主节点发起数据拷贝。
文件系统被设计运行在通用、廉价的硬件基础之上,存储节点发生故障的概率比专用的存储服务器大得多。为了保证私有云平台的高容错性和高可靠性,系统使用备份策略为数据保存N个数据备份,并且数据备份依次存放在逻辑环上当前节点的后N-1个后继节点上。该系统预设每个数据有3个备份。
以下描述当节点退出时的备份过程(假设N=7,节点1-7顺序组成环)。
节点4失效,节点4上包含的文件有节点2的第2个备份、节点3的第1个备份及散列值落在节点4的数据。当节点4退出后,需要完成以下步骤。
1)将落在节点4上的数据复制到节点5,删除节点5和节点6上节点4的第1个和第2个备份;
2)将落在节点4上的数据分别复制到节点6、7上作为节点5的第1个和第2个备份;
3)发起节点3复制其第2个拷贝到节点6,将节点5上节点3的第2备份变成第1个备份;
4)发起节点2复制其第2个拷贝到节点5。
以下描述当节点加入时的备份过程。
如果添加新节点4,节点4分担了节点5的部分数据。节点4加入后,部分落在节点5上的数据应该移动到节点4上。当节点4加入后,需要完成以下步骤。
1)将散列值落在节点4的文件从节点5拷贝到节点4,然后将这部分数据从节点5中删除以及将这部分数据从节点6和节点7上的备份数据删掉。
2)将节点4的数据拷贝到节点5上作为第1个备份,将节点4的数据拷贝到节点6上作为第2个备份。
3)将节点3的数据拷贝到节点4上作为第1个备份,将存储节点5上保存的节点3的第1个备份变成节点3的第2个备份,将存储节点6上保存的节点3的第2个备份删除。
4)将节点2的数据拷贝到节点4上作为第2个备份,将存储节点5上保存的节点2的第2个备份删除。
本发明使用了分布式散列文件,因此支持精确关键字查询该系统在节点中增加了一个主节点,保存系统所有节点的寻址信息和状态信息。若客户端读取了主节点的信息,则客户端能够直接存储节点上的数据,减少了一次网络开销。研究的预取方式给系统带来很大的性能提升,在系统设计时也采用了预取方式,客户端预先读取主节点的信息,每条记录的信息只有20几个字节,对于拥有1000个节点的系统,寻址表项仅有几十K字节。
本发明的文件的存储即写入的过程包括:
1)客户端使用散列算法计算文件名的散列值;
2)客户端根据预取的寻址信息,选取散列值所属的存储节点,客户端发起与节点的连接;
3)节点接收数据完毕后,直接写入到存储器,同时计算整个文件的散列值,一起写入到存储器中,然后向客户端发送确认信息;
4)节点发起与节点的后继节点的数据备份。
对于文件的读取过程,客户端根据预取的寻址信息,选取散列值所属的存储节点,然后发起与该节点的数据连接。客户端在读取文件的同时读取文件的散列值,客户端计算文件的散列值。若计算得到的散列值与读取的散列值相同,则说明读取成功;若散列值不同,则说明文件与存储的时候不一致,客户端发起与上次连接节点的后继节点的数据连接,执行相同的读取过程。若读取N(数据备份数目)次都不一致,则表示文件读取失败。
对于文件的删除过程,但是为了防止误删,文件的删除并不是真正被删除,而是将其标记,周期性地清除被标记的文件。当文件被标记时,存储空间没有被释放,系统的剩余空间没有增加。系统周期地清除被标记文件,标记文件被清除之后,系统剩余空间增加。
实际的存储系统必须支持目录操作,如列目录操作。同一个目录下的文件分布存放在不同的节点上,为了支持目录操作,本发明实现了新的目录文件,在本地文件系统中的目录是目录下文件的元数据,本发明实现的新的目录文件是为了支持列目录操作设计的。对于文件/home/file1和文件/home/file2,假设这2个文件名的散列值分布在不同节点之上,在/home目录文件中保存所有/home目录下的文件的元数据,当对/home目录进行列目录操作时,可以通过读取/home目录文件的内容得到所有/home目录下的文件信息。
对于文件存储过程,存储文件除了保存文件的本身内容之外,还要修改目录文件,如存储/home/file文件,除了上述的文件存储过程之外,添加一步向/home目录文件中添加文件file的相关信息。在实际的存储过程中,采用多线程的方式,在存储文件本身的同时,修改文件的目录文件。
另外,在上述所有的操作过程中,需要预取主节点的寻址信息。在预取之后、实际存储之前,因为节点的加入或退出会导致映射关系发生变化,当客户端发起与节点的数据连接时,可能数据已经不在此节点上,节点会返回操作失败;当客户端收到操作失败后,需要重新读取主节点的寻址信息。
综上所述,本发明提出了面向多文件的分布式存储和传输方法.通过改进寻址算法,从而使资源的查询时间复杂度缩短,在多文件存取方面明显优于现有存储系统。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。