文件传输方法、装置、计算机设备和存储介质转让专利

申请号 : CN202110504129.6

文献号 : CN113315815B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 禹春雷周基鑫张静华王义开杨栩李功训苗咏宿旭升

申请人 : 华锐分布式(北京)技术有限公司深圳华锐分布式技术股份有限公司

摘要 :

本申请涉及一种文件传输方法、装置、计算机设备和存储介质。所述方法包括:监听预设端口;所述预设端口用于接收控制命令;若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中。采用本方法能够有效提高文件传输效率。

权利要求 :

1.一种文件传输方法,其特征在于,应用于动态的代理应用程序,所述方法包括:监听预设端口;所述预设端口用于接收控制命令;

若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;

从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中;在内存中维护文件标识与文件路径的对应关系;当收到数据块时,根据文件标识查找到对应的文件路径,然后将所述数据块写到对应的文件位置。

2.根据权利要求1所述的方法,其特征在于,所述从所述组播组中接收目标文件数据包之后,所述方法还包括:对所述目标文件数据包进行校验;

若通过校验,则根据所述代理应用程序所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与所述文件标识对应的文件路径,将所述目标文件数据包写入至所述目标设备本地对应的文件位置。

3.根据权利要求2所述的方法,其特征在于,所述目标文件数据包中包括第一校验值;

所述第一校验值是发送端根据预设校验规则计算得到的;

所述对所述目标文件数据包进行校验,包括:

对所述目标文件数据包进行校验计算,得到对应的第二校验值;

将所述第二校验值与所述第一校验值进行比较;

若所述第二校验值与所述第一校验值相同,则表示通过校验;若所述第二校验值与所述第一校验值不相同,则表示未通过校验。

4.根据权利要求1所述的方法,其特征在于,所述目标文件数据包包括结束标志位;

所述从所述组播组中接收目标文件数据包,包括:

当接收到所述目标文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历所述序号检查是否有缺失的数据块;

若有缺失的数据块,则通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示所述发送端通过TCP会话发送重传的数据包。

5.一种文件传输方法,其特征在于,应用于发送端,所述方法包括:通过预设端口发送控制命令至目标代理应用程序;所述控制命令携带目标代理应用程序的标识;所述控制命令用于指示与所述目标代理应用程序的标识对应的应用程序根据所述控制命令加入或退出组播组;所述目标代理应用程序用于提供文件复制功能;所述目标代理应用程序是动态的代理应用程序;

当所述目标代理应用程序加入对应的组播组后,发送目标文件数据包到所述组播组对应的组播地址中,以指示所述组播组中的所述目标代理应用程序接收到所述目标文件数据包,并将所述目标文件数据包写入到所述目标代理应用程序所在的目标设备中;在内存中维护文件标识与文件路径的对应关系;当收到数据块时,根据文件标识查找到对应的文件路径,然后将所述数据块写到对应的文件位置。

6.根据权利要求5所述的方法,其特征在于,所述通过预设端口发送控制命令至目标代理应用程序之前,所述方法还包括:调用文件传输服务的程序通过预设端口与目标代理应用程序建立TCP连接,所述预设端口用于发送控制命令;所述TCP连接用于发送控制命令至目标代理应用程序。

7.根据权利要求5所述的方法,其特征在于,所述方法还包括:通过预设端口发送目标文件数据包至目标代理应用程序;所述目标代理应用程序为异地机房中选取的响应时间小于时间阈值的代理应用程序;

通过所述目标代理应用程序将所述目标文件数据包发送到对应的组播组中,以指示所述组播组中的组播成员接收到所述目标文件数据包,所述组播组中的组播成员并将所述目标文件数据包传输至对应的目标设备;其中,所述组播成员是所述目标代理通过发送控制命令进行控制的,所述控制命令用于控制所述组播成员加入或者退出所述组播组。

8.一种文件传输装置,其特征在于,对应于动态的代理应用程序,所述装置包括:监听模块,用于监听预设端口;所述预设端口用于接收控制命令;

加入模块,用于若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;

写入模块,用于从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中;在内存中维护文件标识与文件路径的对应关系;

当收到数据块时,根据文件标识查找到对应的文件路径,然后将所述数据块写到对应的文件位置。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。

说明书 :

文件传输方法、装置、计算机设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种文件传输方法、装置、计算机设备和存储介质。

背景技术

