数据发送方法、系统与流程

文档序号:25537222发布日期:2021-06-18 20:31阅读:45来源:国知局
数据发送方法、系统与流程

本申请涉及计算机技术领域,特别是涉及一种数据发送方法、系统。



背景技术:

随着计算机技术的发展,对于分布式系统,常常需要将文件从系统中的发送端发送至多个系统中的接收端,为了降低发送的数据量,发送端通常将文件数据压缩后再进行发送。传统方法中,发送端对较大的文件数据进行压缩时,压缩时间较长,并且发送端在压缩完成后,依次将压缩文件发送至每个接收端,发送至接收端的速度受限于发送端的网络带宽,发送文件时,占用了较长时间。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够缩短发送时间的数据发送方法、系统。

一种数据发送方法,所述方法包括:

发送端获取待发送的文件数据,并对所述文件数据进行分块,得到至少一个文件数据块;

所述发送端针对每个所述文件数据块,创建对应的数据块压缩任务,并将所述数据块压缩任务添加至任务处理队列;

所述发送端通过多个线程并发执行所述任务处理队列中的数据块压缩任务,得到对应的压缩数据块,并将所述压缩数据块发送至接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中包括多个按照与所述发送端间的距离排列的接收端;

所述目标接收端将所述压缩数据块转发至所述接收端列表中与所述发送端距离次近的接收端,直至各接收端均收到所述压缩数据块。

在一个实施例中,所述方法还包括:

当所述目标接收端接收到所述压缩数据块时,通过解压缩线程池中的线程对各所述压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件。

在一个实施例中,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;所述得到对应的压缩数据块之后,所述方法还包括:

所述发送端将所述压缩数据块存入环形队列;

所述将所述压缩数据块发送至接收端列表中与所述发送端距离最近的目标接收端包括:

所述发送端通过线程从所述环形队列中依次提取各所述压缩数据块,并通过部署在所述发送端上的代理程序将所提取的压缩数据块发送至部署在所述目标接收端上的代理程序;

所述目标接收端将所述压缩数据块转发至所述接收端列表中与所述发送端距离次近的接收端包括:

通过部署在所述目标接收端上的代理程序将所述压缩数据块转发至与所述发送端距离次近的接收端上部署的代理程序。

在一个实施例中,所述将所述压缩数据块发送至接收端列表中与所述发送端距离最近的目标接收端包括:

所述发送端将所述压缩数据块存入发送端内核缓冲区,并从发送端内核缓冲区复制到发送端网络层缓冲区;

所述发送端将所述发送端网络层缓冲区中的压缩数据块发送至所述目标接收端,并存储于接收端内核缓冲区;

所述目标接收端将所述压缩数据块转发至所述接收端列表中与所述发送端距离次近的接收端包括:

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

在一个实施例中,所述方法还包括:

当发送端接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;

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

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

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

在一个实施例中,所述方法还包括:

当所述接收端列表中的末尾接收端接收到全部压缩数据块时,向前一接收端反馈接收成功信息;

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

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

一种数据发送系统,所述系统包括:

发送端,用于获取待发送的文件数据,并对所述文件数据进行分块,得到至少一个文件数据块;

所述发送端,还用于针对每个所述文件数据块,创建对应的数据块压缩任务,并将所述数据块压缩任务添加至任务处理队列;

所述发送端还用于,通过多个线程并发执行所述任务处理队列中的数据块压缩任务,得到对应的压缩数据块,并将所述压缩数据块发送至接收端列表中与所述发送端距离最近的目标接收端;所述接收端列表中包括多个按照与所述发送端间的距离排列的接收端;

所述目标接收端,用于将所述压缩数据块转发至所述接收端列表中与所述发送端距离次近的接收端,直至各接收端均收到所述压缩数据块。

在一个实施例中,所述系统还包括:

所述目标接收端,当接收到所述压缩数据块时,还用于通过解压缩线程池中的线程对各所述压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件。

在一个实施例中,所述发送端与所述接收端列表中各接收端上均部署了对应的代理程序;所述系统还包括:

所述发送端,还用于将所述压缩数据块存入环形队列;

