发明内容
本发明要解决的一个技术问题是提供一种高性能文件传输***及方法,通过构造具有相应功能的TCP协议服务器和UDT协议服务器,充分利用了网络硬件的性能,实现了大数据量远距离传输的低延时性能。
本发明的一个方面提供了一种高性能文件传输***,本发明提供的高性能文件传输***的一个实施例中,该***包括:高速传输TCP服务器,用于在套接字层,通过libevent事件触发网络库实现异步非阻塞网络模式,以达到高并发的要求;当有客户端发出请求时,将请求封装成事件通知,然后根据客户端的控制连接句柄对会话线程总数直接取余进行哈希,将事件通知分配到不同会话线程的任务队列中;从任务队列中取出事件通知,然后调用有限状态机进行处理并获得相应的应答码,通过套接字层返回给客户端;当会话请求需要从磁盘读写数据时,则将相应信息封装成通知事件后加入磁盘处理线程的任务队列,磁盘处理线程则一次性在磁盘和缓存之间进行大块文件的读写,再由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互;高速传输UDT服务器,建立用于监听的主线程,以及处理命令、读写文件和压缩数据的三个线程池;当有用户请求时,主线程将任务分给处理命令线程池中的一个空闲线程处理,空闲线程建立一个新的线程来处理数据连接以传输数据;当读写文件时,处理数据线程与读写文件线程、压缩数据线程之间执行同步的通信协作;非文件读写操作则由数据连接线程直接处理。
本发明提供的高性能文件传输***的一个实施例中,高速传输TCP服务器进一步包括:TCP接口模块,用于在套接字层,通过libevent事件触发网络库实现异步非阻塞网络模式,以达到高并发的要求;根据控制连接的句柄进行哈希,将数据分配给不同会话线程的任务队列;会话管理器,用于从任务队列中取出数据,然后调用有限状态机进行处理并获得相应的应答码,通过套接字层返回给客户端;由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互;磁盘管理器,用于当会话请求需要从磁盘读写数据时,则将相应信息加入磁盘处理线程的任务队列,一次性在磁盘和缓存之间进行大块文件的读写。
本发明提供的高性能文件传输***的一个实施例中,高速传输UDT服务器进一步包括:UDT接口模块,用于接收用户请求,以及与客户端交互并向客户端传输压缩后的数据;会话处理模块,建立用于监听的主线程,以及处理命令、读写文件和压缩数据的三个线程池;当有用户请求时,主线程将任务分给处理命令线程池中的一个空闲线程处理,空闲线程建立一个新的线程来处理数据连接以传输数据;当读写文件时,数据线程与读写文件线程、压缩数据线程之间执行同步的通信协作;非文件读写操作则由数据连接线程直接处理;磁盘管理器,用于压缩需要传输的数据;在压缩的时候提供用于存放压缩前数据和压缩后数据的两块工作空间,在解压的时候仅提供一块工作空间。
本发明提供的高性能文件传输***的一个实施例中,高速传输TCP服务器采用全异步架构模式。
本发明提供的高性能文件传输***的一个实施例中,高速传输UDT服务器采用同步阻塞模式。
本发明提供的高性能文件传输***的一个实施例中,采用LZO压缩算法对文本类型文件进行压缩。
本发明提供的高性能文件传输***的一个实施例中,在套接字层,通过libevent事件触发网络库为控制连接和数据连接各设置了1组事件,每组4个事件,用于实现与客户端的通信。
本发明提供的高性能文件传输***的一个实施例中,每组的4个事件包括:接受客户端事件、读数据事件、通知事件、写数据事件。
本发明的另一个方面提供了一种高性能文件传输方法,该方法采用前述任意一项的***来实现;该方法包括高速传输TCP服务器接受客户端事件的流程;流程进一步包括:初始化监听套接字socket,并设置监听模式;为监听套接字socket初始化接受事件,激活接受事件,并加入libevent事件触发网络库中;当客户端发起连接请求时,高速传输TCP服务器自动调用接受客户端事件函数;接受客户端,生成客户端套接字socket,并将控制连接句柄与请求的操作类型封装成一个事件通知,加入任务队列。
本发明提供的高性能文件传输方法的一个实施例中,该方法还包括高速传输TCP服务器从客户端读数据事件的流程;流程进一步包括:当接受客户端事件函数被调用时,高速传输TCP服务器接受客户端,并生成客户端套接字socket;为客户端套接字socket初始化读事件,激活读事件,并加入libevent事件触发网络库中;当客户端发送数据时,高速传输TCP服务器自动调用读事件函数;从客户端套接字socket里读出数据,封装成事件通知后加入任务队列。
本发明提供的高性能文件传输方法的一个实施例中,该方法还包括高速传输TCP服务器通知事件的流程;流程进一步包括:初始化时,高速传输TCP服务器捆绑两个套接字socket:通知套接字socket和传递套接字socket;为通知套接字socket初始化通知事件,并激活通知事件;当高速传输TCP服务器需要写数据时,通过TCP管理器发送封装的事件通知到传递套接字socket;高速传输TCP服务器自动调用通知事件函数;从通知套接字socket里读出数据,***到写事件能够调用的任务队列中,并激活写事件。
本发明提供的高性能文件传输方法的一个实施例中,该方法还包括高速传输TCP服务器写数据事件的流程;流程进一步包括:当接受客户端事件函数被调用时,高速传输TCP服务器接受客户端,并生成客户端套接字socket;为客户端套接字socket初始化写事件,但不激活读事件;当高速传输TCP服务器需要写数据时,通过TCP管理器发送数据到传递套接字socket;高速传输TCP服务器自动调用通知事件函数;从通知套接字socket里读出数据,***到写事件能够调用的任务队列中,并激活写事件;调用写事件函数,并将数据写到客户端套接字socket;检验缓存内的数据是否被写完,如果没有写完,则再次激活写事件,调用写事件函数,并将数据写到客户端套接字socket。
本发明提供的高性能文件传输方法的一个实施例中,该方法还包括高速传输UDT服务器传输文件的流程;流程进一步包括:高速传输UDT服务器初始化线程池,建立套接字socket并侦听;当客户端发起连接请求时,分配任务给空闲命令线程;客户端连接套接字socket后发送命令,指示线程解析命令并通知数据线程;执行文件读写和压缩数据处理;数据线程与客户端进行数据通信。
本发明提供的高性能文件传输方法的一个实施例中,该方法还包括高速传输UDT服务器压缩数据的流程;流程进一步包括:在压缩数据时记录并保存压缩前后数据的大小。
本发明提供的高性能文件传输***及方法,采用UDT协议作为主要的网络协议,在UDT协议无法工作的网络条件下,使用TCP协议作为底层传输协议,参考RFC 959,实现一个FTP协议的兼容版本,作为数据传输的应用层协议;此外,本发明对协议进行适当扩展,并加入数据压缩的功能,从而实现了大规模数据远距离传输的低延迟性和可靠性。
具体实施方式
下面参照附图对本发明进行更全面的描述,其中说明本发明的示例性实施例。
图1示出本发明实施例提供的一种高性能文件传输***的结构示意图。
如图1所示,高性能文件传输***100包括:高速传输TCP服务器102和高速传输UDT服务器104;其中
高速传输TCP服务器102,用于在套接字层,通过libevent事件触发网络库实现异步非阻塞网络模式,以达到高并发的要求;当有客户端发出请求时,将请求封装成一个事件通知(该事件通知可以包括:控制连接句柄、数据连接句柄、请求的操作类型、数据缓存指针和数据长度等),然后根据客户端的控制连接句柄(一个int型变量)对会话线程总数直接取余进行哈希,将事件通知分配给不同会话线程的任务队列中;从任务队列中取出数据,然后调用有限状态机(Finite State Machine)进行处理并获得相应的应答码,通过套接字层返回给客户端;当会话请求需要从磁盘读写数据时,则将相应信息加入磁盘处理线程的任务队列,磁盘处理线程则一次性在磁盘和缓存之间进行大块文件的读写,再由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互。
传统FTP服务器I/O主要由外部通讯I/O和内部I/O组成,通常不会遇到外部I/O瓶颈问题,因为很多时候服务器内部I/O瓶颈是掣肘的关键。针对此瓶颈,我们在FTP服务器的架构设计上选用全异步模式,同时,通过使用内存缓存,减少磁盘磁针定位和读写的次数,提高磁盘I/O和网络I/O的利用率之比,从而将瓶颈转移到网络I/O。
高速传输UDT服务器104,建立用于监听的主线程,以及处理命令、读写文件和压缩数据的三个线程池;当有用户请求时,主线程将任务分给处理命令线程池中的一个空闲线程处理,空闲线程建立一个新的线程来处理数据连接以传输数据(空闲线程会建立一个新的线程来处理数据连接,实际上数据线程是操纵一个UDT套接字socket来传输数据);当读写文件时,数据线程与读写文件线程、压缩数据线程之间执行同步的通信协作(三线程之间可设置两个缓冲区);非文件读写操作则由数据连接线程直接处理。
本发明提供的高性能文件传输***的一个实施例中,高速传输TCP服务器采用全异步架构模式(asynchronous),这种模式可以连续发起多个非阻塞I/O操作,当操作完成时通过消息或线程回调函数通知应用程序。这是在高性能I/O应用场合最广泛的一种模型,实际开发中只需一个或几个(根据CPU数量自定义)线程来对多个I/O操作控制。高速传输UDT服务器采用同步阻塞模式。同步阻塞是指函数在没有执行完或者接收完数据的情况下不返回,线程被挂起。
本发明提供的高性能文件传输***的一个实施例中,在套接字层,通过libevent事件触发网络库为控制连接和数据连接各设置了1组事件,每组4个事件,用于实现与客户端的控制命令通信和数据传输。其中,每组的4个事件包括:接受客户端事件、读数据事件、通知事件、写数据事件。
本发明提供的高性能文件传输***的一个实施例中,采用LZO压缩算法对文本类型文件进行压缩。通过压缩需要传输的数据,从而加速传输。此外,在压缩的时候需要提供用于存放压缩前数据和压缩后数据的两块工作空间(后者较大,以防止遇到数据无法压缩的情况),而解压的时候仅需要一块工作空间即可以完成解压。
本发明提供的高性能文件传输***,通过libevent这一轻量级事件触发网络库,实现异步非阻塞网络模式,以达到高并发的要求;在多处理器环境中,多个线程(multi-thread)可以独立处理相应会话的数据,且每个会话的数据都固定在一个线程处理,这样在多个线程同时运行时,既能有效提高CPU的使用率,提高性能,又避免出现会话请求的时序问题。
图2示出本发明实施例提供的一种高性能文件传输***中高速传输TCP服务器的结构示意图。
如图2所示,高速传输TCP服务器200包括:TCP接口模块(TCP Interface)202、会话管理器(Session Manager)204和磁盘管理器(Disk Manager)206;其中
TCP接口模块202,用于在套接字层,通过libevent事件触发网络库实现异步非阻塞网络模式,以达到高并发的要求;当有客户端发出请求时,将请求封装成一个事件通知(该事件通知可以包括:控制连接句柄、数据连接句柄、请求的操作类型、数据缓存指针和数据长度等),然后根据客户端的控制连接句柄(一个int型变量)对会话线程总数直接取余进行哈希,将事件通知分配给不同会话线程的任务队列中。
会话管理器204,用于从任务队列中取出事件通知,然后调用有限状态机进行处理并获得相应的应答码,通过套接字层返回给客户端;由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互。
磁盘管理器206,用于当会话请求需要从磁盘读写数据时,则将相应信息封装成通知事件后加入磁盘处理线程的任务队列,一次性在磁盘和缓存之间进行大块文件的读写。
本发明提供的高性能文件传输***,通过libevent这一轻量级事件触发网络库,实现高并发的要求;在多处理器环境中,在多个线程同时运行时,既能有效提高CPU的使用率,提高性能,又避免出现会话请求的时序问题。进一步的,当会话请求需要从磁盘读写数据时,则将相应信息加入磁盘处理线程的任务队列,磁盘处理线程则根据磁盘容量大、读写速度慢的特点,一次性在磁盘和缓存之间进行大块文件的读写,再由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互;从而减少磁盘磁针定位和读写的次数,提高磁盘I/O和网络I/O的利用率之比。
图3示出本发明实施例提供的一种高性能文件传输***中高速传输UDT服务器的结构示意图。
如图3所示,高速传输UDT服务器300包括:UDT接口模块(UDT Interface)302、会话处理模块(Session Processing)304和磁盘管理器(Disk Manager)306;其中
UDT接口模块302,用于接收用户请求,以及与客户端交互并向客户端传输压缩后的数据。
会话处理模块304,建立用于监听的主线程,以及处理命令、读写文件和压缩数据的三个线程池;当有用户请求时,主线程将任务分给处理命令线程池中的一个空闲线程处理,空闲线程建立一个新的线程来处理数据连接以传输数据;当读写文件时,处理数据线程与读写文件线程、压缩数据线程之间执行同步的通信协作;非文件读写操作则由数据连接线程直接处理。
磁盘管理器306,用于压缩需要传输的数据;在压缩的时候提供用于存放压缩前数据和压缩后数据的两块工作空间,在解压的时候仅提供一块工作空间。
本发明提供的高性能文件传输***的一个实施例中,采用LZO(Lempel Ziv Oberhumer)压缩算法对文本类型文件进行压缩。该算法对文本类文件具有不错的压缩比和压缩速率,再配合UDT传输协议的特点,可以达到提高传输效率的目的。
UDT协议主要用在小数量的bulk源共享富裕带宽的情况下,最典型的例子就是建立在光纤广域网上的网格计算。UDT的主要目标是效率、公平、稳定。单个的或少量的UDT流应该利用任何高速连接提供的可用带宽,即使带宽变化的很剧烈。同时,任何并发的流必须公平地共享带宽,不依赖于不同的带宽瓶劲、起始事件、RTT(双向传播时延,Round Trip Time)。稳定性需要包发送速率应该一直会聚可用带宽很快,并且必须避免拥塞碰撞。
本发明提供的高性能文件传输***,采用UDT协议作为主要的网络协议,并对协议进行适当扩展,加入数据压缩的功能(数据压缩算法采用LZO,后续也可以针对基因测序等海量数据的特点再作专门优化);利用了UDT协议服务器的良好弹性,实现了高速率传输,并保证了传输的可靠性。
图4示出本发明提供的高性能文件传输***的一个具体实施方式的结构示意图。
如图4所示,高性能文件传输***400包括:高速传输TCP服务器和高速传输UDT服务器;其中
高速传输TCP服务器包括:TCP接口模块402、会话管理器404和磁盘管理器406;其中
TCP接口模块402,用于在套接字层,通过libevent事件触发网络库实现异步非阻塞网络模式,以达到高并发的要求;根据控制连接的句柄进行哈希,将数据分配给不同会话线程的任务队列。
会话管理器404,用于从任务队列中取出数据,然后调用有限状态机进行处理并获得相应的应答码,通过套接字层返回给客户端;由会话线程多次从缓存中调用数据,通过套接字层多次和客户端交互。
磁盘管理器406,用于当会话请求需要从磁盘读写数据时,则将相应信息加入磁盘处理线程的任务队列,一次性在磁盘和缓存之间进行大块文件的读写。
高速传输UDT服务器包括:UDT接口模块408、会话处理模块410和磁盘管理器412;其中
UDT接口模块408,用于接收用户请求,以及与客户端交互并向客户端传输压缩后的数据。
会话处理模块410,建立用于监听的主线程,以及处理命令、读写文件和压缩数据的三个线程池;当有用户请求时,主线程将任务分给处理命令线程池中的一个空闲线程处理,空闲线程建立一个新的线程来处理数据连接以传输数据;当读写文件时,处理数据线程与读写文件线程、压缩数据线程之间执行同步的通信协作;非文件读写操作则由数据连接线程直接处理。
磁盘管理器412,用于压缩需要传输的数据;在压缩的时候提供用于存放压缩前数据和压缩后数据的两块工作空间,在解压的时候仅提供一块工作空间。
本发明提供的高性能文件传输***,在FTP服务器的架构设计上选用全异步模式,同时通过使用内存缓存,减少磁盘磁针定位和读写的次数,提高磁盘I/O和网络I/O的利用率之比,从而将瓶颈转移到网络I/O。此外,利用了UDT协议服务器的良好弹性,实现了高速率传输,并保证了传输的可靠性。
图5示出本发明实施例提供的一种高性能文件传输方法的流程图。
如图5所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输TCP服务器接受客户端事件的流程;该流程500进一步包括:
步骤502,初始化监听套接字socket(如设置运输层协议、捆绑端口),并设置监听模式。
步骤504,为监听套接字socket初始化接受事件,激活接受事件,并加入libevent事件触发网络库中。
步骤506,当客户端发起连接请求时,高速传输TCP服务器自动调用接受客户端事件函数。
步骤508,接受客户端,生成客户端套接字socket,并将控制连接句柄与请求的操作类型封装成一个事件通知,加入任务队列。
图6示出本发明提供的高性能文件传输方法的另一个实施例的流程图。
如图6所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输TCP服务器从客户端读数据事件的流程;该流程600进一步包括:
步骤602,当接受客户端事件函数被调用时,高速传输TCP服务器接受客户端,并生成客户端套接字socket。
步骤604,为客户端套接字socket初始化读事件,激活读事件,并加入libevent事件触发网络库中。
步骤606,当客户端发送数据时,高速传输TCP服务器自动调用读事件函数。
步骤608,从客户端套接字socket里读出数据(如果是控制连接,该数据为一条以“/r/n”结尾的字符串,如果是数据连接,则为上传的文件数据),封装成事件通知(如设置控制连接句柄及数据连接句柄、补充请求的操作类型、设置数据缓存指针和数据长度)后加入任务队列。
图7示出本发明提供的高性能文件传输方法的另一个实施例的流程图。
如图7所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输TCP服务器通知事件的流程;该流程700进一步包括:
步骤702,初始化时,高速传输TCP服务器捆绑两个套接字socket:通知套接字socket和传递套接字socket,存在TCP_interface内的TCP_manager(TCP管理器)。
步骤704,为通知套接字socket初始化通知事件,并激活通知事件。
步骤706,当高速传输TCP服务器需要写数据时,通过TCP管理器发送封装的事件通知到传递套接字socket。具体来说,TCP管理器是TCP_interface内部的一个成员,主要功能是对TCP的socket进行管理。由于在初始化时,所述高速传输TCP服务器捆绑两个套接字socket:通知套接字socket和传递套接字socket;所以,执行通知事件需要通过TCP管理器调用。
步骤708,高速传输TCP服务器自动调用通知事件函数。
步骤710,从通知套接字socket里读出数据,***到写事件能够调用的任务队列中,并激活写事件。
图8示出本发明提供的高性能文件传输方法的另一个实施例的流程图。
如图8所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输TCP服务器写数据事件的流程;该流程800进一步包括:
步骤802,当接受客户端事件函数被调用时,高速传输TCP服务器接受客户端,并生成客户端套接字socket;
步骤804,为客户端套接字socket初始化写事件,但不激活读事件;
步骤806,当高速传输TCP服务器需要写数据时,通过TCP管理器发送数据到传递套接字socket;
步骤808,高速传输TCP服务器自动调用通知事件函数;
步骤810,从通知套接字socket里读出数据,***到写事件能够调用的任务队列中,并激活写事件;
步骤812,调用写事件函数,并将数据写到客户端套接字socket;
步骤814,检验缓存内的数据是否被写完。如果没有写完,则跳转到步骤810,再次激活写事件,调用写事件函数,并将数据写到客户端套接字socket。
图9示出本发明提供的高性能文件传输方法的另一个实施例的流程图。
如图9所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输UDT服务器传输文件的流程;该流程900进一步包括:
步骤902,高速传输UDT服务器初始化线程池,建立套接字socket并侦听。
步骤904,当客户端发起连接请求时,分配任务给空闲命令线程。
步骤906,客户端连接套接字socket后发送命令,指示线程解析命令并通知数据线程。
步骤908,执行文件读写和压缩数据处理。
步骤910,数据线程与客户端进行数据通信。
图10示出本发明提供的高性能文件传输方法的另一个实施例的流程图。
如图10所示,高性能文件传输方法采用前述实施例中任意一种类的***来实现;该方法包括高速传输UDT服务器压缩数据的流程;该流程1000进一步包括:在压缩数据时,记录并保存压缩前后数据的大小。随后在解压缩过程中,首先提取压缩前后的数据大小的信息;读取压缩后相应大小的数据,执行解压缩,在写回解压缩后的数据;从而既保证了传输速率,同时也保证了解压缩后的数据可靠性。
接下来简要介绍应用本发明提供的高性能文件传输***及方法的一个具体实施例。
目前,高性能文件传输***(Hyper Transfer)在Panda项目中承担数据传输的任务,传输文件的大小从几KB到十几GB不等,十几个上传下载任务同时并发。以下是该项目运行期间的服务器日志:
2010-08-19 17:31:33INFO-[run_finish_download][1179]172.30.0.29download/mnt/soft/soap/input/100000_reads_2.fq:108.108MB/s
2010-08-19 17:31:37INFO-[run_finish_download][1179]172.30.0.29 download/mnt/soft/soap/input/cattle_cuted.fa:112.674MB/s
2010-08-19 17:31:40INFO-[run_finish_download][1179]172.30.0.29download/mnt/soft/soap/input/100000_reads_2.fq:110.129MB/s
2010-08-19 17:31:44INFO-[run_finish_download][1179]172.30.0.29 download/mnt/soft/soap/input/cattle_cuted.fa:112.282MB/s
该环境的服务器与客户端之间使用千兆带宽,传输上限为128MB/s,在数据传输期间,平均传输速率达到110.80MB/s,平均带宽利用率达到86.56%。本发明提供的高性能文件传输***及方法,服务器的平均带宽使用率超过80%,数据传输准确无误。
参考前述本发明示例性的描述,本领域技术人员可以清楚的知晓本发明具有以下优点:
1、本发明提供的高性能文件传输***及方法的一个实施例,通过构造具有相应功能的TCP协议服务器和UDT协议服务器,充分利用了网络硬件的性能,实现了大数据量远距离传输的低延时性能。
2、本发明提供的高性能文件传输***及方法的一个实施例,采用UDT协议作为主要的网络协议,在UDT协议无法工作的网络条件下,使用TCP协议作为底层传输协议,参考RFC 959,实现一个FTP协议的兼容版本,作为数据传输的应用层协议;此外,本发明对协议进行适当扩展,并加入数据压缩的功能,从而实现了大规模数据远距离传输的低延迟性和可靠性。
3、本发明提供的高性能文件传输***及方法的一个实施例,通过libevent这一轻量级事件触发网络库,实现异步非阻塞网络模式,以达到高并发的要求;在多处理器环境中,多个线程(multi-thread)可以独立处理相应会话的数据,且每个会话的数据都固定在一个线程处理,这样在多个线程同时运行时,既能有效提高CPU的使用率,提高性能,又避免出现会话请求的时序问题。
4、本发明提供的高性能文件传输***及方法的一个实施例,在FTP服务器的架构设计上选用全异步模式,同时通过使用内存缓存,减少磁盘磁针定位和读写的次数,提高磁盘I/O和网络I/O的利用率之比,从而将瓶颈转移到网络I/O。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。本发明中描述的功能模块以及功能模块的划分方式仅为说明本发明的思想,本领域技术人员根据本发明的教导以及实际应用的需要可以自由改变功能模块的划分方式及其模块构造以实现相同的功能;选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。