分布式文件上传、下载方法及其装置和系统
技术领域
本发明涉及一种文件上传、下载方法及其装置和系统。
背景技术
目前的在线传输系统有两种方式:1、单点上传单点下载方式;2、单点上传P2P下载方式。图1所示的ftp文件传输系统(可以用ftp或者http协议来传输数据,本发明中统称为ftp)就是一种典型的单点上传单点下载系统。这种系统目前主要是用于文件下载服务。这样的服务在互连网上很常见。服务器上的文件由管理员通过专用通道放到服务器上,比如通过本地存储接口(例如CDROM、移动硬盘等)、本地局域网或者其它专用上传通道等。这时上传文件往往都不是问题。但单点下载模型很难应付大量客户端的海量数据下载。为此人们通常在各个城市部署多个服务器来分流客户下载流量,如图1中所示的服务器1和服务器2。通常此类分流是通过给用户提供多个选择的链接点来实现,例如在下载页面中给出一个链接列表,用户从该链接列表中选择提供下载的服务器。
在以下载为主要目的应用中,人们发明了P2P传输方法来取代ftp这类的单点文件下载方式。Bittorrent、Emule和迅雷等下载软件都是这类下载方式的代表。在这些P2P系统中,要想获得较快的下载速度,前提就是必需有多个用户同时下载同一个文件,而这就要求该文件在很大的范围内全局共享。
在新一代互联网(又称“web2.0”)中,数据的来源发生了变化,服务器数据源不是由服务器管理者提供,而是来自客户端。人们不只是单纯地从互联网上寻找下载的文件数据,而是逐渐开始把他们自己的数据上传到互联网上。虽然现在涌现出很多在线存储服务,如“网络U盘”、大容量的邮件空间等。这些网络存储系统均采用单点上传的方式让用户上传数据。用户在上传数据时,仅连接到一个服务器上,然后采用ftp或http协议上传输文件,此类在线传输系统存在以下技术问题。
一、单点上传本身存在的问题。在用户较多时,用户争夺有限的服务器带宽资源,使服务器成为严重的瓶颈,而客户端的带宽却无法得到充分利用。以下举一例子简要说明该问题。
假设一个服务器有100Mbps带宽,如果有1000个用户在线,每个用户的接入带宽为500Kbps,那么每个用户平均能够得到的带宽是100Kbps。在服务器可用带宽不足时,目前的方法就是增加服务器的数量或带宽来提高数据传输率。如果同等级的服务器的数量增至3个,以服务器1、2、3表示,每个服务器提供的带宽仍为100Mbps,则现在总的服务器带宽为300Mbps。在理想的情况下,如果1000个用户平均分散到3个服务器上,那么每个用户能够得到的带宽是300Mbps除以1000等于300Kbps。如果服务器2、3上的用户完成了数据传输,而服务器1上的用户还在继续进行数据传输。这时服务器2、3已经空闲了,但是服务器1上的用户却不能使用服务器2、3的带宽资源。服务器总带宽占用率只有1/3,而服务器1已经饱和,当前活动的用户仍然只能使用300Kbps的带宽。如果从总容量上来看,理论上现在服务器1上的每个用户应该得到约300Mbps除以三分之一的用户数等于900Kbps的可用服务器带宽。所以剩下的用户应该能够以本地最大可用带宽,即接入带宽500Kbps的速率上传数据,但是单点上传方式却无法做到。而且此时如果有新的用户加入服务器,由于新的用户并不了解全局服务器的使用状况,所以新的用户可能选择的还是已经饱和的服务器1。这是因为在传统的单点上传系统中这种选择是盲目的,很多时候是让用户自己选择。
二、单点上传带来的下载问题。由于用户将他的文件传输到单一的服务器中,所以他只能从这个服务器下载数据,这显然不能最大限度地利用服务器和客户端的资源。在此类在线传输系统中,有很多用户的文件和数据并不是在很大的范围内共享,所以不可能被大量的用户同时下载,这样P2P多点下载方法就不能发挥作用,用户获取文件时的下载速度也退缩到单点下载系统的境地。
发明内容
本发明的主要目的在于,提供一种分布式文件上传方法及其装置和系统,以方便用户将数据上传到服务器的在线存储空间中。
本发明的另一目的在于,提供一种分布式文件下载方法及其装置和系统,为用户下载提供便利。
本发明的再一目的在于,提供一种分布式文件传输系统,为用户上传和下载提供便利。
为达上述目的,本发明采用如下技术方案:
一种分布式文件上传方法,其特征在于包括以下步骤:
a1)服务器获取步骤,用于与目录服务器建立连接,获取可上传文件的服务器列表;
a2)数据上传步骤,将包括文件分片和文件分布表的文件上传至所述服务器列表中的服务器中;其中,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器。
作为本发明分布式文件上传方法的一种改进,在所述步骤a1)之后步骤a2)之前,还包括:
权值计算步骤,计算服务器列表中的服务器的权值,在所述步骤a2)根据权值计算结果,优先发送所述文件分片至权值高的服务器中。
作为本发明分布式文件上传方法的进一步改进,所述权值计算步骤中,定时计算服务器列表中的服务器的权值。
作为本发明分布式文件上传方法的再一改进,在所述权值计算步骤之后步骤a2)之前,还包括活动服务器列表建立和更新步骤,根据定时计算的权值,按权值高低建立和更新所述活动服务器列表,在所述步骤a2)中从该活动服务器列表中优选上传文件分片至权值最大且可用的服务器中。该所述步骤a2)可具体包括以下步骤:
a21)从活动服务器列表中选择权值最大且可用的服务器,并从文件中选取一个文件分片上传至该选择的服务器中,在该选择的服务器正在接收同一文件的文件分片时,设定其状态为不可用,在该选择的服务器完成文件分片的接收后,设定其状态为可用,更新所述文件分布表;
a22)判断所有文件分片是否传输完成,如果是,则执行步骤a23),否则,执行步骤a21);
a23)将文件分布表上传至所有存储有文件分片的服务器中。
其中,在所述步骤a2)之后,还包括:a3)上传验证步骤,用于验证上传文件的正确性。
其中,所述文件分片的上传可采用平均分布的上传方式或填鸭分布的上传方式。
一种分布式文件下载方法,包括以下步骤:
b1)服务器获取步骤,与目录服务器建立连接,获取可下载文件的服务器列表;
b2)数据下载步骤,从所述服务器列表中的服务器中下载包括文件分片和文件分布表的文件;其中,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器;
b3)根据文件分布表将文件分片重构为文件。
作为本发明分布式文件下载方法的一种改进,在所述步骤b2)中,先测试所述服务器列表中的服务器的下载速度,选择下载速度快的一个或多个服务器下载所述文件。
一种分布式文件上传装置,包括:
服务器获取模块,用于与目录服务器建立连接,获取可上传文件的服务器列表;
数据上传模块,用于将包括文件分片和文件分布表的文件上传至所述服务器列表中的服务器中,其中,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器。
作为本发明分布式文件上传装置的一种改进,还包括权值计算模块,用于定时计算服务器列表中的服务器的权值,所述数据上传模块获取该权值的计算结果并优先发送文件至权值高的服务器中。
作为本发明分布式文件上传装置的又一改进,还包括:
活动服务器列表建立模块,用于根据权值计算结果,按权值高低建立一活动服务器列表,所述数据上传模块获取该活动服务器列表并优选发送所述文件分片至该活动服务器列表中权值高的服务器中。
一种分布式文件下载装置,包括:
服务器获取模块,用于与目录服务器建立连接,获取可下载文件的服务器列表;
数据下载模块,用于从所述服务器列表中的服务器中下载包括文件分片和文件分布表的文件;其中,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器;
文件重构模块,用于根据文件分布表将文件分片重构为文件。
作为本发明分布式文件下载装置的一种改进,还包括:
下载速度测试模块,用于测试所述服务器列表中的服务器下载速度,所述数据下载模块选择一个或多个下载速度快的服务器下载文件。
一种分布式文件上传系统,包括:
多个服务器,用于接收上传的文件,所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器;
目录服务器,存储有所述多个服务器信息的服务器列表;
分布式文件上传装置,用于从所述目录服务器中获取所述服务器列表,并与服务器列表中的服务器建立连接并上传所述文件。
作为本发明分布式文件上传系统的一种改进,所述目录服务器包括存储有服务器信息的服务器库和可用服务器列表管理模块,所述可用服务器列表管理模块验证服务器库中服务器的状态,将可以提供上传文件服务的服务器信息加入所述服务器列表中。
一种分布式文件下载系统,包括:
多个服务器,用于存储上传的文件;所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器;
目录服务器,存储有所述多个服务器信息的服务器列表;
分布式文件下载装置,用于从所述目录服务器中获取所述服务器列表,与服务器列表中的服务器建立连接并下载文件。
作为本发明分布式文件下载系统的一种改进,所述目录服务器包括存储有所述多个服务器的信息的服务器库和可用服务器列表管理模块,所述可用服务器列表管理模块验证服务器库中服务器的状态,将可以提供下载文件服务的服务器信息加入所述服务器列表中。
一种分布式文件传输系统,包括:
多个服务器,用于接收和存储上传的文件,并提供该文件的下载,所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;所述文件分布表保存在所有参与分布上传的服务器上;每个文件通过文件分布表文件来记录其在每个服务器上的分布情况,文件分布表文件记录文件中各个分片存放的服务器;
目录服务器,存储有所述多个服务器信息的服务器列表;
分布式文件传输装置,用于从所述目录服务器中获取所述服务器列表,并与服务器列表中的服务器建立连接,以上传或下载所述文件。
作为本发明分布式文件传输系统的改进,所述目录服务器包括存储有服务器信息的服务器库和可用服务器列表管理模块,所述可用服务器列表管理模块验证服务器库中服务器的状态,将可以提供上传或下载文件服务的服务器信息加入所述服务器列表中。
作为本发明分布式文件传输系统的又一改进,所述多个服务器还包括一文件分布表管理模块,在获取所述分布式文件传输装置的请求后,判断该请求类型,如果是上传文件分布表,则存储该文件分布表,如果是下载文件分布表,则提取对应的文件分布表以提供下载。
本发明中,用户通过分布的方式将传文件上传到多个服务器上。该方案具有以下优点:
1、服务器总带宽容量能够最好地分配给活动的用户,提高服务器的资源利用率。每个上传装置都能感知到服务器环境的变化,都能最及时地利用被其他上传装置释放的服务器带宽资源。
2、用户有更多的机会得到高的可用服务器带宽;理想情况下每个上传装置可用的服务器带宽资源总是(总服务器带宽)/(总用户数)。
3、服务器为用户的分布式下载提供了便利。由于用户上传的文件很自然地分布在多个服务器上,所以当用户下载该文件的时候,无论是独享下载还是共同下载都可以利用多点下载来提高下载速度。
4、增加了容错性。现有的单点上传方案中,必然存在单点上传失败。用户的文件所在的服务器上传失败后,用户将不能下载数据。而本发明由于采用分布式上传方案,其文件被分布在多个服务器上,即使单个的服务器上传失效,其它的服务器仍能够继续完成文件的接收,从而增加数据传输的容错性,不会造成用户数据无法访问。
以下结合附图及实施例进一步说明本发明。
附图说明
图1为现有ftp文件传输系统结构示意图;
图2为本发明分布式文件上传装置结构示意图;
图3为本发明分布式文件下载装置结构示意图;
图4为本发明采用平均分布方式的文件分片的分布图;
图5为本发明采用填鸭分布方式的文件分片的分布图;
图6为本发明分布式文件传输系统实施例。
具体实施方式
实施例一
一种分布式文件上传方法,包括以下步骤:
a1)服务器获取步骤,与目录服务器建立连接,获取可上传文件的服务器列表;
a2)数据上传步骤,将包括文件分片和文件分布表的文件上传至所述服务器列表中的服务器中;
其中,所述文件分布表记录有文件的各个文件分片的存储信息。每个文件通过文件分布表文件来记录其在每个服务器上的分布情况。文件分布表保存在所有参与分布上传的服务器上。文件分布表文件记录文件中各个分片存放的服务器。例如可采用如下格式:
服务器ID:分片编号;分片编号;分片编号;0000;……;服务器ID:分片编号;分片编号;分片编号;0000;
假设共有三个服务器并且用ip地址来定位,其ip地址分别为:168.1.1.1,202.1.1.1,155.1.1.1。则对应的文件分布表文件的内容为:
168.1.1.1:1;7;0000;202.1.1.1:2;5;9;0000;155.1.1.1:3;4;6;8;10;0000;
其中,在所述步骤a1)之后步骤a2)之前,还包括:
权值计算步骤,定时计算服务器列表中的服务器的权值,在所述步骤a2)中根据权值计算结果,优先发送所述文件分片至权值高的服务器中。该权值可以综合平衡了连接速度、服务器所处的物理位置、网络实际稳定状态等中的一个或多个值,以评定该服务器的提供上传的服务质量。
其中,在所述权值计算步骤之后步骤a2)之前,还包括活动服务器列表建立和更新步骤,根据定时计算的权值,按权值高低建立和更新所述活动服务器列表,在所述步骤a2)中从该活动服务器列表中优选上传文件分片至权值最大且可用的服务器中。
其中,所述步骤a2)具体包括以下步骤:
a21)从活动服务器列表中选择权值最大且可用的服务器,并从文件中选取一个文件分片上传至该选择的服务器中,在该选择的服务器正在接收同一文件的文件分片时,设定其状态为不可用,在该选择的服务器完成文件分片的接收后,设定其状态为可用,更新所述文件分布表;
a22)判断所有文件分片是否传输完成,如果是,则执行步骤a23),否则,执行步骤a21);
a23)将文件分布表上传至所有存储有文件分片的服务器中。
其中,在所述步骤a2)之后,还包括:a3)上传验证步骤,用于验证上传文件的正确性。
实施例二
一种分布式文件下载方法,包括以下步骤:
b1)服务器获取步骤,与目录服务器建立连接,获取可下载文件的服务器列表;
b2)数据下载步骤,从所述服务器列表中的服务器中下载包括文件分片和文件分布表的文件;
b3)根据文件分布表将文件分片重构为文件。
其中,在所述步骤b2)中,先测试所述服务器列表中的服务器的下载速度,选择下载速度快的一个或多个服务器下载文件。
实施例三
一种分布式文件上传装置,包括:
服务器获取模块,用于与目录服务器建立连接,获取可上传文件的服务器列表;
权值计算模块,用于定时计算服务器列表中的服务器的权值;
活动服务器列表建立模块,用于根据权值计算结果,按权值高低建立一活动服务器列表;
数据上传模块,获取该权值的计算结果,并优选发送所述文件分片和文件分布表至该活动服务器列表中权值高的服务器中。其中,所述文件分布表记录有文件的各个文件分片的存储信息。
实施例四
一种分布式文件下载装置,包括:
服务器获取模块,用于与目录服务器建立连接,获取可下载文件的服务器列表;
下载速度测试模块,用于测试所述服务器列表中的服务器下载速度,
数据下载模块,用于选择一个或多个下载速度快的服务器,并从中下载包括文件分片和文件分布表的文件;
文件重构模块,用于根据文件分布表将文件分片重构为文件。
实施例五
一种分布式文件上传系统,包括:
多个服务器,用于接收上传的文件,所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;
目录服务器,存储所述多个服务器信息的服务器列表;
采用实施例三所述的分布式文件上传装置,用于从所述目录服务器中获取所述服务器列表,并与服务器列表中的服务器建立连接并上传所述文件。
实施例六
一种分布式文件下载系统,包括:
多个服务器,用于存储上传的文件;所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;
目录服务器,存储有所述多个服务器信息的服务器列表;
采用实施例四所述的分布式文件下载装置,用于从所述目录服务器中获取所述服务器列表,与服务器列表中的服务器建立连接并下载文件。
实施例七
如图6所示,一种分布式文件传输系统,包括:
多个服务器,用于接收和存储上传的文件,并提供该文件的下载,所述文件包括文件分片和文件分布表,所述文件分布表记录有文件的各个文件分片的存储信息;
目录服务器,存储有所述多个服务器信息的服务器列表;
分布式文件传输装置(图6中以客户端表示),该分布式文件传输装置可以是将实施例五与实施例六中的分布式文件上传、下载装置合并后形成。用于从所述目录服务器中获取所述服务器列表,并与服务器列表中的服务器建立连接,以上传或下载所述文件。
其中,所述目录服务器包括存储有服务器信息的服务器库和可用服务器列表管理模块,所述可用服务器列表管理模块验证服务器库中服务器的状态,将可以提供上传或下载文件服务的服务器信息加入所述服务器列表中。
其中,所述多个服务器还包括一文件分布表管理模块,在获取所述分布式文件传输装置的请求后,判断该请求类型,如果是上传文件分布表,则存储该文件分布表,如果是下载文件分布表,则提取对应的文件分布表以提供下载。
上述实施例中涉及将文件分片上传至多个服务器中的过程,可采用平均分布和填鸭分布两种方式,以下分别具体描述其实施方式。
1、平均分布方式
平均分布方式是将文件分片平均地分散到可用的服务器上,向每个服务器上传的数据量基本相同。假设上传的文件的为长度L,按照预定义的单元大小P分成N个文件分片。然后将这N个文件分片分布上传到M个服务器上。则每个服务器上保存的分片最多相差1文件分片,当文件长度L远大于P时,可以认为每个服务器上的文件分片数相同。以下用一个实例来进一步说明。
假设L=10MB,P=128KB,则N=L/P=10*1024/128=80,假设M=3。则服务器1上面上传Pn1=27个文件分片,服务器2上上传Pn2=27个文件分片,服务器3上上传Pn3=26个文件分片。每个服务器上的文件分片分布情况如图4所示。用户客户端依次将固定大小的分片上传到3个服务器,这样每个服务器上传的数据量几乎相同。在用户客户端和各个服务器连接速度差别不大的情况下,这种方式很好。但是如果每条链路速度差别较大,那么其中的最慢的链路就会制约整个上传过程。假设客户端到服务器1、服务器2、服务器3的可用带宽分别为B1=16KBps、B2=32KBps、B3=64KBps。那么整个文件上传完成需时max(Pn1*P/B1,Pn2*P/B2,Pn3*P/B3)=max(27*128/16,27*128/32,26*128/64)=216s。在实际的应用中,每条链路的可用带宽都是动态变化的,随着用户总量的变化,每个用户在上传过程中和每个服务器的链接上的可用带宽都是动态变化的。平均分布模型不能随着这种变化作任何调整。
2、填鸭分布方式
为了适应可用带宽的动态变化,本发明提出一种新的分布方式,取名填鸭分布方式。填鸭分布方式中,每个数据分片选择的服务器链路没有规律可循,采用自适应的方式,完全由上传时的每条活动链路的可用带宽决定。其基本过程与实施例一、实施例三中的从活动服务器列表中选择权值最大且可用的服务器进行文件分片上传过程类似,即:
c21)从活动服务器列表中选择连接速度最快且可用的服务器,从文件中选取一个文件分片上传至该选择的服务器中,在该选择的服务器正在接收同一文件的文件分片时,设定其状态为不可用,在该选择的服务器完成文件分片的接收后,设定其状态为可用,更新所述文件分布表;
c22)判断所有文件分片是否传输完成,如果是,则结束文件分片上传,否则,执行步骤c21)。
以下假设在某个短的时间段内(16秒)中,3条链路的带宽分别稳定在8KBps,16KBps,32KBps。每个分片大小P=64KB,总共有10个分片。则采用填鸭分布模型后每个服务器上的分片分布情况如图5所示。每一文件分片上传的服务器及耗时如下表所示:
文件分片 |
服务器 |
耗时(s) |
1 |
3 |
2 |
2 |
2 |
4 |
3 |
1 |
8 |
4 |
3 |
2 |
5 |
3 |
2 |
6 |
2 |
4 |
7 |
3 |
2 |
8 |
3 |
2 |
整个文件传输完成时间max(64*2/8,64*3/16,64*5/32)=16s。
如果采用平均分布模型则这个文件传输完成时间将是64*4/8=32s。
本实施例中,由于文件以文件分片的方式上传于多个服务器中,文件自然就分布的方式存放。因此,在用户访问单个文件时,可从多个服务器中下载文件,从而提高了下载速度。
本实施例中提供的两种不同的分布式上传方式,对于下载的产生的影响不同。用户下载数据时所处的网络环境可能和上传时的环境不同,可能在同一个地点,可能在同一个城市的不同位置,也可能在不同的城市或国家。那么上传时和各个服务器连接的可用带宽和下载时没有必然联系。如果上传的时候采用填鸭分布模型选择了最佳上传方案,那么下载的时候可能遇到存放分片最多的服务器的连接的可用带宽最少的情况,这样将对下载产生负面影响。而采用平均分布模型上传,这样的负面影响就要少一些。所以需要根据用户的类型作适当选择。此外,文件在划分为文件分片时,可以通过冗余的方式,提高下载的可靠性。例如,对于文件的某一文件分片,可以保存在多个服务器中,用户下载时,根据文件分布表获知该文件分片所在的服务器,并选择下载速度快的服务器下载该分件分片。
上述实施例中,涉及与服务器进行网络通讯的部分,可采用UDP协议实现。涉及与数据分片和文件分布表文件的上传和下载的部分可采用TCP协议实现。在windows平台下,如果是用户态可以采用WinSock接口(Windows Sockets,基于套接字模型的应用程序接口)来开发。如果是内核态可以采用传输驱动程序接口(Transport Driver Interface,TDI)来开发。实施例中的其它部分均可以用例如C++语言等一般编程语言和操作系统接口开发实现。
在此需要特别说明的是,本发明实施例中涉及的目录服务器和多个服务器,可以通过编程语程序灵活地使所述目录服务器实现每一所述服务器相同的功能,也可以使任一所述服务器同时也实现所述目录服务器的功能。同时也可以使实施例中的所述分布式文件上传装置、下载装置、传输装置,采用现有技术中的客户端通过程序设置灵活实施其中的部分或全部功能。
以上所述的仅为本发明的较佳实施例,并非用来限定本发明的实施范围,因此凡依本发明申请专利范围所述的构造、特征及精神所作的等同变化与修饰,均应涵盖在本发明的保护范围内。