[0002] 随着计算机技术的发展,互联网产品的用户数量激增,并发访问数很高,在高并发访问的情况下,需要从源机器逐台向目标机器分发或并行向多台目标机器分发文件。
[0003] 然而,目前的文件传输方式中,由于分发速度受限于源机器的出口带宽,如果有多台机器请求相同的数据,源机器需要逐一发送多次。尤其当请求数量过多时,源机器(服务器)向多台目标机器分发文件时需要花费大量的时间,容易导致文件传输效率较低。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种能够提高文件传输效率的文件传输方法、装置、计算机设备和存储介质。
[0005] 一种文件传输方法,所述方法包括:
[0006] 监听预设端口;所述预设端口用于接收控制命令;
[0007] 若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;
[0008] 从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中。
[0009] 在其中一个实施例中,所述从所述组播组中接收目标文件数据包之后,所述方法还包括:
[0010] 对所述目标文件数据包进行校验;
[0011] 若通过校验,则根据所述代理应用程序所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与所述文件标识对应的文件路径,将所述目标文件数据包写入至所述目标设备本地对应的文件位置。
[0012] 在其中一个实施例中,所述目标文件数据包中包括第一校验值;所述第一校验值是发送端根据预设校验规则计算得到的;
[0013] 所述对所述目标文件数据包进行校验,包括:
[0014] 对所述目标文件数据包进行校验计算,得到对应的第二校验值;
[0015] 将所述第二校验值与所述第一校验值进行比较;
[0016] 若所述第二校验值与所述第一校验值相同,则表示通过校验;若所述第二校验值与所述第一校验值不相同,则表示未通过校验。
[0017] 在其中一个实施例中,所述目标文件数据包包括结束标志位;
[0018] 所述从所述组播组中接收目标文件数据包,包括:
[0019] 当接收到所述目标文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历所述序号检查是否有缺失的数据块;
[0020] 若有缺失的数据块,则通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示所述发送端通过TCP会话发送重传的数据包。
[0021] 一种文件传输装置,所述装置包括:
[0022] 监听模块,用于监听预设端口;所述预设端口用于接收控制命令;
[0023] 加入模块,用于若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;
[0024] 写入模块,用于从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中。
[0025] 一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0026] 监听预设端口;所述预设端口用于接收控制命令;
[0027] 若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;
[0028] 从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中。
[0029] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0030] 监听预设端口;所述预设端口用于接收控制命令;
[0031] 若通过所述预设端口接收到加入组播组的控制命令,则将所述代理应用程序的标识加入到与所述控制命令对应的组播组中;
[0032] 从所述组播组中接收目标文件数据包,并将所述目标文件数据包写入到所述代理应用程序所在的目标设备中。
[0033] 上述文件传输方法、装置、计算机设备和存储介质,通过监听预设端口,预设端口用于接收控制命令。若通过预设端口接收到加入组播组的控制命令,则将代理应用程序的标识加入到与控制命令对应的组播组中,从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。由此使得,能充分利用网络基础设施的带宽,相同数据在网络上只需要传输一次,不需要源机器分多次地向目标机器分发文件,有效提升了文件传输效率,降低了文件传输的时延。
[0034] 一种文件传输方法,所述方法包括:
[0035] 通过预设端口发送控制命令至目标代理应用程序;所述控制命令携带目标代理应用程序的标识;所述控制命令用于指示与所述目标代理应用程序的标识对应的应用程序根据所述控制命令加入或退出组播组;所述目标代理应用程序用于提供文件复制功能;
[0036] 当所述目标代理应用程序加入对应的组播组后,发送目标文件数据包到所述组播组对应的组播地址中,以指示所述组播组中的所述目标代理应用程序接收到所述目标文件数据包,并将所述目标文件数据包写入到所述目标代理应用程序所在的目标设备中。
[0037] 在其中一个实施例中,所述通过预设端口发送控制命令至目标代理应用程序之前,所述方法还包括:
[0038] 调用文件传输服务的程序通过预设端口与目标代理应用程序建立TCP连接,所述预设端口用于发送控制命令;所述TCP连接用于发送控制命令至目标代理应用程序。
[0039] 在其中一个实施例中,所述方法还包括:
[0040] 通过预设端口发送目标文件数据包至目标代理应用程序;所述目标代理应用程序为异地机房中选取的响应时间小于时间阈值的代理应用程序;
[0041] 通过所述目标代理应用程序将所述目标文件数据包发送到对应的组播组中,以指示所述组播组中的组播成员接收到所述目标文件数据包,所述组播组中的组播成员并将所述目标文件数据包传输至对应的目标设备;其中,所述组播成员是所述目标代理通过发送控制命令进行控制的,所述控制命令用于控制所述组播成员加入或者退出所述组播组。
[0042] 一种文件传输装置,所述装置包括:
[0043] 发送模块,用于通过预设端口发送控制命令至目标代理应用程序;所述控制命令携带目标代理应用程序的标识;所述控制命令用于指示与所述目标代理应用程序的标识对应的应用程序根据所述控制命令加入或退出组播组;所述目标代理应用程序用于提供文件复制功能;
[0044] 所述发送模块还用于当所述目标代理应用程序加入对应的组播组后,发送目标文件数据包到所述组播组对应的组播地址中,以指示所述组播组中的所述目标代理应用程序接收到所述目标文件数据包,并将所述目标文件数据包写入到所述目标代理应用程序所在的目标设备中。
[0045] 一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0046] 通过预设端口发送控制命令至目标代理应用程序;所述控制命令携带目标代理应用程序的标识;所述控制命令用于指示与所述目标代理应用程序的标识对应的应用程序根据所述控制命令加入或退出组播组;所述目标代理应用程序用于提供文件复制功能;
[0047] 当所述目标代理应用程序加入对应的组播组后,发送目标文件数据包到所述组播组对应的组播地址中,以指示所述组播组中的所述目标代理应用程序接收到所述目标文件数据包,并将所述目标文件数据包写入到所述目标代理应用程序所在的目标设备中。
[0048] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0049] 通过预设端口发送控制命令至目标代理应用程序;所述控制命令携带目标代理应用程序的标识;所述控制命令用于指示与所述目标代理应用程序的标识对应的应用程序根据所述控制命令加入或退出组播组;所述目标代理应用程序用于提供文件复制功能;
[0050] 当所述目标代理应用程序加入对应的组播组后,发送目标文件数据包到所述组播组对应的组播地址中,以指示所述组播组中的所述目标代理应用程序接收到所述目标文件数据包,并将所述目标文件数据包写入到所述目标代理应用程序所在的目标设备中。
[0051] 上述文件传输方法、装置、计算机设备和存储介质,通过预设端口发送控制命令至目标代理应用程序,控制命令携带目标代理应用程序的标识,控制命令用于指示与目标代理应用程序的标识对应的应用程序根据控制命令加入或退出组播组,目标代理应用程序用于提供文件复制功能。当目标代理应用程序加入对应的组播组后,发送目标文件数据包到组播组对应的组播地址中,以指示组播组中的目标代理应用程序接收到目标文件数据包,并将目标文件数据包写入到目标代理应用程序所在的目标设备中。由此使得,能充分利用网络基础设施的带宽,相同数据在网络上只需要传输一次,不需要源机器分多次地向目标机器分发文件,有效提升了文件传输效率,降低了文件传输的时延。

