针对网络中的套接字组提供协调流控制的方法和网络节点

文档序号:1559819 发布日期:2020-01-21 浏览:15次 >En<

阅读说明:本技术 针对网络中的套接字组提供协调流控制的方法和网络节点 (Method and network node for providing coordinated flow control for socket groups in a network ) 是由 J·马洛伊 于 2017-06-08 设计创作,主要内容包括:套接字组在通信网络中执行协调流控制。当发送方套接字加入所述组时,所述组中的接收方套接字向所述发送方套接字通告最小窗口作为消息大小限制。在从所述发送方套接字接收到消息时,所述接收方套接字向所述发送方套接字通告最大窗口以增大所述消息大小限制。所述最小窗口是所述最大窗口的一部分。(The socket group performs coordinated flow control in the communication network. When a sender socket joins the group, a receiver socket in the group advertises a minimum window to the sender socket as a message size limit. Upon receiving a message from the sender socket, the receiver socket advertises a maximum window to the sender socket to increase the message size limit. The minimum window is a portion of the maximum window.)

针对网络中的套接字组提供协调流控制的方法和网络节点

技术领域

本公开的实施例一般地涉及用于网络通信的系统和方法。

背景技术

透明进程间通信(TIPC)协议允许集群计算机环境中的应用与其它应用快速和可靠地通信,而不管其它应用在集群内的位置如何。TIPC网络包括单独处理元件或节点。TIPC应用通常通过在通信端点(被称为端口)之间交换数据单元(被称为消息)彼此通信。从应用的角度来看,消息是长度为1到66000字节的字节串,其内部结构由应用确定。端口是可以以面向连接的方式或无连接方式来发送和接收消息的实体。

面向连接的消息传送允许端口建立到网络中其它位置的对等端口的连接,并且然后与该对等端***换消息。可以使用握手机制来建立连接;一旦建立连接,连接便保持活动状态,直到被端口之一所终止,或者直到端口之间的通信路径被断开。无连接消息传送(又称为数据报)允许端口与网络中其它位置的一个或多个端***换消息。给定消息可以发送到单个端口(单播)或端口集合(多播或广播),具体取决于当发送消息时指定的目的地地址。

在组通信环境中,端口可以从一个或多个发送方接收消息,以及可以向一个或多个接收方发送消息。在某些场景中,由于目的地处的队列溢出(例如,当多个发送方同时向同一接收方发送消息时),由无连接通信发送的消息可能被丢弃。简单地增加接收队列大小以防止溢出可能存在接收方处的内存耗尽的风险,并且如果组大小的增加超过限制,则这种方法将无法扩展。此外,由于缺少不同消息类型之间的有效序列控制,可能未按顺序接收某些消息。因此,需要一种解决方案,其在理论上对于组通信是安全的,但在正常情况下不会严重限制吞吐量。

发明内容

在一个实施例中,提供一种针对网络中的套接字组中的接收方套接字的用于针对所述组提供流控制的方法。所述方法包括:当发送方套接字加入所述组时,向所述发送方套接字通告最小窗口作为消息大小限制;从所述发送方套接字接收消息;以及在接收到所述消息时,向所述发送方套接字通告最大窗口以增大所述消息大小限制,其中,所述最小窗口是所述最大窗口的一部分。

在一个实施例中,提供一种针对网络中的套接字组中的发送方套接字的用于针对所述组提供序列控制的方法。所述方法包括:通过单播从所述发送方套接字向对等成员套接字发送第一消息;检测到来自所述发送方套接字的第二消息将要通过广播来发送,所述第二消息紧跟所述第一消息之后;以及通过复制的单播来发送所述第二消息,其中,针对所有目的地节点复制所述第二消息,每个复制的第二消息通过单播来发送。

在一个实施例中,提供一种节点,包含网络中的套接字组中的接收方套接字。所述节点适于执行流控制以用于与所述组中的所述套接字通信。所述节点包括电路,适于使得所述节点中的所述接收方套接字执行以下操作:当发送方套接字加入所述组时,向所述发送方套接字通告最小窗口作为消息大小限制;从所述发送方套接字接收消息;以及在接收到所述消息时,向所述发送方套接字通告最大窗口以增大所述消息大小限制,其中,所述最小窗口是所述最大窗口的一部分。

在一个实施例中,提供一种节点,包含网络中的套接字组中的发送方套接字。所述节点适于执行序列控制以用于与所述组中的所述套接字通信。所述节点包括电路,其适于使得所述节点中的所述发送方套接字执行以下操作:通过单播向对等成员套接字发送第一消息;检测到来自所述发送方套接字的第二消息将要通过广播来发送,所述第二消息紧跟所述第一消息之后;以及通过复制的单播来发送所述第二消息,其中,针对所有目的地节点复制所述第二消息,每个复制的第二消息通过单播来发送。

