文件数据分发方法、系统转让专利

申请号 : CN202110440682.8

文献号 : CN112860443B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 禹春雷张静华王义开伍邵峰李功训宿旭升邹胜

申请人 : 深圳华锐金融技术股份有限公司华锐分布式技术(长沙)有限公司

摘要 :

本申请涉及一种文件数据分发方法、系统。方法包括:发送端获取接收端列表,并确定接收端列表中与发送端距离最近的目标接收端;接收端列表中的接收端是按照与发送端之间的距离排列的;发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将发送端网络层缓冲区中的文件数据块发送至目标接收端,并存储于接收端内核缓冲区;目标接收端将文件数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接收端,直至各接收端均收到文件数据块。采用本方法能够提高文件数据分发的效率。

权利要求 :

1.一种文件数据分发方法,其特征在于,所述方法包括:发送端获取接收端列表,并确定所述接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中的接收端是按照与所述发送端之间的距离排列的;

所述发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端,并存储于接收端内核缓冲区;所述发送端内核缓冲区和所述发送端网络层缓冲区均位于所述发送端的内核空间;所述接收端内核缓冲区和接收端网络层缓冲区均位于所述目标接收端的内核空间;所述内核空间是操作系统内核运行的虚拟地址空间;

所述目标接收端将所述文件数据块从所述接收端内核缓冲区复制到接收端网络层缓冲区,将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端,直至各接收端均收到所述文件数据块。

2.根据权利要求1所述的方法,其特征在于,所述发送端获取接收端列表包括:当接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;

分别向所述排序前接收端列表中各接收端发送网络探测命令;

当接收到各接收端响应于所述网络探测命令返回的响应命令时,分别获取各所述接收端返回所述响应命令的响应时间;

根据所述响应时间对各所述接收端进行排序,得到所述接收端列表。

3.根据权利要求1所述的方法,其特征在于,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;

所述将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端包括:通过部署在所述发送端上的代理程序将所述发送端网络层缓冲区中的文件数据块发送至部署在所述目标接收端上的代理程序;

所述将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端包括:

通过部署在所述目标接收端上的代理程序将所述接收端网络层缓冲区中的文件数据块发送至与所述发送端距离次近的接收端上部署的代理程序。

4.根据权利要求1所述的方法,其特征在于,所述接收端列表中接收端部署于主数据中心;所述发送端获取接收端列表之后,所述方法还包括:当所述主数据中心发生故障时,所述发送端将所述接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;

当所述主数据中心与所述备数据中心均发生故障时,所述发送端将所述接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接。

5.根据权利要求1所述的方法,其特征在于,所述方法还包括:当所述接收端列表中的末尾接收端接收到全部文件数据块时,向前一接收端反馈接收成功信息;

对于所述接收端列表中除所述末尾接收端及所述目标接收端之外的接收端,当接收到所述接收端列表中的所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;

当所述目标接收端接收到所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至所述发送端。

6.根据权利要求1所述的方法,其特征在于,所述待发送的文件数据块为在存入所述内核缓冲区之前,对原始数据块进行压缩所得;所述对原始数据块进行压缩包括:针对每个所述原始数据块,发送端创建对应的数据块压缩任务,并将所述数据块压缩任务添加至任务处理队列;

所述发送端通过多个线程并发执行所述任务处理队列中的数据块压缩任务,以对所述原始数据块进行压缩。

7.一种文件数据分发系统,其特征在于,所述系统包括:发送端,用于获取接收端列表,并确定所述接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中的接收端是按照与所述发送端之间的距离排列的;

所述发送端,还用于将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端,并存储于接收端内核缓冲区;所述发送端内核缓冲区和所述发送端网络层缓冲区均位于所述发送端的内核空间;所述接收端内核缓冲区和接收端网络层缓冲区均位于所述目标接收端的内核空间;所述内核空间是操作系统内核运行的虚拟地址空间;

所述目标接收端,用于将所述文件数据块从所述接收端内核缓冲区复制到接收端网络层缓冲区,将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端,直至各接收端均收到所述文件数据块。

8.根据权利要求7所述的系统,其特征在于,所述发送端还用于:当接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;

分别向所述排序前接收端列表中各接收端发送网络探测命令;

当接收到各接收端响应于所述网络探测命令返回的响应命令时,分别获取各所述接收端返回所述响应命令的响应时间;

根据所述响应时间对各所述接收端进行排序,得到所述接收端列表。

9.根据权利要求7所述的系统,其特征在于,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;所述发送端还用于:通过部署在所述发送端上的代理程序将所述发送端网络层缓冲区中的文件数据块发送至部署在所述目标接收端上的代理程序;