所述发送端,还用于通过线程从所述环形队列中依次提取各所述压缩数据块,并通过部署在所述发送端上的代理程序将所提取的压缩数据块发送至部署在所述目标接收端上的代理程序;

所述目标接收端,还用于通过部署在所述目标接收端上的代理程序将所述压缩数据块转发至与所述发送端距离次近的接收端上部署的代理程序。

在一个实施例中,所述系统还包括:

所述发送端,还用于将所述压缩数据块存入发送端内核缓冲区,并从发送端内核缓冲区复制到发送端网络层缓冲区;

所述发送端,还用于将所述发送端网络层缓冲区中的压缩数据块发送至所述目标接收端,并存储于接收端内核缓冲区;

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

在一个实施例中,所述发送端还用于:

当接收到数据分发请求时,从所述数据分发请求中提取排序前接收端列表;

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

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

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

在一个实施例中,所述系统还包括:与所述发送端距离最远的末尾接收端以及除所述末尾接收端和所述目标接收端之外的中间接收端;

所述末尾接收端,当接收到全部压缩数据块时,用于向前一接收端反馈接收成功信息;

所述中间接收端,当接收到所述接收端列表中的所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;

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

上述实施例中,发送端获取待发送的文件数据,并将文件数据分成多个文件数据块,然后针对每个文件数据块,创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列。发送端通过多个线程并发执行任务处理队列中的数据块压缩任务以对文件数据块进行压缩。发送端通过多线程压缩的方式对文件数据块进行压缩,缩短了压缩时间。并且发送端仅将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端,然后由目标接收端将压缩数据块转发至接收端列表中与发送端距离次近的接收端,再依次进行转发,直至各接收端均收到压缩数据块。所以,基于网络全双工特性,接收端列表中的各个接收端在接收压缩数据块的同时,可以向其他接收端发送压缩数据块,减少了压缩数据块从发送端传递至各个接收端所需的时间,提高了数据发送的效率。

附图说明

图1为一个实施例中数据发送方法的应用环境图;

图2为一个实施例中数据发送方法的流程示意图;

图3为一个实施例中链式传输压缩数据块的示意图;

图4为一个实施例中数据发送方法的流程示意图;

图5为一个实施例中分布式系统中数据发送方法的示意图;

图6为一个实施例中代理程序向发送端反馈接收成功信息的示意图;

图7为一个实施例中数据发送系统的结构框图;

图8为另一个实施例中数据发送系统的结构框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的数据发送方法,可以应用于如图1所示的应用环境中。其中,发送端102通过网络与距离最近的目标接收端104进行通信,目标接收端104可以和与发送端距离次近的接收端106进行通信。发送端102获取待发送的文件数据,并对文件数据进行分块,得到至少一个文件数据块,并针对每个文件数据块,创建对应的数据块压缩任务添加至任务处理队列。发送端102通过多个线程并发执行任务处理队列中的数据块压缩任务,得到对应的压缩数据块,并将压缩数据块发送目标接收端104。目标接收端104将压缩数据块转发至接收端列表中与发送端距离次近的接收端106,发送端与各接收端按照链式的方式依次转发各压缩数据块,直至各接收端均收到压缩数据块。其中,发送端102以及目标接收端104、与发送端距离次近的接收端106为计算机设备,计算机设备可以是终端,也可以是服务器,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一个实施例中,如图2所示,提供了一种数据发送方法,以该方法应用于图1中的发送端和各接收端为例进行说明,包括以下步骤:

s202,发送端获取待发送的文件数据,并对文件数据进行分块,得到至少一个文件数据块。

其中,待发送的文件数据是发送端生成的数据,或者是发送端从网络中获取的数据,例如可以是应用程序的安装文件或者是多媒体文件等需分发至各个接收端的文件。待发送的文件数据可以存储在发送端本地,例如存储在发送端本地的硬盘中,也可以存储在云服务器中。

在一个实施例中,当需要发送端向接收端发送文件数据时,客户端向发送端发送数据分发请求,数据分发请求中包括源文件路径。发送端在接收到数据分发请求时,从数据分发请求中提取源文件路径,并根据源文件路径获取待发送的文件数据,并对文件数据进行分块,以实现对各个文件数据块的并行压缩。

