使用分段队列远程数据存取的设备互联失效备援系统和方法
【专利说明】使用分段队列远程数据存取的设备互联失效备援系统和方法
相关专利申请的交叉引用
[0001]本申请要求申请日为2013年6月13日提交的美国专利申请US 61/834,577的优先权,该专利申请在此全部引用作为参考。
技术领域
[0002]本发明涉及计算设备通信领域,特别是涉及一种作为两个计算设备之间远程存储器访问设备互联失效备援的方法和系统。
【背景技术】
[0003]社会日益依靠计算设备和网络来进行互动和开展商业活动。为了取得关键系统的高可用性工作需求,应该减少由软件和硬件缺陷导致的意外停工。
[0004]数个现代应用需要分布式协同系统,其中的计算设备之间可以快速通信,通常将这种系统称为集群计算、网格计算,或者高性能计算。该系统的配置通常包括一些松散或者紧密结合的计算设备,这些计算设备之间通过将一项任务分解成在集群之间分布的小的、一般并行工作的单元,以实现高吞吐量和/或低时延的数据传输。这种应用通常具有以下的特征:(1)复杂且高速、低时延的数据处理;(2)可靠,高容量且低时延的数据传输;以及
(3)高可用性,例如,可以在不受干扰的基础上为终端用户提供服务。但是,在实际应用中,现有的应用需要在这些性能需求之间进行平衡,因为,他们对系统行为产生的矛盾效应,通常的设计通常无法同时满足上述的三个特性,请参见下面的详细的阐述。
[0005]金融服务行业是需要高可用系统的行业的例子之一。其他需要高可用系统的行业包括库存管理(订单处理)系统、在线游戏、空中交通控制和在线预订和拍卖系统。实际上,很多的数据处理行为都是由使用可靠的高速及服务器集群通信的计算机系统支持的。
[0006]复杂且高速、低时延的数据处理,是指及时地执行大量的计算、数据库检索/更新等的能力,以及可以在尽可能短的时间间隔内产生可靠结果的能力。这可以通过并行处理实现,在并行处理中,多个工作单元在同一台物理机器上同时工作,或者多个工作单元在分布式集群中通过使用高速通信链路进行。在一些系统中,一个交互结果通常依赖于前面已经完成的交互的结果。因此,需要对这些消息的发送和接收进行维护。使用多条链路的并行连接的计算设备在总体上而言具有非确定性。例如,这种非确定性可以产生于竞争条件,操作系统的任务排布,或者网络变迀的延迟。例如,至少部分地归因域延时问题的影响,不同链路上传输的消息的时间不可能相同。
[0007]可靠、高容量、低延时的数据交互,是指在网络集群中相互协作的计算设备之间的数据传输、确保数据按照顺序传输的能力。一般使用TCP/IP来达到这个目的。TCP/IP是一个广泛使用的网络协议,可以确保数据的顺序传输,并且随着技术进步,其可以在较高的网络时钟频率中得以应用,具备了低时延传输的能力。但是,TCP/IP是为互联网和广域公共网络设计的一种复杂且成熟的协议,因此,具有相当数量的为网络路由、避免堵塞、带宽优化设计的特征,并因此需要额外的预先的处理,使得它不适宜在要求专门低时延数据链路中应用。
[0008]高可用系统试图确保已有的计算机系统的可用性,可以在预期的时间内尽可能地接近100%。这种可用性可以通过负责检测组件失效的冗余的软件和/或硬件来实现。为了可以在短时间内成功,并且相对于系统上运行的服务的透明化,失效备援系统需要对使用可靠通信链路,以对各个计算设备中的数据或状态进行复制,以确保所复制的数据消息的串行传输。本领域的技术人员可以理解的是,状态复制在非确定系统非常具有挑战性。另外,为了满足高速和高可靠性的要求,需要尽可能快地进行状态复制,且需要在一定程度上保证结果的准确性。通常也可以使用TCP/IP达到这个目的,但是由于其成熟网络特征相关的实质处理导致的高时延,使得它的性能不理想。低时延数据链路技术的例子,包括超文本传输、QP1、NUMAlink、Infiniband、Rapid1 和 PCI Express (PCIe)。不同的低时延数据链路技术,设计上需要在灵活性、扩展性与延时和通信成本进行不同的平衡。一些低时延数据链路技术,如超文本传输和QPI,不支持计算设备互联,并且仅为普通电路板上的上的处理器互联设计。而对于为设备互联设计的数据链路技术中,一些以低时延为代价来获取更好的可升级型和网络特征,而另一些则需要使用成本昂贵的专用硬件。现代应用的增长需要计算设备之间的高可用性和低时延的设备互联,但不需要计算设备之间成熟的网络性能。但是,为了这些应用的有效运行,他们也需要设备互联,以提供尽可能低的消息交互时延,而要达到这些要求也需要建立在成本效益的基础上。为了获得尽可能低的时延,一台互联设备需要丢弃集群应用中不需要的特征,并且需要数据传输所必须的处理步骤的数量。
[0009]远程存储器访问是一种可以进行高效数据传输的方法。消息数据从发送设备的存储器直接传输给接收设备的存储器,而不需要向或者从计算机操作系统中复制数据,且不需要会增加时延的网络路由协议处理的中间层。远程直接数据存取(RDMA)和可编程输入输出(ΡΙ0)是两个通常使用的远程存储器访问的实例。Infiniband和PCIe是两种支持远程存储器访问的设备互联技术。Infiniband广泛应用于集群互联,它包括一网络层,并且将路由信息添加至数据包中以支持较大的网络集群。但是,Infiniband技术并不能像处理器中的使用的硅那样广泛地应用,因为它需要在每个计算设备上执行Infiniband和PCIe之间的翻译步骤,导致的额外的时延和吞吐量的降低。仅需要使用一些小集群的应用不需要复杂的网络路由能力和额外的在线的网络路由层,这些都会增加不必要的时延。PCIe是一项串行计算机扩展总线标准,其主要用做印刷电路板级别的互联设备,与计算机母板上的处理器的接口扩展卡之间的连接。PCIe在许多种类的计算设备中普遍应用,并且现在已经天然地应用于处理器硅上,以进一步减少时延。PCIe在外部电缆上的应用可以增强后来版本的PCIe总线的性能。PCIe在最近才在外部电缆上应用,它作为集群互联的使用并不常见。但是,后来版本的PCIe总线的性能的增强,便宜的PCIe网络设备的可用性和意料之外的低时延,使得PCIe技术作为需要考虑成本效益和低时延设备互联的小应用集群中的低时延设备互联,变得越来越具吸引力。
[0010]虽然远程存储器访问可以取得极低的数据传输时延,但仍存在一些缺点。因为消息数据是直接传输至应用存储器中的,对于接收的应用设备没有任意数据到达的通知。另外一个缺点是,它不提供应用级别的消息编组和解组的协议。应用级别的传统的队列机制的协议可以满足实质前续处理和为队列管理控制消息交换而进行的网络转换操作的需求,但无法满足尽可能低的消息传输时延的目标,因为低时延数据连接协议摒弃了许多从像TCP/IP这些高层级的协议中承继的特征,缺少从传输间隙和间歇或者完全的连接失败中恢复的能力。在关键任务服务器集群中,高性能低延时设备互联的需求与高可用性服务的需求之间存在矛盾。低时延设备互联通常用于连接主要的计算设备和备份设备,以达到高可用集群部分的数据复制目标,且互联设备的失效可以摧毁集群的完整性。因此,需要一种划算的失效备援、低时延、设备互联的方法和系统,以确保计算设备之间串行的不间断的消息传输。
[0011]许多专利试图解决至少上述的一些问题。例如,Torudbakken等人的专利号为7,356,636的美国专利公开了一种PCI高速开关中的一种链路失效备援设备,允许主机访问与该开关连接的所有设备,即使上流端口中的一个端口与主机之间的连接断开。所述PCI高速开关注重于执行链路失效备援以恢复主机和设备之间的通信。在另外一个例子中,Hariharan等人的公开号为2008/0112311的美国专利申请公开了一种网络中的通信链路的失效备援。在另一例子中,公开号为2008/0239945的美国专利申请公开了一种PCI开关组件,其可以自动地进行连接失效备援。但是,现有技术无法满足高可用性系统所需要的速度和可靠性的需求。尽管现有技术中提供了使用外部开关来恢复PCIe通信,但是没有提供一种可靠、可恢复的机制来确保串口消息的不间断传输。特别地,现有技术中并没有提供一种高可用性、串行、确保消息传输低时延的设备互联。
【发明内容】
[0012]在本发明一实施例中,第一计算设备和第二计算设备之间的设备互联失效备援方法,包括在第一计算设备的第一通信接口卡和第二计算设备的第二通信接口卡之间创建一远程存储器访问链路,并检测与第一远程存储器访问链路相关的错误。所述方法进一步包括,为了应对所述错误,在第一计算设备上将与第一通信接口卡相关的分段队列的消息复制到与与第三通信接口卡相关的分段队列中,以激活第三通信接口卡与第二计算设备上的第四通信接口卡之间的第二远程存储器访问链路,通过第二远程存储器访问链路将与第三通信接口卡相关的分段队列消息重新发送至第四通信接口卡,且第二计算设备丢弃重复的接收消息,如果有的话。
[0013]在本发明另一实施例中提供了一种系统,所述系统包括第一计算设备,及通过第一远程存储器访问链路和一第二远程存储器访问链路与第一计算设备连接的第二计算设备。第一计算设备被配置为,为了应对第一远程存储器访问链路的错误的检测,将消息从与第一远程存储器访问链路相关的分段队列复制到与第二远程存储器访问链路相关的分段队列,并将消息从与与第二远程存储器访问链路相关的分段队列重新发送至第二计算设备,且第二计算设备被配置为丢弃重复的接收消息。
[0014]在本发明又一实施例中,提供了一种第一计算设备和第二计算设备之间设备互联失效备援的方法,所述方法包括建立第一计算设备和第二计算设备之间的第一远程存储器访问链路,并检测与第一远程存储器访问链路相关的错误。所述方法进一步包括,为了应对所述错误,第一计算设备将消息从第一远程存储器访问链路相关的分段队列复制到与第二远程存储器访问链路相关的分段队列,激活第一计算设备和第二计算设备之间的第二远程存储器访问链路,第一计算设备通过第二远程存储器访问链路将消息从与第一远程存储器访问链路相关的分段队列重新发送至