可容错的传输控制协议的实现方法

文档序号:7898050阅读:341来源:国知局
专利名称:可容错的传输控制协议的实现方法
技术领域
可容错的传输控制协议的实现方法属于因特网服务器和路由器中的高可用传输控制协议(TCP)的技术领域。
背景技术
TCP(Transmission Control Protocol)作为TCP/IP协议簇中一个重要的通讯协议,广泛应用于Internet数据传输应用中。从Web浏览,远程登录,到文件传输,甚至在路由器的边界网关协议BGP交互中都使用它作为一种可靠的数据流通道。TCP协议在TCP/IP协议模型中作为第四层协议,它使用第三层IP协议提供的不可靠无连接分组交付服务,为第五层提供可靠的面向数据流的有连接数据传输服务。TCP为了实现这种可靠性,使用一种“带重传的肯定确认”技术作为基础,解决了由底层通讯系统各种不可靠情况带来的问题。
对于使用TCP的应用来说,总是存在两个进行通讯的对等体,一个称为客户(Client),另外一个称为服务器(Server)。在TCP应用程序中,一般由Client发起TCP连接请求,由Server响应这种连接请求而在两个对等体之间建立TCP通讯通道,然后Server通过这个通讯通道为Client提供相应的数据服务。典型的Server应用有超文本传输HTTP Server,文件传输FTP Server等。在Internet社会中,服务提供方管理着各种类型的Server,通过TCP通讯通道为大量Client提供相应的数据服务。Internet服务提供方所考虑的问题是如何为Client提供可靠的,不间断的数据服务。TCP协议虽然实现了基于不可靠底层通讯系统的可靠数据流通道,但是TCP协议本身并没有考虑由于Server端或Client端软硬件故障造成TCP断路的情况,一次TCP的断路就相当于一次数据服务的中断。随着Internet的扩展,Server需要为越来越多的Client提供服务,Server端发生负荷过载,软件和硬件故障的机会也越来越大。在当前对TCP协议和实现的研究中,如何保证TCP连接迅速的从断路状态恢复到正常的TCP连接(即容错TCP,Fault Tolerance TCP)成为了研究的热点。
对于容错TCP的研究与实现,已经有许多的相关的研究成果,其中比较有影响并且具有相应代码实现的包括如下几种1、IBM研究中心和Carnegie Mellon University的TCP Splice;2、Rutgers University的Migration TCP(MTCP);3、University of Texas,Austin的Wrapping Server-side TCP;TCP Splice的最初目的是实现移动计算,但是其设计却可以用来实现容错TCP。这种方法主要是利用Proxy在Client和Server之间重定向TCP流量实现TCP的容错功能,其中的Proxy与一般的Proxy相比具有更强大的智能,这种Proxy除了在Client和Server之间转发TCP报文之外,还维护每个Client和Server之间的连接状态。一旦Server发生崩溃无法再提供TCP数据服务,该Proxy将后续的TCP报文以及当前TCP的连接状态转发给另外一个提供相同数据服务的Server,由新Server继续提供Client数据服务,并且保证其中的TCP连接状态与上一次TCP断路时的TCP连接状态相一致。如果采用这种方法实现容错TCP,将面临着一个更大的容错性问题,大量的TCP状态维护工作都交给了Proxy,而没有考虑Proxy也可能发生失效。其次这种方法将TCP连接状态维护放在了Proxy上,增加了系统实现的困难程度。
MTCP方法基于对当前Internet现状的一种趋势判断,MTCP的作者认为当前Client使用数据服务的时候最关心的是服务的质量,如传输速度、可用性等,并不关心提供服务的Server所在的位置。MTCP方法是通过对TCP协议改造实现一种新的传输层协议MTCP,MTCP支持Client主动进行Server更换,以获得质量更好的相同数据服务。在MTCP的设计中,需要将上层容错应用的状态作为TCP连接状态在TCP的状态备份过程中进行备份,这种方法虽然为上层容错应用软件的设计提供了一定的基础,但是上层容错应用可能需要备份大量的状态信息,并且不能根据应用的逻辑结构进行状态备份。其次,这种方法需要对TCP连接两端的TCP代码同时进行修改,而当前大量的Client端软件并不在服务提供方的控制范围之内。
Wrapping Server-side TCP方法通过修改Server端的软件实现容错TCP的功能,其中最主要的修改部分是在Server端的TCP与应用之间和TCP与IP之间增加两个层,这两层对TCP的连接进行状态备份,当一个Server发生失效的时候,另外一个Server根据备份的TCP连接状态重新建立一个TCP连接与Client继续进行数据服务。这种方法避免了对TCP协议的修改,不需要Client端的任何软件修改就可以实现TCP容错。但是这种方法没有考虑上层应用如何实现容错的问题,因为设计上层容错应用系统的时候,无法做到应用系统状态的Checkpoint与TCP状态的检查点Checkpoint一致。