s204,发送端针对每个文件数据块,创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列。

其中,数据块压缩任务是封装了对应的文件数据块和压缩算法的数据对象,通过数据块压缩任务中封装的压缩算法可以对文件数据块进行压缩。其中,任务处理队列是存储数据块压缩任务的先入先出的队列。在一个实施例中,当发送端请求线程池中的线程执行数据块压缩任务时,若线程池中没有空闲的线程,则将数据块压缩任务暂存在任务处理队列,在线程池中出现空闲线程时,空闲线程从任务处理队列中提取排在队首的数据块压缩任务进行处理。

s206,发送端通过多个线程并发执行任务处理队列中的数据块压缩任务,得到对应的压缩数据块,并将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端;接收端列表中包括多个按照与发送端间的距离排列的接收端。

其中,线程是cpu调度和分配的基本单位,是进程的一个执行路径,进程中的多个线程共享进程的资源,但每个线程有独立的执行堆栈和程序计数器。并发执行是指在同一时间段内,有多个线程处于运行状态,分别执行任务处理队列中的数据块压缩任务。其中,目标接收端是与发送端部署于同一分布式系统中的计算机设备,可以与发送端处于同一地域,也可以与发送端处于不同地域。接收端列表中包括多个接收端以及各接收端对应的网络地址,网络地址可以是ip地址。

接收端列表中的接收端是按照与发送端之间的距离排列的,例如,接收端列表中的接收端是按照与发送端间的距离,从近到远进行排列的。在一个实施例中,客户端向发送端发送数据分发请求,数据分发请求中包括各个接收端的网络地址,发送端根据各个接收端的网络地址,按照与发送端间的距离从近到远的顺序对各个接收端进行排序,生成接收端列表,接收端列表中包括各个接收端的编号及网络地址。

s208,目标接收端将压缩数据块转发至接收端列表中与发送端距离次近的接收端,直至各接收端均收到压缩数据块。

基于网络的全双工特性,目标接收端在接收压缩数据块时,可以同时向其他接收端发送已经收到的压缩数据块。例如,如图3所示,接收端列表中包括4个接收端,其中,接收端1-4按照与发送端间的距离进行排列,接收端1与发送端间的距离最近,接收端2次之,接收端4与发送端间的距离最远。发送端首先向接收端1发送压缩数据块1,然后向接收端1发送压缩数据块2,基于网络的全双工特性,接收端1在接收压缩数据块2时,可以同时向接收端2发送压缩数据块1。接收端2在收到压缩数据块1时,将压缩数据块1转发至接收端3,接收端3再将压缩数据块1转发至接收端4。所以,发送端与各接收端组成了链式的数据传输通路,按照链式的方式将压缩数据块从发送端传送至各个接收端。

如图3所示的文件数据分发方法,充分利用了网络连接的全双工特性,发送端到接收端1间的数据传输与接收端1和接收端2间的数据传输占用的网络带宽是独立的。所以,发送端将压缩数据块分发至所有的接收端所用的时间为发送端将压缩数据块发送给接收端1所用的时间+最后一个压缩数据块从接收端1传输至最后一个接收端的时间。因此分发时间为:(文件大小/发送端带宽)+(接收端数量-1)*(压缩数据块的大小/接收端带宽)。由于传输一个压缩数据块的时间远远小于传输整个文件的时间,并且,发送端只需要将压缩数据块发送至接收端1,而不需要通过发送端将压缩数据块分发至所有的接收端,文件分发速度受发送端带宽的影响较小,极大的降低了文件数据分发所用的时间。

上述实施例中,发送端获取待发送的文件数据,并将文件数据分成多个文件数据块,然后针对每个文件数据块,创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列。发送端通过多个线程并发执行任务处理队列中的数据块压缩任务以对文件数据块进行压缩。发送端通过多线程压缩的方式对文件数据块进行压缩,缩短了压缩时间。并且发送端仅将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端,然后由目标接收端将压缩数据块转发至接收端列表中与发送端距离次近的接收端,再依次进行转发,直至各接收端均收到压缩数据块。所以,基于网络全双工特性,接收端列表中的各个接收端在接收压缩数据块的同时,可以向其他接收端发送压缩数据块,减少了压缩数据块从发送端传递至各个接收端所需的时间,提高了数据发送的效率。