附图说明

[0052] 图1为一个实施例中文件传输方法的应用环境图;
[0053] 图2为一个实施例中文件传输方法的流程示意图;
[0054] 图3为一个实施例中对目标文件数据包进行校验步骤的流程示意图;
[0055] 图4为一个实施例中从组播组中接收目标文件数据包步骤的流程示意图;
[0056] 图5A为另一个实施例中文件传输方法的流程示意图;
[0057] 图5B为一个实施例中发送端与Agent进行通信的流程示意图;
[0058] 图6为一个实施例中文件传输装置的结构框图;
[0059] 图7为另一个实施例中文件传输装置的结构框图;
[0060] 图8为一个实施例中计算机设备的内部结构图。

具体实施方式

[0061] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0062] 本申请提供的文件传输方法,可以应用于如图1所示的应用环境中。其中,发送端102通过网络与代理应用程序104通过网络进行通信,代理应用程序104部署在对应的主机(服务器)上,发送端102可以为源服务器。代理应用程序104监听预设端口,预设端口用于接收控制命令。若代理应用程序104通过预设端口接收到发送端102发送的加入组播组的控制命令,则将代理应用程序的标识加入到与控制命令对应的组播组中,代理应用程序104从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。其中,发送端102可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
[0063] 在一个实施例中,如图2所示,提供了一种文件传输方法,以该方法应用于图1中的代理应用程序为例进行说明,包括以下步骤:
[0064] 步骤202,监听预设端口,预设端口用于接收控制命令。
[0065] 互联网产品用户数量庞大,并发访问数很高,单一的服务器不能同时服务如此巨大数量的用户,可以通过部署主备两个数据中心,实现数据中心的故障切换,以提升分布式系统的吞吐量和保证服务的冗余。其中,每个数据中心部署有对应的交换机,各个交换机连接有至少一个代理应用程序(Agent),而这些Agent都对应部署在不同的主机(即接收端)上,其中,Agent也可以是主机上的线程。本申请中当发送端(也称为源机器)需要将同一文件数据发送给多个接收端时,发送端可以借助多个Agent将文件数据发送至对应的接收端。组播是网络层提供的基础功能,当应用往一个组播地址发送数据时,加入到该组播地址的使用成员(Agent)就都能收到对应的数据。当发送端将一个文件分块发送到组播地址时,Agent就能接收到对应的文件的数据块,并将接收到的数据块写入到文件中,完成文件的分发。
[0066] 具体的,以数据中心中的某个交换机连接的代理应用程序(Agent)为例进行说明。在分布式系统、高并发请求量的环境下,Agent监听预设端口,该预设端口用于接收控制命令。各个Agent启动时监听预设端口,预设端口可以为TCP端口,该TCP端口用于接收控制命令,例如接收加入或退出组播组的控制命令以及传输的文件数据等。例如,发送端可以通过调用文件传输服务的程序通过TCP协议来连接到Agent,其中,Agent可以包括异地机房中的Agent,例如,异地机房中的目标Agent),发送端通过已建立连接的TCP端口发送控制命令以指示目标Agent加入或退出组播组,即在Agent接收到加入组播组的控制命令时,Agent可以加入到对应的组播组中;在Agent接收到退出组播组的控制命令时,Agent可以退出对应的组播组。
[0067] 步骤204,若通过预设端口接收到加入组播组的控制命令,则将代理应用程序的标识加入到与控制命令对应的组播组中。
[0068] Agent监听预设端口,若Agent通过预设端口接收到加入组播组的控制命令,则将Agent自身对应的标识加入到与控制命令对应的组播组中。其中,组播组是指采用组播技术传输数据的目标组,即组播技术的初衷是在IP网络中,以“尽力而为”的形式发送信息到某个目标组,这个目标组称为组播组,这样在有源主机向多点目标主机发送信息需求时,源主机只发送一份数据,数据的目的地址是组播组地址,这样,凡是属于该组的成员,都可以接收到一份源主机发送的数据的拷贝,此组播方式下,只有真正信息需要的成员会收到信息,其他主机不会收到。本申请中采用组播方式能够解决单播情况下数据的重复拷贝及带宽的重复占用。
[0069] 步骤206,从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。
[0070] 若Agent通过预设端口接收到加入组播组的控制命令,将Agent自身对应的标识加入到与控制命令对应的组播组中之后,Agent可以从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。其中,一个组播组就是一个IP地址(Internet Protocol Address),不表示具体的主机,而是表示一系列系统的集合,部署在主机上的Agent加入某个组播组即声明自己接收某个IP地址的报文。例如,当Agent1通过预设端口接收到加入组播组A(IP地址224.0.0.0–239.255.255.255)的控制命令,则Agent1将自身的标识加入到与控制命令对应的组播组A中,即Agent1声明自己接收组播组A(IP地址224.0.0.0–239.255.255.255)的报文,只要发送端将目标文件发送至组播组A(IP地址
224.0.0.0–239.255.255.255)中,Agent1均可以实时的接收到组播组A(IP地址224.0.0.0–
239.255.255.255)中的目标文件数据包,并将目标文件数据包写入到Agent1所在的目标设备中。此外,Agent1将目标文件数据包写入到Agent1所在的目标设备中时,Agent1可以根据预设规则,将目标文件数据包写入到Agent1所在的目标设备中。例如,Agent1可以根据所在的目标设备的内存中存储的文件标识与文件路径的对应关系,将接收到的目标文件数据包写入至目标设备本地对应的文件路径中。
[0071] 传统的文件传输方式中,通常使用系统自带的远程文件复制工具,例如使用linux(即GNU/Linux操作系统)系统脚本scp(secure copy)命令从源机器逐台向目标机器分发文件或并行向多台目标机器分发文件,分发速度受限于源机器的出口带宽,假设文件数据为1000M,源机器的带宽为100M/s,则需要10s才能将文件数据分发到一台目标机器,而向其他目标机器数量分发时则需要若干10s的时间,导致文件传输的效率较低。
[0072] 而本实施例中,通过监听预设端口,预设端口用于接收控制命令。若通过预设端口接收到加入组播组的控制命令,则将代理应用程序的标识加入到与控制命令对应的组播组中,从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。由此使得,能充分利用网络基础设施的带宽,相同数据在网络上只需要传输一次,不需要源机器分多次地向目标机器分发文件,有效提升了文件传输效率,降低了文件传输的时延。
[0073] 在一个实施例中,如图3所示,从组播组中接收目标文件数据包之后,该方法还包括对目标文件数据包进行校验的步骤,具体包括:
[0074] 步骤302,对目标文件数据包进行校验。
[0075] 步骤304,若通过校验,则根据代理应用程序所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与文件标识对应的文件路径,将目标文件数据包写入至目标设备本地对应的文件位置。
[0076] 若Agent通过预设端口接收到加入组播组的控制命令,将Agent自身对应的标识加入到与控制命令对应的组播组中之后,Agent可以从组播组中接收目标文件数据包,并对目标文件数据包进行校验。具体的,Agent从组播组中接收目标文件数据包之后,Agent对目标文件数据包进行校验。若通过校验,则Agent根据自身所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与文件标识对应的文件路径,将目标文件数据包写入至目标设备本地对应的文件位置。例如,Agent从组播组中接收到目标文件数据包01之后,Agent对该文件数据包01进行校验。若通过校验,则Agent根据自身所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与该文件数据包01对应的文件路径,并将该文件数据包01写入至目标设备本地对应的文件位置。本实施中使用文件标识的主要原因是文件的路径可能比较长,如果每次都将文件路径放到数据块的包中,降低了数据块的有效负荷。因此,使用文件标识可以有效减小传输的数据量。即Agent在内存中维护文件标识与文件路径的对应关系,当收到数据块时,Agent根据文件标识查找到对应的文件路径,然后将数据块写到对应的文件位置(数据偏移值)。由此使得,当发送端将一个文件分块发到组播地址时,Agent就能快速接收到文件的数据块,然后写入到文件中,完成文件的分发,极大地缩短了文件分发的时间,从而有效提升了文件传输效率,降低了文件传输的时延。
[0077] 在其中一个实施例中,目标文件数据包中包括第一校验值,第一校验值是发送端根据预设校验规则计算得到的,对目标文件数据包进行校验的步骤,包括:
[0078] 对目标文件数据包进行校验计算,得到对应的第二校验值。
[0079] 将第二校验值与第一校验值进行比较。
[0080] 若第二校验值与第一校验值相同,则表示通过校验;若第二校验值与第一校验值不相同,则表示未通过校验。
[0081] Agent将自身对应的标识加入到与控制命令对应的组播组中之后,Agent可以从组播组中接收目标文件数据包,并对目标文件数据包进行校验。具体的,目标文件数据包中包括第一校验值,第一校验值是发送端根据预设校验规则计算得到的。当Agent从组播组中接收到目标文件数据包时,Agent对目标文件数据包进行校验计算,得到对应的第二校验值。Agent将第二校验值与第一校验值进行比较。若第二校验值与第一校验值相同,则表示通过校验,即当通过校验时,则Agent根据自身所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与文件标识对应的文件路径,将目标文件数据包写入至目标设备本地对应的文件位置。若第二校验值与第一校验值不相同,则表示未通过校验,当未通过校验时,则Agent通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示发送端通过TCP会话发送重传的数据包。
[0082] 假设A为源机器,需要将文件数据发送给目标机器B1、B2和B3,传统方式的文件发送时间为3*(文件大小/带宽)。而采用本实施中的实现方式,文件发送时间为源机器将文件数据发送给Agent的时间,因此发送时间为:文件大小/带宽。源机器只需要将文件数据发出一次即可,文件分发速度受源机器出口带宽的影响被极大地削弱了,因此采用本实施例中的分发方式能极大地缩短文件分发的时间。由此使得,能够充分利用网络连接全双工的特性,文件分发的时间从:目标机器数*(文件大小/带宽),提升为:(文件大小/带宽),即源机器只需将文件发送至组播地址中,通过组播地址使得各个Agent均能接收到源机器发送的文件,能有效缩短文件分发的时间。
[0083] 在一个实施例中,如图4所示,目标文件数据包包括结束标志位,从组播组中接收目标文件数据包的步骤,包括:
[0084] 步骤402,当接收到目标文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历序号检查是否有缺失的数据块。
[0085] 步骤404,若有缺失的数据块,则通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示发送端通过TCP会话发送重传的数据包。
[0086] Agent将自身对应的标识加入到与控制命令对应的组播组中之后,Agent可以从组播组中接收目标文件数据包。具体的,目标文件数据包包括结束标志位,当Agent接收到目标文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历序号检查是否有缺失的数据块。若有缺失的数据块,则Agent通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示发送端通过TCP会话发送重传的数据包。即在Agent加入到组播组中后,发送端发送要传输的文件信息给加入到组播组中的Agent,文件信息包括文件路径、文件标识ID、文件MD5校验值,其中文件标识ID为整数,用于标识发送的文件数据包属于哪个文件。发送端可以向组播组中发送文件,以通过组播组中的Agent传输给对应的接收端,即目标设备。
[0087] 可以理解的是,本实施例中通过动态的IP组播组实现文件分发时,每次文件分发所针对的Agent可以不同,比如,第一次分发时将Agent1、Agent2和Agent3加入到组播组中,进而通过Agent1、Agent2和Agent3进行文件分发,第二次分发时将Agent1、Agent4和Agent5加入到组播组中,进而通过Agent1、Agent4和Agent5进行文件分发。相较于传统的使用linux系统脚本scp命令从源机器逐台向目标机器分发文件或并行向多台目标机器分发文件的方式,scp使用TCP协议,TCP协议只能点对点通信,而本实施中利用组播的方式,通过组播组中的Agent分发文件至目标设备,由于组播使用的UDP协议,可以实现一对多通信,效率更高,因而能够有效提升文件传输效率,降低了文件传输的时延。
[0088] 在一个实施例中,如图5A所示,提供了一种文件传输方法,以该方法应用于图1中的发送端为例进行说明,包括以下步骤:
[0089] 步骤502,通过预设端口发送控制命令至目标代理应用程序,控制命令携带目标代理应用程序的标识,控制命令用于指示与目标代理应用程序的标识对应的应用程序根据控制命令加入或退出组播组,目标代理应用程序用于提供文件复制功能。
[0090] 步骤504,当目标代理应用程序加入对应的组播组后,发送目标文件数据包到组播组对应的组播地址中,以指示组播组中的目标代理应用程序接收到目标文件数据包,并将目标文件数据包写入到目标代理应用程序所在的目标设备中。
[0091] 以应用于分布式系统两地三中心部署的场景中为例进行说明。其中,两地三中心部署指的是在两个地域,比如在上海和深圳这两个地方设置三个数据中心,某一地域A部署主备两个数据中心,可以实现数据中心的故障切换,另一地域B部署第三个数据中心(灾备数据中心),可以实现对地域A的异地容灾切换。每个数据中心部署有对应的交换机,各个交换机连接有至少一个Agent,而这些Agent都对应部署在主机(即接收端)上,Agent可以是主机上的线程,也可以是一个能够实现文件复制功能的软件,会部署到每一台机器上。本实施例中Agent的功能就是基于组播传输文件的功能实现的。当发送端(也称为源机器)需要将同一文件数据发送给多个接收端时,发送端可以借助多个Agent将文件数据发送至对应的接收端。
[0092] 具体的,以接收端与发送端处于同一地域(例如:都处于主数据中心)的情况为例进行说明。发送端(即源机器)通过预设端口发送控制命令至目标代理应用程序,控制命令携带目标代理应用程序的标识,控制命令用于指示与目标代理应用程序的标识对应的应用程序根据控制命令加入或退出组播组,目标代理应用程序用于提供文件复制功能。发送端等所有接收端的Agent都加入组播组就开始往组播地址发送数据包(数据包发送采用UDP的方式,因此不需要发送端与Agent建立连接),每个数据包可以包含文件ID、数据偏移、数据长度、校验值、结束标志位、文件数据等。Agent接收到数据包后先使用校验值校验收到的数据是否完整,例如,发送端可以根据预设校验规则,对数据块进行CRC(cyclic redundancy check)计算得到对应的第一校验值,接收端对收到数据也进行CRC计算,计算得到对应的第二校验值,将第二校验值与发送端传过来的第一校验值进行比较。其中,CRC即循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码。若第二校验值与第一校验值不相同,表示未通过校验,则Agent可以通过已建立的TCP会话向发送端请求重新发送对应的文件数据(也可以是重新发送数据包)。发送端可以通过TCP会话发送重传的文件数据。当Agent收到的数据包携带的结束标志位为结束时,检查前面所有的数据是否都有收到,即当Agent接收到的文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历序号检查是否有缺失的数据块。若有缺失的数据块,则通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示发送端通过TCP会话发送重传的数据包。若没有缺失的数据块,则表示已经接收到所有的数据,Agent可以根据数据包中携带的文件ID和数据偏移将所接收到的数据写入到Agent所在主机本地对应的文件位置。可以理解的是,本实施中通过动态的IP组播组实现文件分发,动态的IP组播组实际就是一个地址,需要接收文件分发的Agent就加入到这个组播组中。
[0093] 传统的文件传输方式中,源机器将文件数据发送给A目标机器之后,源机器再将文件数据发送给B目标机器;或者源机器通过并行的方式将文件数据分别发送给A目标机器和B目标机器,分发速度受限于源机器的出口带宽,导致文件传输的效率较低。而本实施例中,当发送端将一个文件分块发到组播地址时,Agent就能快速接收到文件的数据块,能充分利用网络基础设施的带宽,相同数据在网络上只需要传输一次,不需要源机器分多次地向目标机器分发文件,有效提升了文件传输效率,降低了文件传输的时延。
[0094] 在一个实施例中,通过预设端口发送控制命令至目标代理应用程序之前,该方法还包括建立TCP连接的步骤,具体包括:
[0095] 调用文件传输服务的程序通过预设端口与目标代理应用程序建立TCP连接,预设端口用于发送控制命令,TCP连接用于发送控制命令至目标代理应用程序。
[0096] 发送端通过预设端口发送控制命令至目标代理应用程序之前,发送端可以与目标Agent建立TCP连接。具体的,发送端可以调用文件传输服务的程序通过预设端口与目标代理应用程序即目标Agent建立TCP连接,预设端口用于发送控制命令,TCP连接用于发送控制命令至目标Agent。由此使得,发送端可以动态控制每次分发文件时加入组播组中的目标代理,通过动态的IP组播组实现文件分发,能够极大地缩短文件分发的时间。
[0097] 在一个实施例中,该方法还包括通过目标代理应用程序将目标文件数据包发送到对应的组播组中的步骤,具体包括:
[0098] 通过预设端口发送目标文件数据包至目标代理应用程序,目标代理应用程序为异地机房中选取的响应时间小于时间阈值的代理应用程序。
[0099] 通过目标代理应用程序将目标文件数据包发送到对应的组播组中,以指示组播组中的组播成员接收到目标文件数据包,组播组中的组播成员并将目标文件数据包传输至对应的目标设备;其中,组播成员是目标代理通过发送控制命令进行控制的,控制命令用于控制组播成员加入或者退出组播组。
[0100] 由于异地的机房通常组播是不通的,因而本实施中可以采用单播的方式先将文件复制到异地机房中。具体的,对于接收端与发送端不处于同一地域(例如:发送端处于主数据中心,接收端处于备数据中心或者灾备数据中心)的情况,即以接收端与发送端不处于同一地域的情况为例进行说明。在异地机房(备数据中心或者灾备数据中心)各选取其中一个(也可以为多个)Agent作为该异地机房的目标代理,一般选择响应时间最短的Agent作为目标代理。发送端先通过单播的方式将目标文件复制给目标代理,目标代理再使用组播进行下发,即通过目标代理将文件发送到对应的组播组中。组播成员可以通过另外建立的TCP通道发送消息进行控制,即组播成员(Agent)根据收到的控制消息进行加入或退出目标代理对应的组播组。
[0101] 如图5B所示,为发送端与Agent进行通信的流程示意图。以发送端将目标文件发送给灾备数据中心为例进行说明。假设灾备数据中心的目标代理为Agent_7。Agent_7调用文件传输服务的程序通过TCP协议来连接到灾备数据中心中的其他Agent(如Agent_8和Agent_9),通过已建立的TCP会话发送控制消息使得Agent_8和Agent_9加入组播组。即发送端与目标代理Agent_7建立TCP连接,发送端通过TCP会话将文件分块发给目标代理Agent_7,目标代理Agent_7再将文件块发到一个组播地址,使得的组播成员Agent_8和Agent_9接收到文件分块。可以理解的是,本实施例中的TCP会话是实现单播的一种方式,也可以采用其他方式。
[0102] 发送端等所有接收端的Agent都加入组播组(可以指发送端对应的组播组如Agent_1和Agent_2,与Agent_7对应的组播组可以不同)就开始往组播地址发送数据包,每个数据包包含文件ID、数据偏移、数据长度、校验值、结束标志位、文件数据等。Agent_7接收到数据包后先使用校验值对收到的数据包进行校验。若未通过校验,则Agent_7可以通过已建立的TCP会话向发送端请求重新发送对应的文件数据。发送端通过TCP会话发送重传的文件数据。当Agent_7收到的数据包结束标志位为结束时,Agent_7检查前面所有的数据是否都有收到,即当Agent_7接收到的文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历序号检查是否有缺失的数据块。若没有缺失的数据块,则表示已经接收到所有的数据,Agent_7可以通过对应的组播组将所接收到的数据发送至其他的Agent(如Agent_8和Agent_9),各个Agent(如Agent_8和Agent_9)根据文件ID和数据偏移将所接收到的数据写入到各组所在主机本地对应的文件位置。此外,在某些情况下,Agent_7也可以在接收到文件数据时就同步地通过组播组向其他Agent(如Agent_8和Agent_9)发送文件数据,而不用等所有的文件数据都传输完毕,由此使得,能够极大地缩短文件分发的时间,有效提升了文件传输效率,降低了文件传输的时延。
[0103] 应该理解的是,虽然图1‑5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1‑5中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0104] 在一个实施例中,如图6所示,提供了一种文件传输装置,包括:监听模块602、加入模块604和写入模块606,其中:
[0105] 监听模块602,用于监听预设端口,预设端口用于接收控制命令。
[0106] 加入模块604,用于若通过预设端口接收到加入组播组的控制命令,则将代理应用程序的标识加入到与控制命令对应的组播组中。
[0107] 写入模块606,用于从组播组中接收目标文件数据包,并将目标文件数据包写入到代理应用程序所在的目标设备中。
[0108] 在一个实施例中,该装置还包括:校验模块。
[0109] 校验模块用于对目标文件数据包进行校验。写入模块还用于若通过校验,则根据代理应用程序所在的目标设备的内存中存储的文件标识与文件路径的对应关系,查找与文件标识对应的文件路径,将目标文件数据包写入至目标设备本地对应的文件位置。
[0110] 在一个实施例中,该装置还包括:计算模块和比较模块。
[0111] 计算模块用于对目标文件数据包进行校验计算,得到对应的第二校验值。比较模块用于将第二校验值与第一校验值进行比较,若第二校验值与第一校验值相同,则表示通过校验;若第二校验值与第一校验值不相同,则表示未通过校验。
[0112] 在一个实施例中,该装置还包括:检查模块和发送模块。
[0113] 检查模块用于当接收到目标文件数据包的结束标志位为结束时,根据记录的已收到数据块的序号,遍历序号检查是否有缺失的数据块。发送模块用于若有缺失的数据块,则通过已建立的TCP会话向发送端发送请求重新发送对应的目标文件数据包,以指示发送端通过TCP会话发送重传的数据包。
[0114] 在一个实施例中,如图7所示,提供了一种文件传输装置,包括:发送模块702,其中:
[0115] 发送模块702,用于通过预设端口发送控制命令至目标代理应用程序,控制命令携带目标代理应用程序的标识,控制命令用于指示与目标代理应用程序的标识对应的应用程序根据控制命令加入或退出组播组,目标代理应用程序用于提供文件复制功能。
[0116] 发送模块702还用于当目标代理应用程序加入对应的组播组后,发送目标文件数据包到组播组对应的组播地址中,以指示组播组中的目标代理应用程序接收到目标文件数据包,并将目标文件数据包写入到目标代理应用程序所在的目标设备中。
[0117] 关于文件传输装置的具体限定可以参见上文中对于文件传输方法的限定,在此不再赘述。上述文件传输装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0118] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储文件传输数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种文件传输方法。
[0119] 本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0120] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各个方法实施例的步骤。
[0121] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
[0122] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0123] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。