在一个实施例中,提供一种节点,包含网络中的套接字组中的接收方套接字。所述节点适于执行流控制以用于与所述组中的所述套接字通信。所述节点包括流控制模块,适于当发送方套接字加入所述组时,向所述发送方套接字通告最小窗口作为消息大小限制;以及输入/输出模块,适于从所述发送方套接字接收消息。所述通告模块进一步适于在接收到所述消息时,向所述发送方套接字通告最大窗口以增大所述消息大小限制,其中,所述最小窗口是所述最大窗口的一部分。

在一个实施例中,提供一种节点,包含网络中的套接字组中的发送方套接字。所述节点适合于执行序列控制以用于与所述组中的所述套接字通信。所述节点包括输入/输出模块,适于通过单播从所述发送方套接字向对等成员套接字发送第一消息;以及序列控制模块,适于检测到第二消息将要通过广播来发送,所述第二消息紧跟通过单播从所述发送方套接字发送的所述第一消息之后。所述输入/输出模块进一步适于:通过复制的单播来发送所述第二消息,其中,针对所有目的地节点复制所述第二消息,每个复制的第二消息通过单播来发送。

在一个实施例中,提供一种由网络中的套接字组中的接收方套接字执行的针对所述组提供流控制的方法。所述方法包括:发起云计算环境中的节点实例的实例化,所述云计算环境提供用于运行所述节点实例的处理电路和存储器,所述节点实例可操作以:当发送方套接字加入所述组时,向所述发送方套接字通告最小窗口作为消息大小限制;从所述发送方套接字接收消息;以及在接收到所述消息时,向所述发送方套接字通告最大窗口以增大所述消息大小限制,其中,所述最小窗口是所述最大窗口的一部分。

在一个实施例中,提供一种由网络中的套接字组中的发送方套接字执行的用于针对所述组提供序列控制的方法。所述方法包括:发起云计算环境中的节点实例的实例化,所述云计算环境提供用于运行所述节点实例的处理电路和存储器,所述节点实例可操作以:通过单播从所述发送方套接字向对等成员套接字发送第一消息;检测到来自所述发送方套接字的第二消息将要通过广播来发送,所述第二消息紧跟所述第一消息之后;以及通过复制的单播来发送所述第二消息,其中,针对所有目的地节点复制所述第二消息,每个复制的第二消息通过单播来发送。

在结合附图阅读以下对特定实施例的描述时,其它方面和特性对于本领域的普通技术人员将变得显而易见。

附图说明

现在将仅通过示例的方式参考附图描述实施例。这些附图是:

图1示出根据一个实施例的加入套接字组的套接字的一个示例;

图2A、2B、2C和2D示出根据一个实施例的发送方套接字与其对等成员套接字之间的不同通信模式;

图3示出根据一个实施例的由接收方套接字维护的有限状态机;

图4示出根据一个实施例的多点到点流控制图;

图5示出根据另一个实施例的多点到点流控制图;

图6示出根据一个实施例的用于单播的点到多点流控制图;

图7示出根据一个实施例的用于多播的点到多点流控制图;

图8A和8B示出根据某些实施例的用于发送组广播的两个备选方案;

图9示出根据一个实施例的用于发送方套接字紧接在单播之后发送广播的一种序列控制机制;

图10示出根据一个实施例的用于发送方套接字紧接在广播之后发送单播的另一种序列控制机制;

图11是示出根据一个实施例的流控制方法的流程图;

图12是示出根据一个实施例的序列控制方法的流程图;

图13是根据一个实施例的网络节点的框图;

图14A是根据一个实施例的执行流控制的网络节点的框图;

图14B是根据一个实施例的执行序列控制的网络节点的框图;

图15是根据一个实施例的云计算环境的架构概览图。

具体实施方式

下面可以参考根据附图编号的特定元件。下面的讨论应该被视为本质上是示例性的,并且不应被视为由下面描述的实现细节所限制,如本领域的技术人员将理解的,实现细节可以通过使用等效功能元件来替换元件而进行修改。

在此提供用于套接字组之间的无损通信的系统、装置和方法。此处的术语“无损”指所有发送的消息正好以一个副本(即,基数保证)和它们被发出的顺序(即,顺序性保证)到达目的地。与常规通信协议(例如TIPC和传输控制协议(TCP))相比,要在此描述的通信机制通过在组通信中实现高效和鲁棒的流控制和序列控制而提供了改进。

要在此描述的通信机制具有存储器和资源效率。在一个实施例中,每个套接字最初在其接收队列中针对组中的每个对等成员保留最小窗口(Xmin)。当对等成员变为活动时,即,当该对等成员开始向套接字发送消息时,窗口针对该对等成员增大到最大窗口(Xmax)。在一个实施例中,可以将Xmin设置为受底层通信协议限制的单个消息的最大大小(例如,TIPC中的66KB),并且Xmax可以是Xmin的倍数,其中Xmax>>Xmin;例如,可以将Xmax设置为Xmin的十倍。相比之下,根据常规TIPC和TCP,一个套接字只保留1×Xmax,因为每个套接字在连接的另一端仅具有一个对等方;但是,强迫每个成员创建N个套接字,每个对等方一个。因此,使用常规TIPC和TCP,每个成员需要保留N×Xmax以与N个对等方通信。