发明内容
本发明的目的在于提供容错TCP一种新的实现方法,它基于当前Server体系结构的发展,不需要更改TCP协议,而是通过对TCP协议的实现进行一定的修改,增加TCP连接状态备份功能,从而实现容错TCP的功能。这种容错TCP的实现方法克服了上面几种容错TCP实现的缺点,实现方法简单,能与非容错TCP实现标准的TCP交互,并且为上层容错应用软件开发提供灵活的支持,能在机群体系结构的Server中与上层容错应用有机的集成提供高可用的数据服务。
Server作为一种能够为大量Client提供数据服务的特殊计算机,其体系结构的发展经过了多个阶段,从早期的Mainframe到现在仍然大量使用的SMP,从Shared Memory的多处理器体系结构到Distributed Memory的多计算机体系结构——机群系统(Cluster)。最后,Cluster以其高性能,高可用性,高可扩展性和低成本成为当前Server体系结构的首选。
Cluster利用高性能通信网络将一组计算机(结点,Node),按照某种结构连接起来,在一些系统和应用环境的支持下,所有的结点一起协调工作,如同一个单一集成的计算资源,为用户提供一致的高效的计算服务。一般地,每个计算机结点是一台高性能工作站或高档PC服务器,它有自己的处理器、高速缓存、磁盘以及I/O适配器,并具有一个完整的操作系统。Cluster采用单一映象(Single System Image,SSI)技术实现单一集成计算资源的概念,使得机群系统更易于使用和管理。结点间的连接可采用商品化的网络(如以太网等)或其它高速网络(如Myrinet,Mesh等)。一个典型的Cluster的结构如图1所示。
将Cluster用作提供Internet服务的Server,一般需要将Cluster中的节点进行功能分割,其中一部分节点作为与外部连接的连接节点(Connect Node),连接接点的一个或多个网络接口与Internet连接,连接接点同时还与Cluster的内部网络系统连接。另外一部分节点作为外部服务请求的响应节点(Compute Node),响应节点仅只与Cluster内部网络系统连接。连接节点在外部Internet与响应节点之间中转服务请求和响应数据,响应节点在获得连接节点转发来的请求之后,进行相应的计算,然后通过连接节点返回响应数据。机群系统作为Server的结构如图2所示。
Cluster Server的高性能、高可用性,高扩展性以及低成本优势已经有许多的文献进行了分析。Client Server的高可用性也可以从其体系结构上充分的体现出来。首先,ClusterServer与Internet的连接可以有多条物理通道,当一条通道失效的时候,另外一条通道可以立刻继续失效通道上的所有流量。有许多技术可以实现各种物理通道的容错备份功能,如Ethernet物理通道的Trunking技术,EtherChannel技术等,SONET/SDH物理通道上的APS/MSP技术等。其次,机群系统内部的网络系统同样也可以实现双系统冗余备份,实现物理级别的无缝失效切换。最后,由于机群系统中存在多个响应节点,可以对一些运行重要应用的节点定义一个备份节点,利用双节点进行应用的冗余备份容错。由工作节点按照一定的规则将当前的连接状态,应用状态备份到备份节点。一旦工作节点发生失效,立刻启动备份节点上的相应任务,并且根据备份的状态信息将连接和应用状态恢复到失效节点失效之前的状态,继续对外部的请求进行服务。
本发明的特征在于它是一种把机群系统(Cluster)用作提供因特网(Internet)服务的服务器,而且它的上层容错应用系统与可容错的传输控制协议(TCP)状态的备份粒度保持一致的可容错TCP的实现方法,它依次有如下步骤
(1)、把机群系统用作提供因特网服务的服务器,以构筑相应的上层容错应用系统把机群系统中一部分节点作为与外部连接的连接节点(Connect node),连接节点的一个或多个网络接口与因特网连接,连接节点同时还与机群系统的内部交换系统(Switch Fabric)连接;另外一部分节点作为外部服务请求的响应节点(Compute node),响应节点只与机群系统的内部交换系统连接;连接节点在外部因特网和响应节点之间中转服务请求和响应数据,响应节点在获得连接节点转发来的请求后,进行相应的计算,再通过连接节点返回响应数据;它依次会有如下的步骤(1.1)、建立实现容错TCP的硬件平台它含有两个响应节点,一个连接节点,三个节点之间通过商品化的以太网实现节点间的互连,两个响应节点形成双机备份的硬件环境,其中,一个响应节点是另外一个活跃节点的备份节点;(1.2)、设立系统的状态标识,表示该容错TCP运行的响应节点状态机系统活跃状态(Active),该状态提供正常的计算服务,并且把当前的软件状态备份到另外一个响应节点;双机系统备份状态(Standby),该状态不提供计算服务,只从活跃节点获取并保存状态备份信息;单机系统工作状态(Oneworking),该状态提供正常的计算服务,不产生任何正常的软件状态备份信息;非工作状态(Noworking),该状态不做任何工作;(2)、上层容错应用系统对响应节点进行检查点(Check Point)状态备份,然后进行状态回滚恢复。其中,在进行TCP状态备份时,上层容错应用系统同时备份一定数量过去的套接字(Socket)读写操作,使得上层容错应用程序在回滚恢复过程中重复进行读写操作时避免在TCP上进行实际的数据读写操作,而是从备份的读写操作中返回相应的数据和结果,以防止应用层次的逻辑错误;(3)、容错TCP的实现依次含有如下几个步骤(3.1)、响应节点上TCP的实现方法一个TCP的控制块(TCB)对应一个响应节点上的TCP套接字连,TCP任务接收来自其他系统的各种消息并把这些不同的输入全部转化为统一的信息,放在TCP任务的接收消息队列(TCP message queue)中,TCP消息处理任务不停地从消息队列中获取输入信息,根据消息的类型或者对TCB进行状态修改,或者产生一些输出;(3.2)、构建容错TCP的结构它含有如下部分系统的状态标识表示容错TCP运行的响应节点可能的状态双机系统活跃状态,双机系统备份状态,单机系统工作状态和非工作状态;TCP消息队列与普通TCP的消息队列相同,用于接收TCP的各种输入;TCP消息处理任务在处理完每次消息后,根据当前响应节点的状态是否为双机活跃状态决定是否产生一个TCP连接状态备份消息,发送给备份节点上运行的容错TCP任务;TCB若节点状态为双机活跃获单机工作状态,该TCB的作用与普通TCP中的TCB相同,若节点状态为双机备份状态,则该TCB的作用为TCP连接状态的数据备份;TCP备份消息队列接收活跃节点发送来的TCP备份消息,该队列只在当前节点的状态为双机系统备份状态下有效;TCP备份消息处理任务在当前活跃节点的状态为双机系统备份状态时,把TCP备份消息队列中的备份数据按照一定的规则写到TCB中;(3.3)、实现容错TCP任务若当前节点的状态为双机系统活跃状态或单机系统工作状态,则TCP消息队列,TCP消息处理任务处于运转状态,备份消息队列和备份消息处理任务处于挂起状态;若当前节点处于双机备份状态,则备份消息队列,备份消息处理任务处于运转状态,TCP消息队列和TCP消息处理任务处于挂起状态;所述的检查点状态备份以及状态回滚恢复分别依次含有以下步骤检查点状态备份构建连接套接字,存储于TCP状态纪录(TCP Status LOG)系统中;构建套接字的备份并建立索引,存储于套接字目录中;对各响应节点逐个执行上述步骤在第i个步骤中执行各类读写操作,存储在TCP状态纪录系统中;构建第i个步骤的上层容错应用系统的备份并存储于上层容错应用系统的状态纪录子系统中;在第i+1步发现响应节点时效,即读写操作失效时,报告TCP状态纪录系统,并进行状态回滚恢复;从套接字目录中取出该套接字的备份件;根据该套接字备份件,从TCP状态纪录系统中取出套接字状态;根据该套接字状态,从上层容错应用纪录系统中取出相应的步骤顺序号i;在第i+1步根据TCP状态纪录系统中的套接字和第i步的读写操作内容在上层容错应用系统中进行读写操作;在上层容错应用系统中构建第i+1步的状态备份;在当前的响应节点,即原备份节点中进行第i+1步读写操作。
试验证明它可以用在机群服务器系统结构中提供高可用数据服务,也可用于高可用路由器的设计。


