可集群并支持多用户同时上传的文件传输方法和系统的制作方法
【技术领域】
[0001]本发明涉及通信领域,尤其涉及一种可集群并支持多用户同时上传的文件传输方法和系统。
【背景技术】
[0002]在互联网文件传输服务开发任务中,存在程序中读写1频繁而且上传文件比较大对网络吞吐量要求高的问题,既要支撑高并发和高1磁盘访问,又要保证文件在集群部署中的一致性,同时还要降低程序异常退出、网络带宽使用,减少磁盘碎片等问题。
[0003]落地文件,即保存到本地计算机磁盘上的文件。参考图1,现有文件传输服务中,落地文件和文件传输服务在同一台服务器上,读写本地磁盘。因此,现有文件传输服务不支持集群,落地文件和文件传输服务部署在同一台服务器,受服务器的性能和网络1影响,单机服务的处理能力得不到最大化,大量用户并且大文件上传时,无法达到高并发高实时性的要求;另一方面由于当服务器出现故障,服务重启、系统掉电等异常情况出现,没有备用机器将导致文件传输功能无法使用。
【发明内容】
[0004]本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种可集群并支持多用户同时上传的文件传输方法和系统。
[0005]本发明解决其技术问题所采用的技术方案是:构造一种可集群并支持多用户同时上传的文件传输方法,基于文件传输系统实现,该文件传输系统包括用户层、接入层、存储层,所述用户层包括多个客户端,所述接入层包括一个LVS模块和多个文件传输模块,所述存储层包括集群部署的多个文件存储模块;
[0006]所述方法包括:
[0007]S1、用户层中的客户端发送上传请求给接入层的LVS模块,所述上传请求用于请求向存储层上传新文件;
[0008]S2、接入层中的LVS模块选择一个文件传输模块处理该上传请求,文件传输模块将该新文件切分为多个文件块,并返回上传响应给对应的客户端;
[0009]S3、客户端在接收到上传响应后,发送文件块上传请求给该文件传输模块;
[0010]S4、文件传输模块基于未上传的文件块,返回写文件块响应给对应的客户端;
[0011]S5、客户端根据接收的写文件块响应,发送对应的文件块给文件传输模块;
[0012]S6、文件传输模块选择存储层中的一个文件存储模块存储该文件块,并在文件块存储完毕后转步骤S4继续下一个文件块的上传直至所有的文件块都上传至存储层。
[0013]在本发明所述的可集群并支持多用户同时上传的文件传输方法中,所述步骤S2中还包括:所述文件传输模块将每个文件块切分为多个更小的文件块;所述步骤S4还包括:文件传输模块根据客户端的网络类型和设备类型,经由所述写文件块响应设定该客户端单次上传的较小文件块的数量。
[0014]在本发明所述的可集群并支持多用户同时上传的文件传输方法中,每个文件块包括三种状态:未上传、正在上传、已上传,步骤S2中首次将文件切分时将所有文件块的状态都设置为未上传,
[0015]所述步骤S4包括:从第I块较小的文件块开始顺序查找直到找到状态为未上传的一个或者多个文件块,将该一个或者多个文件块的位置信息包含在写文件块响应中下发,并将该一个或者多个文件块的状态设置为正在上传,如果某个较大的文件块中的存在状态为正在上传的较小的文件块,则将该较大的文件块的状态设置为正在上传;
[0016]所述步骤S6中,在文件块存储完毕时将该文件块的状态设置为已上传,如果某个较大的文件块中的所有的较小的文件块的状态均为已上传,则将该较大的文件块的状态设置为已上传,如果所有的较大的文件块的状态都为已上传,则发送上传完毕指令给对应的客户端,结束。
[0017]在本发明所述的可集群并支持多用户同时上传的文件传输方法中,所述步骤S6所述的选择存储层中的一个文件存储模块存储该文件块包括:将所述存储层中的文件存储模块顺序编号为1-η,η为正整数;将客户端提交的文件MD5值经过哈希算法整形化后的值对η取模,并将取模的结果记为k ;选择第k个文件存储模块存储文件块。
[0018]在本发明所述的可集群并支持多用户同时上传的文件传输方法中,所述步骤S2包括:
[0019]S20、LVS模块接收到的上传请求后,根据负载均衡算法确定一个文件传输模块,并将该上传请求转发至该文件传输模块;
[0020]S21、该文件传输模块判断所述上传请求所对应的新文件是否已上传;
[0021]S22、如果新文件已上传,则发送上传完毕指令给对应的客户端,结束;
[0022]S23、如果新文件未上传或正在上传,则返回所述上传响应给对应的客户端。
[0023]本发明还公开了一种可集群并支持多用户同时上传的文件传输系统,包括:
[0024]用户层,包括多个客户端;
[0025]接入层,包括一个LVS模块和多个文件传输模块;
[0026]存储层,包括集群部署的多个文件存储模块;
[0027]所述客户端用于发送上传请求给所述LVS模块,所述上传请求用于请求向存储层上传新文;所述LVS模块用于选择一个文件传输模块处理该上传请求;文件传输模块用于将该新文件切分为多个文件块,并返回上传响应给对应的客户端;所述客户端还用于在接收到上传响应后,发送文件块上传请求给文件传输模块;文件传输模块还用于基于未上传的文件块返回写文件块响应给对应的客户端;客户端还用于根据接收的写文件块响应,发送对应的文件块给文件传输模块;文件传输模块还用于选择一个文件存储模块存储该文件块,并在文件块存储完毕后发送下一个写文件块响应至对应的客户端以继续下一个文件块的上传直至所有的文件块都上传至存储层。
[0028]在本发明所述的可集群并支持多用户同时上传的文件传输系统中,所述文件传输模块还用于将每个文件块切分为多个更小的文件块;并根据客户端的网络类型和设备类型,经由所述写文件块响应设定该客户端单次上传的较小文件块的数量。
[0029]在本发明所述的可集群并支持多用户同时上传的文件传输系统中,每个文件块包括三种状态:未上传、正在上传、已上传,所述LVS模块首次文件切分时将所有文件块的状态都设置为未上传,
[0030]所述的文件传输模块基于未上传的文件块,返回写文件块响应给对应的客户端包括:从第I块较小的文件块开始顺序查找直到找到状态为未上传的一个或者多个文件块,将该一个或者多个文件块的位置信息包含在写文件块响应中下发,并将该一个或者多个文件块的状态设置为正在上传,如果某个较大的文件块中的存在状态为正在上传的较小的文件块,则将该较大的文件块的状态设置为正在上传;
[0031]所述文件传输模块还用于在文件块存储完毕时将该文件块的状态设置为已上传,如果某个较大的文件块中的所有的较小的文件块的状态均为已上传,则将该较大的文件块的状态设置为已上传,如果所有的较大的文件块的状态都为已上传,则发送上传完毕指令给对应的客户端。
[0032]在本发明所述的可集群并支持多用户同时上传的文件传输系统中,所述的选择存储层中的一个文件存储模块存储该文件块包括:将所述存储层中的文件存储模块顺序编号为l_n,n为正整数;将客户端提交的文件MD5值经过哈希算法整形化后的值对η取模,并将取模的结果记为k ;选择第k个文件存储模块存储文件块。
[0033]在本发明所述的可集群并支持多用户同时上传的文件传输系统中,所述文件传输模块在接收到的上传请求时,首先判断所述上传请求所对应的新文件是否已上传,如果新文件已上传,则发送上传完毕指令给对应的客户端;如果新文件未上传或正在上传,则返回上传响应给对应的客户端。
[0034]实施本发明的可集群并支持多用户同时上传的文件传输方法和系统,具有以下有益效果:
[0035]I)、接入层将客户端的请求采用LVS分发到相应的接入层文件传输模块,实现程序的分布式部署,以达到接入层程序可集群、高并发、高1磁盘访问的效果,提高接入层程序的并发处理事务的能力,而且文件存储模块可集群,