掌桥专利:专业的专利平台
掌桥专利
首页

一种基于k8s的分布式大文件上传方法及装置

文献发布时间:2024-04-18 20:00:25


一种基于k8s的分布式大文件上传方法及装置

技术领域

本发明属于计算机技术领域,尤其涉及一种基于k8s的分布式大文件上传方法及装置。

背景技术

k8s(kubernetes)是容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。随着云原生的普及和应用的不断更新迭代,在k8s中产生的文件越来越多越来越大。为了更好的支撑业务,需要将这些大文件统一存储在中心云进行分析、归档、共享等。

目前,将这些大文件存储到中心云的方式为,在一个上传节点上将文件分块,然后多线程并发上传,上传效率受限于单物理节点带宽,上传效率低。

发明内容

鉴于以上现有技术的不足,发明的目的在于提供一种基于k8s的分布式大文件上传方法及装置,以实现分布式上传,提升上传的灵活度及上传效率。

本发明的第一方面,提出了一种基于k8s的分布式大文件上传方法,应用于容器集群管理系统,所述系统包括:任务创建模块、任务管理模块、分块上传模块,所述方法包括:

S1.调用任务创建模块创建文件上传任务;

S2.调用任务管理模块将所述文件上传任务定义为第一声明式应用程序编程接口API资源;根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务;将每个所述分块上传任务定义为第二声明式API资源,所述第二声明式API资源声明有所述分块上传任务对应的数据起始位置;创建每个所述分块上传任务对应的分块上传模块;多个所述分块上传模块部署在不同的物理节点上;

S3.调用所述分块上传模块对所述分块上传任务进行分布式上传。

进一步地,所述S3还包括:实时更新所述分块上传模块的上传状态和上传进度;

所述S2还包括:基于所述分块上传模块的上传状态和上传进度,更新所述分块上传任务和所述文件上传任务的上传状态和上传进度。

进一步地,所述根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务,包括:

利用第一计算公式计算拆分后的分块数目;所述第一计算公式为:分块数目=(文件上传任务的文件长度+拆分块长度-1)//拆分块长度;

其中,所述//表示地板除法运算。

进一步地,多个所述分块上传模块并发读取所述多个分块上传任务。

进一步地,每个所述分块上传模块抢占并锁定一个分块上传任务进行文件上传。

第二方面,本发明实施例还提供了一种基于k8s的分布式大文件上传装置,应用于容器集群管理系统,所述系统包括:任务创建模块、任务管理模块、分块上传模块,所述装置包括:

创建单元,用于调用任务创建模块创建文件上传任务;

拆分单元,用于调用任务管理模块将所述文件上传任务定义为第一声明式应用程序编程接口API资源;根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务;将每个所述分块上传任务定义为第二声明式API资源,所述第二声明式API资源声明有所述分块上传任务对应的数据起始位置;创建每个所述分块上传任务对应的分块上传模块;多个所述分块上传模块部署在不同的物理节点上;

上传单元,用于调用所述分块上传模块对所述分块上传任务进行分布式上传。

进一步地,所述上传单元还用于:实时更新所述分块上传模块的上传状态和上传进度;

所述拆分单元还用于:基于所述分块上传模块的上传状态和上传进度,更新所述分块上传任务和所述文件上传任务的上传状态和上传进度。

进一步地,所述根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务,包括:

利用第一计算公式计算拆分后的分块数目;所述第一计算公式为:分块数目=(文件上传任务的文件长度+拆分块长度-1)//拆分块长度;

其中,所述//表示地板除法运算。

进一步地,多个所述分块上传模块并发读取所述多个分块上传任务。

进一步地,每个所述分块上传模块抢占并锁定一个分块上传任务进行文件上传。

本发明有益效果如下:

本发明所述的方法和装置,可以调用任务创建模块创建文件上传任务。然后,调用任务管理模块将文件上传任务定义为第一声明式应用程序编程接口API资源,进而可以根据第一声明式API资源声明的拆分块长度,将文件上传任务拆分为多个分块上传任务。之后,可以将每个分块上传任务定义为第二声明式API资源,第二声明式API资源声明有分块上传任务对应的数据起始位置。然后,创建每个分块上传任务对应的分块上传模块。之后,可以调用分块上传模块对分块上传任务进行分布式上传。这样,可以通过k8s扩展机制:声明式API资源加上定制任务管理模块,将一个文件上传任务拆分为多个分块上传任务,从而可以实现针对大文件的分布式上传。

附图说明

附图仅用于示出具体实施例的目的,而并不认为是对本发明的限制,在整个附图中,相同的参考符号表示相同的部件。显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本发明实施例一种基于k8s的分布式大文件上传方法的流程图;