所述将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端包括:

通过部署在所述目标接收端上的代理程序将所述接收端网络层缓冲区中的文件数据块发送至与所述发送端距离次近的接收端上部署的代理程序。

10.根据权利要求7所述的系统,其特征在于,所述接收端列表中接收端部署于主数据中心;所述系统还包括:

所述发送端,当所述主数据中心发生故障时,还用于将所述接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;

当所述主数据中心与所述备数据中心均发生故障时,还用于将所述接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接。

说明书 :

文件数据分发方法、系统

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种文件数据分发方法、系统。

背景技术

[0002] 随着计算机技术的发展,为了提高数据中心的安全性,通常在两个地域部署三个数据中心,例如,在地域A部署主数据中心和备数据中心,以实现数据中心级的故障切换;在
地域B部署灾备数据中心,以实现异地容灾切换。
[0003] 当需要从部署在主数据中心的发送端向多个部署在主数据中心或其他数据中心的接收端发送文件数据时,传统方法中,发送端使用linux脚本scp命令逐个向接收端分发
文件数据或并行的同时向多个接收端分发文件数据,分发文件数据的速度受限于发送端的
网络带宽,效率较低。并且发送端通过scp命令向接收端发送文件数据时,需要多次将文件
数据在用户空间和内核空间中来回复制,复制过程占用了较多的CPU资源,发送效率较低。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种能够提高数据分发效率的文件数据分发方法、系统。
[0005] 一种文件数据分发方法,所述方法包括:
[0006] 发送端获取接收端列表,并确定所述接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中的接收端是按照与所述发送端之间的距离排列的;
[0007] 所述发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端,并存储于接收
端内核缓冲区;
[0008] 所述目标接收端将所述文件数据块从所述接收端内核缓冲区复制到接收端网络层缓冲区,将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发
送端距离次近的接收端,直至各接收端均收到所述文件数据块。
[0009] 在一个实施例中,所述发送端获取接收端列表包括:
[0010] 当接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;
[0011] 分别向所述排序前接收端列表中各接收端发送网络探测命令;
[0012] 当接收到各接收端响应于所述网络探测命令返回的响应命令时,分别获取各所述接收端返回所述响应命令的响应时间;
[0013] 根据所述响应时间对各所述接收端进行排序,得到所述接收端列表。
[0014] 在一个实施例中,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;
[0015] 所述将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端包括:
[0016] 通过部署在所述发送端上的代理程序将所述发送端网络层缓冲区中的文件数据块发送至部署在所述目标接收端上的代理程序;
[0017] 所述将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端包括:
[0018] 通过部署在所述目标接收端上的代理程序将所述接收端网络层缓冲区中的文件数据块发送至与所述发送端距离次近的接收端上部署的代理程序。
[0019] 在一个实施例中,所述接收端列表中接收端部署于主数据中心;所述发送端获取接收端列表之后,所述方法还包括:
[0020] 当所述主数据中心发生故障时,所述发送端将所述接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;
[0021] 当所述主数据中心与所述备数据中心均发生故障时,所述发送端将所述接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建
立网络连接;
[0022] 在一个实施例中,所述方法还包括:
[0023] 当所述接收端列表中的末尾接收端接收到全部文件数据块时,向前一接收端反馈接收成功信息;
[0024] 对于所述接收端列表中除所述末尾接收端及所述目标接收端之外的接收端,当接收到所述接收端列表中的所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈
的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;
[0025] 当所述目标接收端接收到所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至所述发送端。
[0026] 在一个实施例中,所述待发送的文件数据块为在存入所述内核缓冲区之前,对原始数据块进行压缩所得;所述对原始数据块进行压缩包括:
[0027] 针对每个所述原始数据块,发送端创建对应的数据块压缩任务,并将所述数据块压缩任务添加至任务处理队列;
[0028] 所述发送端通过多个线程并发执行所述任务处理队列中的数据块压缩任务,以对所述原始数据块进行压缩。
[0029] 一种文件数据分发系统,所述系统包括:
[0030] 发送端,用于获取接收端列表,并确定所述接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中的接收端是按照与所述发送端之间的距离排列的;
[0031] 所述发送端,还用于将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将所述发送端网络层缓冲区中的文件数据块发送至所述目标接收端,并存储
于接收端内核缓冲区;
[0032] 所述目标接收端,用于将所述文件数据块从所述接收端内核缓冲区复制到接收端网络层缓冲区,将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所
述发送端距离次近的接收端,直至各接收端均收到所述文件数据块。
[0033] 在一个实施例中,所述发送端还用于:
[0034] 当接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;
[0035] 分别向所述排序前接收端列表中各接收端发送网络探测命令;
[0036] 当接收到各接收端响应于所述网络探测命令返回的响应命令时,分别获取各所述接收端返回所述响应命令的响应时间;
[0037] 根据所述响应时间对各所述接收端进行排序,得到所述接收端列表。
[0038] 在一个实施例中,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;
[0039] 所述发送端,还用于:
[0040] 通过部署在所述发送端上的代理程序将所述发送端网络层缓冲区中的文件数据块发送至部署在所述目标接收端上的代理程序;
[0041] 所述将所述接收端网络层缓冲区中的文件数据块发送至所述接收端列表中与所述发送端距离次近的接收端包括:
[0042] 通过部署在所述目标接收端上的代理程序将所述接收端网络层缓冲区中的文件数据块发送至与所述发送端距离次近的接收端上部署的代理程序。
[0043] 在一个实施例中,所述系统还包括:
[0044] 所述发送端,当所述主数据中心发生故障时,还用于将所述接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;
[0045] 当所述主数据中心与所述备数据中心均发生故障时,还用于将所述接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建立网
络连接;
[0046] 在一个实施例中,所述系统还包括:与所述发送端距离最远的末尾接收端以及除所述末尾接收端和所述目标接收端之外的中间接收端;
[0047] 所述末尾接收端,当接收到全部文件数据块时,用于向前一接收端反馈接收成功信息;
[0048] 所述中间接收端,当接收到所述接收端列表中的所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送
至前一接收端;
[0049] 所述目标接收端,当接收到所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至所述发送端。
[0050] 在一个实施例中,所述待发送的文件数据块为在存入所述内核缓冲区之前,对原始数据块进行压缩所得;所述发送端,还用于:
[0051] 针对每个所述原始数据块,发送端创建对应的数据块压缩任务,并将所述数据块压缩任务添加至任务处理队列;
[0052] 所述发送端通过多个线程并发执行所述任务处理队列中的数据块压缩任务,以对所述原始数据块进行压缩。
[0053] 上述实施例中,发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,并将发送端网络层缓冲区中的文件数据块发送至距离发送端最近的目标接
收端,并存储于目标接收端中的接收端内核缓冲区。目标接收端将文件数据块从接收端内
核缓冲区复制到接收端网络层缓冲区,并将接收端网络层缓冲区中的文件数据块发送至接
收端列表中与发送端距离次近的接收端,直至各接收端均收到文件数据块。基于网络连接
的全双工特性,各个接收端在接收文件数据块时,可以同时向相邻的后一接收端发送已经
收到的文件数据块,不需要依赖于发送端逐个向所有的接收端分发文件数据块,节省了文
件分发的时间。并且由于发送端内核缓冲区、发送端网络层缓冲区、接收端内核缓冲区、接
收端网络层缓冲区均存在于内核空间,发送端和各接收端在发送文件数据块时,不需要将
文件数据块在内核空间和用户空间之间来回复制,降低了CPU的资源使用率,进一步提升了
文件数据的分发效率。