在一个实施例中,发送端通过线程池中的多个线程并发执行任务处理队列中的数据块压缩任务。线程池维护着多个线程,等待分配可并发执行的任务,降低了在处理短时间任务时创建与销毁线程的开销。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池中具有一定数量的核心线程与非核心线程。核心线程是在处于空闲状态时也不会被回收的线程。当发送端中创建了数据块压缩任务时,首先判断线程池中的核心线程是否处于空闲状态,如果有核心线程处于空闲状态,则将数据块压缩任务交由核心线程进行处理。如果没有核心线程处于空闲状态,则判断非核心线程的数量是否超出数量阈值,如果非核心线程的数量未超出数量阈值,则创建一个非核心线程,并将数据块压缩任务交由新创建的非核心线程进行处理;如果非核心线程的数量超出了数量阈值,则等待出现空闲的线程,并在释放出空闲的线程后使空闲的线程对任务处理队列中的数据块压缩任务进行处理。

上述实施例中,发送端通过线程池维护一定数量的核心线程和非核心线程,并保持创建的非核心线程的数量小于数量阈值,可以避免由于创建的线程过多而发生阻塞,并且可以减少创建和销毁线程的开销,提高cpu的效率。

在一个实施例中,发送端具有多核cpu,每个cpu可以调度分配一个线程,多个cpu通过各自调度的线程,同时并行的对任务处理队列中的数据块压缩任务进行处理。

在一个实施例中,当目标接收端接收到压缩数据块时,通过解压缩线程池中的线程对各压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件。

其中,目标接收端通过解压缩线程池维护了多个执行解压缩任务的线程。目标接收端在收到压缩数据块时,针对每个压缩数据块创建对应的解压缩任务,并将解压缩任务添加至解压缩任务队列。解压缩线程池中的线程从解压缩任务队列中提取解压缩任务,并发的执行解压缩任务,以对压缩数据块进行解压缩。接收端列表中的其他接收端在收到压缩数据块时,也通过解压缩线程池中的线程对各压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件。

在一个实施例中,目标接收端的解压缩线程池中维护了多个核心线程和多个非核心线程,当接收到压缩数据块时,首先判断线程池中是否有空闲的核心线程,如果有,则将压缩数据块交由核心线程进行解压缩,如果没有,则判断非核心线程的数量是否达到数量阈值,如果没有达到,则创建新的非核心线程,并将压缩数据块交由创建的非核心线程进行解压缩。

上述实施例中,目标接收端通过解压缩线程池维护一定数量的核心线程和非核心线程,并保持创建的非核心线程的数量小于数量阈值,可以避免由于创建的线程过多而发生阻塞,并且可以减少创建和销毁线程的开销,提高cpu的效率。

在一个实施例中,目标接收端具有多核cpu,当目标接收端接收到压缩数据块时,每个cpu调度一个对应的线程,并通过调度的线程并行的对数据块解压缩任务进行处理,以对压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件,提高了解压缩的效率。

在一个实施例中,如图4所示,发送端与接收端列表中各接收端上均部署了对应的代理程序;发送端得到对应的压缩数据块之后,数据发送方法还包括如下步骤:

s402,发送端将压缩数据块存入环形队列。

s404,发送端通过线程从环形队列中依次提取各压缩数据块,并通过部署在发送端上的代理程序将所提取的压缩数据块发送至部署在目标接收端上的代理程序。

s406,部署在目标接收端上的代理程序将压缩数据块转发至与发送端距离次近的接收端上部署的代理程序。

其中,代理程序是安装在发送端或者接收端上的软件程序,用于接收数据、发送数据等。发送端或者各接收端上部署的代理程序可以与交换机建立网络连接,当监听到其他代理程序的连接请求时,与发送连接请求的代理程序建立网络连接。其中,环形队列是首尾相连的先入先出的数据结构,采用数组的线性空间来实现。

上述实施例中,发送端将压缩数据块存入环形队列,并通过代理程序从环形队列中依次提取压缩数据块进行发送,可以有效避免发送过程发生拥塞。