图2为本发明实施例一种基于k8s的分布式大文件上传装置的示意图;

图3为本发明实施例提供的一种电子设备的示意图。

具体实施方式

为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。应该理解,这些描述只是示例性的,并非用于限定本发明的范围。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明公开的概念。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的方法和系统的例子。

本发明提出了一种基于k8s的分布式大文件上传方法及装置,为解决了现有方法上传效率受限于单物理节点带宽,上传效率低的问题。

方法实施例

本发明的第一方面,提出了一种基于k8s的分布式大文件上传方法,应用于容器集群管理系统,所述系统包括:任务创建模块、任务管理模块、分块上传模块。

其中,k8s全称kubernetes,是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

图1为本发明实施例一种基于k8s的分布式大文件上传方法的流程图,参见图1,所述方法包括:

S1.调用任务创建模块创建文件上传任务;

可以理解的是,任务创建模块在K8S中可以创建一个文件上传任务(记为FileUpload)。

S2.调用任务管理模块将所述文件上传任务定义为第一声明式应用程序编程接口API资源;根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务;将每个所述分块上传任务定义为第二声明式API资源,所述第二声明式API资源声明有所述分块上传任务对应的数据起始位置;创建每个所述分块上传任务对应的分块上传模块;多个所述分块上传模块部署在不同的物理节点上;

可以理解的是,任务管理模块可以在K8S中将文件上传任务定义为第一声明式应用程序编程接口API资源。也就是,任务管理模块可以将该文件上传任务定义为一种CustomResource。

CR全称Custom Resource,定制资源,在k8s中创建的CRD实例。CRD全称CustomResource Definition,定制资源定义,是k8s的一种扩展机制,允许用户在k8s中声明一种新的资源类型,类似编程语言中的类class。

然后,可以根据第一声明式API资源声明的拆分块长度,将文件上传任务FileUpload拆分为多个分块上传任务(记为BlockUpload)。将每个分块上传任务定义为第二声明式API资源,第二声明式API资源声明有分块上传任务对应的数据起始位置。

具体地,可以利用第一计算公式计算拆分后的分块数目。该第一计算公式为:分块数目n=(文件上传任务的文件长度filesize+拆分块长度blocksize-1)//拆分块长度blocksize;其中,所述//表示地板除法运算。

其中,分块上传任务n负责上传的范围为:[start,start+size),其中start=n*blocksize,n为>=0的整数;size=min(filesize%blocksize,,blocksize)。

之后,创建每个分块上传任务对应的分块上传模块,多个分块上传模块部署在不同的物理节点上。

可以理解的是,通过创建多个任务上传模块,且多个任务上传模块可以通过网络文件系统、对象存储等实现对大文件的并发读取。其中,分块上传模块是由任务管理模块创建的Deployment,一个分块上传模块对应k8s的一个Pod。Deployment是k8s提供的一种无状态工作负载,最终会生成多个Pod副本,副本之间没有差别。分块上传模块是多副本无状态工作负载,副本间可以通过网络文件系统、对象存储并发读取大文件。其中,Pod副本为k8s中的一个常用概念,在此不进行展开描述。

其中,网络文件系统,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。

对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。

S3.调用所述分块上传模块对所述分块上传任务进行分布式上传。

可以理解的是,由于多个分块上传模块部署在不同的物理节点上,因而可以通过调用该多个分块上传模块对多个分块上传任务进行分布式上传。这样,可以充分利用多个物理节点的带宽,最大化传输效率。另外,控制和传输分离,允许任务创建模块按照实际情况定义分块上传任务的大小、并发度等参数。

其中,每个分块上传模块可以抢占并锁定一个分块上传任务进行文件上传。

可以理解的是,分块上传模块当监听到分块上传任务BlockUpload的上传状态status.worker为空时,可以进行抢占,并尝试设置status.worker为本分块上传模块的名称,若更新成功表示抢占成功,即负责该BlockUpload的上传。如果更新失败则表示抢占失败,继续抢占下一个BlockUpload。

若抢占成功,则根据该分块上传任务的数据起始位置,读取该分块上传任务的分块数据。然后,将读取到分块数据上传至中心云。

可以理解的是,分块上传模块还可以实时更新该分块上传模块的上传状态和上传进度。其中,该上传状态可以包括:上传中、上传失败。当分块上传模块长时间处于上传中时,需要删除对应的Pod重新上传。

另外,任务管理模块还可以基于分块上传模块的上传状态和上传进度,更新分块上传任务和文件上传任务的上传状态和上传进度。

具体地,可以在所有分块上传模块上传完成后,对整个大文件进行合并并对文件上传任务、分块上传任务的状态更新