根据在此提供的流控制,单个成员套接字针对其所有对等方保留窗口,其中基于需求和可用性来确定每个窗口的大小;因此,套接字可以协调其发往对等方的通告以限制所保留的空间。因为在任何时刻活动对等成员的数量通常比对等成员的总数小得多,所以能够显著减小每个套接字中的平均接收队列大小。通告窗口的管理是流控制机制的一部分,以便即使多个对等成员同时向接收队列发送消息,也防止大小减小的接收队列溢出。

此外,提供一种序列控制机制,以当在不同消息类型的序列(例如,单播和广播的组合)中发送消息时,确保在组中发送的消息的顺序传送。常规TIPC包含对链路层协议的扩展,该扩展保证广播消息不丢失或不会被无序接收,并且单播消息不丢失或不会被无序接收。但是,不能保证广播消息和单播消息的序列可以以相互的顺序次序发送。因此,在链路层处,在单播消息之后发送的广播消息可能绕过该单播消息,以在单播消息之前到达目的地;同样,在广播消息之后发送的单播消息可能绕过该广播消息并且在广播消息之前到达目的地。如将在此描述的,序列控制保证广播消息和单播消息的顺序传送。

图1示出根据一个实施例的在通信网络中的套接字组。如在此使用的,“套接字”是驻留在节点(例如,物理主机)上的通信实体。套接字组可以驻留在一个或多个节点上,其中在多个节点的情况下,多个节点可以具有不同的处理器类型或者使用不同的操作系统。一个或多个套接字可以驻留在同一节点上。每个套接字由套接字标识符唯一地标识;例如,以(Node,port)的形式,其中Node标识套接字所在的节点,Port标识该节点上用于发送和接收消息的通信端点。多个套接字可以形成一个组;组中的每个套接字被称为组成员、成员套接字、或者成员。一个套接字可以仅与其对等成员(即,同一组的其它套接字)交换消息。

套接字根据通信协议彼此通信。在此示例中,套接字通过协议实体110来发送和接收消息,协议实体110执行协议操作并且与其它通信层(例如链路层)协调。协议实体110维护用于注册组成员的分布式绑定表120。在一个实施例中,分布式绑定表120在包含套接字的所有节点上分布或复制。分布式绑定表120记录组中的每个成员标识(ID)与对应套接字标识符之间的关联或映射。每个成员套接字仅映射到一个成员ID;同一成员ID可以映射到多于一个的套接字。

每当新成员加入组或者现有成员离开组时,更新组成员关系。套接字可以通过向协议实体110发送加入请求来加入组。加入请求标识该套接字请求加入的组ID以及该套接字请求映射到的成员ID。套接字可以通过向协议实体110发送离开请求来请求离开组。离开请求标识该套接字请求离开的组ID以及该套接字请求与其取消关联的成员ID。每个成员套接字可以订阅成员关系更新。当新成员加入组时以及当现有成员离开该组时,订阅成员套接字从协议实体110接收更新。每个成员关系更新标识了成员ID与(节点,端口)对以及组ID之间的关联或取消关联。

图2A-2D示出可以由套接字用于与其对等成员通信的某些消息类型。在一个实施例中,消息类型包括单播、任播、多播以及广播。图2A-2D中的每个圆表示一个套接字,套接字上的数字表示该套接字的成员ID。图2A示出单播的示例,发送方套接字通过单播向接收者发送消息,该接收者由唯一标识接收方套接字的套接字标识符来标识。图2B示出任播的示例,发送方套接字通过任播向接收者发送消息,该接收者由成员ID来标识。因为成员ID可以映射到多于一个的套接字,所以可以向与成员ID相关联的任何一个套接字发送任播消息。在某些实施例中,可以向与相同成员ID关联的多个套接字之一发送来自发送方套接字的任播消息。可以通过循环、负载等级(例如,可用容量或活动对等成员的数量)、循环和负载等级的组合、或者基于其它因素,从此类多个套接字中选择接收者套接字。可以由图1的协议实体110、发送方套接字、或者二者协作来执行接收者套接字的选择。在图2B的示例中,实线和虚线指示用于从发送方套接字向具有成员ID=28的两个套接字之一发送任播消息的两个备选路径。在选择标准是组合的循环和负载等级的实施例中,可以通过循环来首先选择下部套接字28作为任播消息的接收者。但是,如果下部套接字28此时尚未通告足够的窗口以发送任播消息,则选择具有相同成员ID的下一个套接字(例如,上部套接字28)并且检查其通告窗口大小。在存在具有相同成员ID的两个以上套接字的场景中,该过程继续,直到找到满足选择标准的具有相同成员ID的套接字。在一个实施例中,如果没有找到具有足够窗口的目的地套接字,则可以选择根据循环算法的第一个套接字,并且阻止发送方套接字发送,直到选定套接字通告更多窗口为止。

图2C示出多播的示例,发送方套接字通过多播向由一个或多个成员ID标识的多个接收者发送消息。与一个或多个成员ID相关联的所有套接字接收到消息的副本。在图2C的示例中,具有成员ID=28的两个套接字接收到多播消息。如果多个套接字与被标识为多播接收者的相同成员ID相关联,则所有这些套接字都接收到消息的副本。