在一个实施例中,如图5所示的文件数据分发方法,应用于分布式系统,分布式系统中部署了主数据中心、备数据中心和灾备数据中心,发送端和客户端部署于主数据中心,接收端1-9分别部署在各数据中心,各接收端上部署的代理程序分别为代理程序1-9。各代理程序监听其他代理程序的连接请求。当发送端接收到客户端的数据分发请求时,从数据分发请求中提取接收端列表,接收端列表中具有接收端1-9的ip地址。然后发送端按照与接收端列表中各接收端的距离,从近到远对接收端列表中的接收端进行排序,得到排序后接收端列表。发送端对应的代理程序首先根据排序后接收端列表中排在首位的接收端1的ip地址向代理程序1发送连接请求,代理程序1响应于发送端对应的代理程序的连接请求,与发送端对应的代理程序建立tcp网络连接,然后发送端将排序后的接收端列表发送至代理程序1。代理程序1接收到排序后的接收端列表时,查找排在其后的接收端2的ip地址,根据接收端2的ip地址,向代理程序2发送连接请求,并在与代理程序2建立tcp网络连接后,将排序后的接收端列表发送至代理程序2,依次类推,直至在排序后的接收端列表中相邻接收端对应的代理程序间均建立网络连接,并且所有的代理程序均收到排序后的接收端列表。

发送端将将压缩数据块存入环形队列,然后通过线程从环形队列中依次提取各压缩数据块,并通过部署在发送端上的代理程序将所提取的压缩数据块发送至部署在接收端1上的代理程序1;代理程序1将压缩数据块存入环形队列,并从环形队列中提取压缩数据块,并根据接收端2的ip地址将压缩数据块转发至接收端2上部署的代理程序2。各个接收端通过代理程序逐个向相邻的后一接收端传递压缩数据块,直至将压缩数据块传输至最后一个接收端。

上述实施例中,发送端以及各接收端对应的代理程序间通过建立的网络连接形成链式的压缩数据块传输通路,从而可以将压缩数据块从发送端链式的传输至各个接收端,提高了文件的发送效率。

在一个实施例中,当发送端接收到数据分发请求时,从数据分发请求中提取排序前接收端列表;分别向排序前接收端列表中各接收端发送网络探测命令;当接收到各接收端响应于网络探测命令返回的响应命令时,分别获取各接收端返回响应命令的响应时间;根据响应时间对各接收端进行排序,得到接收端列表。

其中,数据分发请求是请求发送端向多个接收端分发文件数据的请求指令。数据分发请求中可以包括源文件路径、目标文件路径和排序前接收端列表。排序前接收端列表中可以包括各个接收端的编号和网络地址。

其中,网络探测命令是tcp/ip网络体系结构中应用层的服务命令,用于向目的主机发送icmp(internetcontrolmessageprotocol,因特网报文控制协议)请求报文,以测试目的主机是否可达并了解其有关状态。例如,网络探测命令可以是ping命令。

当接收端返回响应命令的响应时间距离发送端发送网络探测命令的时间间隔越长时,说明接收端与发送端间的距离越远。发送端根据响应时间对各接收端进行排序,也就是按照接收端与发送端间的距离对接收端进行排序。在一个实施例中,发送端按照与其距离的远近,从近到远对接收端进行排序,得到接收端列表。

在另一个实施例中,发送端根据部署发送端和接收端时记录的信息确定发送端与各个接收端之间的距离。记录的信息包括发送端与接收端所连接的交换机,所处的机房以及所处的地域。与发送端距离最近的接收端是与发送端连接在同一交换机上的接收端,距离发送端次近的接收端与发送端处于同一机房,但未与发送端连接在同一交换机上,再次是与发送端处于同一地域,但未与发送端处于同一机房的接收端,距离发送端最远的接收端是与发送端处于不同地域的接收端。

上述实施例中,发送端对接收端进行排序,可以根据接收端列表先将压缩数据块发送至距离最近的接收端,并且可以使各接收端根据接收端列表中接收端的排列顺序向相邻的下一接收端转发压缩数据块。由于各接收端是按照与发送端间的距离依次转发压缩数据块,节省了网络资源,提高了数据分发效率。