附图说明

[0054] 图1为一个实施例中文件数据分发方法的应用环境图;
[0055] 图2为一个实施例中文件数据分发方法的流程示意图;
[0056] 图3为一个实施例中文件数据分发方法的原理示意图;
[0057] 图4为一个实施例中发送端获取接收端列表方法的流程示意图;
[0058] 图5为一个实施例中分布式系统中文件数据分发方法的示意图;
[0059] 图6为一个实施例中代理程序向发送端反馈接收成功信息的示意图;
[0060] 图7为一个实施例中文件数据分发系统的结构框图;
[0061] 图8为另一个实施例中文件数据分发系统的结构框图。

具体实施方式

[0062] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不
用于限定本申请。
[0063] 本申请提供的文件数据分发方法,可以应用于如图1所示的应用环境中。其中,发送端102通过网络与距离最近的目标接收端104进行通信,目标接收端104可以和与发送端
距离次近的接收端106进行通信。发送端102获取接收端列表,并确定接收端列表中与发送
端102距离最近的目标接收端104;接收端列表中的接收端是按照与发送端之间的距离排列
的;发送端102将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将
发送端网络层缓冲区中的文件数据块发送至目标接收端104,并存储于接收端内核缓冲区;
目标接收端104将文件数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端
网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接收端106,发送
端与各接收端按照链式传递的方式依次转发各文件数据块,直至各接收端均收到全部文件
数据块。其中,发送端102以及目标接收端104、与发送端距离次近的接收端106为计算机设
备,计算机设备可以是终端,也可以是服务器,终端可以但不限于是各种个人计算机、笔记
本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个
服务器组成的服务器集群来实现。
[0064] 在一个实施例中,如图2所示,提供了一种文件数据分发方法,以该方法应用于图1中的发送端和各接收端为例进行说明,包括以下步骤:
[0065] S202,发送端获取接收端列表,并确定接收端列表中与发送端距离最近的目标接收端;接收端列表中的接收端是按照与发送端之间的距离排列的。
[0066] 其中,接收端列表中包括多个接收端以及各接收端对应的网络地址,网络地址可以是IP地址。接收端列表中的接收端是按照与发送端之间的距离排列的。其中,目标接收端
可以与发送端处于同一地域,也可以与发送端处于不同的地域。
[0067] 在一个实施例中,发送端向各个接收端发送网络探测命令,根据各个接收端对网络探测命令的响应时间确定发送端与各个接收端之间的距离。在另一个实施例中,发送端
根据部署发送端和接收端时记录的信息确定发送端与各个接收端之间的距离。记录的信息
包括发送端与接收端所连接的交换机,所处的机房以及所处的地域。与发送端距离最近的
接收端是与发送端连接在同一交换机上的接收端,距离发送端次近的接收端与发送端处于
同一机房,但未与发送端连接在同一交换机上,再次是与发送端处于同一地域,但未与发送
端处于同一机房的接收端,距离发送端最远的接收端是与发送端处于不同地域的接收端。
[0068] 在一个实施例中,客户端向发送端发送数据分发请求,数据分发请求中包括各个接收端的网络地址,发送端根据各个接收端的网络地址生成接收端列表,接收端列表中包
括各个接收端的编号及网络地址。
[0069] S204,发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将发送端网络层缓冲区中的文件数据块发送至目标接收端,并存储于接收端内核缓
冲区。
[0070] 其中,待发送的文件数据块是对文件数据进行分块后得到的多个数据块。文件数据例如可以是应用程序的安装文件或者是多媒体数据等需分发至各个接收端的文件。在一
个实施例中,发送端的应用程序生成文件数据块后,将文件数据块存入用户空间,操作系统
从用户空间读取文件数据块并存入发送端内核缓冲区。用户空间是用户的应用程序运行的
虚拟地址空间。
[0071] 其中,发送端内核缓冲区是位于发送端的内核空间中的缓冲区。接收端内核缓冲区是位于接收端的内核空间中的缓冲区。内核空间是操作系统内核运行的虚拟地址空间。
当进程运行在内核空间时处于内核态,当进程运行于用户空间时则处于用户态。操作系统
的核心是内核,可以访问受保护的内存空间,也可以访问底层硬件设备。为了保证内核的安
全,操作系统一般都强制用户进程不能直接操作内核,所以操作系统将虚拟地址空间划分
内核空间与用户空间。例如,对于32 位操作系统,寻址空间(虚拟地址空间)为 4G,也就是
说运行在该操作系统上的进程的最大地址空间为 4G。最高的 1G 字节(从虚拟地址 
0xC0000000 到 0xFFFFFFF)由内核使用,称为内核空间,而较低的 3G 字节(从虚拟地址 
0x00000000 到 0xBFFFFFFF)由各个用户进程使用,称为用户空间。在一个实施例中,目标
接收端在收到文件数据块时,将文件数据块存入内核缓冲区中的内核映射文件中。
[0072] 其中,发送端网络层缓冲区是发送端内核空间中的数据缓存区,发送端将文件数据块存入网络层缓冲区,并按照网络协议对存入的文件数据块进行封装,在封装后发送至
接收端,网络协议例如可以是TCP协议、UDP协议或者自定义协议。
[0073] S206,目标接收端将文件数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接收
端,直至各接收端均收到文件数据块。
[0074] 其中,接收端网络层缓冲区是目标接收端内核空间中的数据缓存区,目标接收端将文件数据块存入网络层缓冲区,并按照网络协议对存入的文件数据块进行封装,在封装
后发送至其他接收端,网络协议例如可以是TCP协议、UDP协议或者自定义协议。基于网络的
全双工特性,目标接收端在接收文件数据块时,可以同时向其他接收端发送已经收到的文
件数据块。目标接收端将文件数据块从接收端内核缓冲区复制到接收端网络层缓冲区,然
后将接收端网络层缓冲区中的文件数据块发送至与发送端距离次近的接收端。所以,发送
端与各接收端组成了链式的数据传输通路,按照链式的方式将文件数据块从发送端传送至
各个接收端。
[0075] 在一个实施例中,如图3所示,发送端将文件数据分为多个文件数据块,然后依次向接收端1发送各个文件数据块。发送端首先将文件数据块1从内核缓冲区复制到网络层缓
冲区,在网络层缓冲区中按照对应的网络协议对文件数据块进行封装,然后将封装后的文
件数据块1发送至接收端1,并存入接收端1的网络层缓冲区。然后接收端1将网络层缓冲区
中的文件数据块复制到内核缓冲区中的内存映射文件。发送端在向接收端1发送文件数据
块1之后,继续向接收端1发送文件数据块2,接收端1在接收文件数据块2的同时,基于网络
的全双工特性,向接收端2发送文件数据块1。接收端1先将文件数据块1从内存映射文件复
制到网络层缓冲区,然后将网络层缓冲区中的文件数据块1发送至接收端2并存入接收端2
的网络层缓冲区。然后,接收端1再向接收端2发送文件数据块2,接收端2在接受文件数据块
2的同时,向接收端3发送文件数据块1,直至所有的接收端都收到所有的文件数据块。
[0076] 如图3所示的文件数据分发方法,充分利用了网络连接的全双工特性,发送端到接收端1间的数据传输与接收端1和接收端2间的数据传输占用的网络带宽是独立的。所以,发
送端将文件数据块分发至所有的接收端所用的时间为发送端将文件数据块发送给接收端1
所用的时间+最后一个文件数据块从接收端1传输至最后一个接收端的时间。因此分发时间
为:(文件大小/发送端带宽)+(接收端数量‑1)*(文件数据块的大小/接收端带宽)。由于传
输一个文件数据块的时间远远小于传输整个文件的时间,并且,发送端只需要将文件数据
块发送至接收端1,而不需要通过发送端将文件数据块分发至所有的接收端,文件分发速度
受发送端带宽的影响较小,极大的降低了文件数据分发所用的时间。
[0077] 上述实施例中,发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,并将发送端网络层缓冲区中的文件数据块发送至距离发送端最近的目标接
收端,并存储于目标接收端中的接收端内核缓冲区。目标接收端将文件数据块从接收端内
核缓冲区复制到接收端网络层缓冲区,并将接收端网络层缓冲区中的文件数据块发送至接
收端列表中与发送端距离次近的接收端,直至各接收端均收到文件数据块。基于网络连接
的全双工特性,各个接收端在接收文件数据块时,可以同时向相邻的后一接收端发送已经
收到的文件数据块,不需要依赖于发送端逐个向所有的接收端分发文件数据块,节省了文
件分发的时间。并且由于发送端内核缓冲区、发送端网络层缓冲区、接收端内核缓冲区、接
收端网络层缓冲区均存在于内核空间,发送端和各接收端在发送文件数据块时,不需要将
文件数据块在内核空间和用户空间之间来回复制,降低了CPU的资源使用率,进一步提升了
文件数据的分发效率。
[0078] 在一个实施例中,发送端通过DMA(Direct Memory Access,直接存储器访问)对文件数据块进行读写操作,将文件数据块在发送端内核缓冲区和发送端网络层缓冲区间进行
复制,以节省CPU资源。各接收端同样通过DMA对文件数据进行读写操作,通过DMA将文件数
据块在接收端内核缓冲区和接收端网络层缓冲区间进行复制。
[0079] 在一个实施例中,如图4所示,发送端获取接收端列表包括如下步骤:
[0080] S402,当接收到数据分发请求时,从数据分发请求中提取排序前接收端列表;
[0081] S404,分别向排序前接收端列表中各接收端发送网络探测命令;
[0082] S406,当接收到各接收端响应于网络探测命令返回的响应命令时,分别获取各接收端返回响应命令的响应时间;
[0083] S408,根据响应时间对各接收端进行排序,得到接收端列表。
[0084] 其中,数据分发请求是请求发送端向多个接收端分发文件数据的请求指令。数据分发请求中可以包括源文件路径、目标文件路径和排序前接收端列表。排序前接收端列表
中可以包括各个接收端的编号和网络地址。在一个实施例中,客户端向发送端发送数据分
发请求,发送端在接收到数据分发请求时,从数据分发请求中提取源文件路径,并根据源文
件路径获取待发送的文件数据。
[0085] 其中,网络探测命令是 TCP/IP网络体系结构中应用层的服务命令,用于向目的主机发送 ICMP(Internet Control Message Protocol ,因特网报文控制协议) 请求报文,
以测试目的主机是否可达并了解其有关状态。例如,网络探测命令可以是PING命令。
[0086] 当接收端返回响应命令的响应时间距离发送端发送网络探测命令的时间间隔越长时,说明接收端与发送端间的距离越远。发送端根据响应时间对各接收端进行排序,也就
是按照接收端与发送端间的距离对接收端进行排序。在一个实施例中,发送端按照与其距
离的远近,从近到远对接收端进行排序, 得到接收端列表。
[0087] 上述实施例中,发送端对接收端进行排序,可以根据接收端列表先将文件数据块发送至距离最近的接收端,并且可以使各接收端根据接收端列表中接收端的排列顺序向相
邻的下一接收端转发文件数据块。由于各接收端是按照与发送端间的距离依次转发文件数
据块,节省了网络资源,提高了数据分发效率。
[0088] 在一个实施例中,接收端列表中的接收端处于多个不同的地域,发送端按照各个接收端所处的地域对接收端进行分组,将处于同一地域的接收端划分为一组,然后并行的
向各组中的接收端发送文件数据块。
[0089] 在一个实施例中,发送端与接收端列表中各接收端上均部署了对应的代理程序;将发送端网络层缓冲区中的文件数据块发送至目标接收端包括:通过部署在发送端上的代
理程序将发送端网络层缓冲区中的文件数据块发送至部署在目标接收端上的代理程序;将
接收端网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接收端包
括:通过部署在目标接收端上的代理程序将接收端网络层缓冲区中的文件数据块发送至与
发送端距离次近的接收端上部署的代理程序。
[0090] 其中,代理程序是安装在发送端或者接收端上的软件程序,用于接收数据、发送数据等。发送端或者各接收端上部署的代理程序可以与交换机建立网络连接,当监听到其他
代理程序的连接请求时,与发送连接请求的代理程序建立网络连接。
[0091] 在一个实施例中,如图5所示文件数据分发方法,对于分布式系统,分别部署了主数据中心、备数据中心和灾备数据中心,每个数据中心部署至少一个交换机,发送端与接收
端连接在交换机上。发送端和客户端部署于主数据中心,接收端分别部署在各数据中心,且
各接收端上部署了对应的代理程序。代理程序1‑4是安装在主数据中心的接收端1‑4上的应
用程序,代理程序5‑6是安装在备数据中心的接收端5‑6上的应用程序,代理程序7‑9是安装
在备数据中心的接收端7‑9上的应用程序。各代理程序监听其他代理程序的连接请求。当发
送端接收到客户端的数据分发请求时,从数据分发请求中提取接收端列表,接收端列表中
具有接收端1‑9的IP地址。然后发送端按照与接收端列表中各接收端的距离,按照从近到远
的顺序对接收端列表中的接收端进行排序,得到排序后接收端列表。发送端对应的代理程
序首先根据排序后接收端列表中排在首位的接收端1的IP地址向代理程序1发送连接请求,
代理程序1响应于发送端对应的代理程序的连接请求,与发送端对应的代理程序建立TCP网
络连接,然后发送端将排序后的接收端列表发送至代理程序1。代理程序1接收到排序后的
接收端列表时,查找排在其后的接收端2的IP地址,根据接收端2的IP地址,向代理程序2发
送连接请求,并在与代理程序2建立TCP网络连接后,将排序后的接收端列表发送至代理程
序2,依次类推,直至在排序后的接收端列表中相邻接收端对应的代理程序间均建立网络连
接,并且所有的代理程序均收到排序后的接收端列表。
[0092] 发送端通过部署在其上的代理程序将发送端网络层缓冲区中的文件数据块发送至部署在目标接收端上的代理程序。在一个实施例中,发送端通过调用sendfile函数将文
件数据块发送至代理程序1。目标接收端上的代理程序在接收到文件数据块时,通过调用
sendfile函数将文件数据块转发至相邻的下一接收端,直至所有接收端均收到文件数据
块。
[0093] 上述实施例中,发送端和各接收端,通过对应的代理程序向接收端发送文件数据块,不需要将文件数据块在用户空间和内核空间来回复制即可实现文件数据块的发送,提
高了文件数据分发的效率。
[0094] 在一个实施例中,接收端列表中接收端部署于主数据中心;发送端获取接收端列表之后,方法还包括:当主数据中心发生故障时,发送端将接收端列表中接收端替换为部署
于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;当主数据中
心与备数据中心均发生故障时,发送端将接收端列表中接收端替换为部署于灾备数据中心
的接收端,并与替换后的接收端列表中各接收端建立网络连接。
[0095] 其中,主数据中心和备数据中心处于同一地域,和灾备数据中心处于不同的地域。当主数据中心发生故障时,启用备数据中心中的接收端,发送端将接收端列表中部署于主
数据中心的接收端替换为部署于备数据中心的接收端。当备数据中心也发生故障时,启用
灾备数据中心,发送端将接收端列表中部署于主数据中心和备数据中心的接收端替换为部
署于灾备数据中心的接收端。
[0096] 上述实施例中,对于分布式系统,通过在两个地域部署三个数据中心,可以在主数据中心发生故障时,启用备数据中心或者在主数据中心和备数据中心都发生故障时启用灾
备数据中心,对发生故障的接收端进行替换,充分保证了分布式系统的正常运行。
[0097] 在一个实施例中,当接收端列表中的末尾接收端接收到全部文件数据块时,向前一接收端反馈接收成功信息;对于接收端列表中除末尾接收端及目标接收端之外的接收
端,当接收到接收端列表中的所有后继接收端反馈的接收成功信息时,将所有后继接收端
反馈的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;当目标接收端接
收到所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自
身产生的接收成功信息一起发送至发送端。
[0098] 如图6所示,接收端列表中包括接收端1‑5,代理程序1‑5分别部署在接收端1‑5上,当接收端5收到全部的文件数据块时,代理程序5向代理程序4反馈接收成功信息。当接收端
4收到全部的文件数据块时,将自身生成的接收成功信息与代理程序5反馈的接收成功信息
进行合并,合并后发送至代理程序3,依此类推,直至将代理程序1‑5反馈的接收成功信息均
发送至发送端。
[0099] 上述实施例中,各个代理程序在接收到全部的文件数据块时,向前一相连的代理程序反馈接收成功信息,并最终将所有代理程序产生的接收成功信息反馈至发送端,以使
发送端获知各接收端是否接收到完整的文件数据块,并在接收端未接收到完整的文件数据
块时,向该接收端重新发送文件数据块,保证了文件数据块的可靠传输。
[0100] 在一个实施例中,待发送的文件数据块为在存入内核缓冲区之前,对原始数据块进行压缩所得;对原始数据块进行压缩包括:针对每个原始数据块,发送端创建对应的数据
块压缩任务,并将数据块压缩任务添加至任务处理队列;发送端通过多个线程并发执行任
务处理队列中的数据块压缩任务,以对原始数据块进行压缩。
[0101] 其中,数据块压缩任务是封装了数据和压缩方法的数据对象。任务处理队列是存储数据块压缩任务的多线程任务队列。发送端的应用程序获取原始数据块后,将原始数据
块存入用户空间,然后,针对每个原始数据块,创建对应的数据块压缩任务。发送端通过多
个线程从任务处理队列中提取数据块压缩任务并执行,以对数据块压缩任务对应的原始数
据块进行压缩,得到压缩后的文件数据块。
[0102] 上述实施例中,发送端的应用程序在获取原始数据块后,对原始数据块进行压缩,并在压缩后存入内核缓冲区,然后再进行发送。原始数据块经过压缩,降低了数据量,提高
了发送效率。
[0103] 在一个实施例中,文件数据分发方法包括:客户端向发送端发送数据分发请求,发送端接收到数据分发请求时,从数据分发请求中提取源文件路径、目标文件路径和接收端
列表。发送端根据与接收端列表中各接收端间的距离,按照从近到远的顺序对接收端列表
中各接收端对应的IP地址进行排序,得到目标IP列表。部署在发送端上的代理程序根据目
标IP列表中首个接收端的IP地址与其对应的代理程序建立网络连接,并将目标IP列表发送
至首个接收端。首个接收端对应的代理程序根据目标IP列表中第二个接收端的IP地址与第
二个接收端对应的代理程序建立网络连接,并将目标IP列表发送至第二个接收端对应的代
理程序,依次类推,直至目标IP列表中所有相邻接收端对应的代理程序间均建立网络连接。
[0104] 发送端根据源文件路径获取待发送的文件数据块,并将文件数据块存入内核缓冲区,然后通过对应的代理程序将内核缓冲区中的文件数据块复制到网络层缓冲区,再通过
对应的代理程序将网络层缓冲区中的文件数据块发送至首个接收端。首个接收端通过对应
的代理程序接收文件数据块,并将接收的文件数据块存入网络层缓冲区,然后将网络层缓
冲区中的文件数据块复制到内存映射文件中。首个接收端继续从发送端接收文件数据块,
并同时向第二个接收端发送已经收到的文件数据块。按照与发送端同样的方法,首个接收
端通过对应的代理程序将文件数据块发送至第二个接收端对应的代理程序,依次类推,直
至所有接收端均受到文件数据块。
[0105] 应该理解的是,虽然图2、4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤
的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、4中的至少一
部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行
完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而
是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0106] 在一个实施例中,如图7所示,提供了一种文件数据分发系统,包括:发送端702和目标接收端704,其中:
[0107] 发送端702,用于获取接收端列表,并确定接收端列表中与发送端距离最近的目标接收端;接收端列表中的接收端是按照与发送端之间的距离排列的;
[0108] 发送端702,还用于将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,将发送端网络层缓冲区中的文件数据块发送至目标接收端,并存储于接收端
内核缓冲区;
[0109] 目标接收端704,用于将文件数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接
收端,直至各接收端均收到文件数据块。
[0110] 上述实施例中,发送端将待发送的文件数据块从发送端内核缓冲区复制到发送端网络层缓冲区,并将发送端网络层缓冲区中的文件数据块发送至距离发送端最近的目标接
收端,并存储于目标接收端中的接收端内核缓冲区。目标接收端将文件数据块从接收端内
核缓冲区复制到接收端网络层缓冲区,并将接收端网络层缓冲区中的文件数据块发送至接
收端列表中与发送端距离次近的接收端,直至各接收端均收到文件数据块。基于网络连接
的全双工特性,各个接收端在接收文件数据块时,可以同时向相邻的后一接收端发送已经
收到的文件数据块,不需要依赖于发送端逐个向所有的接收端分发文件数据块,节省了文
件分发的时间。并且由于发送端内核缓冲区、发送端网络层缓冲区、接收端内核缓冲区、接
收端网络层缓冲区均存在于内核空间,发送端和各接收端在发送文件数据块时,不需要将
文件数据块在内核空间和用户空间之间来回复制,降低了CPU的资源使用率,进一步提升了
文件数据的分发效率。
[0111] 在一个实施例中,发送端702还用于:
[0112] 当接收到数据分发请求时,从数据分发请求中提取排序前接收端列表;
[0113] 分别向排序前接收端列表中各接收端发送网络探测命令;
[0114] 当接收到各接收端响应于网络探测命令返回的响应命令时,分别获取各接收端返回响应命令的响应时间;
[0115] 根据响应时间对各接收端进行排序,得到接收端列表。
[0116] 在一个实施例中,发送端与接收端列表中各接收端上均部署了对应的代理程序;发送端702,还用于:
[0117] 通过部署在发送端上的代理程序将发送端网络层缓冲区中的文件数据块发送至部署在目标接收端上的代理程序;
[0118] 将接收端网络层缓冲区中的文件数据块发送至接收端列表中与发送端距离次近的接收端包括:
[0119] 通过部署在目标接收端上的代理程序将接收端网络层缓冲区中的文件数据块发送至与发送端距离次近的接收端上部署的代理程序。
[0120] 在一个实施例中,系统还包括:
[0121] 发送端702,当主数据中心发生故障时,还用于将接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;
[0122] 当主数据中心与备数据中心均发生故障时,还用于将接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;
[0123] 在一个实施例中,如图8所示,系统还包括:与发送端距离最远的末尾接收端706以及除末尾接收端和目标接收端之外的中间接收端708;
[0124] 末尾接收端706,当接收到全部文件数据块时,用于向前一接收端反馈接收成功信息;
[0125] 中间接收端708,当接收到接收端列表中的所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至前
一接收端;
[0126] 目标接收端704,当接收到所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至发送端。
[0127] 在一个实施例中,待发送的文件数据块为在存入内核缓冲区之前,对原始数据块进行压缩所得;发送端702,还用于:
[0128] 针对每个原始数据块,发送端创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列;
[0129] 发送端通过多个线程并发执行任务处理队列中的数据块压缩任务,以对原始数据块进行压缩。
[0130] 关于文件数据分发系统的具体限定可以参见上文中对于文件数据分发方法的限定,在此不再赘述。上述文件数据分发系统中的各个模块可全部或部分通过软件、硬件及其
组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以
以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的
操作。
[0131] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机
可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,
本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可
包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑
Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器
(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种
形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存
储器(Dynamic Random Access Memory,DRAM)等。
[0132] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛
盾,都应当认为是本说明书记载的范围。
[0133] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来
说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护
范围。因此,本申请专利的保护范围应以所附权利要求为准。