图2D示出广播的示例,发送方套接字通过广播向所有对等成员发送消息。在一个实施例中,可以从发送方套接字向协议实体110(图1)发送广播消息,协议实体110复制消息并且经由链路层交换机向所有对等成员发送消息副本。

在任何给定时间,任何给定套接字都可以充当向多个对等成员(例如在多播和广播的情况下)发送消息的发送方套接字。任何给定套接字还可以充当是来自多个对等成员的消息的公共目的地的接收方套接字。前一种场景被称为点到多点场景,后一种场景被称为多点到点场景。以下描述解释一种多点到流控制机制,其保护接收方套接字的接收队列以免溢出。该多点到点流控制机制确保来自多个对等成员的合并消息大小与接收队列的可用容量保持一致。

流控制机制的实施例的高级描述如下。当接收方套接字接收到指示另一个套接字(对等成员)加入其组的成员关系更新时,接收方套接字向对等成员发送提供最小窗口的第一通告。在一个实施例中,最小窗口例如是对等成员可以向接收方套接字发送的消息的最大大小。在一个实施例中,在专用的非常小的协议消息中携带该通告。通告在接收时被直接处理,并且不添加到接收队列。在接收方套接字从对等成员接收到消息之后,接收方套接字向对等成员发送提供最大窗口的第二通告。最大窗口允许对等成员向接收方套接字发送多个消息。当最大窗口达到或接近预定阈值时,接收方套接字可以补充窗口以允许对等成员继续向接收方套接字发送消息。因此,接收方套接字可以基于对等成员的需求而在其接收队列中保留空间。只有主动发送消息的那些对等成员才被分配最大窗口;其它对等成员被分配最小窗口以优化接收队列中的容量分配。

在一个实施例中,每个成员套接字跟踪每个对等成员的发送窗口和通告窗口,发送窗口用于向该对等成员发送消息,通告窗口用于从该对等成员接收消息。当成员套接字向对等成员发送消息时,使用发送窗口,以及当成员套接字从对等成员接收到通告时,更新发送窗口。当成员套接字从对等成员接收到消息时,使用通告窗口,以及当成员套接字向对等成员发送通告时,更新通告窗口。如果发送方套接字用于消息的接收者的发送窗口太小,则发送方套接字等待通告。在点到多点场景中,如果发送方套接字用于任何消息的接收者的发送窗口太小,则发送方套接字等待通告。

图3是示出根据一个实施例的由每个套接字维护的有限状态机(FSM)300的图。接收方套接字使用FSM 300来跟踪其对等成员的发送状态。FSM300包括四种发送状态:加入状态310、活动状态320、未决状态330以及回收状态340。下面将参考图4解释发送状态和它们之间的转变。

图4示出根据一个实施例的多点到点流控制图400。图400示出接收方套接字(接收方)与三个对等成员(发送方A、发送方B以及发送方C)之间的消息交换。初始地,接收方从协议实体110(图1)接收成员关系更新,其通知发送方A已加入组。在步骤401,接收方向发送方A通告最小窗口Xmin。在发送通告之后,在步骤402,接收方将发送方A置于加入状态310,并且将用于发送方A的通告窗口记录为Adv_A=Xmin。在步骤403,发送方A将其用于接收方的发送窗口记录为win_R=Xmin。用于发送方B的步骤404-406和用于发送方C的步骤407-409类似于用于发送方A的步骤401-403。