在一个实施例中,接收端列表中的接收端处于多个不同的地域,发送端按照各个接收端所处的地域对接收端进行分组,将处于同一地域的接收端划分为一组,然后并行的向各组中的接收端发送压缩数据块。

在一个实施例中,发送端将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端包括:发送端将压缩数据块存入发送端内核缓冲区,并从发送端内核缓冲区复制到发送端网络层缓冲区;发送端将发送端网络层缓冲区中的压缩数据块发送至目标接收端,并存储于接收端内核缓冲区;目标接收端将压缩数据块转发至接收端列表中与发送端距离次近的接收端包括:目标接收端将压缩数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端网络层缓冲区中的压缩数据块发送至接收端列表中与发送端距离次近的接收端。

其中,发送端内核缓冲区是位于发送端的内核空间中的缓冲区。接收端内核缓冲区是位于接收端的内核空间中的缓冲区。内核空间是操作系统内核运行的虚拟地址空间。当进程运行在内核空间时处于内核态,当进程运行于用户空间时则处于用户态。操作系统的核心是内核,可以访问受保护的内存空间,也可以访问底层硬件设备。为了保证内核的安全,操作系统一般都强制用户进程不能直接操作内核,所以操作系统将虚拟地址空间划分内核空间与用户空间。例如,对于32位操作系统,寻址空间(虚拟地址空间)为4g,也就是说运行在该操作系统上的进程的最大地址空间为4g。最高的1g字节(从虚拟地址0xc0000000到0xfffffff)由内核使用,称为内核空间,而较低的3g字节(从虚拟地址0x00000000到0xbfffffff)由各个用户进程使用,称为用户空间。在一个实施例中,目标接收端在收到压缩数据块时,将压缩数据块存入内核缓冲区中的内核映射文件中。

其中,发送端网络层缓冲区是发送端内核空间中的数据缓存区,发送端将压缩数据块存入网络层缓冲区,并按照网络协议对存入的压缩数据块进行封装,在封装后发送至接收端,网络协议例如可以是tcp协议、udp协议或者自定义协议。

上述实施例中,由于发送端内核缓冲区、发送端网络层缓冲区、接收端内核缓冲区、接收端网络层缓冲区均存在于内核空间,发送端和各接收端在发送压缩数据块时,不需要将压缩数据块在内核空间和用户空间之间来回复制,降低了cpu的资源使用率,提高了文件数据的分发效率。

在一个实施例中,当接收端列表中的末尾接收端接收到全部压缩数据块时,向前一接收端反馈接收成功信息;对于接收端列表中除末尾接收端及目标接收端之外的接收端,当接收到接收端列表中的所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;当目标接收端接收到所有后继接收端反馈的接收成功信息时,将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至发送端。

如图6所示,接收端列表中包括接收端1-5,代理程序1-5分别部署在接收端1-5上,当接收端5收到全部的压缩数据块时,代理程序5向代理程序4反馈接收成功信息。当接收端4收到全部的压缩数据块时,将自身生成的接收成功信息与代理程序5反馈的接收成功信息进行合并,合并后发送至代理程序3,依此类推,直至将代理程序1-5反馈的接收成功信息均发送至发送端。

上述实施例中,各个代理程序在接收到全部的压缩数据块时,向前一相连的代理程序反馈接收成功信息,并最终将所有代理程序产生的接收成功信息反馈至发送端,以使发送端获知各接收端是否接收到完整的压缩数据块,并在接收端未接收到完整的压缩数据块时,向该接收端重新发送压缩数据块,保证了压缩数据块的可靠传输。

在一个实施例中,接收端列表中接收端部署于主数据中心;发送端获取接收端列表之后,方法还包括:当主数据中心发生故障时,发送端将接收端列表中接收端替换为部署于备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接;当主数据中心与备数据中心均发生故障时,发送端将接收端列表中接收端替换为部署于灾备数据中心的接收端,并与替换后的接收端列表中各接收端建立网络连接。