图1机群系统的结构。
图2机群服务器系统的结构。
图3上层容错应用系统的状态备份和回滚恢复。
图4容错TCP与上层容错应用软件实现高可用服务的模型。
图5双节点形成容错备份系统可能存在的状态配合。
图6普通TCP结构图。
图7容错TCP结构图。
图8活跃节点和备份节点上运行的容错TCP之间的交互。
图9功能测试程序流程图使用普通TCP的Client程序流程图。
使用容错TCP的Server程序流程图。
图10各种TCP和传输量下TCP吞吐率的比较。
具体实施例方式
当Cluster Server需要通过长时间TCP连接为Client提供数据服务的时候,由于Cluster中的响应节点发生局部负载过重或软硬件的故障,很有可能造成节点失效,无法再为Client提供相应的服务。如果需要在这种情况下实现服务的不中断,必须将失效节点上的服务转移到另外的节点上。而实现这种失效转移,最基本也是最常用的方法是进行Check Point状态备份,然后进行状态回滚恢复。其工作方式如图3所示。
在图3中,stepi可以是一条指令,也可以是一段有逻辑意义的指令段,其中可以用stepi的指令多少来衡量一个容错应用系统的备份粒度。
对于TCP来说,任何一次TCP协议发送网络数据包的操作都可能涉及到网络上另外一个TCP对等端的TCP协议状态变化,并且对等端的TCP协议状态变化由另外一端的软件系统进行控制,本地的TCP无法使得这些状态变化在远端重现,所以TCP的状态备份必须做到小粒度的备份,在每一次对远端进行逻辑写操作结束后进行相应的状态备份。对于使用TCP的上层应用来说,它使用TCP socket进行网络读写操作分散在应用的各个角落,并且在考虑上层应用的状态备份时,不可能根据TCP的备份粒度来进行应用状态的备份,应用状态的备份粒度只能根据应用指令的逻辑进行区分。一般地,应用的备份粒度要比TCP大,因为TCP的备份最少在两次socket操作之间进行,而应用的两次状态备份之间可能有多次socket操作。
一般当应用发生失效切换的时候,TCP连接也需要进行相应的切换。而根据上面的讨论,应用和TCP的备份粒度是不一样的,这样就产生一个问题,应用从上次应用状态备份数据开始进行回滚恢复,而TCP可能从失效应用的最后一次socket操作造成的TCP状态备份数据开始回滚恢复,应用在状态恢复中进行socket读写操作可能与对端TCP的数据流发生了错位。这种错位从TCP的角度来看没有问题,但是从网络远端的应用程序来看就发生了逻辑错误。对于这种TCP和上层应用的备份粒度不一致问题,需要在进行TCP状态备份的时候,上层容错应用系统同时备份一定数量过去的socket读写操作来解决。备份的读写操作中包括读写操作的读取和写入数据,数据长度,以及操作返回的结果。当应用程序在回滚恢复过程中重复进行socket读写操作的时候,不是在TCP上进行实际的数据读写操作,而是从备份的读写操作中返回相应的数据和结果。
容错TCP和上层容错应用配合实现高可用数据服务的模型如图4所示。
实现容错TCP的Server硬件体系结构和Cluster Server相同,该硬件平台上有两个Compute Node,一个Connect Node,三个节点之间通过商品化的以太网实现节点之间的互连。Connect Node负责与外部Internet的连接,在外部Internet和内部Compute Node之间转发数据。两个Compute Node形成双机备份的硬件环境,但是节点之间不提供相互的软硬件失效的硬件检测机制,他们只能通过心跳算法实现双机的状态监测。在这个双机备份系统中,Compute Node的状态可能处于如下四种状态中的一种双机系统活跃状态(Active),该状态下提供正常的计算服务,并将当前的软件状态备份到另外一个节点。
双机系统备份状态(Standby),该状态下不提供任何计算服务,只从Active节点获取状态备份信息,并保存状态备份信息。
单机系统工作状态(Oneworking),该状态下提供正常的计算服务,不产生任何软件状态备份。
非工作状态(Noworking)。该状态下不做任何工作。
两个Compute Node的状态组合可能存在情况如图5所示。
在正常的启动中,双机系统通过相互的软件协商确认Active Node和Standby Node。如果在工作过程中Active Node发生失效,那么其状态切换为Noworking,Standby Node状态切换到Oneworking,继续Active Node刚才的工作。如果工作过程中Standby Node发生了失效,那么Active Node的状态切换到Oneworking,失效的节点状态切换到Noworking。一旦Noworking Node可以重新开始工作,那么Oneworking Node状态切换到Active,NoworkingNode状态切换到Standby。
在上述硬件平台的每个节点上运行各自的HEROS操作系统,该操作系统由清华大学计算机系开发,是一个基于微内核的多任务实时操作系统。在HEROS操作系统中,实现了高层分布式共享消息队列系统,该系统基于以太网硬件基础,为上层任务提供一个实现节点间高效通讯的机制,同时在该系统的内部采用确认机制实现消息通讯的可靠性。在HEROS操作系统中还包含一部分简单的SSI软件,实现节点计算资源的统一映像,该SSI中也实现了节点之间的心跳状态监测,Active/Standby Node的选举与状态维护。Connect Node上运行的SSI软件能够根据当前的Active/Oneworking Node的位置进行相应的数据转发。
系统中每个节点虽然都运行HEROS操作系统,但是根据节点功能的不同,对HEROS操作系统进行了相应的裁减。在Connect Node上运行的HEROS接收到Internet来的IP包之后,并不交给Connect Node上的传输层协议软件,而是通过节点间消息通讯转发给Compute Node,Compute Node在需要发送一定的响应数据到Internet上的时候,Compute Node并不将这些数据交给Compute Node上的IP协议软件,而是通过节点间消息通讯发送给Connect Node的IP协议软件,这种操作系统的功能裁减实现了节点之间的功能区分。
在HEROS操作系统中实现了丰富的网络协议,包括整个TCP/IP协议簇。HEROS操作系统实现了完整的TCP协议,TCP以一个独立的任务运行在Compute Node上,它维护着所有TCP连接状态的TCB数据结构,一个TCB对应一个TCP socket连接。TCP任务接收来自其他系统的各种消息,包括从Connect Node转发过来的TCP报文,系统时钟发来的时钟中断,应用程序调用socket函数的命令等等,TCP任务将这些不同的输入全部转化为统一的消息,放入TCP任务的接收消息队列中,然后不停的从消息队列中获取输入消息,根据消息的不同或者对相应的TCB进行状态修改,或者产生一些输出。HEROS中的TCP结构如图6所示。
容错TCP以普通TCP实现为基础,如图7所示。
容错TCP的结构包括如下一些部分系统的状态标识,表示该容错TCP运行的Compute Node的状态,可能为Active,Standby,Oneworking,Noworking。
TCP消息队列与普通TCP中的消息队列相同,用来接收TCP的各种输入。
TCP消息处理任务,与普通TCP消息处理任务类似,主要处理TCP消息队列中的消息,但是与基本的TCP消息处理任务有点不同,该任务在处理完每次消息之后,根据当前Node的状态是否为Active,决定是否生成一个TCP连接状态备份消息,发送给Standby Node上运行的容错TCP任务。
TCB与普通TCP实现中的TCB一样,但是其作用根据运行TCP的Node状态不同而不同,如果Node状态为Active或Oneworking,那么该TCB的作用与普通TCP中的TCB相同。如果Node状态为Standby,那么该TCB的作用为TCP连接状态数据的备份地。
TCP备份消息队列该队列用来接收Active Node发送来的TCP连接状态备份消息,该队列只在当前Node的状态为Standby时有效。
TCP备份消息处理任务处理备份消息队列中的备份数据,将备份数据按照一定的规则直接写到TCB中,该任务只在当前Node的状态为Standby时有效。
在容错TCP的结构中有两套消息接收与处理机制,但是它们不可能同时运转,具体某个时候由那套消息接收机制运转根据当前Node的状态确定。如果当前Node的状态为Active或Oneworking,TCP消息队列和TCP消息处理任务处于运转状态,备份消息队列不可能接收到任何消息,备份消息处理任务没有任何消息可以处理,处于挂起状态。同样,如果当前TCP处于Standby状态,那么备份消息队列和任务处于运转状态,TCP消息队列由于收不到任何消息,使得TCP消息处理任务处于挂起状态。两个Compute Node上运行的容错TCP相互交互备份信息的结构如下图所示。另外,在Compute Node的Standby/Oneworking状态切换过程中,必须等待备份消息处理任务将备份消息队列中的消息处理完毕,TCP才能正常工作。
在容错TCP中,TCB既作为TCP维护连接状态的数据结构,也可以作为TCP连接状态数据的LOG系统,所以在容错TCP的实现中首先必须对TCB的数据结构进行一定的修改,使得TCB数据结构可以实现上述的两种功能。TCB中有一个数据项用来指示当前TCP连接的状态,取值范围为{TCP_FREE,TCP_CONNECT,TCP_ESTABLISH,TCP_WAIT…},现在由于具有一种新的TCB状态,即备份状态,所以该数据项的取值范围增加一个TCP_BACKUP。其次,我们需要通过一个标志来设置某个TCP连接是否采用容错备份机制,所以在TCB中添加一个BOOLEAN型数据项IsFaultToleranceMode,用来标示该TCP连接是否采用容错备份的工作方式。最后,由于容错TCP中必须实现部分socket读写操作的备份,所以必须在TCB数据结构中添加两个读写事件的备份链表。
对于容错TCP,必须在适当的时候将TCP的连接状态备份到Standby Node上,这样就必须对TCP的消息处理任务进行一定的修改,当某个消息处理导致向对等的TCP连接端发送了TCP报文,那么根据该TCP连接生成一个状态备份消息发送给StandbyNode上运行的容错TCP。如果是上层应用调用socket读写操作,同样需要将该读写操作作为一个备份消息发送给Standby Node,由Standby Node上的容错TCP将该读写操作作为一个备份数据放入TCB的读写事件备份链表中。
容错TCP根据所处的Node状态的不同,需要运行不同的消息处理任务,同样需要为TCP添加一种新的消息处理机制,用于接收和处理备份消息。
最后,需要对TCP提供的socket API进行一定的修改,方便上层容错应用软件的设计。在容错TCP中添加几个新的socket API函数tcp_setsockftmode,tcp_restoreconnect,tcp_releaserwevent,tcp_beginsockbackup。tcp_setsockftmode函数使得应用程序可以方便的设置自己的TCP连接是否采用容错备份的工作方式进行工作。Tcp_restoreconnect函数使得应用程序可以在一次主备切换后从备份的数据主动恢复原来的TCP连接。Tcp_releaserwevent函数使得应用程序可以在任何时候释放备份数据中已经备份部分socket读写操作,一般该操作在容错应用程序做状态备份的时候执行。Tcp_beginsockbackup函数使得容错应用可以强制的在某一个时候将TCB中的所有信息备份到备份TCB中。
对容错TCP的测试分为功能测试和性能测试两个部分,在功能测试中,主要设计一个简单的使用容错TCP的Server应用,它的主要工作是接收来自使用普通TCP的Client应用发送来的TCP连接请求,然后与Client建立TCP连接通道。Server在TCP连接通道上发送带有顺序编号的TCP报文,Client接收到这些带有编号的TCP报文后将其原样返回给Server。在Client/Server正常工作过程中,采用某种手段使得Compute Node发生Standby->Oneworking的切换,然后观察Client是否能够觉察到Server的数据服务中断。使用容错TCP的Server程序和使用普通TCP的Client程序流程分别如图9所示。
通过功能测试应用的测试,容错TCP可以与普通TCP进行正常的TCP交互,并且当Server端发生失效切换后,Client应用察觉不到Server应用的切换,整个数据服务正常进行。
在TCP的性能测试中,TCP的吞吐率是一个主要的性能指标。ttcp程序是一个非常简单的测试点对点TCP连接吞吐率的benchmark程序,该程序的大致流程根据一定大小的数据传输所花费的时间,然后计算出TCP连接的吞吐率。我们对该程序做了一些简单的修改,使得该程序可以在容错TCP上运行。由于测试主要是为了对比基本TCP和容错TCP的性能差别,所以我们搭建了一个基本的10M以太网环境,用一台SUN工作站作为Client与Server形成点对点TCP连接的物理环境,对基本TCP和容错TCP做了多组比较测试。测试结果如图10。
在图中部分测量的Client吞吐率数据与Server的测量数据差别比较大,并且一般是Client的数据要比Server的数据要高,其中主要的原因的SUN操作系统的小时间段的定时不准所致。当传输数据量上到1M的时候,Server和Client的测试数据就比较吻合。根据测试的数据,可以计算出容错TCP的吞吐率性能只有非容错TCP的48.83%,其中主要的原因是容错TCP必须保持比较频繁的状态备份,并且节点间的消息通讯可能占用大量的处理时间。与已有的一些容错TCP实现方案的性能相比,新容错TCP的性能虽然比不上WrappingServer-side方法中的一些优化方法的性能,但是与其他的实现方法相比还是不错的,并且新容错TCP克服了Wrapping Server-side方法中不能实现复杂容错应用的缺点。当然对容错TCP的性能提高将是我们对容错TCP研究的下一个重点。
本发明描述的容错TCP从Server体系结构的发展出发,提供了一个可行的高可用数据服务解决方案。首先它的实现比TCP Splice方法中的proxy要简单,并且避免了TCP Splice方法中再次引入单点失效的问题。它和MTCP方法相比,不需要更改TCP协议标准,容错TCP可以和标准TCP实现正常的TCP交互,这样就可以不需要同时修改TCP两个对等端的代码,只需要在Server端单独实现容错TCP的功能而实现高可用数据服务,并且与MTCP相比,避免了上层容错应用的大量无效状态备份,增加了系统的性能。它和Wrapping Server-side TCP相比,充分的考虑了上层容错应用的设计问题,可以在容错TCP的基础上实现复杂的上层容错应用。
本发明描述的容错TCP不仅可以用在Client/Server结构中提供高可用的数据服务,也可以用于高可用的路由器设计。对于高可用的路由器设计,其体系结构也经历了从集中到分散并行体系结构的过程。从某种角度来看,分布式路由器中的线卡就相当于Cluster Server中的Connect Node,路由处理器相当于Cluster Server中的Compute Node。路由处理器上运行的一些路由协议软件,如使用TCP的BGP协议可以看作为其他路由器提供BGP数据服务的服务应用,容错TCP和适当设计的容错BGP一起可以实现路由协议的无缝失效切换,实现高可用的路由器。
权利要求
1.可容错的传输控制协议的实现方法,其特征在于,它是一种把机群系统(Cluster)用作提供因特网(Internet)服务的服务器,而且它的上层容错应用系统与可容错的传输控制协议(TCP)状态的备份粒度保持一致的可容错TCP的实现方法,它依次有如下步骤(1)、把机群系统用作提供因特网服务的服务器,以构筑相应的上层容错应用系统把机群系统中一部分节点作为与外部连接的连接节点(Connect node),连接节点的一个或多个网络接口与因特网连接,连接节点同时还与机群系统的内部交换系统(Switch Fabric)连接;另外一部分节点作为外部服务请求的响应节点(Compute node),响应节点只与机群系统的内部交换系统连接;连接节点在外部因特网和响应节点之间中转服务请求和响应数据,响应节点在获得连接节点转发来的请求后,进行相应的计算,再通过连接节点返回响应数据;它依次会有如下的步骤(1.1)、建立实现容错TCP的硬件平台它含有两个响应节点,一个连接节点,三个节点之间通过商品化的以太网实现节点间的互连,两个响应节点形成双机备份的硬件环境,其中,一个响应节点是另外一个活跃节点的备份节点;(1.2)、设立系统的状态标识,表示该容错TCP运行的响应节点状态双机系统活跃状态(Active),该状态提供正常的计算服务,并且把当前的软件状态备份到另外一个响应节点;双机系统备份状态(Standby),该状态不提供计算服务,只从活跃节点获取并保存状态备份信息;单机系统工作状态(Oneworking),该状态提供正常的计算服务,不产生任何正常的软件状态备份信息;非工作状态(Noworking),该状态不做任何工作;(2)、上层容错应用系统对响应节点进行检查点(Check Point)状态备份,然后进行状态回滚恢复其中,在进行TCP状态备份时,上层容错应用系统同时备份一定数量过去的套接字(Socket)读写操作,使得上层容错应用程序在回滚恢复过程中重复进行读写操作时避免在TCP上进行实际的数据读写操作,而是从备份的读写操作中返回相应的数据和结果,以防止应用层次的逻辑错误;(3)、容错TCP的实现依次含有如下几个步骤(3.1)、响应节点上TCP的实现方法一个TCP的控制块(TCB)对应一个响应节点上的TCP套接字连接,TCP任务接收来自其他系统的各种消息并把这些不同的输入全部转化为统一的信息,放在TCP任务的接收消息队列(TCP message queue)中,TCP消息处理任务不停地从消息队列中获取输入信息,根据消息的类型或者对TCB进行状态修改,或者产生一些输出;(3.2)、构建容错TCP的结构它含有如下部分系统的状态标识表示容错TCP运行的响应节点可能的状态双机系统活跃状态,双机系统备份状态,单机系统工作状态和非工作状态;TCP消息队列与普通TCP的消息队列相同,用于接收TCP的各种输入;TCP消息处理任务在处理完每次消息后,根据当前响应节点的状态是否为双机活跃状态决定是否产生一个TCP连接状态备份消息,发送给备份节点上运行的容错TCP任务;TCB若节点状态为双机活跃或单机工作状态,该TCB的作用与普通TCP中的TCB相同,若节点状态为双机备份状态,则该TCB的作用为TCP连接状态的数据备份;TCP备份消息队列接收活跃节点发送来的TCP备份消息,该队列只在当前节点的状态为双机系统备份状态下有效;TCP备份消息处理任务在当前活跃节点的状态为双机系统备份状态时,把TCP备份消息队列中的备份数据按照一定的规则写到TCB中;(3.3)、实现容错TCP任务若当前节点的状态为双机系统活跃状态或单机系统工作状态,则TCP消息队列,TCP消息处理任务处于运转状态,备份消息队列和备份消息处理任务处于挂起状态;若当前节点处于双机备份状态,则备份消息队列,备份消息处理任务处于运转状态,TCP消息队列和TCP消息处理任务处于挂起状态;
2.根据权利要求1所述的可容错的传输控制协议的实现方法,其特征在于步骤2所述的检查点状态备份以及状态回滚恢复分别依次含有以下步骤检查点状态备份构建连接套接字,存储于TCP状态纪录(TCP Status LOG)系统中;构建套接字的备份并建立索引,存储于套接字目录中;对各响应节点逐个执行上述步骤在第i个步骤中执行各类读写操作,存储在TCP状态纪录系统中;构建第i个步骤的上层容错应用系统的备份并存储于上层容错应用系统的状态纪录子系统中;在第i+1步发现响应节点时效,即读写操作失效时,报告TCP状态纪录系统,并进行状态回滚恢复;从套接字目录中取出该套接字的备份件;根据该套接字备份件,从TCP状态纪录系统中取出套接字状态;根据该套接字状态,从上层容错应用纪录系统中取出相应的步骤顺序号i;在第i+1步根据TCP状态纪录系统中的套接字和第i步的读写操作内容在上层容错应用系统中进行读写操作;在上层容错应用系统中构建第i+1步的状态备份;在当前的响应节点,即原备份节点中进行第i+1步读写操作。
全文摘要
可容错的传输控制协议的实现方法属于因特网服务器和路由器中高可用TCP的技术领域,其特征在于它是一种把机群系统(Cluster)用作提供因特网服务的服务器,即机群服务器系统,而且它的上层容错应用系统与可容错的TCP状态的备份粒度保持一致的可容错的实现方法。它在需要进行TCP状态备份时上层容错应用系统同时备份一定数量过去的读写操作。这样,当应用程序在回滚恢复过程中重复进行套接字读写操作时可从备份的读写操作中返回相应的数据和结果从而避免了应用层次的逻辑错误。它不仅可用在机群服务器结构中提供高可用的数据服务,也可用于高可用的路由器设计。
文档编号H04L12/28GK1482773SQ0310981
公开日2004年3月17日 申请日期2003年4月11日 优先权日2003年4月11日
发明者李昭, 徐恪, 徐明伟, 付立政, 昭 李 申请人:清华紫光比威网络技术有限公司, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1