在步骤410,发送方A向接收方发送大小为J的消息,以及在步骤411,将其用于接收方的发送窗口win_R减小到(Xmin–J)。在接收到该消息时,在步骤412,接收方将用于发送方A的通告窗口Adv_A减小到(Xmin–J)。此时,接收方确定其接收队列是否接近满。在一个实施例中,可以通过接收方当前在组中具有的活动发送方的数量(#active)进行确定。如果用于接收方的活动发送方的数量小于阈值(即,#active<max_active),则接收方可以将用于发送方A的窗口增大到最大窗口Xmax。在该示例中,max_active=2。因此,在步骤413,接收方可以向发送方A发送窗口更新(例如,(Xmax–(Xmin–J))),以及在步骤414,将发送方A从加入310转变为活动320。接收方和发送方A分别在步骤414和415将通告窗口(Adv_A)和发送窗口(win_R)更新为Xmax;例如,通过将窗口更新(Xmax–(Xmin–J))添加到它们的相应窗口;即,Adv_A=win_R=(Xmin–J)+(Xmax–(Xmin–J))=Xmax。用于发送方B的步骤416-421类似于用于发送方A的步骤410-415。

在步骤422,发送方C向接收方发送大小为L的消息,并且发送方C和接收方分别在步骤423和424将其窗口从Xmin更新为(Xmin-L)。但是,此时,接收方不能将发送方C从加入310转变为活动320,因为接收方处的活动发送方的数量已达到阈值;即,#active=max_active。在一个实施例中,在步骤424,接收方将发送方C移动到未决330,并且发送方C在那里等待,直到接收方从另一个对等成员(例如,最不活动的对等成员)中回收了容量为止。

在图4的示例中,在步骤422,发送方A是三个发送方中最不活动的成员,因为在来自发送方B和发送方C两者的消息之前接收到来自发送方A的最后消息。因此,在步骤425,接收方向发送方A发送回收请求以回收分配给发送方A的未使用容量。该回收请求通知发送方A将其发送窗口恢复到Xmin,而不管其发送窗口的当前大小如何。在步骤426,接收方将发送方A转变为回收状态340。响应于该回收请求,在步骤427,发送方A向接收方发送复原(remit)响应,指示在步骤428将其发送窗口恢复到Xmin。在接收到复原响应时,在步骤429,接收方将发送方A转变为加入310,并且将Adv_A更新为Xmin。现在,在步骤430,接收方通过向发送方C发送通告(Xmax–(Xmin–L))来转到发送方C,并且将发送方C转变为活动320。然后,接收方和发送方C分别在步骤431和432更新通告窗口(Adv_C)和发送窗口(win_R)。更新后的窗口Adv_C和win_R具有相同的值,其为Adv_C=win_R=(Xmin–L)+(Xmax–(Xmin–L))=Xmax。

图5示出根据另一个实施例的多点到点流控制图500。类似于图4的图400,图500示出接收方与发送方A、发送方B和发送方C之间的消息交换。在图5的场景中,在活动对等成员的数量达到max_active阈值之前,接收方主动回收容量。在该场景中,在对等成员转变为活动320之后,将活动对等成员的数量(#active)与α×max_active进行比较,其中α是0与1之间的因子。例如,假设α=3/4并且max_active=2。在发送方B转变为活动320之后,#active=2,其大于α×max_active=1.5。因此,在步骤525,在处于加入310状态的另一个对等成员向接收方发送消息之前,接收方可以主动从最不活动的成员(发送方A)中回收容量。回收步骤525-529类似于图4中的对应回收步骤425-429。但是,在步骤530发送方C发送大小为L的消息之前,执行回收步骤525-529。主动回收允许处于加入310的下一个发送方变为活动,而无需在未决330下等待。在该示例中,一旦接收方从发送方C接收到消息,接收方便可以直接将发送方C从加入310转变为活动320,而无需使发送方C在未决330下等待。

以下描述进一步解释用于处于活动状态320的对等成员的流控制机制。再次参考图3中的FSM 300,当对等成员处于活动320时,每次对等成员向接收方发送消息时,对等成员消耗接收方的通告窗口的一部分。例如,如果发送方B在图4中的步骤421与422之间发送大小为M的消息,则发送方B处的发送窗口win_R和接收方处的通告窗口Adv_B两者更新为(Xmax–M)。在从发送方B接收大量消息之后,接收方可以恢复用于发送方B的容量;例如,当剩余通告窗口Adv_B达到下限时(即,当Adv_B<limit(限制)时,其中limit例如可以是Xmax的1/3、或者至少是一个消息的最大大小)。此时,接收方发送提供窗口(Xmax–Adv_B)的通告,以便发送方B将其发送窗口恢复到Xmax。接收方还将其通告窗口更新为Xmax。对等成员保持处于活动状态320,直到接收方回收其容量为止,此时对等成员转变为回收状态340。

图6示出根据一个实施例的点到多点流控制图600。在该示例中,存在一个发送方和两个接收方,即接收方A和接收方B;发送方仅向接收方A发送单播。初始地,在步骤601-606,每个接收方向发送方通告窗口X,并且设置其通告窗口Adv=X。在接收到通告时,发送方针对接收方A设置其发送窗口Win_A=X,以及针对接收方B设置其发送窗口Win_B=X。在步骤607,发送方向接收方A发送Size1的第一单播,以及在步骤608,将其发送窗口Win_A更新为(X–Size1),同时Win_B保持在X。同样,在步骤609,接收方A将其通告窗口Adv更新为(X–Size1)。假设发送方想要向接收方A发送Size2的第二单播,其中X>Size2>(X–Size1),这意味着可用发送窗口小于第二单播的大小。在步骤610,发送方一直等待,直到接收方A发送另一个通告以增大发送方的发送容量。在一个实施例中,当接收方A检测到用于发送方的通告窗口低于阈值时,接收方A可以发送另一个通告。在一个实施例中,接收方A可以在步骤611使Win_A增大Size1,以在步骤612将发送窗口Win_A恢复到X;备选地,恢复后的发送窗口可以大于初始容量X。在接收到增加的容量之后,在步骤613,发送方向接收方A发送Size2的第二单播。然后,在步骤614和615,发送方和接收方A将它们的相应窗口更新为(X–Size2)。

如图6中所示,单播回退到常规的点到点流控制。只要用于发送方的通告窗口具有足够的可用空间(例如,至少一个最大大小消息或另一个预定大小的空间),接收方就不会针对每个接收的消息发送通告。在一个实施例中,任播的流控制类似于单播的流控制。

图7示出根据另一个实施例的点到多点流控制图700。在该示例中,发送方向接收方A和接收方B两者发送多播。对于多播和广播,在允许发送方发送之前,发送方一直等待,直到所有目的地已通告了足够的窗口。在该示例中,在步骤707,发送方向接收方A和接收方B两者发送Size1的第一多播。在步骤708,将发送方用于两个接收方的发送窗口Win_A和Win_B从X减小到(X–Size1)。在步骤709,接收方A发送通告以将Win_A恢复到X;但是,Win_B保持处于(X–Size1)。在发送方可以发送Size2的第二多播之前,在步骤710,发送方等待来自接收方B的通告以将其发送窗口Win_B恢复到X。在该示例中,在步骤711将Win_A和Win_B两者增大到X之后,发送方向两个接收方发送第二多播。在一个实施例中,广播的流控制类似于多播的流控制。

以下描述涉及用于广播和单播消息的混合序列的序列控制机制。图8A和8B示出根据某些实施例的用于发送组广播消息的两种备选传输方法。术语“组广播”指从成员套接字向组中的所有对等成员广播消息,而不考虑它们的成员ID。图8A和8B中的每个正方形表示一个节点,并且互连节点的集合是集群。在一个实施例中,协议实体110(图1)基于组中的目的地节点的数量与集群大小之间的关系(例如,目的地节点的数量与集群大小的比率),独立地选择两种传输方法之一,其中目的地节点是托管对等成员的那些节点,集群是一组互连节点。

假设位于源节点800上的成员套接字将要向位于Node_A、Node_B和Node_C(被称为目的地节点)上的对等成员发起组广播。在图8A和8B的示例中,在Node_C上存在两个共址的对等成员,并且在Node_A和Node_B中的每一个上存在一个对等成员。图8A示出第一传输方法,通过第一传输方法,使用广播(更具体地说,使用UDP多播或链路层(L2)广播)在专用广播链路上发送组广播。在图8A中,源节点800上的发送方套接字向对等成员所在的所有节点发送组广播。仅目的地节点Node_A、Node_B和Node_C接受组广播消息,而集群中的其它节点丢弃该消息。在一个实施例中,Node_C针对位于其上的两个对等成员复制消息。

图8B示出第二传输方法,通过第二传输方法,将组广播作为复制的单播来发送。在图8B中,针对每个目的地节点复制来自源节点800上的发送方套接字的组广播消息,并且将在分立链路上每个复制的消息作为单播仅发送到目的地节点Node_A、Node_B和Node_C。在一个实施例中,Node_C针对位于其上的两个对等成员复制消息。当缺少多播或广播媒体支持时,或者当目的地节点的数量远小于集群中的节点的总数时(例如,当目的地节点的数量与集群大小的比率小于阈值时),可能发生该场景。

源节点800上的发送方套接字可以向其某些对等成员发送组广播序列、或者单播和组广播的混合序列。由于在新节点上添加新成员或者在组中的现有节点上删除最后一个成员,因此不同组广播中的目的地节点的数量可能有所变化。协议实体110(图1)针对每个组广播并且基于目的地节点的数量和集群大小,确定将组广播作为广播(例如L2广播/UDP多播,如在图8A的示例中)还是复制的单播(如在图8B的示例中)来发送。在TIPC中,链路层保证L2广播消息不丢失或不会无序到达,但如果没有相互序列控制,则广播消息可能绕过先前从同一发送方套接字发送的单播。在一个实施例中,当发送方套接字需要紧接其在发出单播之后向多个对等成员发送消息时,发送方套接字可以将消息作为复制的单播来发送。如果协议实体110由于大量目的地节点而确定要通过广播来发送消息,则发送方套接字可以推翻协议实体110的确定并且使消息作为复制的单播来发送。

更具体地说,发送方套接字可以将紧跟在单播消息(其中该单播消息在最近N秒内发送,N是预定数量)之后的广播消息转换成复制的单播消息。这种转换强迫广播消息遵循与先前的单播消息相同的数据和代码路径,并且确保在公共目的地节点处以正确顺序接收单播和广播消息。因此,发送方套接字可以在运行中切换发送消息类型,而不危及不同类型的消息的顺序传送。

图9示出根据一个实施例的用于发送方套接字紧接在单播消息之后发送广播消息的序列控制机制。在该示例中,发送方套接字(例如,套接字60)向其对等成员发送消息序列(msg#1、msg#2和msg#3)。从左上方到右下方,发送方套接字在910开始向对等成员套接字28发送单播消息(msg#1)。在920,发送方套接字向其对等成员(包括先前的接收者套接字28)发送广播消息(msg#2)。因为紧接在单播消息之后发送该广播消息,所以msg#2作为复制的单播消息来发送。在930,发送方套接字一直等待,直到复制的单播消息的所有目的地确认接收到msg#2。拒绝其他广播消息(但不是单播)尝试,直到所有目的地已确认。在940,当所有目的地已确认时,发送方套接字可以向所有对等成员发送另一个广播消息msg#3。对于msg#3和后续的广播消息,协议实体110(图1)可以基于目的地节点的数量与集群大小,确定是通过L2广播/UDP多播还是通过复制的单播来发送msg#3。

在第二场景中,单播消息可以紧跟在广播消息之后。如前所述,链路层传送保证消息不丢失,但由于链路层广播与复制的单播之间的变化,消息可能无序到达。在一个实施例中,使用序列号来确保广播和单播消息的混合序列的顺序传送,其中单播消息紧跟在广播消息之后。

图10示出根据一个实施例的用于发送方套接字紧接在广播消息之后发送单播消息的另一种序列控制机制。在该示例中,组中的每个发送方套接字保留一个序列号字段,其包含下一个发送的广播消息序列号,并且每个接收方套接字针对每个对等成员保留一个序列号字段,其包含来自该对等方的下一个接收的广播消息序列号。对于这些情况,每个成员保留每个对等成员的重新排序队列。在1010,发送方套接字(套接字60)处的下一个发送的广播消息序列号是N(即,bc_snt_nxt_N),以及来自套接字60的用于每个对等成员的下一个接收的广播消息序列号也是N(即,bc_rcv_nxt_N)。在1020,发送方套接字向其对等成员广播msg#1,其中msg#1携带序列号N。在1030,发送方套接字及其对等成员分别将它们的下一个发送/接收的序列号递增到bc_snt_nxt_N+1和bc_rcv_nxt_N+1。在1040,发送方套接字通过单播向对等成员之一发送msg#2,其中msg#2携带唯一标识先前发送的广播消息msg#1的序列号。在该示例中,msg#2的序列号是N,其与msg#1的序列号相同。在一个备选实施例中,msg#2的序列号可以是msg#1的序列号的预定增量(例如,加1)。发送方套接字和对等成员处的下一个发送/接收的序列号保持处于N+1。在1050,发送方套接字通过单播向对等成员之一发送msg#3,其中msg#3携带与先前的单播中相同的序列号N。发送方套接字和对等成员处的下一个发送/接收的序列号保持处于N+1。在1060,发送方套接字向其对等成员广播msg#4,其中msg#4携带序列号N+1。在1070,发送方套接字及其对等成员分别将它们的下一个发送/接收的序列号递增到bc_snt_nxt_N+2和bc_rcv_nxt_N+2。

由单播消息携带的序列号确保向接收方通知单播消息相对于先前的广播消息的正确排序。例如,如果单播msg#2在去往套接字28的途中绕过广播msg#1,则套接字28可以通过参考序列号来挑选出正确排序。

在此描述的流控制和序列控制的实施例提供超过常规网络协议的各种优势。例如,可以通过内存的有效使用来实现套接字。根据标准TIPC或TCP协议,接收方套接字需要针对N个对等成员保留接收队列大小(N×Xmax)。相比之下,根据在此描述的流控制,接收方套接字仅需要针对具有M个活动对等成员的N个对等成员保留接收队列大小((N–M)×Xmin)+(M×Xmax)),其中M<<N,Xmin<<Xmax。活动对等成员是处于活动状态320(图3)的那些套接字;组中的其它对等成员被称为非活动套接字。此外,套接字之间的通信具有带宽效率。每当这种支持可用时,广播便可以利用L2广播或UDP多播。在此描述的广播机制可以扩展到数百个或更多成员而不会阻塞网络。

图11是示出根据一个实施例的流控制方法1100的流程图。方法1100可以由网络中的套接字组中的接收方套接字执行以用于针对该组提供流控制。在步骤1110,方法1100开始,其中当发送方套接字加入组时,接收方套接字向发送方套接字通告最小窗口作为消息大小限制。在步骤1120,接收方套接字从发送方套接字接收消息。在接收到消息时,在步骤1130,接收方套接字向发送方套接字通告最大窗口以增大消息大小限制。最小窗口是最大窗口的一部分。

图12是示出根据一个实施例的序列控制方法1200的流程图。方法1200可以由网络中的套接字组中的发送方套接字执行以用于针对该组提供序列控制。在一个实施例中,方法1200在步骤1210开始,其中发送方套接字通过单播向对等成员套接字发送第一消息。在步骤1220,发送方套接字检测到将要通过广播来发送第二消息,第二消息紧跟在第一消息之后。在步骤1230,发送方套接字通过复制的单播来发送第二消息,其中,针对所有目的地复制第二消息,每个复制的第二消息通过单播来发送。在一个实施例中,发送方套接字等待来自其所有对等成员的第二消息的确认,直到发送方套接字可以发送下一个广播消息为止。可以通过广播或通过复制的单播来发送下一个广播消息,具体取决于目的地节点的数量与集群大小。

图13是示出根据一个实施例的网络节点1300的框图。在一个实施例中,网络节点1300可以是运营商网络或数据中心中的服务器。网络节点1300包括电路,其进一步包括处理电路1302、存储器1304或指令储存库以及接口电路1306。接口电路1306可以包括至少一个输入端口和至少一个输出端口。存储器1304包含能够由处理电路1302执行的指令,由此网络节点1300可操作以执行在此描述的各种实施例。

图14A是根据一个实施例的用于执行流控制的示例网络节点1401的框图。在一个实施例中,网络节点1401可以是运营商网络或数据中心中的服务器。网络节点1401包括流控制模块1410,其适于或可操作以当发送方套接字加入组时,向发送方套接字通告最小窗口作为消息大小限制。网络节点1401还包括输入/输出模块1420,其适于或可操作以从发送方套接字接收消息。流控制模块1410进一步适于或可操作以在接收到消息时,向发送方套接字通告最大窗口以增大消息大小限制。最小窗口是最大窗口的一部分。网络节点1401可以被配置为执行如在此已描述的各种实施例。

图14B是根据一个实施例的用于执行序列控制的示例网络节点1402的框图。在一个实施例中,网络节点1402可以是运营商网络或数据中心中的服务器。网络节点1402包括输入/输出模块1440,其适于或可操作以通过单播向对等成员套接字发送第一消息。网络节点1402还包括序列控制模块1430,其适于或可操作以检测到要通过广播来发送来自发送方套接字的第二消息,第二消息紧跟在所述第一消息之后。输入/输出模块1440进一步适于或可操作以通过复制的单播来发送第二消息,其中,针对所有目的地复制第二消息,每个复制的第二消息通过单播来发送。网络节点1402可以被配置为执行如在此已描述的各种实施例。

图15是包括云计算实体的层次结构的云计算环境1500的架构概览图。云计算环境1500可以包括通过网络1535连接的不同地理站点处的多个不同的数据中心(DC)1530。每个数据中心1530站点包括多个机架1520,每个机架1520包括多个服务器1510。应该理解,在备选实施例中,云计算环境可以包括任何数量的数据中心、机架和服务器。可以选择一组服务器1510来托管资源1540。在一个实施例中,服务器1510针对托管实体以及它们的被托管实体提供执行环境,其中托管实体可以是服务提供商,而被托管实体可以是由服务提供商提供的服务。托管实体的示例包括虚拟机(其可以托管容器)和容器(其可以托管包含的组件)等。容器是软件组件,可以在其内部包含其它组件。多个容器可以共享同一操作系统(OS)实例,并且每个容器针对其所包含的组件提供隔离执行环境。与VM相反,容器以及它们的包含的组件共享同一主机OS实例,并且因此产生更少的开销。服务器1510、VM、以及VM内的容器中的每一者可以托管任何数量的套接字,针对这些套接字可以实施上述流控制和序列控制。

根据一个实施例,在图15的虚线圆1515内示出服务器1510及其资源1540的进一步细节。云计算环境1500包括:通用网络设备(例如服务器1510),其包括硬件,该硬件包括一组一个或多个处理器1560,这些处理器可以是商用现成(COTS)处理器、专用集成电路(ASIC)、或者任何其它类型的处理电路,包括数字或模拟硬件组件或专用处理器;以及网络接口控制器(多个)1570(NIC),也被称为网络接口卡;以及非瞬时性机器可读存储介质1590,其中存储能够由处理器(多个)1560执行的软件和/或指令。

在操作期间,处理器(多个)1560执行软件以实例化系统管理程序1550和由系统管理程序1550运行的一个或多个VM 1541、1542。系统管理程序1550和VM 1541、1542是虚拟资源,在本实施例中它们可以运行节点实例。在一个实施例中,可以在一个或多个VM 1541、1542(它们在系统管理程序1550上运行)上实现节点实例,以执行如在此已描述的各种实施例。在一个实施例中,节点实例可以被实例化为执行如在此已描述的各种实施例的网络节点。

在一个实施例中,可以由用户1501或者由机器以不同的方式来发起节点实例实例化。例如,用户1501可以输入命令(例如,通过点击按钮、通过用户界面)以发起节点实例的实例化。备选地,用户1501可以在命令行或另一个类似界面上键入命令。另外,用户1501可以通过用户界面或者通过电子邮件、消息传送或电话向网络或云管理员提供指令,以发起节点实例的实例化。

实施例可以被表示为存储在机器可读介质(例如非瞬时性机器可读存储介质1590,也被称为计算机可读介质、处理器可读介质、或者其中包含计算机可读程序代码的计算机可用介质)中的软件产品。非瞬时性机器可读介质1590可以是任何合适的有形介质,包括磁、光、或者电存储介质,包括磁盘、光盘只读存储器(CD-ROM)、数字通用光盘只读存储器(DVD-ROM)存储设备(易失性或非易失性),例如硬盘驱动器或固态驱动器、或者类似的存储机构。机器可读介质可以包含指令、代码序列、配置信息、或者其它数据的各种集合,当执行时,它们使得处理器执行根据一个实施例的方法中的步骤。本领域的普通技术人员将理解,实现所描述的实施例必需的其它指令和操作也可以存储在机器可读介质上。从机器可读介质运行的软件可以与电路对接以执行所描述的任务。

上述实施例仅旨在作为示例。本领域的技术人员可以对特定实施例进行变更、修改和变化而不偏离仅由所附权利要求限定的范围。

32页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于控制无线通信系统中的拥塞的装置和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!