其中,主数据中心和备数据中心处于同一地域,和灾备数据中心处于不同的地域。当主数据中心发生故障时,启用备数据中心中的接收端,发送端将接收端列表中部署于主数据中心的接收端替换为部署于备数据中心的接收端。当备数据中心也发生故障时,启用灾备数据中心,发送端将接收端列表中部署于主数据中心和备数据中心的接收端替换为部署于灾备数据中心的接收端。

上述实施例中,对于分布式系统,通过在两个地域部署三个数据中心,可以在主数据中心发生故障时,启用备数据中心或者在主数据中心和备数据中心都发生故障时启用灾备数据中心,对发生故障的接收端进行替换,充分保证了分布式系统的正常运行。

应该理解的是,虽然图2、4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图7所示,提供了一种数据发送系统,包括:发送端702和目标接收端704,其中:

发送端702,用于获取待发送的文件数据,并对文件数据进行分块,得到至少一个文件数据块;

发送端702,还用于针对每个文件数据块,创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列;

发送端702还用于,通过多个线程并发执行任务处理队列中的数据块压缩任务,得到对应的压缩数据块,并将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端;接收端列表中包括多个按照与发送端间的距离排列的接收端;

目标接收端704,用于将压缩数据块转发至接收端列表中与发送端距离次近的接收端,直至各接收端均收到压缩数据块。

上述实施例中,发送端获取待发送的文件数据,并对文件数据进行分块,得到至少一个文件数据块,然后针对每个文件数据块,创建对应的数据块压缩任务,并将数据块压缩任务添加至任务处理队列。发送端通过多个线程并发执行任务处理队列中的数据块压缩任务以对文件数据块进行压缩。发送端通过多线程压缩的方式对文件数据块进行压缩,缩短了压缩时间。并且发送端仅将压缩数据块发送至接收端列表中与发送端距离最近的目标接收端,然后由目标接收端将压缩数据块转发至接收端列表中与发送端距离次近的接收端,再依次进行转发,直至各接收端均收到压缩数据块。所以,基于网络全双工特性,接收端列表中的各个接收端在接收压缩数据块的同时,可以向其他接收端发送压缩数据块,减少了压缩数据块从发送端传递至各个接收端所需的时间,提高了数据发送的效率。

在一个实施例中,系统还包括:

目标接收端704,当接收到压缩数据块时,还用于通过解压缩线程池中的线程对各压缩数据块进行解压缩,并将解压缩后的数据块存入对应的文件。

在一个实施例中,发送端与接收端列表中各接收端上均部署了对应的代理程序;系统还包括:

发送端702,还用于将压缩数据块存入环形队列;

发送端702,还用于通过线程从环形队列中依次提取各压缩数据块,并通过部署在发送端上的代理程序将所提取的压缩数据块发送至部署在目标接收端上的代理程序;

目标接收端704,还用于通过部署在目标接收端上的代理程序将压缩数据块转发至与发送端距离次近的接收端上部署的代理程序。

在一个实施例中,系统还包括:

发送端702,还用于将压缩数据块存入发送端内核缓冲区,并从发送端内核缓冲区复制到发送端网络层缓冲区;

发送端702,还用于将发送端网络层缓冲区中的压缩数据块发送至目标接收端,并存储于接收端内核缓冲区;

目标接收端704,还用于将压缩数据块从接收端内核缓冲区复制到接收端网络层缓冲区,将接收端网络层缓冲区中的压缩数据块发送至接收端列表中与发送端距离次近的接收端。

在一个实施例中,发送端702还用于:

当接收到数据分发请求时,从数据分发请求中提取排序前接收端列表;

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

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

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

在一个实施例中,如图8所示,系统还包括:与发送端距离最远的末尾接收端706以及除末尾接收端和目标接收端之外的中间接收端708;

末尾接收端706,当接收到全部压缩数据块时,用于向前一接收端反馈接收成功信息;

中间接收端708,当接收到接收端列表中的所有后继接收端反馈的接收成功信息时,用于将所有后继接收端反馈的接收成功信息与自身产生的接收成功信息一起发送至前一接收端;

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

关于数据发送系统的具体限定可以参见上文中对于数据发送方法的限定,在此不再赘述。上述数据发送系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1