应用本发明所述的方法,可以调用任务创建模块创建文件上传任务。然后,调用任务管理模块将文件上传任务定义为第一声明式应用程序编程接口API资源,进而可以根据第一声明式API资源声明的拆分块长度,将文件上传任务拆分为多个分块上传任务。之后,可以将每个分块上传任务定义为第二声明式API资源,第二声明式API资源声明有分块上传任务对应的数据起始位置。然后,创建每个分块上传任务对应的分块上传模块。之后,可以调用分块上传模块对分块上传任务进行分布式上传。这样,可以通过k8s扩展机制:声明式API资源加上定制任务管理模块,将一个文件上传任务拆分为多个分块上传任务,从而可以实现针对大文件的分布式上传。

装置实施例

第二方面,本发明实施例还提供了一种基于k8s的分布式大文件上传装置,应用于容器集群管理系统,所述系统包括:任务创建模块、任务管理模块、分块上传模块。图2为本发明实施例一种基于k8s的分布式大文件上传装置的示意图,参见图2,所述装置包括:

创建单元201,用于调用任务创建模块创建文件上传任务;

拆分单元202,用于调用任务管理模块将所述文件上传任务定义为第一声明式应用程序编程接口API资源;根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务;将每个所述分块上传任务定义为第二声明式API资源,所述第二声明式API资源声明有所述分块上传任务对应的数据起始位置;创建每个所述分块上传任务对应的分块上传模块;多个所述分块上传模块部署在不同的物理节点上;

上传单元203,用于调用所述分块上传模块对所述分块上传任务进行分布式上传。

应用本发明所述的装置,可以调用任务创建模块创建文件上传任务。然后,调用任务管理模块将文件上传任务定义为第一声明式应用程序编程接口API资源,进而可以根据第一声明式API资源声明的拆分块长度,将文件上传任务拆分为多个分块上传任务。之后,可以将每个分块上传任务定义为第二声明式API资源,第二声明式API资源声明有分块上传任务对应的数据起始位置。然后,创建每个分块上传任务对应的分块上传模块。之后,可以调用分块上传模块对分块上传任务进行分布式上传。这样,可以通过k8s扩展机制:声明式API资源加上定制任务管理模块,将一个文件上传任务拆分为多个分块上传任务,从而可以实现针对大文件的分布式上传。

进一步地,所述上传单元203还用于:实时更新所述分块上传模块的上传状态和上传进度;

所述拆分单元202还用于:基于所述分块上传模块的上传状态和上传进度,更新所述分块上传任务和所述文件上传任务的上传状态和上传进度。

进一步地,所述根据所述第一声明式API资源声明的拆分块长度,将所述文件上传任务拆分为多个分块上传任务,包括:

利用第一计算公式计算拆分后的分块数目;所述第一计算公式为:分块数目=(文件上传任务的文件长度+拆分块长度-1)//拆分块长度;

其中,所述//表示地板除法运算。

进一步地,多个所述分块上传模块并发读取所述多个分块上传任务。

进一步地,每个所述分块上传模块抢占并锁定一个分块上传任务进行文件上传。

可以理解的是,该任务创建模块、任务管理模块可以部署在一个电子设备中,也可以部署在不同电子设备中,该电子设备可以为服务器,当然并不局限于此。多个分块上传模块部署在不同的电子设备中。

第三方面,本发明提出一种电子设备,该如图3所示,包括:存储器和一个或多个处理器。

所述存储器中存储有一个或多个应用程序,所述一个或多个应用程序适于由所述一个或多个处理器执行以实现第一方面所述的科技大数据要素构建方法。

如图3所示,电子设备包括:处理器301和存储器302。其中,处理器301和存储器302相连,如通过总线相连。

该电子设备的结构并不构成对本发明实施例的限定。

处理器301可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器301也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。

总线可包括一通路,在上述组件之间传送信息。总线可以是PCI总线或EISA总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器302可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

第四方面,本发明提出一种计算机可读存储介质,其上存储有计算机程序,该计算机程序能够被处理器加载和执行第一方面所述的方法。

本发明申请人结合说明书附图对本发明的实施示例做了详细的说明与描述,但是本领域技术人员应该理解,以上实施示例仅为本发明的优选实施方案,详尽的说明只是为了帮助读者更好地理解本发明精神,而并非对本发明保护范围的限制,相反,任何基于本发明的发明精神所作的任何改进或修饰都应当落在本发明的保护范围之内。

最后应说明的是,以上实施例仅用以说明本发明实施例的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

相关技术
  • 基于网络数据的实时反欺诈方法和系统及存储介质
  • 基于LSTM的水声网络数据实时故障检测及恢复方法
  • 基于自适应重传的水声网络数据传输方法
技术分类

06120116527941