CN101491006B - 会合联盟内的近邻间通信 - Google Patents
会合联盟内的近邻间通信 Download PDFInfo
- Publication number
- CN101491006B CN101491006B CN2007800246226A CN200780024622A CN101491006B CN 101491006 B CN101491006 B CN 101491006B CN 2007800246226 A CN2007800246226 A CN 2007800246226A CN 200780024622 A CN200780024622 A CN 200780024622A CN 101491006 B CN101491006 B CN 101491006B
- Authority
- CN
- China
- Prior art keywords
- node
- ingress
- action
- message
- ring
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/42—Loop networks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/02—Topology update or discovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
- H04L12/4637—Interconnected ring systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明涉及用于帮助会合联盟内的近邻间通信的方法、系统和计算机程序产品。节点维护包括旁系环和对旁系环的相应入口节点的旁系环集入口表。节点可以在环树内的环的配置上交换旁系环集入口状态以彼此更新。节点可以参考旁系环集入口表,以及其它节点,来标识对作为该节点的旁系环的环的入口节点。消息可以被发送到旁系环中的入口节点。消息可以包括目标邻近环中的入口节点要将消息解析到目标邻近环中具有最接近所指示的目的地节点的节点ID的节点的指示。
Description
背景
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已改变人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和数据库管理)。最近,计算机系统被彼此耦合并被耦合到其它电子设备,以形成计算机系统和其它电子设备可以在其上传送电子数据的有线和无线计算机网络。结果,在计算机系统处执行的许多任务(例如,语音通信、访问电子邮件、控制家用电子设备、Web浏览、以及打印文档)包括多个计算机系统和/或其他电子设备之间经由有线和/或无线计算机网络的电子消息交换。
然而,为了利用网络资源来执行计算机化任务,计算机系统必须具有标识并访问网络资源的某一方式。因此,资源通常被分配唯一地标识资源并可用于将一个资源与其它资源进行区分的唯一标识符,例如网络地址。由此,期望利用资源的计算机系统可以使用对应于该资源的网络地址来连接到该资源。然而,如果计算机系统没有关于网络资源的网络地址的先验知识,则访问网络资源可能是困难的。例如,除非计算机系统(或另一联网计算机系统)知道网络打印机的网络地址,否则计算机系统不能在该网络打印机处打印文档。
因此,已经开发了各种机制(例如,域名系统(“DNS”)、现用目录(“AD”)、分布式文件系统(“DFS”))以供计算机系统标识(和访问)先前未知的资源。然而,由于可经由不同计算机网络访问的资源(例如,设备和服务)的数量和多样性,开发者通常需要开发实现各种不同资源标识和访问机制的应用程序。每一不同机制可以具有不同的编码要求,并且可能不向开发者提供应用程序中所需的所有功能。
例如,尽管DNS具有分布式管理体系结构(即,不需要集中式管理),但DNS不够动态、不是自组织的、支持弱数据和查询模型、且具有一组固定的根。另一方面,AD足够动态,但是需要集中式管理。此外,不同机制的各方面可能不彼此兼容。例如,使用DNS标识的资源可能不与DFS路由协议兼容。由此,开发者可能被迫选择最合适的机制并放弃其它机制的优点。
用于标识资源的机制在对等网络中尤其成问题。DNS提供了依赖于一组特殊根服务器来实现查找请求的查找服务,其中主机名作为关键字且IP地址作为值。此外,DNS需要信息(NS记录)的管理来允许客户机导航名称服务器分层结构。由此,在一资源能在网络上标识之前该资源必须进入DNS。在其中节点频繁地与网络连接和断开的更大规模的网络中,依赖于信息的输入并不总是实用的。另外,DNS专用于找出主机或服务的任务,并且一般不适用于其它类型的资源。
因此,已经开发了用于资源标识和访问的其它机制以试图解决这些缺点。多个机制包括比DNS更可伸缩的分布式查找协议。这些机制使用各种节点安排和路由算法来将请求路由到相应的资源并存储用于查找的信息。
这些机制中的至少一个在网络中的每一节点处利用局部多级邻居映射来将消息路由到目的地节点。这本质上得到其中每一节点是相应的节点树(其邻居映射中的节点)的“根节点”的体系结构。消息被递增地逐位路由到目的地ID(例如,***6=>**46=>,*346=>2346,其中*表示通配符)。这些类型的机制的路由效率是O(log N)个路由跳,并且要求节点维护大小为O(log N)的路由表。
这些机制中的至少另一机制向节点分配从线性数字环中取得的唯一ID。节点维护包含指向其直接后继节点(根据ID值)以及其ID值是值ID+2L的最近后继者的节点的指针的路由表。这些类型的机制的路由效率也是O(logN)个路由跳,并且要求节点维护大小为O(log N)的路由表。
至少一种另外的机制需要O(log N1/d)个路由跳,并且要求节点维护大小为O(D)的路由表。由此,所有这些机制的路由效率都至少部分地取决于系统中的节点数。
此外,由于ID(对于至少某些机制)可以在环上均匀分布,因此始终存在环上的节点之间的路由将导致某种低效的某一可能性。例如,路由跳可以横跨极大的地理距离,横跨更昂贵的链接、或穿过不安全的域等等。另外,当消息路由涉及多个跳时,存在这些事件将发生多次的某一机率。不幸的是,这些机制都没有考虑到节点相对于彼此的邻近性(物理的或其它方面的)。例如,取决于环上的节点分布,将消息从纽约路由到波士顿可涉及将消息从纽约路由到伦敦、到亚特兰大、到东京然后到波士顿。
因此,至少另一种更新近的机制通过将邻近性定义为单个标量邻近性度量(例如,IP路由跳或地理距离)来考虑邻近性。这些机制使用对路由表条目的基于邻近性的选择的概念。由于对每一路由表条目可能有许多“正确的”候选节点,因此这些机制试图从候选节点中选择最接近的节点。为此,这些机制可以提供允许每一节点确定具有给定IP地址的节点到其自身的“距离”的功能。消息在更接近的节点之间路由,以在路由到更远的节点之前向着目的地前进。由此,可保存某些资源,并且路由更高效。
不幸的是,这些现有机制通常没有特别地提供节点之间的对称关系(即,如果第一节点认为第二节点是其伙伴,则第二节点也将第一节点认为是其伙伴)、不能在环上的两个方向(顺时针和逆时针)上路由消息、不能基于多个邻近性度量来划分节点链表、并且不能基于多个邻近性度量来路由消息。这些缺陷可能在诸如,例如当将数据广播到网络的所有节点时限制网络的节点之间的数据的动态的、分布式的、且高效的传输。
简要概述
本发明涉及用于帮助会合联盟(rendezvous federation)内的近邻间(inter-proximity)通信的方法、系统和计算机程序产品。在某些实施例中,维护关于节点的旁系环集入口表。节点访问旁系环集入口表,该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。发现来自维护涉及环树配置的信息的可用资源的旁系环集入口表信息。基于所发现的旁系环集入口表信息用适当的旁系环集入口状态来更新旁系环集入口表。适当的旁系环集入口状态包括节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。
在其它实施例中,在环树中发送近邻间通信。在近邻间通信的一个实施例中,确定一节点要向节点的指定旁系环发送消息。该节点访问旁系环集入口表,该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的相应的至少一个入口节点。从该节点的旁系环集入口表中标识对于指定的旁系环的至少一个旁系环集入口。至少一个旁系环集入口中的每一个旁系环集入口都指示指定的旁系环的至少一个入口节点。消息被发送到至少一个指示的入口节点。
在近邻间通信的另一实施例中,确定始发节点打算将消息路由到环树内的目标近邻环中最接近给定节点ID的目的地节点。标识一个或多个入口节点,已知这些入口节点是目标近邻环和该目标近邻环的祖先环两者中的至少一个的成员节点。消息被发送到所标识的入口节点。该消息指示所标识的入口节点要将该消息解析到目标近邻环中具有最接近所指示的目的地节点的节点ID的节点。
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一些概念。该概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或者可以从此处的教示实践中习得。本发明的特征和优点可以通过在所附权利要求中特别指出的手段和组合来认识并获取。本发明的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本发明的实践而获知。
附图简述
为了描述能够获得上述和其它优点和特征的方式,将通过参考附图中示出的各具体实施例来呈现对以上简述的主题的更为具体的描述。可以理解,这些附图仅描述各典型实施例,从而不被认为是对其范围的限制,将通过使用附图用附加特征和细节来描述和说明各实施例,附图中:
图1示出了联盟基础结构的一个示例。
图2示出了帮助间接地将请求路由到伙伴的计算机体系结构的示例。
图3示出了联盟基础结构中节点之间采用已排序列表和相应的环的形式的示例二元关系。
图4示出了帮助邻近路由的示例性环的环。
图5示出了帮助邻近路由的示例性的、归纳了邻近性的环的分区树。
图5A以关于图5的环的分区树的各部分的附加细节示出了图5的环的示例性的、归纳了邻近性的分区树。
图6示出了用于本发明的原理的合适的操作环境。
图7示出了考虑了邻近性准则的、用于填充节点路由表的方法的示例流程图。
图8示出了用于对联盟基础结构的节点分区的方法的示例流程图。
图9示出了用于填充节点路由表的方法的示例流程图。
图10示出了用于数值地将消息路由到目的地节点的方法的示例流程图。
图11示出了用于邻近地将消息路由到目的地节点的方法的示例流程图。
图12A示出了节点建立现有联盟内的成员资格的示例。
图12B示出了联盟基础结构内的节点交换消息的示例。
图13示出了用于建立联盟基础结构内的成员资格的方法的示例流程图。
图14示出了用于维护联盟基础结构内的成员资格的方法的示例流程图。
图15示出了用于发现关于另一节点的活跃度信息的方法的示例流程图。
图16示出了消息模型和相关的处理模型的示例。
图17示出了可在功能层和应用层之间发生的多个活跃度交互的示例。
图18示出了形成请求-响应消息交换模式的一部分的消息跨环上的节点路由的示例。
图19A示出了帮助近邻间通信的示例性的、归纳了邻近性的环的分区树。
图19B示出了图19A中的示例性的、归纳了邻近性的环的分区树的另一视图。
图19C示出了图19A中的示例性的、归纳了邻近性的环的分区树的一部分的分区视图。
图19D示出了图19A中的示例性的、归纳了邻近性的环的分区树中的中间环的扩展视图。
图19E示出了图19A中的示例性的、归纳了邻近性的环的分区树的又一视图。
图19F示出了图19A中的示例性的、归纳了邻近性的环的分区树的再一视图。
图19G示出了图19F的一部分的扩展视图。
图20示出了用于维护环树中的节点的旁系环集的方法的示例流程图。
图21示出了用于在环树中发送近邻间通信的方法的示例流程图。
图22示出了用于在环树中发送近邻间通信的另一方法的示例流程图。
详细描述
本发明涉及用于帮助会合联盟内的近邻间通信的方法、系统和计算机程序产品。在某些实施例中,维护关于节点的旁系环集入口表。节点访问旁系环集入口表,该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。发现来自维护涉及环树配置的信息的可用资源的旁系环集入口表信息。基于所发现的旁系环集入口表信息用适当的旁系环集入口状态来更新旁系环集入口表。适当的旁系环集入口状态包括节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。
在其它实施例中,在环树中发送近邻间通信。在近邻间通信的一个实施例中,确定一节点要向节点的指定旁系环发送消息。该节点访问旁系环集入口表,该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的相应的至少一个入口节点。从该节点的旁系环集入口表中标识对于指定的旁系环的至少一个旁系环集入口。至少一个旁系环集入口中的每一个旁系环集入口都指示指定的旁系环的至少一个入口节点。消息被发送到至少一个指示的入口节点。
在近邻间通信的另一实施例中,确定始发节点打算将消息路由到环树内的目标近邻环中最接近给定节点ID的目的地节点。标识一个或多个入口节点,已知该一个或多个入口节点是目标近邻环和该目标近邻环的祖先环两者中的至少一个的成员节点。消息被发送到所标识的入口节点。该消息指示所标识的入口节点要将该消息解析到目标近邻环中具有最接近所指示的目的地节点的节点ID的节点。
本发明的范围内的实施例包括用于承载或其上储存有计算机可执行指令或数据结构的计算机可读介质。这类计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。作为示例而非局限,这类计算机可读介质可包括诸如RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备等物理存储介质、或可用来承载或储存采用计算机可执行指令、计算机可读指令或数据结构的形式的所期望的程序代码装置并可由通用或专用计算机系统访问的任一介质。
在本说明书和所附权利要求书中,“网络”被定义为允许在计算机系统和/或模块(例如,硬件和/或软件模块)之间传输电子数据的一个或多个数据链路(可能具有不同的速度)。当信息通过网络或另一通信连接(要么是硬连线、无线,要么是硬连线或无线的组合)被传送到或提供给计算机系统时,该连接被适当地视作计算机可读介质。因此,任何这样的连接被适当地称为计算机可读介质。以上的组合也应包括在计算机可读介质的范围之内。计算机可执行指令包括例如使通用计算机系统或专用计算机系统执行某一项或一组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。在某些实施例中,诸如,例如专用集成电路或门阵列等硬件模块被优化以实现本发明的原理。
在本说明书和所附权利要求书中,“节点”被定义为一起工作来对电子数据执行操作的一个或多个软件模块、一个或多个硬件模块、或其组合。例如,节点的定义包括个人计算机的硬件组件、以及诸如个人计算机的操作系统等软件模块。这些模块的物理布局并不重要。节点可以包括经由网络耦合的一台或多台计算机。同样,节点可以包括单个物理设备(诸如移动电话或个人数字助理“PDA”),其中,内部模块(诸如存储器和处理器)一起工作来对电子数据执行操作。此外,节点可以包括专用硬件,诸如,例如包括专用集成电路的路由器。
本领域的技术人员将理解,本发明可以在许多类型的节点配置的网络计算环境中实践,这些节点配置包括个人计算机、膝上型计算机、手持式设备、多处理器系统、基于微处理器的或可编程消费电子产品、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、网关、代理程序、代理服务器、防火墙、重定向器、网络地址转换器等。本发明也可以在通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程节点两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
联盟体系结构
图1示出了联盟基础结构100的一个示例。联盟基础结构100包括可以形成不同类型的联盟伙伴关系的节点101、102、103。例如,节点101、102、103可彼此联盟为对等体而不需要根节点。节点101、102和103中的每一个各自都有相应ID 171、182和193。
一般而言,节点101、102、103可利用联盟协议来形成伙伴关系并交换信息(例如,涉及与其它节点的交互的状态信息)。伙伴关系的形成以及信息的交换便于对资源的更高效且更可靠的访问。其它中间节点(未示出)可以存在于节点101、102和103之间(例如,ID在171和193之间的节点)。由此,例如在节点101和节点103之间路由的消息可穿过一个或多个其它中间节点。
联盟基础结构100中的节点(包括其它中间节点)可以包括相应的会合协议栈。例如,节点101、102和103分别包括相应的会合协议栈141、142和143。协议栈141、142和143中的每一个包括应用层(例如,应用层121、122和123)和其它较低层(例如,相应的其它较低层131、132和133)。会合协议栈中的每一层负责与将资源请求与相应的资源会合相关的不同功能。
例如,其它较低层可包括信道层、路由层和功能层。一般而言,信道层负责可靠地将消息(例如,使用WS-可靠消息通信(WS-ReliableMessaging)和简单对象访问协议(“SOAP”))从一个端点传输到另一端点(例如,从节点101到节点103)。信道层还负责处理传入和传出的可靠消息通信首部,并维护与可靠消息通信会话相关的状态。
一般而言,路由层负责计算向目的地的下一跳。路由层还负责处理传入和传出的寻址和路由消息首部并维护路由表。一般而言,功能层负责发出并处理诸如加入和离开请求、查验、更新和其它消息等会合协议消息,以及生成对这些消息的响应。功能层处理来自路由层的请求消息,并且如果有相应的响应消息,则使用路由层将其发回到始发节点。功能层还发起请求消息并利用路由层来传递请求消息。
一般而言,应用层处理从功能层传递的非会合协议专用数据(即,应用程序消息)。功能层可以访问来自应用层的应用程序数据,并且可以获得会合协议消息(例如,查验和更新)中的应用程序数据以及将应用程序数据置于该消息中。即,功能层可使得应用程序数据被承载在会合协议消息上,并且可使得应用程序数据被传回接收会合协议节点中的应用层。在某些实施例中,应用程序数据用于标识资源和资源兴趣。由此,应用层可以包括处理从其它较低层接收到的和发送到其它较低层的数据以标识资源和资源兴趣的应用程序专用逻辑和状态。
联盟机制
节点可以使用各种不同的机制来联盟。第一个联盟机制包括对等节点将信息转发给所有其它对等节点。当节点要加入一联盟基础结构时,该节点利用诸如,例如WS发现(WS-Discovery)等广播/多播发现协议来通告其存在并发出广播/多播寻找来检测其它节点。该节点然后建立与已经存在于网络上的其它节点的简单转发伙伴关系,并接受与新加入的节点的新的伙伴关系。之后,该节点只需将所有应用程序专用消息转发给所有其伙伴节点。
第二种联盟机制包括对等节点最高效地将应用程序专用消息发送到其目的地。当一新节点要加入一联盟基础结构时,该新节点利用诸如,例如WS发现等广播/多播发现协议来通告其存在并发出广播/多播寻找来检测作为该联盟基础结构的一部分的其它节点。在检测到另一节点时,该新节点建立与该另一节点的伙伴关系。从所建立的伙伴关系中,该新节点获知已经参与联盟基础结构的其它节点的存在。它然后与这些新获知的节点建立伙伴关系,并接受任何新传入的伙伴关系请求。
特定应用程序专用消息中的节点到达/离开和兴趣注册在该联盟基础结构上洪泛(flood),导致每一节点都在应用程序专用消息中具有其它伙伴节点和兴趣注册的全局知识。有了这一全局知识,任何节点可直接向已经表达了对应用程序专用消息的兴趣的节点直接发送应用程序专用消息。
第三种联盟机制包括对等节点非直接地将所有应用程序专用消息发送到其目的地。在该第三种机制中,节点被分配诸如,例如128位或160位ID等标识符(ID)。负责维护给定对应用程序专用消息的兴趣的注册的节点可被确定为其ID最接近通过将应用程序专用消息的目的地身份(例如,URI)映射(例如,散列)到该128位或160位ID空间所获得的ID的节点。
在该第三种机制中,节点到达和离开在整个结构上洪泛。另一方面,对特定应用程序专用消息的兴趣的注册被转发给被确定为负责维护这一注册信息的节点。出于可伸缩性、负载平衡和容错的目的,接收对特定应用程序专用消息的兴趣的注册的节点可以在其邻域集中可靠地洪泛该注册信息。对于指定节点的邻域集可以被确定为其ID在该指定节点的ID的任一侧上的预定范围内的节点集。
类似于第二种机制,新加入的节点利用诸如,例如WS发现等广播/多播发现协议来通告其存在并发出局部广播/多播寻找来检测已经是该联盟基础结构的一部分的节点。该新节点建立与所发现的节点的伙伴关系,并使用该伙伴关系来获知参与该联盟基础结构的其它新节点的存在。该新节点然后与新发现的节点建立进一步的伙伴关系,并接受任何新传入的伙伴关系请求。该新节点接受从其所负责的伙伴传入的对特定应用层专用资源的兴趣的注册,并且可在其邻域集上洪泛该注册。由此,消息一般可经由中间路由节点(例如,新加入的节点与其具有伙伴关系或者伙伴节点知道的节点)转发到其最终目的地。
响应于接收到传入的应用程序专用消息,该新节点将该消息转发给可能负责维护关于在消息中指定的目的地的注册信息的伙伴节点。由此,当使用该第三种机制时,联盟基础结构中的每一节点具有所有其它节点的全局知识,但是注册信息在节点之间高效地分区。应用程序专用消息仅经由可能负责维护对这些应用程序专用消息的兴趣的注册信息的伙伴节点来发送到其最终目的地。由此,通过仅转发给具有对所处理的消息的兴趣的注册信息的全局知识的伙伴节点来实现了间接性。这与其中间接性是通过转发给所有伙伴节点来实现的第一种机制形成对比。
第四种联盟机制包括对等节点将消息路由给其它对等节点。该第四种机制与第三种机制的区别至少在于节点到达/离开和对特定应用程序专用消息的兴趣的注册都被路由而不是洪泛。路由协议被设计成保证应用程序专用消息和表达对这些应用程序专用消息的兴趣的注册消息之间的会合。
图2示出了帮助间接地将请求路由到伙伴的计算机体系结构200的示例。计算机体系结构200描绘了可能分布在参与联盟基础结构的多个局部发现范围上的不同类型的计算机系统和设备。
工作站233可以包括已注册PnP提供者实例。为向其伙伴告知该PnP提供者实例的存在,工作站233通过联盟基础结构来路由注册请求201。注册请求201最初被转发给膝上型计算机231,后者进而将注册请求201转发给消息代理237,后者又进而将注册请求201转发给消息网关241。消息网关241将注册信息注册请求201保存在其数据库中,并将成功消息204返回给工作站233。
随后,另一已注册提供者实例,此次是运行服务的提供者实例,在工作站233内变得活跃。此次,该节点知道消息网关241负责注册,并将注册请求205直接转发给消息网关241。消息网关241将注册信息注册请求205保存在其数据库中,并将成功消息206返回给工作站233。
随后,打印机236(例如,UPnP打印机)被通电,并发送通告207。服务器234检测到通告207,并将注册请求208路由到消息代理237。消息代理237将注册请求208转发给消息网关241。消息网关241将注册信息注册请求208保存在其数据库中,并将成功消息210返回给服务器234。
随后,个人计算机242发出发现所有设备的查找请求211。由于个人计算机242不知道将查找请求211转发到何处,因此它通过工作站243来路由查找请求211。由于注册和查找请求被路由到同一目的地,因此路由协议本质上保证两个请求之间的会合将导致工作站243将寻找请求211转发给消息网关241。消息网关241查找其所维护的注册信息,并将寻找请求211转发给工作站233和服务器234两者。工作站233和服务器234将分别将响应消息214和216发送给个人计算机242。
该第四种机制通过将请求路由(而非洪泛)具有请求中所指定的注册的全局消息的节点(消息网关241)来工作。如将在以下更详细描述的,该第四种机制本质上保证路由可在O(log N)个跳中实现,其中N是参与联盟基础结构的节点数。由于该第四种机制高效地划分了节点伙伴关系和注册信息,因此它能伸缩到非常大的网络,甚至因特网。
尽管描述了多种联盟机制,但是本领域的技术人员在仔细阅读了本说明书之后可以清楚其它联盟机制也是可能的。
联盟中的节点之间的关系
因此,联盟由在其间协作以形成其中可系统地且高效地散布并定位信息的动态且可伸缩网络的一组节点构成。节点使用自反的、反对称的、传递的、总的、且在节点身份域上定义的二元关系被组织为已排序列表来参与联盟。该已排序列表的两端是联接的,由此形成环。由此,该列表中的每一节点可将其自身视为在该已排序列表的中间(作为使用模算术的结果)。此外,该列表被双重链接,使得任何节点可以在任一方向上遍历该列表。
每一联盟节点可被分配一来自0和某一固定上限之间的一组固定ID的ID(例如,由带有重复检测的随机数生成器)。由此,将该固定上限的ID加1将导致为0的ID(即,从链表的末尾移回该链表的开头)。另外,定义了从节点身份的值域到节点本身的1∶1映射函数。
图3描绘了示例链表304和相应的环306。给定这一环,可定义以下函数:
RouteNumerically(V,Msg):给定来自节点身份的值域的值V和消息“Msg”,将消息传递到其身份可使用该映射函数映射到V的节点X。
Neighborhood(X,S):Neighborhood(邻域)是节点X的任一侧上其势等于S的节点集。
当该联盟内的每一节点具有该环的全局知识时,通过直接将Msg发送到其身份通过向V应用该映射函数而获得的节点X来实现RouteNumerically(V,Msg)。或者,当节点具有其它节点的有限知识(例如,仅具有直接相邻的节点的知识)时,通过沿着环将消息转发到连贯的节点直到其到达目的地节点X来实现RouteNumerically(V,Msg)。
或者(且有利地),节点可以存储关于环的足够的知识来执行分布式二分搜索(而不必具有全局知识或实现直接相邻节点之间的路由)。环知识的量是可配置的,使得维护环知识对于每一节点有足够小的影响,但允许从减少环跳数目中提高路由性能。
如上所述,ID可使用在自然数的足够大的、有界的集合上定义的“<”(小于)关系来分配,这意味着其范围在0和某一固定值之间(包括端点)的一组有限数字上。由此,参与该联盟的每一节点被分配落入0和某一适当选择的上界之间(包括端点)的自然数。范围不必是紧密的,并且在分配给节点的数字之间可以有间隙。分配给节点的数字用作其在环中的身份。映射函数通过将落在两个节点身份之间的数字映射到其身份在数值上更接近该数字的节点来解决数字空间中的间隙。
该方法具有若干优点。通过向每一节点分配均匀分布的数字,该环的所有段都被均匀填充的可能性增加。此外,后继者、前导者和邻域计算可以使用模算术来高效地完成。
在某些实施例中,联盟节点被分配来自一ID空间的ID,该ID空间非常大,以致于两个节点被分配相同的ID的机率是高度不可能的(例如,当使用随机数生成时)。例如,一节点可被分配范围在0到bn-1的ID,其中b等于例如8或16,而n等于例如128位或160位等效数字。因此,节点可被分配例如范围在0到1640-1(或近似地1.461502E48)之间的ID。范围0到1640-1将提供例如足够数量的ID来向因特网上的每一节点分配唯一ID。
由此,联盟中的每一节点可具有:
ID,其是均匀分布在范围0到bn-1中的数值;以及
由以下各项构成的路由表(所有算术都以模bn完成):
后继者节点(s);
前导者节点(p);
邻域节点(pk,...,p1,p,s,s1,...,sj),使得
sj.s.id>(id+u/2),j≥v/2-1,且pk.p.id<(id-u/2),且k≥v/2-1;以及
路由节点(r-(n-1),...,r-1,r1,...,rn-1),使得
r±i=RouteNumerically(id±bi,Msg)。
其中b是数基,n是以位数为单位的字段大小,u是邻域范围,v是邻域大小,且算术是以模bn来执行的。为得到良好的路由效率和容错,u和v的值可以是u=b和v≥max(log2(N),4),其中N是物理上参与联盟的节点的总数。N可以例如在存在ID的均匀分布时从其长度大于或等于b的环段上存在的节点数中估算。b和n的典型值是b=8或16,且n=128位或160位等效数字。
因此,路由节点可以形成横跨环的对数索引。取决于节点在环上的位置,例如,当在集合id±bi(其中i=(1,2,...(n-1)))中的每一数字处有一现有节点时,精确的对数索引是可能的。然而,情况可以是在该集合中的每一数字处没有现有节点。在这些情况下,可选择最接近id±bi的节点作为路由节点。所得的算术索引并不是精确的,并且甚至可能对集合中的某些数字缺少唯一路由节点。
再次参考图3,图3示出了联盟基础结构中的节点之间采用已排序列表304和相应的环306的形式的二元关系的示例。已排序列表304的ID空间在范围0到28-1(即255)中。即,b=2且n=8。由此,图3所示的节点被分配范围在0到255的ID。已排序列表304利用自反的、反对称的、传递的、总的、且在节点身份域上定义的二元关系。已排序列表304的两端是联接的,由此形成环306。这使得图3中的每一节点可将其自身视为在已排序列表304的中间。已排序列表304被双重链接,使得任何节点可以在任一方向上遍历已排序列表304。用于遍历已排序列表304(或环306)的算术以模28来执行。由此,255(或已排序列表304的末尾)+1=0(或已排序列表304的开头)。
路由表指示ID 64的后继者是ID 76(从ID 64开始顺时针的紧接着的ID)。后继者可以在例如新节点(例如,具有ID 71)加入或现有节点(例如,ID 76)离开联盟基础结构时改变。同样,路由表指示ID 64的前导者是ID 50(从ID 64开始逆时针的紧接着的ID)。前导者可以在例如新节点(例如,具有ID 59)加入或现有节点(例如,ID 50)离开联盟基础结构时改变。
路由表还指示对ID 64的一组邻域节点具有ID 83、76、50和46。一组邻居节点可以是在ID 64的指定范围(即,邻居范围u)内的指定数量的节点(即,邻域大小v)。可能使用各种不同的邻域大小和邻居范围,诸如,例如V=4和U=10来标识邻域节点集。邻域集可以例如在节点加入或离开联盟基础结构时,或在指定数量的节点或指定范围改变时改变。
该路由表还指示ID 64可以路由到ID为200、2、30、46、50、64、64、64、64、76、83、98、135和200的节点。该列表通过标识最接近id±2i的集合中的每一数字的节点来生成,其中i=(1,2,3,4,5,6,7)。即,b=2且n=8。例如,ID为76的节点可从计算对64+23,即72最接近的节点来标识。
节点可以将消息(例如,对资源访问的请求)直接路由到前导者节点、后继者节点、邻域节点集中的任何节点、或任何路由节点。在某些实施例中,节点实现数值路由函数来路由消息。由此,可在节点X处实现RouteNumerically(V,Msg)来将Msg传递给联盟中其ID数值上最接近V的节点Y,并将节点Y的ID返回给节点X。例如,ID为64的节点可以实现RouteNumerically(243,Msg)来使得消息被路由到ID为250的节点。然而,由于ID 250不是对于ID 64的路由节点,因此ID 64可将消息路由到ID 2(对243最接近的路由节点)。ID为2的节点可以进而实现RouteNumerically(243,Msg)以使得消息被路由(直接地或通过其它中间节点)到ID为250的节点。由此,情况可以是RouteNumerically函数被递归地调用,其中每一调用将消息路由到更接近目的地的地方。
有利的是,本发明的其它实施例帮助基于一个或多个邻近性类别(例如,地理边界、路由特性(例如,IP路由跳)、管理域、组织边界等)的多个邻近性准则来将环划分成环的环或环的树。应当理解,环可使用同一类型的邻近性准则来多次划分。例如,环可基于大陆邻近性准则和国家邻近性准则(两者都是地理边界邻近性类别)来划分。
由于ID可在ID空间上均匀分布(随机数生成的结果),因此循环ID空间的任何给定段有很高的可能性包含属于不同邻近性类的节点,只有这些类具有大致相同的势。该概率在存在足够数量的节点来获得有意义的统计行为时进一步增加。
由此,任何给定节点的邻域节点从邻近性的观点来看通常是良好分散的。由于所发布的应用程序状态可以在邻域节点之间复制,因此所发布的信息从邻近性的观点来看也是良好分散的。
图4示出了帮助邻近路由的环的环400。环401可被视为主或根环,且包含环402、403和404的每一个中的所有节点。环402、403和404的每一个可包含来自环401的、基于指定的邻近性准则划分的节点子集。例如,环401可以基于地理位置来划分,其中环402包含在北美的节点,环403包含在欧洲的节点,而环404包含在亚洲的节点。
在包含65,536(216)个ID的数值空间中,将消息从ID为5,345的北美节点路由到ID为23,345的亚洲节点可包括在环402内路由消息,直到标识了亚洲节点的邻居节点。该邻居节点然后可将该消息路由到亚洲节点。由此,在北美节点和亚洲节点之间形成了单个跳(而非多个跳)。因此,路由是以资源高效的方式来执行的。
图5示出了帮助邻近路由的示例性的、归纳了邻近性的环的分区树500。如图所示,环的分区树500包括多个环。每一个环表示一已排序链表的一个分区。每一个环包括其ID在该已排序链表中的多个节点。然而,为了清楚起见,由于潜在节点的数量,未在环上明确地描绘节点(例如,分区树500的ID空间可以是b=16且n=40)。
在分区树500内,根环501基于准则571(第一管理域边界准则)被划分成多个子环,包括子环511、512、513和514。例如,DNS名称的每一分量可被认为是一邻近性准则,它们之间的部分排序按照其从右到左出现在DNS名称中的次序来归纳。相应地,子环511可基于准则581(第二管理域边界准则)被进一步划分成多个子环,包括子环521、522和523。
子环522可基于准则572(地理边界准则)被进一步划分成多个子环,包括子环531、532和533。基于位置的邻近性准则可以按照大陆、国家、邮政编码等来部分排序。邮政编码本身是分层地组织的,这意味着它们能够被视为进一步归纳了邻近性准则的部分排序的子列表。
子环531可基于准则573(第一组织边界准则)被进一步划分成多个子环,包括子环541、542和543。邻近性准则的部分排序的列表可以按照一给定公司在组织上如何结构化(如分公司、部门和产品组)来归纳。相应地,子环543可基于准则583(第二组织边界准则)被进一步划分成多个子环,包括子环551和552。
在分区树500内,每一节点具有单个ID,并沿着从根开始到叶的相应分区路径参与环。例如,参与子环552的每一节点也参与子环543、531、522、511和根501。路由到目的地节点(ID)可以通过如下实现RouteProximally函数来完成:
RouteProximally(V,Msg,P):给定来自节点身份的域的值V和消息“Msg”,按照邻近性准则P将消息传递到被认为是等效的节点中其身份可被映射到V的节点Y。
由此,路由可以如下完成:逐渐移向给定环内更接近目的地节点的地方,直到在该环内的路由不能做出任何进一步的进展,这是由从目的地节点位于当前节点和其后继者或前导者节点之间的条件所确定。此时,当前节点开始经由其所参与的下一更大的环中其父节点路由。这一通过沿着分区路径向着根环爬来逐渐移向目的地节点的过程在如最初在RouteProximally调用中指定的在所请求的邻近上下文中达到最接近目的地节点的节点时终止。
路由跳可以保留在发起该请求的节点的邻近邻域中,直到由于目的地节点位于其外部而在该邻域中不能做出任何进一步的进展。此时,邻近性准则被放松以增加邻近邻域的大小来做出进一步的进展。重复该过程,直到足够地扩展了邻近邻域来包括目的地节点(ID)。在每一相继的邻近邻域放松之后做出的路由跳可能是在邻近空间中与前一跳相比更大的跳跃,而在数值空间中做出相应的更小的跳跃。由此,仅绝对需要的数量的此类(环间)跳在到达目的地之前做出。
情况可以是对于查找消息避免了某些跳,因为所发布的应用程序数据在其在目的地节点的邻域节点之中复制时沿着分区树向下复制。
为实现邻近路由,每一联盟节点维护对其作为成员所参与的所有环中其后继者和前导者节点(类似于对于单个环的后继者和前导者),即邻近前导者、邻近后继者和邻近邻域的引用。为了使得路由高效,节点还可维护对作为路由伙伴的、最接近该环的任一半上距离呈指数地增加的其它节点(类似于对单个环的路由节点)的引用。在某些实施例中,落入一对连贯的后继者和前导者节点之间的路由伙伴节点参与由当前节点和在后继者和前导者节点对中数值上最接近它的节点分别共享的同一最低环。由此,向着目的地节点的路由跳仅在绝对需要来做出进一步的进展时才使用放松的邻近性准则来转换(即,转换到更高的环)。因此,消息可高效地与相应的联盟节点会合。
在某些实施例中,节点实现邻近路由函数来基于等效性准则关系路由消息。由此给定数字V和消息“Msg”,节点可以实现RouteProximally(V,Msg,P)来按照邻近性准则P将消息传递到被认为是等效的节点中其身份可被映射到V的节点Y。邻近性准则P标识了分区树中作为被其认为邻近地等效的所有节点的公共祖先的最低环。它可被表示为通过将沿着从根环到由其标识的环的路径找到的邻近性准则串接起来而获得的串,由路径分隔符‘/’来分隔。例如,标识子环542的邻近性准则可被表示为“Proximity:/.COM/Corp2/LocationA/Div2”。分区树500中的每一个环可以例如通过将其表示串用基于SHA的算法来散列而被分配唯一数字。如果为根环保留了数字0,则可以推断出RouteNumerically(V,Msg)≡RouteProximally(V,Msg,0)。
例如,子环544中的节点可以实现RouteProximally以标识子环531中更接近的节点(例如,对子环513中的节点)。进而,子环531可以实现RouteProximally以标识子环522中更接近的节点。同样,子环522可以实现RouteProximally以标识子环511中更接近的节点。类似地,子环511可以实现RouteProximally以标识环501中更接近的节点。由此,情况可以是RouteProximally函数被递归地调用,其中每一调用将消息路由到更接近目的地的地方。
由此,当考虑邻近性准则时,到最终目的地的路径上的路由跳可以保留在发起请求的节点的附近,同时在数值空间中在始发节点和目的地节点之间做出显著的进展,直到或者到达目的地节点,或者在所选邻近性准则下不能做出任何进一步的进展,此时只需足够地放松该准则以向着目的地做出进一步的进展。例如,邻近性准则可以对于要从环531向上路由到环522的消息足够地放松等等。
利用以上关于邻近性的方法,有可能将所发布的信息限于一给定环。例如,组织可能希望确保组织特有的信息不对其信任域之外的实体或者(1)以向其域外部的节点的邻域复制的形式隐式地,或者(2)以服务对这一信息查找请求的形式显示地可用。第一方面通过仅在与指定环内的目标ID相邻的节点之中复制所发布的信息来满足。由于由节点发起的所有消息都通过向着根环相继爬过它所属的环来路由,因此在一组织内始发的所有查找请求有很大的可能性能够定位被限制到它的所发布的信息,由此隐式地满足了第二方面。
并且,组织不希望节点自动与其信任域外部的节点联盟。这可例如在访问的销售人员将他/她的膝上型计算机连接到顾客房屋中的网络时发生。理想地,属于该销售人员的膝上型计算机希望定位到其归属域中所发布的信息和/或与其归属域中从其最低的优选邻近环开始的节点联盟。它通常不被允许与顾客的域外部的节点联盟。支持这一情形需要定位归属域中的种子节点的能力。这一种子节点可用于定位在归属域中发布的信息,加入到归属联盟、以及跨域选择性地导入和导出所发布的信息。种子节点有时被称为消息网关。
在其它实施例中,实体发布对根环中的种子节点的引用。种子节点可以在与环(作为目标ID)相关联的唯一数字(诸如通过散列其表示串获得的)处发布。种子节点信息可以由在到根环中的相应目标ID的路径上的各个环中的节点按需进一步高速缓存。这一按需高速缓存提供了改进的性能并减少了在相当频繁地查找半静态信息时可能发生的热点。种子节点信息也可经由诸如DNS等其它手段来获得。
为提供对于受限制的所发布信息的容错,每一节点可以维护其所参与的所有环中的一组邻域节点。给定以上原因,由节点维护的状态可概括如下:
●ID,其是均匀分布在范围0到bn-1中的数值。
●由以下各项构成的路由表(所有算术都以模bn完成):
○对节点参与的每一环,如环d
■后继者节点(sd)
■前导者节点(pd)
■邻域节点(pkd,...,p1d,pd,sd,s1d,...,sjd),使得sjd.sd.id>(id+u/2),j≥v/2-1,pkd.pd.id<(id-u/2),且k≥v/2-1。
○路由节点(r-(n-1),...,r-1,r1,...,rn-1),使得r±i=RouteProximally(id±bi,updateMsg,d),使得适当时sd≤id+bi≤sd+1或pd+1≤id-bi≤pd。
其中b是数基,n是以位数为单位的字段大小,u是邻域范围,且v是邻域大小。
注意,由环“d”中的给定节点维护的邻域节点的子集再次可作为邻域节点出现在给定节点也参与的子环“d+1”中。由此,可以得出由给定节点跨其所参与的所有D个环维护的邻域节点的总数的上限为D*max(u,v)/2。这考虑了仅保持对给定节点的一个引用,并且最坏情况的上限是针对平衡树的。
应当注意,当环被划分成多个相应的兄弟子环时,例如通过别名化来准许指定节点同时参与多个相应兄弟子环中多于一个子环。别名化可以被实现来将例如来自不同子环的不同状态与指定节点相关联。由此,尽管对给定节点的别名具有相同的ID,但是每一别名可以具有与其相关联的完全不同的状态。别名化允许指定节点参与具有完全不同的邻近性准则的多个环,这些完全不同的邻近性准则不必是更具体的邻近性准则的共同的祖先。即,指定节点可以参与邻近性树的多个分支。
例如,双NIC(有线和无线)膝上型计算机可被认为在邻近性上等效于共享与该膝上型计算机相同的LAN段的两个其它无线和有线节点。但是,这两个不同的邻近性准则可被建模为仅在应用了诸如,例如基于组织成员关系的不同的更高优先级的邻近性准则之后才适用。由于该膝上型计算机属于相同的组织,因此两个子环中带别名的节点表示1)有线LAN段中的成员资格,以及2)无线LAN段中的成员资格合并成表示该膝上型计算机所属的组织的环中的单个节点。应当理解,RouteProximally如所预期的那样工作,而没有对别名化的存在有任何修改。
每一邻近环可根据(可能不同的)环参数来配置。环参数可用于定义邻域(例如,环参数可表示邻域范围、邻域大小、用于查验和离开消息的查验消息和离开消息定时和分发模式)、指示特定的联盟机制(例如,从上述先前描述的第一到第四种联盟机制中,或从其它联盟机制中)、或定义同一邻近环中的路由伙伴之间的通信细节。某些环参数可能较概括,适用于多个不同的联盟机制,而其它环参数更具体,且适用于特定类型的联盟机制。
用于配置较高级邻近环的环参数在某些实施例中可以由较低级邻近环继承。例如,情况可以是环543继承环531的某些环参数(后者进而从环522继承,等等)。由此,与环531相关联的邻域大小和邻域范围也与环541相关联。
然而,所继承的环参数可以被更改,和/或邻近环可以根据不同的环参数来个别地配置。例如,情况可以是环511是用于包含大量节点的管理域的,且因此上述第四种联盟机制对环511更适当。另一方面,情况可以是环521是用于具有相对较小数量的节点的小型企业的,且因此上述第二种联盟机制对环521更适当。由此,与环521相关联的环参数可以被设为(或将继承的参数改为)与同环511相关联的环参数不同的值。例如,指示特定类型的联盟机制的环参数可以在环511和521之间不同。类似地,定义邻域的参数可以在环511和521之间不同。此外,环521可以根据对上述第二种联盟机制专用的特定参数来配置,而环511根据对上述第四种联盟机制专用的特定参数来配置。
因此,邻近环可以基于邻近环中的节点的特性(例如数量、所包括的资源等)来灵活地配置。例如,管理员可以使用配置过程(例如,通过用户界面)为邻近环选择环参数。配置过程可以帮助配置邻近环之间的继承关系,以及配置个别邻近环,以便诸如,例如覆盖以其它方式继承的环参数。
图8示出了用于对联盟基础结构的节点分区的方法800的示例流程图。方法800将参考图5中的分区树500的环来描述。方法800包括访问包含已被分配给联盟基础结构中的节点的节点ID的已排序链表的动作(动作801)。例如,可访问由环501表示的已排序链表。已排序链表的节点ID(环501上所描绘的节点)可以表示联盟基础结构(例如,联盟基础结构100)中的节点。
方法800包括访问表示用于划分已排序链表分区的多个不同邻近性准则的邻近性类别的动作(动作802)。例如,可访问表示域边界561、地理边界562、以及组织边界563的邻近性准则。然而,在所访问的邻近性准则中也可以表示其它邻近性准则,诸如信任域边界。邻近性类别可以包括先前创建的邻近性准则的部分排序的列表。环可以基于邻近性准则的部分排序的列表来划分。
方法800包括基于第一邻近性准则将已排序链表划分成一个或多个第一子列表的动作(动作803),其中一个或多个第一子列表中的每一个都包含来自已排序链表的节点ID的至少一个子集。例如,环501可以基于准则571被划分成子环511、512、513和514。子环511、512、513和514中的每一个可以包含来自环501的节点ID的不同子集。
方法800包括基于第二邻近性准则将选自一个或多个第一子列表的第一子列表划分成一个或多个第二子列表的动作(动作804),其中一个或多个第二子列表的每一个都包含第一子列表中所包含的节点ID的至少一个子集。例如,子环511可以基于准则581被划分成子环521、522和523。子环521、522和523中的每一个可以包含来自子环511的节点ID的不同子集。
图9示出了用于填充节点路由表的方法900的示例流程图。方法900将参考图3中的已排序链表304和环306来描述。方法900包括将前导者节点插入到路由表中的动作(动作901),该前导者节点在已排序链表的第一方向中相对于当前节点在当前节点之前。例如,ID为50的节点可作为ID为64的节点(当前节点)的前导者被插入到路由表中。在顺时针方向321上移动(从已排序链表304的A端向着已排序链表304的B端),ID为50的节点在ID为64的节点之前。插入前导者节点可以在当前节点和前导者节点之间建立对称伙伴关系,使得当前节点是前导者节点的伙伴,而前导者节点是当前节点的伙伴。
方法900包括将后继者节点插入到路由表中的动作(动作902),该后继者节点在已排序链表的第一方向中相对于当前节点在当前节点之后。例如,ID为76的节点可作为ID为64的节点(当前节点)的后继者被插入到路由表中。在逆时针方向322上移动,ID为76的节点在ID为64的节点之后。插入后继者节点可以在当前节点和后继者节点之间建立对称伙伴关系,使得当前节点是后继者节点的伙伴,而后继者节点是当前节点的伙伴。
方法900包括将适当的邻域节点插入到路由表中的动作(动作903),该邻域节点基于邻域范围和邻域大小在第一方向和第二相反方向两个方向上从已排序链表中标识。例如,ID为83、76、50和46的节点可作为ID为64的节点(当前节点)的邻域节点被插入到路由表中。基于邻域范围20和邻域大小4,可在顺时针方向321上标识ID为83和76的节点,并在逆时针方向322上(从已排序链表304的B端移向已排序链表304的A端)标识ID为50和46的节点。情况可以是在某些实施例中没有标识适当的邻域节点。插入邻域节点可以在当前节点和邻域节点之间建立对称伙伴关系,使得当前节点是邻域节点的伙伴,而邻域节点是当前节点的伙伴。
方法900包括将适当的路由节点插入到路由表中的动作(动作904),该路由节点基于联盟基础结构的数基和ID空间的字段大小在第一和第二两个方向上从已排序链表中标识,该路由节点表示在第一和第二两个方向上该已排序链表的对数索引。例如,ID为200、2、30、46、50、64、64、64、64、76、83、98、135和200的节点可作为ID为64的节点的路由节点被插入到路由表中。基于数基2和字段大小8,可在方向321上标识ID为64、64、76、83、98、135和200的节点,并在方向322上标识ID为64、64、50、46、30、2和200的节点。如在环306内描绘的,路由节点表示顺时针方向321和逆时针方向322两个方向上已排序链表304的对数索引。插入路由节点可以在当前节点和路由节点之间建立对称伙伴关系,使得当前节点是路由节点的伙伴,而路由节点是当前节点的伙伴。
图7示出了考虑了邻近性准则的、用于填充节点路由表的方法700的流程图。方法700将参考图5的环来描述。方法700包括将关于当前节点所参与的每一分层地划分的路由环的前导者节点插入到路由表中的动作(动作701)。每一前导者节点在当前节点所参与的每一分层地划分的路由环中在第一方向(例如,顺时针)上在当前节点之前。分层地划分的路由环根据相应的邻近性准则来划分,并且至少包含双向链表的子集(可能是整个双向链表)。例如,情况可以是指定节点参与根环501以及子环511、522、523、531和542。由此,从环501和子环511、522、523、531和542的每一个中为指定节点选择一前导者节点。
方法700包括将关于当前节点所参与的每一分层地划分的路由环的后继者节点插入到路由表中的动作(动作702)。每一后继者节点在当前节点所参与的每一分层地划分的路由环中在第一方向上在当前节点之后。例如,从环501和子环511、522、523、531和542的每一个中为指定节点选择一后继者节点。
方法700包括将关于当前节点所参与的每一分层地划分的路由环的适当的邻域节点插入到路由表中的动作(动作703)。邻域节点可以基于邻域范围和邻域大小从当前节点所参与的分层地划分的路由环中在第一方向(例如,顺时针)和第二相反方向(例如,逆时针)两个方向上标识。例如,从环501和子环511、522、523、531和542的每一个中为指定节点标识邻域节点。
方法700包括将关于当前节点所参与的分层地划分的路由环的适当的路由节点插入到路由表中的动作(动作704)。例如,从环501和子环511、522、523、531和542的每一个中为指定节点标识路由节点。
在某些实施例中,对节点Y所参与的除了叶环(或在利用别名化的实施例中的多个叶环)之外的每一邻近环d插入适当的路由节点。适当的路由节点可以基于以下表达式来插入:
如果Y.sd.id<Y.id+bi<Y.sd+1.id为真,则使用环d;或者
如果Y.pd.id<Y.id-bi<Y.pd+1.id为真,则使用环d。
如果在前一步中未标识环,则使用叶(例如,环501)环作为环d。现在,环d是节点Y应在其中查找最接近z的路由伙伴的邻近环。
图10示出了用于将消息向着目的地节点路由的方法1000的示例流程图。方法1000将参考图3中的已排序链表304和环306来描述。方法1000包括接收节点接收消息以及指示目的地的数字的动作(动作1001)。例如,ID为64的节点可接收指示目的地212的消息。
方法1000包括确定接收节点是数值上比相应的前导者节点离目的地更远和数值上比相应的后继者节点离目的地更远中的至少一种的动作(动作1002)。例如,在方向322上,ID 64比ID 50离目的地212更远,而在方向321上,ID64比ID 76离目的地212更远。方法1000包括确定目的地不在对应于接收节点的邻域节点集内的动作(动作1003)。例如,ID为64的节点可确定目的地212不在邻域集83、76、50和46内。
方法1000包括从对应于接收节点的路由表中标识中间节点的动作(动作1004),该中间节点数值上比相应的路由表中的其它路由节点离目的地更近。例如,ID为64的节点可标识ID为200的路由节点在数值上比其它路由节点离目的地212更近。方法1000包括将消息发送到中间节点的动作(动作1005)。例如,ID为64的节点可将消息发送到ID为200的节点。
图11示出了用于基于邻近性准则将消息向着目的地节点路由的方法1100的示例流程图。方法1100将参考图4和图5的环来描述。方法1100包括接收节点接收消息以及指示目的地和邻近性准则的数字的动作(动作1101)。邻近性准则定义了一个或多个节点类。接收节点作为基于邻近性准则从一个或多个节点类所选的当前节点类的一部分接收消息。例如,ID为172的节点可接收指示目的地201的消息以及指示目的地节点是由环401所表示的类的一部分的邻近性准则。ID为172的节点可以接收作为环404的一部分的消息。
方法1100包括确定在所选节点类的节点中,接收节点是数值上比相应的前导者节点离目的地更远和数值上比相应的后继者节点离目的地更远中的至少一种的动作(动作1102)。例如,在环404内,ID为172的节点在顺时针方向上比ID为174的节点离目的地201更远,且在逆时针方向上比ID为153的节点离目的地201更远。
方法1100包括确定对由邻近性准则定义的一个或多个节点类的任一个,目的地不在接收节点的邻域节点集内的动作(动作1103)。例如,ID为172的节点可确定目的地201不在环404或环401中相应的邻域集内。
方法1100包括从接收节点的路由表中标识中间节点的动作(动作1104),该中间节点数值上比路由表中的其它路由节点离目的地更近。例如,ID为172的节点可标识ID为194的节点在数值上比环404中的其它路由节点离目的地201更近。方法1100包括将消息发送到中间节点的动作(动作1105)。例如,ID为172的节点可将所接收到的消息发送到ID为194的节点。ID为172的节点可将所接收到的消息发送到ID为194的节点,以遵循先前定义的邻近性准则的部分排序的列表。
节点194可在环404内尽可能地接近目的地201。由此,可适度足够地放松邻近性以允许在下一分支中在环401内向目的地进一步路由。即,路由从环404转换到环401,因为在环404上不能做出向着目的地的任何进一步进展。或者,情况可以是ID为201的节点在环401中ID为194的节点的邻域内,导致没有进一步的路由。由此,在某些实施例中,放松邻近性准则以到达下一更高的环足以引起进一步的路由。
然而,在其它实施例中,导致转换到下一更高的环的邻近性准则的增量放松继续直到能发生进一步的路由(或直到遇到根环)。即,在可做出进一步的路由进展之前发生向更高环的多个转换。例如,现在参考图5,当在环531上不能做出进一步路由进展时,可足够地放松邻近性准则以转换到环511或甚至转换到根环501。
节点阶段
参与联盟基础结构的节点可以在不同的操作阶段中操作。对于节点的有效阶段值可被定义为一有序集的成员。例如,{节点Id}.{实例ID}.{阶段值[阶段状态值:插入,同步,路由,操作].[阶段.未知指示:传输时已知的阶段,传输时未知的阶段]}定义了表示联盟基础结构内的给定节点的阶段空间的一种可能的有序集。节点实例可以按序转换(或前进)通过从插入到同步到路由到操作的节点阶段状态。此外,在某些实施例中,节点实例可被配置成使得防止节点实例转换回先前的节点阶段状态。在某些实施例中,在每次节点上升时,节点将其实例ID前进。
例如,可防止节点实例从路由转换回同步(或转换回插入),等等。因此,在某些实施例中,当已知给定节点实例(例如,由(节点Id,实例Id)标识)前进到特定的节点阶段状态(例如,操作),则也已知该给定节点实例不可能(且在某些实施例中不会)回退到先前的节点阶段状态(例如,回到路由、同步或插入)。由此,在特定节点阶段状态之前的节点阶段中的任何节点实例很有可能是该节点的新(且前面的)实例。
在某些实施例中,将阶段信息和相应的实例Id(当节点上升时前进)一起传输。由此,有可能确定对于同一实例的较小的节点阶段状态较旧。此外,当已知一较新的节点实例(在任何阶段状态值)时,关于较旧实例的任何信息被认为是过时的。
节点经常可以重新引导或者丢失与彼此的通信,诸如,例如在首次启动时、通过优雅离开、或作为异常终止(崩溃)的结果。由此,任何节点阶段状态中的节点有可能重新引导或丢失与其它节点的通信。例如,崩溃可导致路由阶段状态中的节点重新引导。在重新引导或丢失通信期间,可能没有方法来确定一节点在什么节点阶段状态。因此,当一节点正在重新引导或丢失与节点的通信时,可设置[阶段.未知指示]来指示该节点的阶段状态当前是未知的。然而,可维护任何先前表达的和/或检测到的关于该节点的阶段状态且该状态不会丢失。
可使用[阶段.未知指示]来指示在发送阶段状态值时阶段状态是否已知(例如,未设置阶段.未知的阶段值),或者阶段状态是否是先前表达的阶段状态且该阶段状态在发送该阶段状态时不是已知的(例如,设置了阶段.未知的阶段值)。由此,节点的阶段(其阶段值)可以使用阶段状态值和阶段.未知指示两者来表示。
加入协议
有时,节点可以加入和离开现有联盟。节点可以实现用于加入和离开联盟的适当协议。例如,节点可以实现Join()函数以成为现有联盟的一部分。实现Join()函数的节点在到达最终的操作阶段状态之前可以转换通过三个有序阶段状态:插入阶段状态、同步阶段状态以及路由阶段状态。在其它实施例中,这些特定的有序阶段状态可能不存在,而可以定义其它阶段状态。图12A示出了节点建立联盟基础结构内的成员资格的示例。图12B示出了联盟基础结构内的节点交换消息的示例。
插入阶段:节点Y通过发出加入消息来进入该阶段状态,该加入消息至少包括其节点ID并指示对联盟的加入动作。加入消息可以是由新加入的节点(节点Y)在将其目的地特性设为新加入的节点的身份的情况下发送的路由的消息。在该阶段状态中,新加入的节点被插入在联盟中其前导者和后继者节点之间。插入阶段状态可以根据以下算法来实现(所有算术都以模bn来执行):
IP1.Y标识已经是加入节点希望从中参与联盟的最低环的一部分的现有节点。这或者可被静态地配置,或者可使用DHCP和/或DNS和/或WS发现或(可能公知的)常量来动态地发现。设该现有联盟节点为E。
IP2.Y调用E.RouteNumerically(Y,joinMsg)来确定在节点Y所参与的每一邻近环中其ID在数值上最接近Y.id的节点X。这可包括将加入消息路由到多个节点。
IP3.确定数值上的后继者和前导者节点。(注意,完成以下插入所需的数据可以在加入消息及其响应中携带。由此,不需要附加的往返。)
情况1:X.id>Y.id
Y.s=X,Y.p=X.p,X.p.s=Y,且X.p=Y
情况2:X.id<Y.id
Y.p=X,Y.s=X.s,X.s.p=Y,且X.s=Y
响应于加入消息,节点X(处理该加入消息的节点)可以向节点Y发回加入响应。该加入响应可以指示节点Y的前导者节点(Y.p)和后继者节点(Y.s)。节点Y可以接收加入响应,并处理加入响应以变得知晓其前导者和后继者节点。在处理了加入响应之后,节点Y可以是联盟中的弱路由参与者。例如,节点Y可以仅仅将发送给它的消息转发给或者其后继者或者其前导者节点。由此,节点Y被插入到联盟基础结构中,但是未填充路由和邻域表。在到达这一点之前,节点Y将通过向发送节点返回指示节点Y的活跃度阶段是处于插入阶段状态的状态消息,来请求向其发送消息的其它节点通过不同的节点重定向发送给它的消息。
一般而言,有时,节点可以交换同步请求和响应消息。同步请求和同步响应消息可以包括从发送者的观点来看的关于其它节点的活跃度信息(例如,首部)。也可在同步请求和响应消息中包括邻域状态,使得邻域中的应用层知晓彼此的状态。何时交换同步请求和响应消息的一个示例是在同步加入节点的阶段状态期间。然而,同步请求和响应消息也可以在其它可操作阶段状态(例如,在操作阶段状态中)期间交换。
图16示出了消息模型和相关的处理模型1600的示例。如图16所示,节点可以发送和接收同步请求消息。例如,同步请求消息1601可以在功能层1651处从新插入的节点(例如,图12B中ID为144的节点)接收。应用程序数据1602(例如,命名空间订阅)可以承载在同步请求消息1601中。功能层1651可以将包括在同步请求消息中的任何应用程序数据通知给应用层1652。例如,功能层161可以向应用层1652调用包括应用程序数据1602的邻域状态同步事件1603。包括应用程序数据1607的同步请求1631也可被发送到处理模型1600中类似于对同步请求1601的处理来处理同步请求1631的另一节点。
响应于某一功能层事件(例如,同步请求消息1601、同步响应消息1641、或查验消息1612),功能层1651可以调用应用层1652中的邻域状态请求功能1604。邻域状态请求1604是对应用层的获得需要在邻域中传播的状态的请求。响应于邻域状态请求1604,应用层1652可以向功能层1651提供包括可任选应用程序数据1607的邻域状态1606。或者,应用层1652可以作为对某一应用层事件的反应来发送包括可任选应用程序数据1607的邻域状态1606。使用类似于以上的内部机制,功能层1651可以发送包括可任选应用程序数据1607的同步响应消息1608来传播应用层邻域状态。
同步阶段:在处理了加入响应消息之后,节点Y从插入阶段状态转换到同步阶段状态。在同步阶段状态中,新插入的节点Y与邻域中的节点同步信息。一般而言,节点Y可以至少向在插入阶段状态中标识的其前导者和后继者节点发送同步消息。处理同步消息的这些节点可以返回指示这些处理节点的相应的邻域和路由伙伴节点的同步响应。在更具体的示例中,同步阶段状态可以根据以下算法来实现(所有算术都以模bn来执行):
SP1.从节点Y所参与的每一邻近环中的邻域(Y.s)和邻域(Y.p)节点的并集来计算邻域(Y)。该并计算可以如下完成:
(sj,...,s1,s,p,p1,...,pk),使得sj.s.id>(Y.id+u/2),j≥v/2-1,pk.p.id<(Y.id-u/2),且k≥v/2-1
SP2.简要地参考图16,经由邻域状态请求(例如,邻域状态请求1604)查询Y的本地应用层(例如,应用层1652)来获得可任选的应用程序专用邻域数据(例如,应用程序专用数据1607)。
SP3.将同步消息至少发送给邻近后继者和前导者节点,该同步消息至少包括从Y的观点来看的每一邻近邻域和路由伙伴节点的活跃度状态信息。经由SP2访问的任何可任选的应用程序专用邻域数据(例如,应用程序数据1607)被包括在同步请求1631中。
SP3.Y从处理在SP2中发送的同步消息的这些节点接收回同步响应消息。例如,节点Y可以与其计算的邻域内的一个或多个节点交换同步消息(请求/响应)。在与节点Y的至少一个以及可能所有的邻域节点交换了同步消息之后,计算的邻域节点可以交换进一步的消息以传播同步的数据。同步消息(请求或响应)可以是由节点发送的非路由消息,以主动将其数据与例如在节点邻域中的目标节点同步。
SP4.当接收到SP3中的同步响应消息(例如,同步响应消息1641)时,可经由邻域状态同步事件1603将这些接收到的同步响应消息中存在的任何可任选的应用程序专用邻域数据(例如,应用程序数据1622)提供给Y的应用层1652。
作为同步阶段状态的一部分,邻近后继者(例如,Y.s)和前导者(Y.p)节点与新插入的节点(例如,Y)交换其路由表。接收同步消息的节点可以通过发送同步响应来响应。同步响应类似于同步消息携带数据,除了是从响应节点的观点来看的之外。同步消息和同步响应都可携带(或承载)应用程序数据。由此,应用程序数据可在同步阶段状态期间在节点之间传播。当同步阶段状态完成时,节点可以处理目的地为它的消息,而非仅仅将其转发给或者后继者或者前导者。然而,节点仍可被视为弱路由参与者,因为其路由表未被填充。
路由阶段:在完成了同步阶段状态之后,节点转换到路由阶段状态。在路由阶段状态,新同步的节点(例如,节点Y)计算其路由节点。路由阶段状态可以根据以下算法来实现(所有算术都以模bn来执行):
RP1.如果路由阶段状态正作为平衡过程(稍后解释)的一部分来执行,则确保后继者节点(Y.s)和前导者节点(Y.p)在节点Y所参与的每一邻近环中都是活跃的。如果任一个不是活跃的,则通过选择考虑中的环中的邻域节点之中的下一最佳后继者或前导者节点来确定对故障节点的替换节点。
RP2.对于1≤i≤n-1
RP2a.计算z=Y.id±bi
RP2b.如果环d不是最具体的邻近性,则找出节点Y所参与的且满足条件Y.sd.id<Y.id+bi<Y.sd+1.id或Y.pd.id<Y.id-bi<Y.pd+1.id的邻近环d。或者,使得环d成为最具体的邻近环。现在,环d是节点Y应在其中查找最接近z的路由伙伴的邻近环。设Q是在Y.sd.r±i和Y.pd.r±i之间数值上最接近z的节点。如果|Q.id-z|在bi的可配置百分比(通常是20%)内,则只需令Y.r±i=Q。如果Q.id比(Y.sd.id±bi)或(Y.pd.id±bi)更接近z,则意味着节点Y是邻近环d中比Y.sd或Y.pd更好的对节点Q的伙伴路由节点。因此,如果尚未发送updageMsg(更新消息),则将其发送给节点Q,该消息提供i和节点Y作为参数,使得节点Q能够建立节点Y为r-i处其伙伴路由节点。
RP2c.如果该阶段状态正作为平衡过程的一部分来执行,并且如果Y.sd.r±i.id==Y.pd.r±i.id,则在(Y.sd.id±bi)和(Y.pd.id±bi)之间的数值范围中仅有一个节点。该节点是后继者(或前导者)节点的路由节点r±i所指向的节点。因此,只需令Y.r±i=Y.sd.r±i.i。
RP2d.否则,通过对节点Q调用RouteProximally并将邻近性准则设为环d的邻近性准则来计算路由伙伴Y.r±i。这意味着Y.r±i=Q.RouteProximally(z,updateMsg,d)。
RP3.此时,节点Y不仅能处理目的地为它的消息,而且还能路由消息。
RP4.如果尚未订阅,则对伙伴路由节点的端点ID订阅从应用层发送的活跃度通知事件。并且,对于不再是伙伴路由节点的那些节点,撤消先前与应用层建立的任何活跃度事件订阅。例如,订阅和/或撤消请求可向上传递到实现用于相应的应用程序(例如,命名空间应用程序)的发布-订阅逻辑的应用层(例如,应用层121)。当在应用层处接收到后续的应用程序专用活跃度消息(例如,因命名空间订阅所得的消息)时,可将通知(事件)向下推至其它较低层(例如,其它较低层131)以供处理。
图17描绘了可在功能层1751和应用层1752之间发生的多个活跃度交互的示例。如图17所示,端点是例如表示各节点的发布/订阅话题(例如,由URL或URI表示),并且可以是例如联盟基础结构节点。订阅活跃度事件1701可以从功能层1751向应用层1752调用以订阅活跃度事件(例如,订阅发布/订阅话题)。撤消活跃度订阅1702可以从功能层1751向应用层1752调用以撤消对活跃度事件的订阅。端点停机1703可以从应用层1752向功能层1751发送以指示端点可能停机并向功能层1751提供可任选的替换端点。端点停机事件1703可以基于先前的订阅(例如,订阅活跃度事件1701)异步地发送。
节点停机1704可以从功能层1751向应用层1752调用,以指示功能层1751(或某一其它较低层)检测到了故障节点并可任选地向应用层1752提供替换节点。应用层1752可以随后将检测到可能的故障节点传播到其它感兴趣的各方。节点停机事件1704可以在功能层1751或某一其它较低层检测到可能的故障节点的任何时刻异步地发送。发送活跃度1706可以在应用层1752检测到一节点停机(例如,从节点停机事件1704或从某一其它带外机制)时从应用层1752向功能层1751调用。发送活跃度事件1706可以使得功能层1751发送活跃度消息。发送活跃度事件1706也可在应用层1752检测到节点停机并且不依赖于任何先前建立的订阅(经由订阅活跃度)的任何时刻异步地调用。
由此,在某些实施例中,功能层1751被递归地使用。例如,功能层1751可以向应用层1752指示对指定节点(例如,是开机或停机的特定节点)的兴趣。应用层1752可以制定对涉及该指定节点的通知的应用程序专用订阅,然后重复使用功能层1751来将所制定的订阅传递到其它联盟节点中的适当的相应应用层1752实例。例如,如果联盟节点内的应用层1752实现命名空间发布/订阅行为,则功能层1751可以将该订阅路由给管理关于指定节点的通知的发布/订阅管理器,该发布订阅管理器被实现为至少是相关的联盟节点中的应用程序1752的一部分。因此,功能层1751用于路由功能层1751所引起的被生成的订阅。也可使用类似的递归机制来取消订阅或以其它方式指示对指定节点不再感兴趣。
操作阶段:在完成了路由阶段状态之后,节点转换到操作阶段状态。节点可以保持在操作阶段状态中,直到其停机(例如,重新引导)。在操作阶段状态中,节点可以不时地将更新消息发送给路由伙伴。更新消息(更新请求和更新响应)可包括关于发送节点(例如,关于所有感兴趣的邻近邻域)的邻域节点活跃度信息。该发送的活跃度信息也可包括发送者的活跃度信息。更新消息可以是节点发起的、周期性地更新其路由伙伴节点的路由的消息。应用程序数据可被承载在更新消息上,使得应用程序数据可以在路由伙伴更新期间传播。消息目的地被设为期望路由索引处的理想路由伙伴的身份。该消息的消息ID特性被分配一应用程序序列号,以便使处理该消息的节点能确定最新消息并且该消息被邻近地路由。
接收更新消息的节点可以用更新响应来响应。更新响应携带了与更新消息相同的数据,除了该数据是从响应节点的观点来看的之外。通过交换更新消息和更新响应,节点能够交换路由信息。有时,可操作节点可更新路由伙伴。
有时,可操作节点也可发送查验消息(例如,查验消息1609和1611)。查验消息是节点发送的单向消息,用于周期性地通告其存在并在其邻域内散布关于其邻域/路由节点的信息并复制(例如,承载)应用程序数据。
原始节点可以向其一个或多个直接前导者和后继者邻域节点发送查验消息。由此,取决于查验分发模式(即,向哪些节点发送查验消息),与原始节点有关的信息被传播给该原始节点的邻域内的环上的其它节点。例如,原始节点可以仅将查验消息发送给其直接前导者和后继者节点,并且查验消息从原始节点的位置(节点ID)在两个方向上沿着环向外传播到该原点的邻域的边缘。或者,原始节点可以将查验消息发送给其邻域中其前导者和后继者两个方向上每第n个节点。
接收查验消息的每一节点检查从邻域范围的观点来看其对原始节点的兴趣。如果不感兴趣,则它丢弃该查验消息。如果感兴趣,则它处理该查验消息,并且如果转发被约束到始发节点的邻域,则根据其指定的环模式来转发该查验消息。例如,在处理了查验消息之后,如果发送和原始节点在其前导者节点集中,则接收节点可将查验消息转发给至少其后继者节点,或者如果发送和原始节点在其后继者节点集中,则至少转发给其前导者节点。
由此,查验消息的向外传播在该消息到达原始节点周围的邻域节点集的边缘时停止。查验消息的消息ID特性被分配一应用程序序列号,以便使处理该消息的节点能确定来自原始节点的最新消息并避免重复处理或另外的不需要的转发。
回头参考图16,查验消息1609可以在功能层1651处从邻域节点接收。应用程序数据1612(例如,命名空间订阅)可以被承载在查验消息1609中。功能层1651可以将包括在查验消息中的任何应用程序数据通知给应用层1652。类似地,功能层1651可以将包括在同步请求消息中的任何应用程序数据通知给应用层1652。这两种传递情况都可经由向应用层1652发送包括应用程序数据1612的邻域状态同步事件1603来实现。
响应于某一功能层事件(例如,接收到查验消息1609),功能层1651可以向应用层1652发送邻域状态请求1604。邻域状态请求1604是在应用层1652上调用的,以获得需要在邻域中可任选地传播的状态。响应于邻域状态请求1604,应用层1652可以向功能层1651返回包括可任选应用程序数据1607的邻域状态1606。功能层1651可以发送包括可任选应用程序数据1607的查验消息1611,以向邻域和路由伙伴节点传播活跃度信息以及可任选的应用层邻域状态。功能层1651也可发送包括可任选应用程序数据1607的同步响应1608来传播应用程序状态。
离开协议
当对于节点而言离开联盟是适当的时候,节点可以实现Depart(离开)函数来优雅地从联盟中移除。节点通过向其一个或多个直接邻近前导者和后继者节点,以及可能的同一邻近邻域中的其它节点发送离开消息来离开现有联盟。由此,取决于离开分发模式(即,向哪些节点发送离开消息),与离开节点有关的信息被传播给该离开节点的邻域内的环上的其它节点。离开消息是优雅地离开的节点获得的单向消息,用于向其至少一个邻近邻域内的一个或多个其它节点通知其即将发生的离开。离开节点以类似于查验消息的传播的方式来传播离开消息(例如,在其邻域内)。例如,ID为30的节点可将离开消息1219发送到ID为17和40的节点。ID为30的节点然后可从给定邻近环的观点来看将其自身从联盟基础结构中移除。注意,节点有可能将其自身从一个邻近邻域中移除,但不从其可能所属的其它邻域中移除。
由于在ID为30的节点被移除之后ID为17和40的节点(即,前导者和后继者节点)可能是最接近ID 30的节点,因此使ID为17和40的节点知晓ID为30的节点的离开。由此,要传递给ID 30的将来消息可在ID为17和40的节点处适当地处理。ID为17和40的节点可以将ID为30的节点的离开传播到环1206上的其它节点。在缺少ID为30的节点的情况下,ID为17和40的节点也可重新计算前导者和后继者指针,这些指针可能指向对方。
离开消息的消息ID特性被分配与查验消息一样的应用程序序列ID,以使处理该离开消息的节点能够确定由原始节点发送的一系列查验和离开消息中最新的消息。从联盟邻近环的优雅离开是可任选的,但鼓励这样做。然而,联盟被设计成在节点突然离开的情况下自我复原。
活跃度
在联盟的生存期期间,节点可以交换活跃度信息来维护该联盟。活跃度信息可以按活跃度消息首部的形式被包括在在联盟内交换的实际上任何消息中。例如,加入消息、加入响应、同步消息、同步响应、更新消息、更新响应、应用程序专用消息、活跃度消息以及查验消息都可包括活跃度信息首部。当联盟节点发送任何消息或响应时,该节点可以包括活跃度信息以供其它节点处理。活跃度信息可被包括在活跃度消息的活跃度信息首部中。
指示节点的活跃度状态的活跃度信息可以使用以下特性来表示:
[节点]:标识其活跃度状态正被表示的节点。节点可以基于进一步包括[实例ID]的[引用特性]来标识。
[引用特性]:在WS寻址规范中指定的元素信息项。WS寻址定义了包括在引用特性集中的[实例ID]引用特性。
[实例ID]:标识节点的特定实例的数字。可使用递增自举计数(boot count)作为节点的实例ID。
[阶段]:传达所标识的节点的阶段。
[阶段状态值]传达所指示的节点实例已知已达到的最高阶段状态(插入、同步、路由、操作)。
[阶段.未知指示]传达当前阶段是已知还是未知的指示符。
[新鲜度]:传达信息的新鲜度并且其值范围从0到MaxFreshness。该值越高,信息就越新鲜,0意味着没有信息,而MaxFreshness是协议定义的常量。
[色彩]:标识节点所属的邻近性等效类。具有相同色彩值的两个节点总是被认为是最邻近的,因为它们都属于由色彩值所标识的相同的等效类。邻近性等效类的数量可以在更多节点加入联盟时随着时间而增加。
[权重]:提供节点能力度量,且其值范围从0到MaxWeight。它测量联盟节点的所需特性,诸如大计算能力、高网络带宽和长开机时间。该值越高,则节点越能够使其从伙伴关系的观点来看合乎需要。
在某些环境中,节点的[节点]和[新鲜度]特性或者隐式地或者显式地在诸如[原始]和[发送者]消息首部等较大范围内传达,且因此,再次在活跃度首部中包括上述特性将是重复的。例如,消息的发送者只需传达其当前阶段、色彩和权重信息,因为其ID、实例Id在消息寻址首部中提供且其新鲜度被蕴含在内。
活跃度状态可以至少基于如下定义的“<”二元关系来部分排序:
“L1<L2”为真,如果
1.“L1.[节点].[名称]==L2.[节点].[名称]”为真,且在执行了测试并按照所列出的次序短回路时以下之一为真:
●L1.[节点].[引用特性].[实例ID]<L2.[节点].[引用特性].[实例ID]
●L1.[阶段.未知指示]!=真AND L2.[阶段.未知指示]!=真ANDL1.[阶段状态]<L2.[阶段状态]
●L1.[新鲜度]<L2.[新鲜度]
2.或者,“L1.[色彩]==L2.[色彩]”为真,且在执行了测试并按照所列出的次序短回路时以下之一为真:
●L1.[阶段状态]<L2.[阶段状态]
●L1.[权重]<L2.[权重]
此外,当检测到或怀疑指定节点变得不可用(例如,停机)时,可以向指定节点发送活跃度“停机”消息。作为一个示例,当应用层(例如,应用层121)检测到另一应用层(例如,应用层123)或主存另一应用层的节点停机时,则检测应用层可以例如根据消息模型和相关的处理模型1600和/或1700通知其它较低层(例如,其它较低层131)该节点可能停机。这一通知可使得诸如,例如功能层1651等其它较低层发送活跃度停机消息。这仅是对活跃度停机消息的生成的激励的一个示例。
由于活跃度停机消息被路由且因此被传递给最接近被怀疑停机的那些节点的节点,因此如果对指定节点的活跃度停机消息被传递回到该指定节点,则或者该指定节点从未停机,或者该指定节点是一不同的实例(例如,具有不同的实例ID)。另一方面,如果活跃度停机消息被传递到另一节点,则它指示指定节点的确看似已停机。因此,如果接收活跃度停机消息的节点将其自身视为在指定节点的邻近邻域中,则它可如所描述地将对该指定节点的离开消息发送到该邻近邻域中,并向其应用层指示(例如,使用节点停机1704)指定节点可能停机且接收节点是其替换。对指定节点的活跃度停机消息可在将其目标ID设为可能停机的节点的ID的情况下邻近地路由。
平衡过程
本发明的各实施例被设计成适应大量节点在较短的一段时间内加入和离开联盟。如果在各节点处维护的对数搜索树变得不平衡,则网络中的这一改变可导致路由延迟。即,如果在环的一侧的节点要比另一侧多。为促进最优路由效率,参与联盟的节点在满足特定准则时执行平衡过程。
例如,当以下条件中的任一个为真时,任何节点可执行平衡过程来确保平衡的路由表以获得最优路由效率:
●接收到配置的数量的上述活跃度消息。
●自从接收到最后一条上述活跃度消息以来已经经过了配置量的时间。
●邻域在某些新节点已到来或某些现有节点已离开的意义上已改变。
平衡路由表是简单的过程。例如,具有未平衡的路由表的节点可以重新执行加入协议的同步和路由阶段状态。
与1)找出对一数字的最接近的路由节点,2)节点遵循离开协议优雅地离开联盟,以及3)节点遵循平衡过程接收活跃度消息相组合的动作RP2b、RP2d和RP4在联盟节点相当快速且大量地加入和离开网络时导致更快速的复原系统。
状态消息
状态消息是由接收者节点向发送者节点发送的非路由的消息,其通知发送者节点先前转发给接收者节点的相关消息的路由成功/失败。图18描绘了形成请求-响应消息交换模式的一部分的消息如何跨环上的节点路由的示例。状态消息可包括标识其路由状态正被报告的原始的相关消息的首部。由此,状态消息可以在节点之间用于指示消息被成功地从一个节点路由到下一节点。例如,从节点1801到节点1806路由请求消息1811包括通过节点1802、1803、1804和1805发送请求1811。对应的层叠成功状态消息(状态1817、1818、1819、1820和1821)可分别从节点1806发送到节点1805,从节点1805发送到节点1804,从节点1804发送到节点1803,从节点1803发送到节点1802,以及从节点1802发送到节点1801。响应于请求1811,可从节点1807到节点1801端对端地发送响应1816。响应1816是可任选的,并且可能不在单向消息交换模式中存在。
图13示出了节点加入联盟基础结构的方法1300的示例流程图。方法1300将参考图12A和12B中的环1206来描述。方法1300包括向联盟基础结构发出加入消息的动作(动作1301)。例如,ID为144的节点可以向包括环1206的联盟基础结构发出加入1201。方法1300包括从加入节点接收加入消息的动作(动作1308)。例如,包括环1206的联盟基础结构中的现有节点可接收加入1201。
方法1300包括向处理节点路由加入消息的动作(动作1309)。处理节点可以是在路由加入消息时其ID数值上比联盟基础结构中的其它活动节点更接近加入节点的ID的节点。例如,加入1201最初可在ID为64的节点处接收,路由到ID为135的节点,并路由到ID为151的节点。
方法1300包括为加入节点计算一个或多个前导者节点和一个或多个后继者节点的动作(动作1310)。例如,ID为151的节点可以为ID为144的节点计算直接前导者节点和直接后继者节点。在环1206内,ID为151的节点可以计算ID为135的节点是直接前导者节点,而ID为151的节点是直接后继者节点。可对其它邻近环进行类似的计算。
方法1300包括为加入节点计算一个或多个路由节点的动作(动作1311)。例如,ID为151的节点可以为ID为144的节点计算路由节点(从ID为151的节点的观点来看)。在环1206内,ID为151的节点可例如计算ID为218和40的节点为ID为144的节点的路由节点。可对其它邻近环进行类似的计算。
方法1300包括向加入节点发送加入响应的动作(动作1312)。加入响应可以在给定其当前的联盟基础结构视图的情况下标识如由处理节点所计算的加入节点的所有前导者和后继者邻域和路由伙伴节点。例如,加入响应1202可以至少将ID为135的节点标识为对ID为144的节点的直接前导者节点,可以将ID为151的节点标识为对ID为144的节点的直接后继者节点,并可以将标识在ID为151节点处为ID为144的节点(新加入的节点)计算的任何路由节点(对于ID为144的节点)。
方法1300包括从处理加入消息的联盟节点接收加入响应的动作(动作1302)。例如,ID为144的节点可从ID为151的节点接收加入响应1202。
方法1300包括至少向直接邻近前导者节点和直接邻近后继者节点中的每一个发送同步请求的动作(动作1303)。例如,现在参考图12B,ID为144的节点可以向ID为135和151的节点发送同步请求1203。同步请求1203可以包括ID为144的节点的任何邻域节点的标识和/或ID为144的节点的任何路由伙伴的标识。
ID为135和151的节点可接收同步请求1203。响应于接收同步请求1203,ID为135和151的节点可以从相应的路由表中标识其邻域和路由伙伴节点。ID为135和151的节点可以在同步响应1204中包括其标识的邻域和路由伙伴节点的活跃度信息,并将同步响应1204发送给ID为144的节点。
方法1300包括从邻近前导者和后继者节点中的每一个接收同步响应的动作(动作1304)。例如,ID为144的节点可从ID为135和151的节点接收同步响应1204。同步响应1204可以包括关于环1206或联盟基础结构中的其它环上的一个或多个节点的活跃度信息。同步响应1204还可标识ID为144的节点的任何预期的路由伙伴节点。
方法1300包括计算邻居节点的动作(动作1305)。例如,ID为144的节点可以基于Id为135和151的节点的邻域节点的并集来计算相应的邻域节点。邻域节点可以基于加入响应消息和任何同步响应消息的概括视图来计算。
方法1300包括计算路由节点的动作(动作1306)。例如,ID为144的节点可以从环1206的节点中计算路由节点。路由伙伴可以基于加入响应消息和任何同步响应消息的概括视图来计算。
方法1300包括至少将邻域节点信息与所计算的路由伙伴交换的动作(1307)。例如,ID为144的节点和ID为218的节点(计算的路由伙伴)可以交换对应于其各自的邻域节点的状态信息(例如,实例ID、阶段状态等)。这些交换通过新加入的节点如在以上路由阶段状态中描述的向至少每一个唯一计算的路由伙伴发送(路由)更新消息来实现。处理更新消息的节点作为对从新加入的节点接收这些更新消息的反应,将发送相应的更新响应消息。更新响应至少包括其本身及其邻域节点的活跃度信息。
方法1300还包括发起向至少一个邻域节点的路由表的初始传播的动作。例如,ID为144的节点可以在查验消息中包括计算的邻域和路由伙伴节点,并将该查验消息发送给ID为174的节点(例如,计算的邻域节点之一)。ID为174的节点可以接收该查验消息,并用源自ID为144的节点处的活跃度信息来更新相应的路由表。ID为174的节点可以在第二查验消息中还包括其相应的路由表,并将该第二查验消息在某一将来时刻发送给ID为144的节点。ID为144的节点可以接收该第二查验消息,并可用包括在该第二查验消息中的活跃度信息中的节点(即,ID为174的节点的路由表中的节点)来更新其相应的路由表。ID为144的节点可以对环1206中的其它邻域节点重复查验消息的发送。
应当理解,当新加入的节点加入联盟时,该新加入的节点可能未找到现有联盟成员,且因此变为唯一的成员。由此,可能没有为该新加入的节点分配的前导者、后继者或邻居节点。因此,新加入的节点在所有情况下都作为最佳路由伙伴来映射。
此外,尽管方法1300是参考单个环(环1206)来描述的,但是应当理解,在某些实施例中,本来加入一个环的节点也可加入一个或多个其它环。例如,简要地回头参考图5,本来加入环551的节点也加入环543、531、522、511和501。由此,方法1300可被实现来加入多个环。在其它实施例中,可在加入多个环时重复方法1300中的部分或所有动作。例如,再次参考图5,当节点同时加入环551和环514时(例如,别名化),可以重复1300的一个或多个动作。在任何情况下,可访问加入节点ID,并用其来标识已排序链表中的加入节点,以及该加入节点要参与的相应的分层地划分的子列表。从已排序链表和每一划分的子列表中标识接收节点。加入消息被路由到已排序链表和每一划分的子列表中的处理节点(例如,基于ID)。从已排序链表和每一划分的子列表中的处理节点接收加入响应。
图14示出了节点维护联盟基础结构中的成员资格的方法1400的示例流程图。方法1400将参考环1206来描述。方法1400包括向邻域节点发送第一查验消息的动作(动作1401)。第一查验消息指示发送第一查验消息的当前节点是邻域节点的邻居。第一查验消息还可包括当前节点的路由伙伴和邻域节点的状态。例如,ID为144的节点可将查验消息发送到ID为151的节点。在接收到第一查验消息之后,可以使ID为151的节点知道ID为144的节点是ID为151的节点的邻居。节点151还可从节点144发现较新的活跃度信息(关于环1206上的其它节点的),作为该动作的副作用。
查验消息可基于例如与查验消息要被发送到其中的邻近环相关联的配置状态来以指定的频率周期性地重复。该频率可以取决于配置状态而变化。例如,对WAN的指定查验频率可以与对LAN的指定频率不同。查验消息也可根据查验分发模式来发送。对于始发节点的查验分发模式可以指示查验消息要被发送到环上两个方向上的邻域节点。例如,ID为144的节点可以在ID为135的节点的方向和ID为151的节点的方向这两个方向上发送查验。查验分发模式和频率可以变化。例如,每一邻近环不同。
方法1400包括从邻域节点接收第二查验消息的动作(动作1402)。该第二查验消息向当前节点指示至少发起第二查验消息的邻域节点是当前节点的邻居。第二查验消息还可包括始发邻域节点的路由伙伴和邻域节点的状态。例如,ID为151的节点可将第二查验消息发送到ID为144的节点。在接收到第二查验消息之后,可以使ID为144的节点知道ID为151的节点是ID为144的节点的邻居。第二查验消息还可包括关于环1206上的其它节点的活跃度信息。由此,一般而言,查验消息可以在邻域内交换,并且可用于维护联盟内存在的节点的邻域成员资格(对每一邻近成员资格)和近似的公共领域视图。
接收到的查验消息可被周期性地重复/转发给向其中发起该查验(由始发节点发送)的邻近邻域内的其它节点。转发的查验消息也可根据查验分发模式来发送。对于转发节点的查验分发模式可以指示查验消息要被发送到远离始发节点的方向上的邻域节点。例如,ID为1151的节点可以将发自ID为144的节点的查验在ID为174的节点的方向上转发。查验转发分发模式可以例如在每一邻近环中变化。
节点可被配置成以相应的间隔接收查验消息。当未接收到预期的查验消息时,节点可以解释通信失败,并对应发起该预期的、但至少晚了的查验消息的节点将另一节点的阶段.未知指示设为真。
方法1400包括将更新请求消息邻近地路由到理想路由节点的动作(动作1403)。更新请求消息向接收这一路由的更新请求的路由节点指示当前节点正作为接收路由节点的路由伙伴参与。更新请求消息还可至少包括当前节点的邻域节点的身份(例如,采用活跃度信息的形式)。例如,ID为144的节点可以将更新消息1216路由到ID为208的节点(从144偏移了64的理想路由伙伴)。由于节点210(先前计算的路由节点)最接近208,因此它将接收并处理路由的更新请求。在接收到更新消息1216之后,可以使ID为210的节点知道(或得到加强)ID为144的节点是ID为210的节点的路由伙伴。
方法1400包括从处理(接收)路由节点接收更新响应消息的动作(动作1404)。更新响应向当前节点指示处理路由节点正作为当前节点的路由伙伴来参与。更新响应消息还可至少包括处理路由伙伴的邻域节点的标识符。例如,ID为210的节点可将更新响应1207发送到ID为144的节点。在接收到更新响应1207之后,可以使ID为210的节点知道ID为210的节点是ID为144的节点的路由伙伴。
方法1400还可包括适当地更新节点信息以指示当前节点和邻域节点正作为邻居参与,且当前节点和邻域节点正作为路由伙伴参与的动作。例如,ID为144的节点可以更新对应于ID为151的节点的节点信息来指示ID为144和141的节点正参与(邻近)邻域。类似地,ID为144的节点可以更新对应于ID为210的节点的节点信息来指示ID为144和210的节点作为路由伙伴参与。
在某些实施例中,在指定节点X处保存的应用程序状态使用可靠洪泛协议在其邻域(X)节点之中复制。应用程序状态中的每一项都有所分配的所有者,这可以是创建该项的端点。应用程序状态中的每一项还有由其所有者给予的相关联的时间戳(也称为序列号)。时间戳具有至少三个分量:
○拥有实体的实例ID(例如,无符号整数)。必须至少是单调(>1)递增的。
○标识由所有者生成的特定序列的序列ID(例如,URI)。该分量允许同一拥有者生成多个独立序列。
○标识所标识的应用程序序列ID内的偏移量的序数(例如,无符号整数)。
项时间戳用于在复制期间检测与相应的项相关联的最新信息,因为项时间戳至少生成具有<实例ID,序列ID,和偏移量>三元组的部分排序。与所复制的项相关联的时间戳与本地时间戳(如果有)进行比较以检测最新的那一个。项时间戳也用于支持创建/更新/删除操作的幂等语义。例如,当一节点接收到更新应用程序状态中的现有项的请求时,该更新仅在与该更新请求相关联的时间戳要高于与本地项相关联的时间戳的情况下才被接受。可在项没有被分配单个所有者的情况下利用基于向量时间戳的冲突解决技术。应用程序状态复制提供了容错并方便了跨邻域节点的负载平衡请求。
作为一个可任选行为,(在一段时间之后)未检测到来自(发自)其它伙伴(路由和/或伙伴)节点的预期的更新或查验的节点可以认为阶段状态未知,将阶段.未知指示设为真,并如此向其它第三方节点报告它。换言之,可能需要更新和查验的周期性生成。该要求和实际超时值可以是各个邻近环的属性。例如,环对于某些子环(例如,在LAN段中)可具有更限制性的定制要求,并且节点故障检测/报告相当快。另一方面,环对于其它子环(例如,在因特网上)可具有较不限制的定时要求(或甚至没有定时要求),并且主动节点故障检测/报告相当长(或不存在)。
图15示出了用于发现关于另一节点的活跃度信息的方法1500的示例流程图。方法1500将参考图12A和12B中的环1206来描述。一般而言,诸如,例如同步1204、同步响应1204、更新1216、更新响应1207等任何消息可包括至少一个活跃度首部。在某些实施例中,活跃度首部包括节点的<节点ID,实例ID,阶段[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,以及权重值>。在其它实施例中,活跃度首部包括<阶段[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,以及权重值>。在这些其它实施例中,活跃度首部可用于扩充已经包括了发送者和原始节点的节点ID和实例ID的寻址首部。由于寻址首部已经包括了节点ID和实例ID,因此该信息可在活跃度首部中省略。
方法1500包括接收表示关于参与联盟基础结构的节点的状态信息的活跃度首部的动作(动作1501)。活跃度首部至少包括接收到的参与节点ID、接收到的节点的实例ID、接收到的阶段值、以及接收到的新鲜度值。例如,ID为144的节点可从ID为151的节点接收同步响应1204中的第一活跃度首部。该第一活跃度首部可包括ID为174的节点的<参与节点ID,实例ID,阶段[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,以及权重值>。阶段状态值(例如,插入、同步、路由、操作)标识在第一新鲜度值的时刻ID为174的节点的所表达的阶段。阶段值(例如,阶段状态:[插入,同步,路由,操作]和阶段.未知)标识在第一新鲜度值所指示的时刻ID为174的节点的所表达的和/或检测到的阶段信息。
然而,新鲜度值可以因通信延迟而扣除。新鲜度值也可随着时间的流逝而衰减。对于新鲜度值的衰减曲线可以对不同阶段状态(包括未知)而不同(并且可能不是线性和对称的)。由此,跨不同的节点阶段,新鲜度值的衰减可以是非线性和/或非对称的。
方法1500包括至少访问在当前节点处维护的参与节点的当前实例ID、当前阶段值、以及当前新鲜度值的动作(动作1502)。例如,ID为144的节点可以访问先前接收并存储的ID为174的节点的实例ID、阶段值[阶段状态值].[阶段.未知指示]以及新鲜度值。
方法1500包括至少分别将接收到的实例ID、接收到的阶段值和接收到的新鲜度值与在当前节点处的当前实例ID、当前阶段值和当前新鲜度值进行比较的动作(动作1503)。例如,ID为144的节点可以将先前接收并存储的ID为174的节点的实例ID、阶段值[阶段状态].[阶段.未知指示]和新鲜度值与在活跃度首部中接收到的实例ID、阶段值[阶段状态].[阶段.未知指示]和新鲜度值进行比较。
ID为144的节点可基于(按序)第一实例ID大于当前存储的ID为174的节点的实例ID、基于第一阶段状态值比当前存储的ID为174的节点的阶段状态值更前、或基于第一新鲜度值是大于当前存储的ID为174的节点的新鲜度值的值,确定ID为174的节点的当前状态信息(例如,从ID为151的节点接收)是陈旧的。ID为144的节点还可确定至少一个阶段.未知指示(或者是当前存储的,或者是在活跃度首部中接收的)指示在检测/发送阶段状态时阶段状态是已知的。
方法1500包括基于比较确定参与节点的状态信息是否要在当前节点处更新的动作(动作1504)。例如,基于ID为174的节点的值的比较,ID为144的节点可确定ID为174的节点的状态信息要被更新。更新ID为174的节点的过时的状态信息可包括用包括在活跃度首部中的值来替换当前存储的值(例如,对于实例ID、阶段状态值、阶段.未知指示或新鲜度值)。例如,ID为144的节点可以更新ID为174的节点的状态信息以指示ID为174的节点已转换到更前面的阶段状态。
在某些实施例中,可以检测到与参与节点的通信可能已丢失。例如,ID为144的节点可以检测到与ID为151的节点的通信已丢失。简要地参考图17,响应于对活跃度事件1701的先前的订阅(具有ID为151的节点的端点),应用层1752可以向功能层1751发送端点停机事件1703(具有ID为151的节点的端点)。在这些实施例中,这些检测到的活跃度条件可以在阶段.未知指示符被设为真且带有上一个已知的阶段状态值的活跃度信息中指示。
方法1500还可包括从联盟基础结构中的第二个不同的节点接收包括第二活跃度首部的消息的动作。例如,ID为144的节点可以接收包括第二活跃度首部的状态消息(从ID为103的节点或环1206的某一其它节点)。该第二活跃度首部可包括ID为174的节点的<参与节点ID,第二实例ID,第二阶段值[阶段状态值].[阶段.未知指示],第二新鲜度值,第二色彩(邻近性)值,以及第二权重值>。第二阶段状态值(例如,阶段状态:[插入,同步,路由,操作]和阶段.未知指示)标识在第二新鲜度值的时刻ID为174的节点的所表达的/检测到的阶段。
或者,在接收第一活跃度首部之后,ID为144的节点可尝试直接与ID为174的节点通信。如果通信成功,则ID为174的节点可以返回在寻址首部中有节点ID和第二实例ID且具有活跃度首部的消息(例如,同步响应),该活跃度首部包括<第二阶段值,第二新鲜度值,第二色彩(邻近性)值,以及第二权重值>。如果检测到故障,则ID为144的节点生成内部活跃度状态改变(例如,新鲜度=最大,且阶段.未知指示=真)并如同该状态改变是从另一节点接收的那样来处理该状态改变。这一状态改变具有最高新鲜度值。
方法1500还可包括将第二实例ID、第二阶段值和第二新鲜度值分别与当前实例ID、当前阶段值和当前新鲜度值进行比较的动作(动作1506)。例如,在从ID为103的节点接收到状态消息之后,ID为144的节点可以基于(按序)第二实例ID大于第一实例ID、第二阶段比第一极端值更前、或第二新鲜度值大于第一阶段值,来确定ID为151的节点的当前状态信息是陈旧的。
方法1500还可包括基于比较来确定是否要更新参与节点的状态信息的动作。例如,基于ID为174的节点的值的比较,ID为144的节点可确定ID为174的节点的状态信息要被更新。更新ID为174的节点的过时的状态信息可包括用包括在第二活跃度首部中的值来替换当前存储的值(例如,对于实例ID、阶段状态值、阶段.未知指示或新鲜度值)。例如,ID为144的节点可以更新ID为174的节点的状态信息以指示ID为174的节点已转换到更前面的阶段状态。
在某些实施例中,在相等的色彩值的上下文中比较阶段值。如上所述,节点可参与多个邻近环。参与多个邻近环可以作为对更具体的环的参与蕴含着对更一般的环(沿着公共脊骨)的参与的结果而发生。例如,回头参考图5,节点对环532的参与也蕴含着节点正参与环522、511和501。由此,更具体的环的色彩也表示所有父邻近环。同样如上所述,对多个邻近环的参与可以在一个环中的节点被别名化到一个或多个其它环(可能沿着不同的脊骨)时发生。例如,仍参考图5,参与环532的节点可以被别名化到环531(或甚至环541,这蕴含了对环531、522、511和501的参与)。由此,一个环(例如,环531)的色彩可被视为另一个环(例如,环532)的对等色彩(或邻近性)。
当一节点以别名化的方式参与多个邻近环时,该节点的阶段值(例如,阶段状态值和/或阶段.未知指示)有可能在不同邻近环之间有所不同。由此,接收关于另一节点的状态信息的节点在确定对该节点和色彩是否要更新当前状态信息之前标识关于状态信息(色彩)的相应的邻近环。例如,ID为144的节点可以在将所接收到的状态信息与当前状态信息进行比较之前标识对于所接收到的对应于ID为174的节点的状态信息的相应的邻近环。
标识适当的邻近环可以包括将接收到的色彩值与一个或多个当前色彩值进行比较。当接收到的色彩值和当前色彩值相等时,可将诸如,例如当前实例ID、当前阶段值和当前新鲜度值等其它状态信息与诸如,例如接收到的实例ID、接收到的阶段值和接收到的新鲜度值等相应的接收到的状态信息进行比较。另一方面,当接收到的色彩值和当前色彩值不同时,不发生进一步的比较。
色彩值之间的相等可以用多种方式来获得。例如,色彩值之间的相等可以在当前色彩值和接收到的色彩值指示相同的邻近环(例如,环532)时获得。此外,色彩值之间的相等可以在将更具体的色彩值与相应的父色彩值(例如,沿着同一脊骨的另一环)比较来获得。例如,将环532的色彩值与环511(或环522或501)的色彩值进行比较可得到相等。由此,子邻近性是父邻近性,但是更为具体。
由此,一般而言,联盟基础结构中当前可操作的节点可以甚至在与其它节点的通信看似丢失时交换关于这些其它节点的所表达的和检测到的活跃度状态信息。
程序引导机制
一般而言,为使节点成为联盟的活动成员(例如,加入),节点必须与已经是它打算加入的叶环的活动成员的至少一个其它节点通信。为帮助确保该初始形式的通信是可用的,联盟可以利用程序引导机制。程序引导机制可用作当其它类型的通信无法标识叶环的活动成员或者安全约束要求新加入的节点最初与诸如种子节点等一组特殊节点中的至少一个节点通信时的最后手段。即,当其它类型的通信失败或者由于安全要求,可使用程序引导机制来标识叶环的活动成员节点。
在某些实施例中,使用种子节点来程序引导与联盟的通信。种子节点提供了对某些类型的跨近邻(近邻间)的通信的公知的入口点。种子节点因基础结构故障/恢复和一般的动态性而帮助复原环分区。每一个环可具有至少一个可操作种子节点以便为联盟提供基本程序引导特性。
对等种子节点可以在它们之中通信以便维护一近邻的环结构(例如,双重链表),该结构至少由对于该近邻的所有活动种子节点构成。可使用专用种子节点同步协议来向每一种子节点至少提供所有其它种子节点的存在(活动)状态的总知识。活动种子节点是它所归属的邻近性叶环以及该叶环的所有其它祖先环的成员节点。由此,种子节点可以表示例如从种子节点的叶环到根环的整个邻近环脊骨。因此,种子节点可以作为这些邻近环的每一个中的高度可靠且公知的入口节点来运作。结果,关于种子节点的存在状态可用于联盟内的各种形式的通信(例如近邻间通信)。因此,种子节点可以提供多个特殊的特性,诸如,例如担当对于加入节点的公知的“加入点”,担当安全环授权机构,协助复原基础结构分区,以及担当对于其每一近邻的稳定“入口节点”。
为提供存在数据,种子节点的到来和有序的离开可以被注册为其每一近邻中的会合点处的稳定入口点。例如,注册消息可被路由到其目的地ID是串“Proximity:/”的SHA-1散列的固定URI。尽管在一个实施例中担当稳定入口点的种子节点以此方式来注册其自身,但是存在其中所选的非种子节点也可用同一方式并用此处对种子节点描述的相同或相似的协议来注册其自身的其它实施例。当稳定入口节点(诸如种子节点)注册时,该稳定入口节点可以指示它是其成员的每一个环。由此,在由该固定URI标识的会合点处维护的信息本质上是稳定入口节点及其相应的环成员的列表。因此,任何节点可以参考由该固定URI标识的会合点来获得可用稳定入口节点及其环成员的列表。
在一个实施例中,稳定入口节点直接注册这些到达和离开事件。在另一实施例中,稳定入口节点直接在其直接邻近环内的会合点处注册这些事件,并且该会合点透明地帮助(直接地或间接地)更新注册/取消注册稳定入口节点所属的每一剩余的邻近环中的所有其它适当的会合点。联盟的应用程序状态定序和传播特性可用于维护并传播该稳定入口节点注册信息。例如,可使用可靠洪泛协议来在节点的邻域节点之间复制保存的应用程序状态。
稳定入口节点的存在数据向着根环的提升允许联盟中的其它节点在每一近邻中查找至少一个入口节点。入口节点查找可通过将节点查找消息向着执行查找的节点的叶环和期望的邻近环的最低公共祖先环(“LCAR”)中的上述确定的会合点路由来促进。例如,参考图5,环541中的节点可能期望与环533中的节点通信。然而,环541中的节点可能没有环533中的任何节点的直接知识。由此,环541中的节点可以向环522(环541和环533的LCAR环)发送节点查找消息。环522中处理入口节点存在信息(例如,由于该入口节点获得的注册消息而导致存在于系统中)会合点节点可返回具有至少关于环533中的已注册稳定入口节点的联系信息的查找响应消息。
在某些实施例中,稳定入口节点是被特别地配置为用于维护各个近邻的存在数据的稳定入口节点的种子节点。在其它实施例中,其它类型的节点也可担当维护关于各个近邻的存在数据的稳定入口节点,并且还可被配置成执行其它操作。例如,某些其它类型的节点可被配置(例如,由管理员)为高度可用,且因此适用作稳定入口节点(即,如上所述地注册)。然而,其它类型的节点可能不包括附加种子节点功能(例如,可能不作为安全环授权机构而被信任)。在某些实施例中,维护关于其直接近邻的入口节点存在状态的会合点可以在一个或多个祖先环中将其自身注册为稳定入口节点。
近邻间通信
本发明的各实施例还可方便诸如,例如环树的不同邻近分支中的节点之间的近邻间通信。近邻间通信可用于向邻近地划分的环基础结构中的一个或多个,以及可能所有邻近环和/或在这些邻近环之间通信。现在参考图5A,图5A示出了示例性的、归纳了邻近性的分区树500,且更详细地示出了分区树500的各部分。近邻间通信可以发生在图5A中的各节点之间。
如图5A所示,环的分区树500另外包括环513下的各个子环。另外的子环的每一个表示一已排序链表的一个分区。如先前对于图5所描述的,在分区树500内,根环501基于准则571(第一管理域边界准则)被划分成多个子环,包括子环511、512、513和514。同样如先前对图5所描述的,子环511可基于准则581(第二管理域边界准则)被进一步划分成多个子环,包括子环521、522和523。子环522下的其它子环基于其它准则来进一步划分。
如上所述,在分区树500内,每一节点具有单个ID,并沿着从根开始到叶的相应分区路径(脊骨)参与环。例如,参与子环552的每一节点也参与子环543、531、522、511和根501。
在图5A中,子环513也可以基于诸如,例如州管辖权等其它准则被进一步划分成多个子环,包括子环561和562。子环562可以基于诸如,例如城市管辖权等其它准则被进一步划分成多个子环,包括子环571和572。因此,在图5A内,可使用近邻间通信将消息从环541的节点发送到环572的节点,而不要求该通信从环541沿着脊骨向上到根环501再从根环501向下回到环572。
近邻间通信可作为诸如,例如广播、多播或任意播等在环树中实现的通信模式的一部分来包括。广播可包括将消息发送到环树中的所有活动节点。多播可包括将消息发送到环树中的一组节点。任意播可包括将消息发送到环树中的至少一个节点。
图19A示出了帮助近邻间通信的示例性的、归纳了邻近性的环的分区树1900。在环的分区树1900内,根环1901基于所选准则(第一管理域边界准则)被划分成多个子环,包括子环1、2、3和4。子环1被进一步划分成子环11、21、31和41。子环11被进一步划分成子环111、211和311。子环21被进一步划分成子环121、221、321、421和521。尽管未明确描绘,但诸如,例如子环2、3、4、31和41等其它子环也可被进一步划分。
归纳了邻近性的环的分区树1900中的环的编号约定被配置为使得在第一个数字之后的任何数字都指示环的父环。例如,环“311”中的“11”指示环11是环311的父环。类似地,环“41”中的“1”指示环1是环41的父环。全局环1901是用单个数字编号的任何环,诸如,例如环1、2、3和4的父环。类似于图5A中的归纳了邻近性的环的分区树500,环的分区树1900可以基于各种邻近性准则来划分。
在以下描述和所附权利要求书中,使用注释R[“<数字>”]来指代环号。例如,R[“11”]指环11。在以下描述和所附权利要求书中,使用注释N[<数字>]来指代节点号。例如,N[1311]指节点1311。
为方便环树中的通信,节点可维护将环匹配到这些环中的相应入口节点的入口表。如上所述,基于环的分区树1900的配置,父环包含来自其每一子环的所有节点。例如,环11包含来自R[“111”]、R[“211”]和R[“311”]的所有节点。由此,将消息发送到环11足以使该消息到达环R[“111”]、R[“211”]和R[“311”]中的任何节点。因此,在某些实施例中,节点的入口表可被缩减为关于从这些节点所驻留的环的观点来看相当不同的环的入口。例如,N[1111]可仅维护关于R[“21”]-N[1121]的入口,因为维护关于多个子环或R[“21”]的入口将是冗余的。
旁系环集的创建和维护
在本说明书和所附权利要求书中,指定环的任何对等环被定义为指定环的“旁系环”。在本说明书和所附权利要求书中,指定环的祖先环的任何对等环也被定义为指定环的“旁系环”。指定环的任何旁系环也是该指定环中所包括的所有节点的旁系环。
由此,例如,仍参考图19A,R[“211”]是R[“111”]的旁系环,因为R[“211”]是R[“111”]的对等体。R[“211”]也是R[“111”]中包括的任何节点,诸如,例如N[1311]的旁系环。此外,R[“21”]是R[“111”]的旁系环,因为R[“21”]是R[“11”](即,R[“111”]的祖先)的对等体。R[“21”]也是R[“111”]中包括的任何节点,诸如,例如N[1111]的旁系环。
在本说明书和所附权利要求书中,“旁系环集”(“CRS”)被定义为从指定环或指定环内的节点的观点来看的一个或多个旁系环的集合。例如,在图19A中,对R[“221”],以及R[“221”]中的任何节点,诸如,例如N[8221]的旁系环集包括R[“11”]、R[“121”]、R[“31”]、R[“41”]、R[“2”]、R[“3”]和R[“4”]。
由此,为方便近邻间通信,节点可维护一CRS入口表,该表包括一个或多个旁系环以及进入该一个或多个旁系环的一个或多个相应的入口节点。CRS入口表可以是包括一个或多个<旁系环,1到N入口节点>项的数据结构,其中N是某一整数。例如,该数据结构的格式可以是<旁系环_01,入口节点_01,入口节点_02,...>,其中省略号表示对旁系环_01的一个或多个另外的入口节点。
为创建CRS入口表,节点可利用本地知识、用于在环树中传播状态的会合协议消息(例如,查验消息、更新消息和更新响应)、应用程序消息、以及用于方便环树中的指定通信模式(例如,广播、多播和任意播)的消息。
节点可利用来自节点所参与的所有级别的环的诸如,例如路由表信息等本地知识。例如,仍参考图19,N[1121]可以是R[“1”]中N[1311]的邻居。从N[1121]的观点来看N[1311]的一个旁系环是R[“21”]。因此,N[1311]可以将对(R[“21”],N[1121])(在这一情况下,具有单个入口节点的项)插入到N[1311]的CRS入口表中。通过利用这一类型的本地知识,节点可将入口插入到CRS入口表中。
除了特别地预期的消息之外,节点可以在本来用于其它目的,诸如用于传播邻域和路由伙伴状态信息的消息中将其CRS入口表信息传播到其它节点。例如,节点可以在发送给邻域节点的查验消息以及在路由伙伴节点之间交换的更新消息和更新响应中包括CRS入口表状态。从另一节点接收CRS入口表状态的节点可以使用所接收到的CRS入口表状态来扩充和/或维护其自己的CRS入口表。
例如,当一节点与其邻居/伙伴节点(例如,在会合协议层处)交换会合查验/更新消息时,该节点还可交换(至少部分,可能全部)其CRS入口表(并使用从其邻居/伙伴接收到的CRS入口表状态来更新其自己的表)。例如,假定N[1311]没有关于R[“3”]中的任何节点的先验知识(在环1901的上下文中)。然而,N[1311]的确具有邻居N[8221](在R[“1”]中),并且N[8221]的CRS入口表具有入口(R[“3”],N[8223])。至少由于N[1311]和N[8221]是邻居,N[1311]和N[8211]可以不时地向对方发送查验消息。N[8221]可以在发送给N[1311]的查验消息中包括(至少部分,可能全部)其CRS入口表。由此,当N[1311]从N[8221]接收查验消息时,该查验消息可包括N[8221]的CRS入口表。从N[8221]的CRS入口表中,N[1311]可以标识项<R[“3”],N[8223],...>,并在其自己的CRS入口表中包括项<R[“3”],N[8223],...>。N[1311]还可在其CRS中标识关于其它环的其它项,并在其自己的CRS入口表中包括这些其它项。
CRS入口表状态可以类似地在环中的路由伙伴之间交换的更新消息和更新响应中交换。同样,任何路由协议消息可用于获知CRS入口节点(例如,活跃度信息)。并且,可使用旨在维护CRS入口表的特定消息。
CRS入口表状态也可在促进环树中的指定通信模式(例如,广播、多播和任意播)的消息中发现。例如,为将消息广播到环树中的每一节点,广播算法可使用专用于广播的各种类型的消息。发送这些广播专用消息的节点可以在广播专用消息中包括CRS入口表状态。类似地,当将消息多播到一组节点中的每一节点时,多播算法可使用专用于多播的各种类型的消息。发送这些多播专用消息的节点可以在多播专用消息中包括CRS入口表状态。同样,当将消息任意播到至少一个节点时,任意播算法可以使用专用于任意播的各种类型的消息。发送这些任意播专用消息的节点可以在任意播专用消息中包括CRS入口表状态。接收通信模式专用消息的节点可以标识适当的入口(例如,<旁系环,入口节点>项),并在其自己的CRS入口表中包括来自这些入口的部分或全部状态。
CRS状态也可在应用程序之间交换的应用程序组件消息中发现。简要地参考图1,应用层121、122和/或123可以交换包括CRS状态的应用程序组件消息。在接收到包括CRS状态的应用程序组件消息时,应用层可将该CRS状态向下传送到相应的其它较低层,诸如,例如传送到会合协议层,以扩充现有CRS状态。
CRS状态可以是应用程序提供的和/或硬连线的,并且可由环树内的节点来配置。
回头参考图19A,如果节点发现它知道对于同一环的多个入口节点,则它可决定对该环保留两个或更多入口节点。在某些实施例中,节点从任何保留的入口节点中随机地选择一入口节点。在其它实施例中,应用策略以帮助从任何保留的入口节点中选择指定的入口节点。策略可指示所选入口节点每次都是相同的入口节点。或者,策略可指示所选入口节点在任何保留的入口节点之中变化。例如,在某些实施例中,每一节点以循环方式选择,使得可在任何保留的入口节点之间均匀地分布负载。
此外,当保留多个入口节点时,一节点可以例如在第一所选入口节点故障、忙碌、或出于某一其它原因而不可用的情况下高效地转换到一不同入口节点。
或者,节点可以对环保留单个入口节点。
有时,节点可以检测到对环的附加入口节点。在某些实施例中,当一节点保留单个入口节点或者缺少存储附加入口节点的存储器时,该节点可确定新接收到的入口节点是否替换现有的入口节点。在某些实施例中,节点可使用一函数来用以下参数为每一候选入口节点计算排名:入口节点的距离、入口节点信息的新鲜度、以及入口节点的权重(例如,配置首选项)。保留具有较高排名的入口节点。
CRS入口表可以是或不是完整的。完整的CRS入口表在节点的CRS中包括对每一个环的至少一个入口节点。例如,对节点1311的完整的CRS入口表可包括对环111、211、21、31、41、2、3和4的每一个的至少一个入口节点。
利用上述机制,有可能从邻近环层次中的一个或多个环和/或节点的观点来看构造完整的CRS入口表。在某些实施例中,情况可以是路由表状态信息独自形成对环树中的每一节点的完整的CRS入口表。例如,在环树1900中传播的路由表相关信息(例如,在查验消息、更新请求消息和更新响应消息中)可形成关于所描绘的环的每一个中的每一节点的完整的CRS入口表。
然而,在其它分布式网络环境中,环的动态特性和/或交换入口表相关状态时的延迟可能会阻碍完整入口表的构造。换言之,在这些其它环境中,在任何给定时刻,可能有来自一个环或节点的旁系环集的、该节点或环不知道的一个或多个环。例如,再次参考图19A,假定N[8004]刚加入,并且在没有属于R[“4”]的节点之前,大多数节点都没有关于R[“4”]的入口节点,直到消息话务(例如,查验/更新消息)或其它活动导致该信息在整个环基础结构上分发。由此,由于网络动态性(例如,节点故障、通信故障、通信延迟、节点增加等),在节点处维护完整的CRS入口表并不总是可能的。因此,在许多环境中,节点维护包括对于该节点的CRS中的少于全部的环的入口节点的部分CRS入口表。
使用CRS入口表的近邻间通信
节点可使用CRS入口表中的信息来发送近邻间通信(例如,不必将消息路由到发送环和目的地环的LCAR)。仍参考图19A,基于CRS入口表中的适当入口,N[1311](例如,发布者节点)能够直接向R[“111”]、R[“211”]、R[“21”]、R[“31”]、R[“41”]、R[“2”]、R[“3”]和R[“4”]中的一个或多个发送近邻间通信。例如,在某一时间点,关于N[1311]的CRS入口表可包括以下入口:
R[“2”]:N[1112]
R[“3”]:N[8223]
R[“21”]:N[1121]
R[“31”]:N[1131]
R[“111”]:N[1111]
R[“211”]:N[1211].
这些入口可用于向R[“111”]、R[“211”]、R[“21”]、R[“31]、R[“2”]和R[“3”]的直接通信。例如,N[1311]可向R[“111”]发送通信52,N[1311]可向R[“211”]发送通信51,N[1311]可向R[“21”](N[1121]是R[“21”]和R[“221”]两者的成员)发送通信53,N[1311]可向R[“31”]发送通信56,N[1311]可向R[“2”]发送通信57,且N[1311]可向R[“3”]发送通信58。随着时间的推移,N[“1311”]可标识对于R[“41”]和R[“4”]的入口(例如,<旁系环,入口节点>项)。这些入口可从更新的本地知识、从包含在会合协议消息(例如,查验消息、更新消息和更新响应)中的CRS入口表、通过包含在通信模式专用消息中的CRS入口表状态、以及通过诸如,例如应用程序组件等其它机制来标识。
向下路由算法
在会合联盟(带有或没有CRS入口表)中,情况可以是消息要被路由到指定邻近环中最接近给定节点ID的节点,该给定节点不是消息所始发的叶环的祖先(或在该叶环中)(以下称为“向下路由”)。其一个示例是当始发环中的节点不知道对于旁系环的入口节点时帮助从始发环中的节点到旁系环的近邻间通信。图19B示出了示例性的、归纳了邻近性的环的分区树1900的另一视图。例如,现在参考图19B,情况可以是N[1311]要发送目的地为R[“4”]或R[“41”]中的节点的通信。
假定是会合联盟,可定义以下函数:
RouteDown(M,P,ID):联盟要将消息M传送到近邻P中最接近ID的节点。近邻P可以是联盟中不是始发节点的叶环的祖先(或在该叶环中)的任何邻近环(叶或中间环)。
在某些实施例中,消息M从不在始发节点的叶环和目标邻近环P的LCAR内的节点上路由。例如,为实现从N[1311]到R[“41”]的向下路由,可能不需要在R[“1”](R[“311”]和R[“41”]的LCAR)上路由消息。然而,在其它实施例中,如果适当,则消息可在LCAR上路由。
RouteDown(M,P,ID)函数可以包括标识已知是目标邻近环P的成员的入口节点。发送节点可以使用各种不同的机制来标识目标邻近环中的入口节点。发送节点可以是始发节点(第一发送节点)。发送节点也可以是从始发节点或另一中间节点接收消息然后转发该消息的中间节点。
发送节点可使用诸如,例如配置或本地高速缓存的信息(例如,除了CRS入口表之外)的本地知识来标识对目标邻近环的入口节点。例如,N[1311]能够访问包括关于环树1900中的环的配置或本地高速缓存的信息的高速缓存和配置1902。在某些环境中,关于联盟的本地知识通过联盟外的通信机制(即,带外)获得。本地知识可用于标识确切的目标邻近环P中的任何节点。如果找到确切的目标邻近环中的任何节点,则消息M可被转发到它们中的一个。例如,N[1311]能够使用高速缓存和配置1902来标识N[8004]并将消息1903转发到R[“4”]。
发送节点可使用CRS条目表来定位目标邻近环P中的任何入口节点。如果找到目标邻近环的任何入口节点,则消息M可被转发到目标邻近环P中的入口节点。例如,当N[7521]是消息1903的目的地时,N[1311]可以将N[6521]标识为R[“521”]的入口节点。因此,消息1903可被路由到N[6521](或到R[“521”]中)。在R[“521”]内,N[6521]然后可尝试使用环内通信将消息1903路由到N[7521]。由此,如果发送节点能够标识目标邻近环的入口节点,则其将消息转发到确切的目标邻近环。例如,如果N[“6521”]能够标识R[“21”]的入口节点,则它将消息1903继续转发给R[“21”](虚线)。
另一方面,当发送节点不能标识目的地目标近邻的任何入口节点(例如,从本地知识或CRS入口表)时,发送节点可检查其CRS入口表以定位目标邻近环的任何祖先环的入口节点。例如,情况可以是N[1311]正在尝试将消息发送到R[“121”]中的节点,然而N[1311]可能无法标识R[“121]的入口节点。因此,N[1311]可以参考CRS入口表1904来定位N[6521](对R[“21”]的入口节点)。N[1311]可以将消息转发给N[6521],后者现在变为消息的发送节点。
逻辑上,消息1903现在可以被视为“在R[“21”]处”,因为N[6521]也是R[21]的节点。N[6521]然后可以尝试标识对R[221](目标近邻)的入口节点。例如,N[6521]可以参考本地知识、CRS入口表和/或可(递归地)应用向下路由算法。情况可以是N[6521]将N[3221]标识为对R[221]的入口节点。因此,N[6521]可以将消息1903发送给N[3221]。N[3221]然后可以使用环内通信将消息1903路由到R[221]中的适当节点。
在适当时(例如,树中有比图19B所示的多的深度),则消息可被传递到越来越接近目标邻近环的祖先,直到标识了对该目标邻近环的入口节点或者没有进一步的祖先环可用。
发送节点还可将至少包含请求目标邻近性的入口节点查找请求路由到诸如,例如用于程序引导联盟的入口节点目录机制。入口节点查找请求的路由可以被约束到发送节点和目标环的LCAR。例如,N[1311]可以将查找请求1906路由到会合点7651以请求R[“31”]的入口节点。入口节点目录机制可以返回潜在入口节点的列表。例如,会合点7651可以在查找响应1907中返回潜在入口节点(包括N[8431])的列表,以及至少注册到关于该目标近邻的会合点的种子节点。
发送节点考虑在查找响应消息(从会合点发送)中标识的任何新发现的节点,并将消息M转发给这些入口节点之一。考虑新发现的节点可以使得CRS入口表以及其它本地高速缓存的节点存在知识被扩充或以其它方式维护。查找响应消息还可包含其它节点存在信息。例如,已知对发送节点重要的特定入口节点可被包括在发送节点的CRS入口表中。
由此,如果一个或多个可用机制至少产生目标邻近环中的入口节点,则消息M被发送(或者由原始发送节点、目标近邻的祖先环中的入口节点、或者由查找的入口节点)到目标环中这些入口节点中的至少一个。消息M可包括对于邻近目标环中的入口节点将消息M路由到ID的指令。另一方面,如果没有一个可用机制产生目标邻近环中的入口节点,则可将向下路由请求向着原始发送节点故障返回(falut back)。
在某些实施例中,始发节点将端对端向下路由消息首部附加到消息,其中向下路由消息首部指定目标近邻URI。
如果上述机制中的任一个标识了多个“下一跳”节点,则可选择单个节点。当选择单个节点(例如,打破平局)时,可选择更接近目标近邻P的节点,然后可选择具有较高权重的节点,然后可选择更接近M的目的地ID的节点。如果没有机制导致选择,则然后可随机地选择节点。如果在有多个候选节点时发生了转发消息M的失败的尝试,则可重新尝试转发,只要有未故障的候选节点。
当应用程序消息从始发者通过中介传递到最终目的地节点时,可建立反向状态/错误消息路径。一旦消息被传递到目的地或检测到错误,则相应的错误/状态消息可沿着该路径被发回始发者。
图19C示出了示例性的、归纳了邻近性的环的分区树1900的一部分的分区视图。图19D示出了示例性的、归纳了邻近性的环的分区树1900中的环11的扩展视图。图20示出了用于维护环树中的节点的旁系环集的方法2000的示例流程图。方法2000将参考图19C和19D中的环、节点、消息和数据来描述。
方法2000包括节点访问旁系环集入口表的动作(动作2001),该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。例如,N[1311]可访问CRS入口表1904,该入口表被配置成对N[1311]以<旁系环,1到N入口节点>的格式来存储旁系环集入口,其中N是某一整数。由此,CRS入口表1904可以包括零个或多个<旁系环,入口节点>项,其各自包括指示N[1311]的旁系环以及对该旁系环的一个或多个相应的入口节点的项。例如,如图19C所示,CRS入口表1904包括CRS入口<R[“51”],N[8651],...>,其指示N[8651]是对R[51](N[1311]和R[“311”]的旁系环)的1到N个入口节点之一。
方法2000包括从维护与环树的配置相关的信息的可用资源中发现旁系环集入口表信息的动作(动作2002)。例如,N[1311]可以从维护与环树1900的配置相关的信息的源中发现旁系环集入口表信息。如上所述,对一节点可以有各种不同的CRS入口表信息源可用。例如,节点可能能够访问诸如,例如本地配置和高速缓存信息等本地指示,可能能够访问包括在诸如,例如查验消息、更新消息和更新响应等用于在环树中传播状态的会合协议消息中的CRS相关状态,可访问包括在应用程序消息中的CRS相关状态,并且可访问用于方便环树中诸如,例如广播、多播和任意播等指定通信模式的消息中的CRS相关状态。
由此,在图19C中,情况可以是N[1311]访问本地配置1921。从本地配置1921中,N[1311]可发现CRS入口<R[“111”],N[1111],...>,其指示N[1111]是对R[“111”](N[1311]和R[“311”]的旁系环)的至少一个入口节点。N[1311]还可接收应用程序消息1971。从应用程序消息1971中,N[1311]可发现CRS信息1972。CRS信息1972可以包含或不包含关于N[1311]的CRS中的环的CRS状态。N[1311]还可接收通信模式专用消息1973。从通信模式专用消息1973中,N[1311]可以发现CRS状态1974。CRS状态1974可以包含或不包含关于N[1311]的CRS中的环的CRS状态。
现在参考图19D,N[1311]可以在会合协议消息中发现并交换CRS状态。由于N[1111]是R[“111”]的成员,N[1211]是R[“211”]的成员,而N[1311]是R[“311”]的成员,因此节点N[1111]、N[1211]、N[1311]中的每一个也是R[“11”]的成员。如上所述,作为公共环的成员的节点可以交换查验消息、更新消息和更新响应来维护路由表信息。由此,R[“11”]的节点可以交换查验消息、更新消息和更新响应来维护R[“11”]的路由表信息。CRS状态可被包括在所交换的查验消息、更新消息和更新响应中,以及在节点之间的其它会合协议和应用程序消息话务中。
例如,N[A11](R[“11”]中N[1311]的邻居)可以向N[1311]发送包括CRS状态1932的查验消息1931。从CRS状态1932中,N[1311]可发现CRS入口<R[“31”],N[1131],...>,其指示N[1131]是对R[“31”](N[1311]和R[“311”]的旁系环)的入口节点。CRS入口1932可以是N[A11]的CRS入口表中的CRS条目的完整或部分列表。N[1311]还可向其邻居发送包括CRS状态的查验消息。例如,N[1311]可以向N[E11](R[“11”]中N[1311]的邻居)发送包括CRS状态1934的查验消息1945。CRS入口1934可以包括来自CRS入口表1904的CRS条目的完整或部分列表。
N[1311]还可发送和接收包括CRS相关信息的更新消息和更新响应。例如,N[1311]可以向N[D11](R[“11”]中N[1311]的邻居)发送包括CRS入口1934的更新消息1933。N[D11]可以通过向N[1331]发送包括CRS入口1938的更新响应1937来响应。CRS入口1938可以是N[D11]的CRS入口表中的CRS的完整或部分列表。类似地,N[1311]可以从N[C11](R[“11”]中N[1311]的路由伙伴)接收包括CRS入口1942的更新消息1941。CRS入口1942可以是N[C11]的CRS入口表中的CRS入口的完整或部分列表。N[1331]可以通过向N[“C11”]发送包括CRS入口1934的更新响应1943来响应。
节点还可从可用资源接收旁系环集入口表相关信息,该信息(直接地或间接地)指示CRS入口可能不再有效,例如,不能联系入口节点的指示。用于发送CRS相关状态的任何资源也可用于发送可被解释为意味着CRS入口可能不再有效的指示。由此,情况可以是节点不时地接收到导致一个或多个CRS入口被添加到其CRS入口表的CRS相关状态,以及可导致移除不再恰当的一个或多个CRS入口的指示。
方法2000包括基于所发现的旁系环集入口表信息,用适当的旁系环集入口状态更新旁系环集入口表的动作(动作2003)。每一适当的旁系环集入口状态包括节点的旁系环,以及到该节点的旁系环的至少一个相应的入口节点。例如,N[1311]可以将在图19C和19D中接收到的任何CRS入口包括在CRS入口表1904中。N[1311]还可从CRS入口表1904中移除被指示(例如,在配置、会合协议消息、应用程序消息、或通信模式专用消息中)为可能不再恰当的任何CRS入口。因此,节点的CRS入口表可被更新以适当地反应会合联盟的改变结构。
图19E示出了示例性的、归纳了邻近性的环的分区树1900的另一视图。图19E中所描绘的是CRS入口表1904,它可以基于在图19C和19D中交换的CRS状态信息来填充。图21示出了用于在环树中发送近邻间通信的方法2100的示例流程图。方法2100将参考图19F中的节点、环、消息和数据来描述。
方法2100包括确定一节点要向该节点的旁系环发送消息的动作(动作2101)。例如,N[1311]可以接收要向R[“2”]发送消息1976的指示。要向旁系环发送消息的指示可以从另一节点接收,根据路由逻辑来蕴含,从N[1311]处的应用程序接收,从多播设施接收,从广播设施接收,从任意播设施接收等。
方法2100包括节点访问旁系环集入口表的动作(动作2102),该旁系环集入口表被配置以用于存储关于该节点的旁系环集入口。每一旁系环集入口被配置以用于指示:节点的旁系环,以及进入该节点的旁系环的至少一个相应的入口节点。例如,N[1311]可以访问CRS入口表1904。CRS入口表1904中的每一CRS入口可以指示N[1311]的旁系环,以及对N[1311]的旁系环的至少一个相应的入口节点。例如,入口<R[“111”],N[1111],...>指示R[“111”]是N[1311]的旁系环,而N[1111]是对R[“111”]的至少一个入口节点之一。
方法2100包括从节点的旁系环集入口表中标识对于旁系环的至少一个旁系环集入口的动作(动作2103)。至少一个旁系环集入口中的每一个旁系环集入口都指示该旁系环的至少一个入口节点。例如,N[1311]可以从CRS入口表1094中标识关于R[“2”]的入口<R[“2”],N[1112],...>。入口<R[“2”],N[1112],...>指示N[1112](以及可能的其它节点)是对R[“2”]的入口节点。
基于包括在所标识的旁系环集入口中的相应入口节点的数量(例如,当有两个或更多入口节点时),方法2100还可包括从旁系环的多个入口节点解析到适当的入口节点子集以及可能解析到单个适当的入口节点的动作。例如,可基于始发和目标近邻P之间的接近度、基于可选择的节点权重、基于对目的地ID的接近度、或可随机选择地,来解析适当的入口节点子集。
方法2100包括将消息发送到至少一个指示的入口节点的动作(动作2104)。例如,N[1311]可以将消息1976发送到N[1112]。将消息发送到至少一个节点可包括将消息发送到多个节点中的所有入口节点、发送到解析的适当的入口节点子集中的每一入口节点、或发送到单个适当的入口节点。在某些实施例中,当对一个入口节点发生消息失败时,可以尝试一个或多个其它入口节点。发送节点还可能作为失败的结果来标识新节点。
图22示出了用于在环树中发送近邻间通信的方法2200的示例流程图。方法2200将参考图19F和19G中的节点、环、消息和数据来描述。
方法2200包括确定始发节点打算将消息路由到环树内的目标邻近环中最接近给定节点ID的目的地节点的动作(动作2201)。目标邻近环可以是始发节点的旁系环,或是始发节点的旁系环的子环。例如,N[1311]可以接收要将消息1998向着ID 30路由到R[“1221”](目标邻近环)的指示。要向旁系环或旁系环的子环发送消息的指示可以从另一节点、与N[1311]有关的应用程序、多播设施、广播设施、任意播设施等接收。
方法2200包括标识一个或多个入口节点的动作(动作2202),其中已知该一个或多个入口节点是目标近邻环和该目标近邻环的祖先环两者中的至少一个的成员节点。例如,N[1311]可将节点ID为56的N[41221]标识为对R[“1221”]的入口节点。可使用各种不同的机制来标识N[41221]。N[1311]可以参考本地知识来试图标识对邻近目标环的入口节点。例如,N[1311]可以参考高速缓存和配置1902来试图标识对R[ “1221′”]的入口节点。
N[1311]还可参考CRS入口表来标识对邻近目标环的祖先环的入口节点(例如,当未标识对目标邻近环的入口节点的时候)。情况可以是子环R[“321”]贡献节点N[4321]作为对R[“21”]的入口节点。同样,情况可以是R[“2221”]贡献节点N[12221]作为对R[“221”]的入口节点。当未标识对R[1221]的入口节点时,N[1311]可以试图标识对R[“221”]的入口节点,诸如,例如N[12221]。N[1331]还可试图标识对R[“21”]的入口节点,诸如,例如N[4321]。
情况可以是当未标识对目标近邻的入口节点时,一节点在试图标识从指定目标近邻的观点来看更远的祖先中的入口节点之前试图标识更近的祖先环中的入口节点。例如,当未标识对R[“1221”]的入口节点时,N[1311]可以首先试图标识对R[“221”]的入口节点。如果未标识对R[“221”]的入口节点,则N[1311]然后可以试图标识对R[“21”]的入口节点。
N[1311]还可利用诸如,例如种子节点等程序引导机制。例如,N[1311]可以将请求已知(已注册)的入口节点(种子节点是一个示例)的入口节点查找请求路由到已知的会合点,诸如,例如会合点N[7651]。响应于查找请求,会合点可以返回(发送)包括任何已知入口节点的查找响应消息。例如,查找响应1997可以从会合点N[7651]返回到N[1311]。查找响应1997可以包括注册到会合点N[7651]的任何入口节点的位置。
这些机制中的一个或多个可以将N[4221]标识为对R[“221”]的入口节点。
在某些实施例中,在其它入口节点标识机制之前利用某一入口点标识机制。例如,发送节点可以在试图标识对目标环的祖先环的入口节点或路由入口节点查找请求之前参考本地知识。在这些相同的实施例中,发送节点还可在路由入口节点查找请求之前试图标识对目标环的祖先环的入口节点。然而,在其它实施例中,可按不同的次序利用入口节点标识机制,或可省略这些机制。
方法2200包括将消息发送到所标识的入口节点的动作(动作2203)。该消息指示该入口节点要将该消息解析到具有目标近邻环中最接近所指示的目的地节点的节点ID的节点。例如,如由实线所指示的,N[1311]可以将带有该消息要被解析到节点ID 30的指示的消息1998发送到N[41221](对R[“1221”]的入口节点且节点ID为56)。N[41221]可以访问其路由表和/或邻域来确定其所知道的对节点ID 30的最接近的节点ID是节点ID为25的N[61221]。同样,N[61221]可以访问其路由表和/或邻域来确定其所知道的对节点ID 30的最接近的节点ID是节点ID为28的N[71221]。N[71221]可以参考其表和/或邻域来确定其节点ID,即节点ID 28是对节点ID 30的已知的最接近的节点ID,并可传递该消息。
先前所描述的路由算法也可用于在R[“221”]内路由消息1998。
当一消息被发送到所标识的作为祖先环或目标邻近环的成员的入口节点时,方法2200可以在所标识的入口节点处递归地应用。即,所标识的对祖先环的入口节点可进而试图标识对目标邻近环的入口节点。例如,如由虚线所指示的,情况可以是方法2200的应用导致消息1998被发送到入口节点N[12221](由子环R[“2221”]贡献的对R[“221”]的入口节点)。N[12221](从R[“2221”]的观点来看)然后可以标识对R[“1221”]的入口节点。由此,在N[12221]处递归地应用方法2200可使得消息1998被发送到N[41221]。
如果祖先环中所标识的入口节点不知道对目标邻近环的入口节点,则所标识的入口节点可试图标识对更接近目标近邻的另一祖先环的入口节点。对祖先环的入口节点然后可将消息转发给目标邻近环的更接近的祖先环的入口节点。
例如,如由虚线所指示的,情况可以是方法2200的应用导致消息1998被发送到入口节点N[4321](由子环R[“321”]贡献的对R[“21”]的入口节点)。然而,N[4321](从R[“321”]的观点来看)可以标识对R[“1221”]的入口节点。由此,N[4321](从R[“321”]的观点来看)可能无法标识对R[“221”]的入口节点。因此,在N[4321]处方法2200的第一次递归应用可使得消息1998被发送到N[12221]。在N[12221]处方法2200的第二次递归应用可使得消息1998被发送到N[41221]。
然而,如果N[4321]的确标识了对R[“1221”]的入口节点,则它可将消息直接发送到入口节点。由此,对祖先环的入口节点可以在适当时将消息转发给目标邻近环或目标邻近环的更接近的祖先环的入口节点(通常在转发入口节点的CRS中)。如所描述的,对更接近的祖先环的入口节点然后可以在适当时将消息转发给目标邻近环或目标邻近环的还要接近的祖先环(通常在转发“还要接近的”入口节点的CRS中)。该过程可以重复(例如,通过对方法2200的递归应用),直到达到了目标邻近环入口节点。
当达到目标邻近环时,可使用先前描述的路由算法在目标邻近环中路由消息。
图6和以下讨论旨在提供其中可实现本发明的合适计算环境的简要概括描述。虽然未作要求,但是本发明将在诸如程序模块等正由计算机系统执行的计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。计算机可执行指令、相关联的数据结构和程序模块表示用于执行此处所公开的方法的动作的程序代码装置的示例。
参照图6,用于实现本发明的示例系统包括计算机系统620形式的通用计算设备,包括处理单元621、系统存储器622、以及将包括系统存储器622的各种系统组件耦合到处理单元621的系统总线623。处理单元621可以执行被设计成实现计算机系统620的特征(包括本发明的特征)的计算机可执行指令。系统总线623可以是几种类型的总线结构中的任何一种,包括存储器总线或存储控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总线。系统存储器包括只读存储器(“ROM”)624和随机存取存储器(“RAM”)625。基本输入/输出系统(“BIOS”)626可以被存储在ROM 624中,它包含有助于例如在启动期间在计算机系统620内的各个元件之间传送信息的基本例程。
计算机系统620还可包括用于对磁硬盘639进行读写的磁硬盘驱动器627,用于对可移动磁盘629进行读写的磁盘驱动器628,以及用于对诸如CD-ROM或其它光介质等可移动光盘631进行读写的光盘驱动器630。磁硬盘驱动器627、磁盘驱动器628和光盘驱动器630分别通过硬盘驱动器接口632、磁盘驱动器接口633和光驱接口634连接到系统总线623。驱动器及其相关联的计算机可读介质为计算机系统620提供计算机可执行指令、数据结构、程序模块和其他数据的非易失性存储。虽然这里所描述的示例环境使用磁硬盘639、可移动磁盘629和可移动光盘631,但是可以使用用于存储数据的其他类型的计算机可读介质,包括盒式磁带、闪存卡、数字多功能盘、伯努里盒式磁带、RAM、ROM等。
包括一个或多个程序模块的程序代码装置可以被存储在硬盘639、磁盘629、光盘631、ROM 624或RAM 625上,包括操作系统635、一个或多个应用程序636、其他程序模块637和程序数据638。用户可以通过键盘640、定点设备642或其他输入设备(未示出)(例如,话筒、操纵杆、游戏手柄、扫描仪或等)来将命令和信息输入到计算机系统620中。这些和其他输入设备可以通过耦合到系统总线623的输入/输出接口646连接到处理单元621。输入/输出接口646逻辑上表示各种各样不同的接口中的任一个,例如,串行端口接口、PS/2接口、并行端口接口、通用串行总线(“USB”)接口、或电气和电子工程师协会(“IEEE”)1394接口(即火线接口),或者甚至可以逻辑上表示不同接口的组合。
监视器647或其他显示设备也经由视频接口648连接到系统总线623。扬声器669或其它音频输出设备也通过音频接口649连接到系统总线623。诸如打印机等其它外围输出设备(未示出)也可连接到计算机系统620。
计算机系统620可以连接到诸如办公室范围或企业范围的计算机网络、家庭网络、内联网和/或因特网等网络。计算机系统620可以通过这类网络与诸如远程计算机系统、远程应用程序、和/或远程数据库等外部源交换数据。
计算机系统620包括网络接口653,通过网络接口653,计算机系统620从外部源接收数据和/或将数据发送到外部源。如图6中所描绘的,网络接口653便于经由链路651与远程计算机系统683交换数据。网络接口653可以逻辑上表示一个或多个软件和/或硬件模块,例如,网络接口卡和对应的网络驱动程序接口规范(“NDIS”)栈。链路651表示网络的一部分(例如,以太网段),并且,远程计算机系统683表示该网络的节点。
同样,计算机系统620包括输入/输出接口646,通过输入/输出接口646,计算机系统620从外部源接收数据和/或将数据发送到外部源。输入/输出接口646经由链路659耦合到调制解调器654(例如,标准调制解调器、电缆调制解调器、或数字用户线(“DSL”)调制解调器),通过调制解调器,计算机系统620从外部源接收数据和/或将数据发送到外部源。如图6中所描绘的,输入/输出接口646和调制解调器654便于经由链路652与远程计算机系统693交换数据。链路652表示网络的一部分,并且,远程计算机系统693表示该网络的节点。
尽管图6表示用于本发明的合适的操作环境,但本发明的原理可以被用于能够(如果必要的话,具有合适的修改)实现本发明的原理的任何系统中。图6中所展示的环境只起说明的作用,决不表示其中可以实现本发明的原理的各种各样环境的甚至一小部分。
根据本发明,节点、应用层、以及其它较低层,以及相关联的数据,包括路由表和节点ID可从与计算机系统620相关联的任何计算机可读介质存储和访问。例如,这类模块的各个部分和相关联的程序数据的各个部分可以被包括在操作系统635、应用程序636、程序模块637和/或程序数据638中,用于存储在系统存储器622中。
当诸如磁硬盘639等大容量存储设备被耦合到计算机系统620时,这类模块和相关联的程序数据也可以被存储在该大容量存储设备中。在网络化环境中,相对于计算机系统620或其各个部分而描绘的程序模块可以被存储在诸如与远程计算机系统683和/或远程计算机系统693相关联的系统存储器和/或大容量存储设备等远程存储器存储设备中。可以在如前所述的分布式环境中实现这类模块的执行。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所述实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方式的含义和范围内的所有改变应被权利要求书的范围涵盖。
Claims (35)
1.一种在计算机系统处的用于在环树(1900)中发送近邻间通信的方法,所述方法包括:
确定一节点(1311)要将消息(1903)发送到所述节点(1311)的指定旁系环(21)的动作;
所述节点(1311)访问旁系环集入口表(1904)的动作,所述旁系环集入口表被配置以用于存储所述节点(1311)的旁系环集入口,每一旁系环集入口被配置以用于指示:所述节点(1311)的旁系环(21),以及进入所述节点(1311)的旁系环(21)的相应的至少一个入口节点(6521);
从所述节点的旁系环集入口表(1904)中标识对于所指定的旁系环(21)的至少一个旁系环集入口的动作,所述至少一个旁系环集入口中的每一个旁系环集入口指示所指定的旁系环(21)的至少一个入口节点(6521);以及
将所述消息(1903)发送到至少一个所指示的入口节点(6521)的动作。
2.如权利要求1所述的方法,其特征在于,所述确定一节点要将消息发送到所述节点的指定旁系环的动作包括从与所述节点相关的应用程序接收指示的动作。
3.如权利要求1所述的方法,其特征在于,所述确定一节点要将消息发送到所述节点的指定旁系环的动作包括从所述环树中的另一节点接收指示的动作。
4.如权利要求1所述的方法,其特征在于,所述确定所述节点要将消息发送到指定旁系环的动作包括所述节点访问一个或多个旁系环项或一个或多个入口节点项的动作。
5.如权利要求1所述的方法,其特征在于,所述从所述节点的旁系环集入口表中标识对于所指定的旁系环的至少一个旁系环集入口的动作包括标识一旁系环项或一入口节点项的动作,所述旁系环项或入口节点项标识了所指定的旁系环以及进入所指定的旁系环的多个入口节点。
6.如权利要求5所述的方法,其特征在于,还包括:
将所述多个入口节点解析成适当的入口节点子集的动作。
7.如权利要求5所述的方法,其特征在于,还包括:
将所述多个入口节点解析成单个适当的入口节点的动作。
8.一种在计算机系统处的用于在环树(1900)中发送近邻间通信的方法,所述方法包括:
一节点(1311)确定始发节点打算将消息(1998)路由到所述环树(1900)内的目标邻近环(1221)中最接近给定节点ID的目的地节点的动作;
标识一个或多个入口节点(41221)的动作,其中已知所述一个或多个入口节点是所述目标邻近环(1221)和所述目标邻近环(1221)的祖先环(221)两者中的至少一个的成员节点;以及
将所述消息(1998)发送到所标识的入口节点(41221)的动作,所述消息(1998)指示所标识的入口节点(41221)要将所述消息(1998)解析到所述目标邻近环(1221)中具有最接近所指示的目的地节点的节点ID的节点。
9.如权利要求8所述的方法,其特征在于,所述一节点确定始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的动作包括所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作。
10.如权利要求9所述的方法,其特征在于,所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括所述节点接收关于发送节点打算将消息路由到目标邻近环中最接近给定节点ID的目的地节点的指示的动作,其中所述目标邻近环是所述发送节点的旁系环。
11.如权利要求9所述的方法,其特征在于,所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括所述节点接收关于发送节点打算将消息路由到目标邻近环中最接近给定节点ID的目的地节点的指示的动作,其中所述目标邻近环是所述发送节点的旁系环的子环。
12.如权利要求9所述的方法,其特征在于,所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括从与所述节点相关的应用程序接收指示的动作。
13.如权利要求9所述的方法,其特征在于,所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括在另一消息中接收指示的动作。
14.如权利要求13所述的方法,其特征在于,所述在另一消息中接收指示的动作包括在来自所述环树中的另一节点的消息中接收指示的动作。
15.如权利要求9所述的方法,其特征在于,所述节点访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括接收关于始发节点打算将消息路由到所述始发节点的旁系环中最接近给定节点ID的目的地节点的指示的动作。
16.如权利要求9所述的方法,其特征在于,所述访问关于始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作包括接收关于始发节点打算将消息路由到所述始发节点的旁系环的子环中最接近给定节点ID的目的地节点的指示的动作。
17.如权利要求8所述的方法,其特征在于,所述节点确定始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的动作包括所述始发节点确定所述始发节点打算将消息路由到所述环树内的目标邻近环中最接近给定节点ID的目的地节点的指示的动作。
18.如权利要求8所述的方法,其特征在于,所述标识一个或多个入口节点、其中已知所述一个或多个入口节点是所述目标邻近环和所述目标邻近环的祖先环两者中的至少一个的成员节点的动作包括参考所述节点处的本地知识以标识所述目标邻近环中的任何节点的动作。
19.如权利要求8所述的方法,其特征在于,所述标识一个或多个入口节点、其中已知所述一个或多个入口节点是所述目标邻近环和所述目标邻近环的祖先环两者中的至少一个的成员节点的动作包括标识作为所述目标邻近环的成员的入口节点的动作。
20.如权利要求8所述的方法,其特征在于,所述标识一个或多个入口节点、其中已知所述一个或多个入口节点是所述目标邻近环和所述目标邻近环的祖先环两者中的至少一个的成员节点的动作包括标识作为所述目标邻近环的祖先环的成员的入口节点的动作。
21.如权利要求20所述的方法,其特征在于,所述标识作为所述目标邻近环的祖先环的成员的入口节点的动作包括标识一入口节点的动作,所述入口节点是所述目标邻近环的祖先环的成员,其中所述目标邻近环的该祖先环是所述目标邻近环的最接近的祖先环。
22.如权利要求8所述的方法,其特征在于,所述标识一个或多个入口节点、其中已知所述一个或多个入口节点是所述目标邻近环和所述目标邻近环的祖先环两者中的至少一个的成员节点的动作包括:
所述节点参考旁系环集入口表以标识发送节点的旁系环集入口表中在所述目标邻近环的祖先环中的节点的动作;以及
将所述消息发送到所述祖先环中所标识的节点的动作。
23.如权利要求22所述的方法,其特征在于,还包括:
所述祖先环中的节点参考本地知识来标识所述目标邻近环中的任何节点的动作。
24.如权利要求22所述的方法,其特征在于,还包括:
所述祖先环中的节点参考旁系环集入口表以标识所标识的节点的旁系环集中在所述目标邻近环的最接近的祖先环中的另一节点的动作;以及
将所述消息发送到所述另一节点的动作。
25.如权利要求8所述的方法,其特征在于,所述标识一个或多个入口节点、其中已知所述一个或多个入口节点是所述目标邻近环和所述目标邻近环的祖先环两者中的至少一个的成员节点的动作包括所述节点利用入口节点目录机制来标识已知是作为所述目标邻近环的成员节点的入口节点的动作。
26.如权利要求25所述的方法,其特征在于,所述节点利用入口节点目录机制来标识已知是作为所述目标邻近环的成员节点的入口节点的动作包括:
将入口节点查找请求消息路由到会合点的动作;以及
接收对应于所述查找请求的入口节点查找响应的动作,所述入口节点查找响应包括多个入口节点。
27.如权利要求26所述的方法,其特征在于,所述接收对应于所述查找请求的入口节点查找响应的动作包括从所述会合点接收入口节点查找响应的动作。
28.如权利要求26所述的方法,其特征在于,所述接收对应于所述查找请求的入口节点查找响应的动作包括接收包括注册到入口节点目录机制的一个或多个入口节点的入口节点查找响应的动作。
29.如权利要求28所述的方法,其特征在于,所述接收包括注册到入口节点目录机制的一个或多个入口节点的入口节点查找响应的动作包括接收包括注册到所述会合点的一个或多个入口节点的入口节点查找响应的动作。
30.如权利要求28所述的方法,其特征在于,所述接收包括注册到入口节点目录机制的一个或多个入口节点的入口节点查找响应的动作包括接收包括将其自身注册到所述会合点的入口节点的入口节点查找响应的动作。
31.如权利要求28所述的方法,其特征在于,所述接收包括注册到入口节点目录机制的一个或多个入口节点的入口节点查找响应的动作包括接收包括由另一方注册到所述入口节点目录机制的入口节点的入口节点查找响应的动作。
32.如权利要求31所述的方法,其特征在于,所述接收包括由另一方注册到所述入口节点目录机制的入口节点的入口节点查找响应的动作包括接收包括由另一会合点注册到所述入口节点目录机制的入口节点的入口节点查找响应的动作。
33.如权利要求26所述的方法,其特征在于,还包括:
接收对入口节点的入口节点注册请求的动作;以及
将所述入口节点注册到所述会合点的动作。
34.一种用于在环树(1900)中发送近邻间通信的系统,包括:
用于确定一节点(1311)要将消息(1903)发送到所述节点(1311)的指定旁系环(21)的装置;
用于所述节点(1311)访问旁系环集入口表(1904)的装置,所述旁系环集入口表被配置以用于存储所述节点(1311)的旁系环集入口,每一旁系环集入口被配置以用于指示:所述节点(1311)的旁系环(21),以及进入所述节点(1311)的旁系环(21)的相应的至少一个入口节点(6521);
用于从所述节点的旁系环集入口表(1904)中标识对于所指定的旁系环(21)的至少一个旁系环集入口的装置,所述至少一个旁系环集入口中的每一个旁系环集入口指示所指定的旁系环(21)的至少一个入口节点(6521);以及
用于将所述消息(1903)发送到至少一个所指示的入口节点(6521)的装置。
35.一种用于在环树(1900)中发送近邻间通信的系统,包括:
用于一节点(1311)确定始发节点打算将消息(1998)路由到所述环树(1900)内的目标邻近环(1221)中最接近给定节点ID的目的地节点的装置;
用于标识一个或多个入口节点(41221)的装置,其中已知所述一个或多个入口节点是所述目标邻近环(1221)和所述目标邻近环(12221)的祖先环(221)两者中的至少一个的成员节点;以及
用于将所述消息(1998)发送到所标识的入口节点(41221)的装置,所述消息(1998)指示所标识的入口节点(41221)要将所述消息(1998)解析到所述目标邻近环(1221)中具有最接近所指示的目的地节点的节点ID的节点。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/428,133 US8095600B2 (en) | 2004-10-22 | 2006-06-30 | Inter-proximity communication within a rendezvous federation |
US11/428,133 | 2006-06-30 | ||
PCT/US2007/008036 WO2008005086A1 (en) | 2006-06-30 | 2007-03-29 | Inter-proximity communication within a rendezvous federation |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101491006A CN101491006A (zh) | 2009-07-22 |
CN101491006B true CN101491006B (zh) | 2012-07-11 |
Family
ID=38894883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800246226A Expired - Fee Related CN101491006B (zh) | 2006-06-30 | 2007-03-29 | 会合联盟内的近邻间通信 |
Country Status (14)
Country | Link |
---|---|
US (1) | US8095600B2 (zh) |
EP (1) | EP2036256A4 (zh) |
JP (1) | JP5049344B2 (zh) |
KR (1) | KR20090034322A (zh) |
CN (1) | CN101491006B (zh) |
AU (1) | AU2007270008B2 (zh) |
BR (1) | BRPI0713964A2 (zh) |
CA (1) | CA2652921A1 (zh) |
CL (1) | CL2007001453A1 (zh) |
IL (1) | IL195189A0 (zh) |
MX (1) | MX2008015984A (zh) |
RU (1) | RU2433461C2 (zh) |
TW (1) | TW200803303A (zh) |
WO (1) | WO2008005086A1 (zh) |
Families Citing this family (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2558892A1 (en) | 2004-03-13 | 2005-09-29 | Cluster Resources, Inc. | System and method for a self-optimizing reservation in time of compute resources |
US8782654B2 (en) | 2004-03-13 | 2014-07-15 | Adaptive Computing Enterprises, Inc. | Co-allocating a reservation spanning different compute resources types |
US20070266388A1 (en) | 2004-06-18 | 2007-11-15 | Cluster Resources, Inc. | System and method for providing advanced reservations in a compute environment |
US8176490B1 (en) | 2004-08-20 | 2012-05-08 | Adaptive Computing Enterprises, Inc. | System and method of interfacing a workload manager and scheduler with an identity manager |
US20080288659A1 (en) | 2006-11-09 | 2008-11-20 | Microsoft Corporation | Maintaining consistency within a federation infrastructure |
US20060090003A1 (en) * | 2004-10-22 | 2006-04-27 | Microsoft Corporation | Rendezvousing resource requests with corresponding resources |
US7694167B2 (en) * | 2004-10-22 | 2010-04-06 | Microsoft Corporation | Maintaining routing consistency within a rendezvous federation |
US8549180B2 (en) | 2004-10-22 | 2013-10-01 | Microsoft Corporation | Optimizing access to federation infrastructure-based resources |
US8095601B2 (en) | 2004-10-22 | 2012-01-10 | Microsoft Corporation | Inter-proximity communication within a rendezvous federation |
US7958262B2 (en) * | 2004-10-22 | 2011-06-07 | Microsoft Corporation | Allocating and reclaiming resources within a rendezvous federation |
US8014321B2 (en) * | 2004-10-22 | 2011-09-06 | Microsoft Corporation | Rendezvousing resource requests with corresponding resources |
CA2827035A1 (en) | 2004-11-08 | 2006-05-18 | Adaptive Computing Enterprises, Inc. | System and method of providing system jobs within a compute environment |
US9075657B2 (en) | 2005-04-07 | 2015-07-07 | Adaptive Computing Enterprises, Inc. | On-demand access to compute resources |
US8863143B2 (en) | 2006-03-16 | 2014-10-14 | Adaptive Computing Enterprises, Inc. | System and method for managing a hybrid compute environment |
US9231886B2 (en) | 2005-03-16 | 2016-01-05 | Adaptive Computing Enterprises, Inc. | Simple integration of an on-demand compute environment |
US8041773B2 (en) | 2007-09-24 | 2011-10-18 | The Research Foundation Of State University Of New York | Automatic clustering for self-organizing grids |
US7934117B2 (en) * | 2008-01-25 | 2011-04-26 | Microsoft Corporation | Routing token transfer and recovery protocol in rendezvous federation |
US8417775B2 (en) * | 2008-02-27 | 2013-04-09 | Microsoft Corporation | Neighborhood maintenance in the federation |
US7934118B2 (en) * | 2008-10-24 | 2011-04-26 | Microsoft Corporation | Failure notification in rendezvous federation |
US10877695B2 (en) | 2009-10-30 | 2020-12-29 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US11720290B2 (en) | 2009-10-30 | 2023-08-08 | Iii Holdings 2, Llc | Memcached server functionality in a cluster of data processing nodes |
US9059978B2 (en) | 2010-03-23 | 2015-06-16 | Fujitsu Limited | System and methods for remote maintenance in an electronic network with multiple clients |
US9286485B2 (en) * | 2010-03-23 | 2016-03-15 | Fujitsu Limited | Using trust points to provide services |
US8554951B2 (en) | 2011-03-08 | 2013-10-08 | Rackspace Us, Inc. | Synchronization and ordering of multiple accessess in a distributed system |
US8712975B2 (en) | 2011-03-08 | 2014-04-29 | Rackspace Us, Inc. | Modification of an object replica |
US8510267B2 (en) * | 2011-03-08 | 2013-08-13 | Rackspace Us, Inc. | Synchronization of structured information repositories |
US8538926B2 (en) * | 2011-03-08 | 2013-09-17 | Rackspace Us, Inc. | Massively scalable object storage system for storing object replicas |
US20130110999A1 (en) * | 2011-10-28 | 2013-05-02 | LogMeln, Inc. | Creating an optimized distribution network for the efficient transfer of data between endpoints |
US8868672B2 (en) | 2012-05-14 | 2014-10-21 | Advanced Micro Devices, Inc. | Server node interconnect devices and methods |
US9137173B2 (en) | 2012-06-19 | 2015-09-15 | Advanced Micro Devices, Inc. | Devices and methods for interconnecting server nodes |
US8930595B2 (en) | 2012-06-21 | 2015-01-06 | Advanced Micro Devices, Inc. | Memory switch for interconnecting server nodes |
US9253287B2 (en) | 2012-08-20 | 2016-02-02 | Advanced Micro Devices, Inc. | Speculation based approach for reliable message communications |
US8875256B2 (en) | 2012-11-13 | 2014-10-28 | Advanced Micro Devices, Inc. | Data flow processing in a network environment |
CN104969232B (zh) * | 2013-03-13 | 2018-01-12 | 英特尔公司 | 管理设备驱动器跨环访问 |
US9571603B2 (en) * | 2013-09-17 | 2017-02-14 | Cisco Technology, Inc. | Redundancy network protocol system |
CN103716880B (zh) * | 2013-12-23 | 2017-02-22 | 中国科学院信息工程研究所 | 一种基于捷径的移动容迟网络快速消息通知方法及装置 |
TW201545510A (zh) | 2014-05-30 | 2015-12-01 | Ibm | 在分散式計算系統中進行訊息路由的方法 |
WO2016187452A1 (en) | 2015-05-19 | 2016-11-24 | Morgan Stanley | Topology aware distributed storage system |
US10294891B2 (en) | 2015-11-12 | 2019-05-21 | Innovation Management And Sustainable Technologies S.A. De C.V. | Energy collector system applicable to combustion engines |
US11501351B2 (en) | 2018-03-21 | 2022-11-15 | Cdk Global, Llc | Servers, systems, and methods for single sign-on of an automotive commerce exchange |
US11190608B2 (en) | 2018-03-21 | 2021-11-30 | Cdk Global Llc | Systems and methods for an automotive commerce exchange |
WO2020130868A1 (ru) * | 2018-12-20 | 2020-06-25 | Публичное Акционерное Общество "Сбербанк России" | Способ и система поиска мошеннических транзакций |
JP7193733B2 (ja) * | 2019-04-16 | 2022-12-21 | 富士通株式会社 | 通信制御プログラム、通信制御方法および情報処理装置 |
US12020217B2 (en) | 2020-11-11 | 2024-06-25 | Cdk Global, Llc | Systems and methods for using machine learning for vehicle damage detection and repair cost estimation |
US11514021B2 (en) * | 2021-01-22 | 2022-11-29 | Cdk Global, Llc | Systems, methods, and apparatuses for scanning a legacy database |
US12045212B2 (en) | 2021-04-22 | 2024-07-23 | Cdk Global, Llc | Systems, methods, and apparatuses for verifying entries in disparate databases |
US11803535B2 (en) | 2021-05-24 | 2023-10-31 | Cdk Global, Llc | Systems, methods, and apparatuses for simultaneously running parallel databases |
US11983145B2 (en) | 2022-08-31 | 2024-05-14 | Cdk Global, Llc | Method and system of modifying information on file |
Family Cites Families (109)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5689701A (en) * | 1994-12-14 | 1997-11-18 | International Business Machines Corporation | System and method for providing compatibility between distributed file system namespaces and operating system pathname syntax |
US5745683A (en) * | 1995-07-05 | 1998-04-28 | Sun Microsystems, Inc. | System and method for allowing disparate naming service providers to dynamically join a naming federation |
US5996075A (en) * | 1995-11-02 | 1999-11-30 | Sun Microsystems, Inc. | Method and apparatus for reliable disk fencing in a multicomputer system |
US5831975A (en) * | 1996-04-04 | 1998-11-03 | Lucent Technologies Inc. | System and method for hierarchical multicast routing in ATM networks |
US6574654B1 (en) * | 1996-06-24 | 2003-06-03 | Oracle Corporation | Method and apparatus for lock caching |
US6253292B1 (en) * | 1997-08-22 | 2001-06-26 | Seong Tae Jhang | Distributed shared memory multiprocessor system based on a unidirectional ring bus using a snooping scheme |
US6178174B1 (en) * | 1997-08-26 | 2001-01-23 | International Business Machines Corporation | Optimistic, eager rendezvous transmission mode and combined rendezvous modes for message processing systems |
US5999712A (en) * | 1997-10-21 | 1999-12-07 | Sun Microsystems, Inc. | Determining cluster membership in a distributed computer system |
US6269452B1 (en) * | 1998-04-27 | 2001-07-31 | Cisco Technology, Inc. | System and method for fault recovery for a two line bi-directional ring network |
US6456597B1 (en) * | 1998-05-04 | 2002-09-24 | Hewlett Packard Co. | Discovery of unknown MAC addresses using load balancing switch protocols |
US6279034B1 (en) * | 1998-06-03 | 2001-08-21 | International Business Machines Corporation | Distributed monitor timer service for use in a distributed computing environment |
US6304556B1 (en) * | 1998-08-24 | 2001-10-16 | Cornell Research Foundation, Inc. | Routing and mobility management protocols for ad-hoc networks |
US7430171B2 (en) * | 1998-11-19 | 2008-09-30 | Broadcom Corporation | Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost |
US6480473B1 (en) * | 1998-12-29 | 2002-11-12 | Koninklijke Philips Electronics N.V. | Verification of active nodes in an open network |
US6115804A (en) * | 1999-02-10 | 2000-09-05 | International Business Machines Corporation | Non-uniform memory access (NUMA) data processing system that permits multiple caches to concurrently hold data in a recent state from which data can be sourced by shared intervention |
US6839348B2 (en) * | 1999-04-30 | 2005-01-04 | Cisco Technology, Inc. | System and method for distributing multicasts in virtual local area networks |
US6546415B1 (en) * | 1999-05-14 | 2003-04-08 | Lucent Technologies Inc. | Network management system using a distributed namespace |
US6850987B1 (en) * | 1999-06-01 | 2005-02-01 | Fastforward Networks, Inc. | System for multipoint infrastructure transport in a computer network |
US6411967B1 (en) * | 1999-06-18 | 2002-06-25 | Reliable Network Solutions | Distributed processing system with replicated management information base |
US7463648B1 (en) | 1999-08-23 | 2008-12-09 | Sun Microsystems, Inc. | Approach for allocating resources to an apparatus based on optional resource requirements |
US7117273B1 (en) * | 2000-01-25 | 2006-10-03 | Cisco Technology, Inc. | Methods and apparatus for maintaining a map of node relationships for a network |
US6269085B1 (en) * | 2000-02-03 | 2001-07-31 | Sun Microsystems, Inc. | Method and apparatus for hierarchical discovery and pruning of slow members of a multicast group |
US6917985B2 (en) * | 2000-03-10 | 2005-07-12 | The Regents Of The University Of California | Core assisted mesh protocol for multicast routing in ad-hoc Networks |
US6553377B1 (en) * | 2000-03-31 | 2003-04-22 | Network Associates, Inc. | System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment |
EP1139602A1 (en) | 2000-03-31 | 2001-10-04 | Lucent Technologies Inc. | Method and device for multicasting |
US7123620B1 (en) | 2000-04-25 | 2006-10-17 | Cisco Technology, Inc. | Apparatus and method for scalable and dynamic traffic engineering in a data communication network |
US6775703B1 (en) * | 2000-05-01 | 2004-08-10 | International Business Machines Corporation | Lease based safety protocol for distributed system with multiple networks |
CN1300677C (zh) * | 2000-06-22 | 2007-02-14 | 微软公司 | 分布式计算服务平台 |
US6947963B1 (en) * | 2000-06-28 | 2005-09-20 | Pluris, Inc | Methods and apparatus for synchronizing and propagating distributed routing databases |
US7139270B1 (en) | 2000-08-22 | 2006-11-21 | Lucent Technologies Inc. | Systems and method for transporting multiple protocol formats in a lightwave communication network |
US20020129086A1 (en) * | 2000-08-31 | 2002-09-12 | The Regents Of The University Of California | Cluster-based aggregated switching technique (CAST) for routing data packets and information objects in computer networks |
US7379994B2 (en) * | 2000-10-26 | 2008-05-27 | Metilinx | Aggregate system resource analysis including correlation matrix and metric-based analysis |
WO2002035794A2 (en) * | 2000-10-26 | 2002-05-02 | British Telecommunications Plc | Telecommunications routing |
US20020150094A1 (en) * | 2000-10-27 | 2002-10-17 | Matthew Cheng | Hierarchical level-based internet protocol multicasting |
US6836756B1 (en) | 2000-11-13 | 2004-12-28 | Nortel Networks Limited | Time simulation techniques to determine network availability |
CA2326851A1 (en) | 2000-11-24 | 2002-05-24 | Redback Networks Systems Canada Inc. | Policy change characterization method and apparatus |
WO2002057917A2 (en) | 2001-01-22 | 2002-07-25 | Sun Microsystems, Inc. | Peer-to-peer network computing platform |
US7062563B1 (en) * | 2001-02-28 | 2006-06-13 | Oracle International Corporation | Method and system for implementing current user links |
US6625604B2 (en) * | 2001-03-09 | 2003-09-23 | Hewlett-Packard Development Company, L.P. | Namespace service in a distributed file system using a database management system |
US7085825B1 (en) * | 2001-03-26 | 2006-08-01 | Freewebs Corp. | Apparatus, method and system for improving application performance across a communications network |
US7113536B2 (en) * | 2001-04-16 | 2006-09-26 | Telefonaktiebolaget L M Ericsson (Publ) | Rendezvous point interpiconet scheduling |
US6928578B2 (en) * | 2001-05-10 | 2005-08-09 | International Business Machines Corporation | System, method, and computer program for selectable or programmable data consistency checking methodology |
US7496911B2 (en) * | 2001-06-22 | 2009-02-24 | Invensys Systems, Inc. | Installing supervisory process control and manufacturing software from a remote location and maintaining configuration data links in a run-time environment |
US7181547B1 (en) * | 2001-06-28 | 2007-02-20 | Fortinet, Inc. | Identifying nodes in a ring network |
GB2377140B (en) * | 2001-06-29 | 2005-01-19 | Ibm | Method and apparatus for recovery from faults in a loop network |
US6922791B2 (en) | 2001-08-09 | 2005-07-26 | Dell Products L.P. | Failover system and method for cluster environment |
US7493363B2 (en) * | 2001-09-19 | 2009-02-17 | Microsoft Corporation | Peer-to-peer group management and method for maintaining peer-to-peer graphs |
ITMI20012088A1 (it) * | 2001-10-10 | 2003-04-10 | Cit Alcatel | Metodo per propagare l'informazione di guasto in una rete rpr e relativo tipo di pacchetto rpr |
US6983397B2 (en) * | 2001-11-29 | 2006-01-03 | International Business Machines Corporation | Method, system, and program for error handling in a dual adaptor system where one adaptor is a master |
US7426573B2 (en) * | 2001-12-12 | 2008-09-16 | Alcatel Lucent | System and method for providing service availability data for a communication network |
US7231463B2 (en) * | 2002-01-04 | 2007-06-12 | Intel Corporation | Multi-level ring peer-to-peer network structure for peer and object discovery |
US20030145086A1 (en) * | 2002-01-29 | 2003-07-31 | O'reilly James | Scalable network-attached storage system |
JP3937855B2 (ja) * | 2002-02-06 | 2007-06-27 | 日本電気株式会社 | マルチリング制御方法およびそれを用いるノード並びに制御プログラム |
CN1177436C (zh) * | 2002-02-09 | 2004-11-24 | 华为技术有限公司 | 移动网络中多播用户的管理方法 |
US6779093B1 (en) * | 2002-02-15 | 2004-08-17 | Veritas Operating Corporation | Control facility for processing in-band control messages during data replication |
US7043550B2 (en) * | 2002-02-15 | 2006-05-09 | International Business Machines Corporation | Method for controlling group membership in a distributed multinode data processing system to assure mutually symmetric liveness status indications |
US7039719B2 (en) * | 2002-03-21 | 2006-05-02 | Hewlett-Packard Development Company, L.P. | Distributed system with an efficient atomic broadcast mechanism |
US7512649B2 (en) * | 2002-03-22 | 2009-03-31 | Sun Microsytems, Inc. | Distributed identities |
US7103884B2 (en) * | 2002-03-27 | 2006-09-05 | Lucent Technologies Inc. | Method for maintaining consistency and performing recovery in a replicated data storage system |
US7290262B2 (en) * | 2002-05-21 | 2007-10-30 | International Business Machine Corporation | Method and apparatus for dynamically determining information for deploying a web service |
EP1394999A1 (en) * | 2002-08-07 | 2004-03-03 | Infineon Technologies AG | Method for routing of data packets and routing apparatus |
US7849140B2 (en) * | 2002-08-29 | 2010-12-07 | Oracle America, Inc. | Peer-to-peer email messaging |
US7613796B2 (en) | 2002-09-11 | 2009-11-03 | Microsoft Corporation | System and method for creating improved overlay network with an efficient distributed data structure |
US7239605B2 (en) * | 2002-09-23 | 2007-07-03 | Sun Microsystems, Inc. | Item and method for performing a cluster topology self-healing process in a distributed data system cluster |
US7200657B2 (en) * | 2002-10-01 | 2007-04-03 | International Business Machines Corporation | Autonomic provisioning of network-accessible service behaviors within a federated grid infrastructure |
US6909721B2 (en) * | 2002-10-31 | 2005-06-21 | Nokia Corporation | Device detection and service discovery system and method for a mobile ad hoc communications network |
US7289520B2 (en) * | 2002-11-20 | 2007-10-30 | Hewlett-Packard Development Company, L.P. | Method, apparatus, and system for expressway routing among peers |
US6850487B2 (en) * | 2002-12-05 | 2005-02-01 | The Regents Of The University Of California | Method and apparatus for guaranteeing a failure-recovery time in a wavelength-division multiplexing network |
DE60303763T2 (de) * | 2002-12-11 | 2006-08-17 | Nippon Telegraph And Telephone Corp. | Verfahren und Vorrichtung zur Berechnung von Mehrfachsendungsleitwegen |
US7584298B2 (en) * | 2002-12-13 | 2009-09-01 | Internap Network Services Corporation | Topology aware route control |
US7404006B1 (en) * | 2002-12-20 | 2008-07-22 | Symantec Operating Corporation | Publishing a network address in a computer network |
US7480708B2 (en) * | 2002-12-23 | 2009-01-20 | Sap Ag | Method and computer program product for managing data consistency |
US7137018B2 (en) * | 2002-12-31 | 2006-11-14 | Intel Corporation | Active state link power management |
US7747731B2 (en) * | 2003-03-27 | 2010-06-29 | Nokia Corporation | Minimizing message processing latency in a communication network |
US7120824B2 (en) * | 2003-05-09 | 2006-10-10 | International Business Machines Corporation | Method, apparatus and program storage device for maintaining data consistency and cache coherency during communications failures between nodes in a remote mirror pair |
US6988173B2 (en) * | 2003-05-12 | 2006-01-17 | International Business Machines Corporation | Bus protocol for a switchless distributed shared memory computer system |
EP1494394A1 (en) * | 2003-06-30 | 2005-01-05 | Sony International (Europe) GmbH | Distance-aware service mechanism for determining the availability of remote services in wireless personal area networks |
US7334062B1 (en) * | 2003-07-22 | 2008-02-19 | Symantec Operating Corporation | Technique to monitor application behavior and tune replication performance |
US20050031119A1 (en) * | 2003-08-04 | 2005-02-10 | Yuying Ding | Method and communications device for secure group communication |
US7680152B2 (en) * | 2003-08-07 | 2010-03-16 | Robert Bosch Gmbh | Method for establishing a user of a data network as a pilot master |
US20050050320A1 (en) * | 2003-09-02 | 2005-03-03 | Microsoft Corporation | Branding framework |
US20050091399A1 (en) * | 2003-09-30 | 2005-04-28 | Candan Kasim S. | Resource-aware adaptive multicasting in a shared proxy overlay network |
US7289501B2 (en) * | 2003-11-06 | 2007-10-30 | Teknovus, Inc. | Method and apparatus for bandwidth-efficient multicast in ethernet passive optical networks |
US20050108481A1 (en) * | 2003-11-17 | 2005-05-19 | Iyengar Arun K. | System and method for achieving strong data consistency |
US20050111352A1 (en) * | 2003-11-21 | 2005-05-26 | Boon Ho | Method and system for monitoring a network containing routers using a backup routing protocol |
US7243089B2 (en) * | 2003-11-25 | 2007-07-10 | International Business Machines Corporation | System, method, and service for federating and optionally migrating a local file system into a distributed file system while preserving local access to existing data |
KR100576935B1 (ko) * | 2003-12-22 | 2006-05-10 | 한국전자통신연구원 | 온톨로지 기반의 애드혹 서비스 검색 시스템 및 방법 |
US7420954B2 (en) * | 2004-01-13 | 2008-09-02 | General Motors Corporation | Efficient lightweight information dissemination algorithm for mobile wireless ad hoc networks |
US7313565B2 (en) * | 2004-02-19 | 2007-12-25 | Microsoft Corporation | Data overlay, self-organized metadata overlay, and associated methods |
US20050220106A1 (en) * | 2004-03-31 | 2005-10-06 | Pierre Guillaume Raverdy | Inter-wireless interactions using user discovery for ad-hoc environments |
US7730207B2 (en) | 2004-03-31 | 2010-06-01 | Microsoft Corporation | Routing in peer-to-peer networks |
US7478263B1 (en) | 2004-06-01 | 2009-01-13 | Network Appliance, Inc. | System and method for establishing bi-directional failover in a two node cluster |
US7512064B2 (en) | 2004-06-15 | 2009-03-31 | Cisco Technology, Inc. | Avoiding micro-loop upon failure of fast reroute protected links |
GB0416074D0 (en) * | 2004-07-17 | 2004-08-18 | Ibm | Controlling data consistency guarantees in storage apparatus |
US7715396B2 (en) * | 2004-08-19 | 2010-05-11 | Microsoft Corporation | Network routing |
US7613703B2 (en) | 2004-09-30 | 2009-11-03 | Microsoft Corporation | Organizing resources into collections to facilitate more efficient and reliable resource access |
US8014321B2 (en) * | 2004-10-22 | 2011-09-06 | Microsoft Corporation | Rendezvousing resource requests with corresponding resources |
US7730220B2 (en) * | 2004-10-22 | 2010-06-01 | Microsoft Corporation | Broadcasting communication within a rendezvous federation |
US8095601B2 (en) | 2004-10-22 | 2012-01-10 | Microsoft Corporation | Inter-proximity communication within a rendezvous federation |
US8549180B2 (en) * | 2004-10-22 | 2013-10-01 | Microsoft Corporation | Optimizing access to federation infrastructure-based resources |
US20060090003A1 (en) * | 2004-10-22 | 2006-04-27 | Microsoft Corporation | Rendezvousing resource requests with corresponding resources |
US20060155781A1 (en) * | 2005-01-10 | 2006-07-13 | Microsoft Corporation | Systems and methods for structuring distributed fault-tolerant systems |
US7778963B2 (en) * | 2005-04-26 | 2010-08-17 | Microsoft Corporation | Constraint-based conflict handling for synchronization |
US7827262B2 (en) * | 2005-07-14 | 2010-11-02 | Cisco Technology, Inc. | Approach for managing state information by a group of servers that services a group of clients |
US7739239B1 (en) | 2005-12-29 | 2010-06-15 | Amazon Technologies, Inc. | Distributed storage system with support for distinct storage classes |
US7673069B2 (en) * | 2006-02-24 | 2010-03-02 | Microsoft Corporation | Strong routing consistency protocol in structured peer-to-peer overlays |
US20070214194A1 (en) * | 2006-03-07 | 2007-09-13 | James Reuter | Consistency methods and systems |
US7814226B2 (en) * | 2006-09-19 | 2010-10-12 | Bea Systems, Inc. | System and method for supporting service networks in a service-oriented architecture environment |
TWI390869B (zh) * | 2008-04-24 | 2013-03-21 | Univ Nat Taiwan | 網路資源分配系統及方法 |
-
2006
- 2006-06-30 US US11/428,133 patent/US8095600B2/en not_active Expired - Fee Related
-
2007
- 2007-03-29 RU RU2008152420/08A patent/RU2433461C2/ru not_active IP Right Cessation
- 2007-03-29 KR KR1020087031853A patent/KR20090034322A/ko not_active Application Discontinuation
- 2007-03-29 JP JP2009518101A patent/JP5049344B2/ja not_active Expired - Fee Related
- 2007-03-29 MX MX2008015984A patent/MX2008015984A/es active IP Right Grant
- 2007-03-29 WO PCT/US2007/008036 patent/WO2008005086A1/en active Application Filing
- 2007-03-29 CN CN2007800246226A patent/CN101491006B/zh not_active Expired - Fee Related
- 2007-03-29 AU AU2007270008A patent/AU2007270008B2/en not_active Ceased
- 2007-03-29 BR BRPI0713964-0A patent/BRPI0713964A2/pt not_active IP Right Cessation
- 2007-03-29 EP EP07754546A patent/EP2036256A4/en not_active Withdrawn
- 2007-03-29 CA CA002652921A patent/CA2652921A1/en not_active Abandoned
- 2007-05-02 TW TW096115645A patent/TW200803303A/zh unknown
- 2007-05-22 CL CL2007001453A patent/CL2007001453A1/es unknown
-
2008
- 2008-11-10 IL IL195189A patent/IL195189A0/en unknown
Also Published As
Publication number | Publication date |
---|---|
CA2652921A1 (en) | 2008-01-10 |
CL2007001453A1 (es) | 2008-01-11 |
US20060282547A1 (en) | 2006-12-14 |
RU2433461C2 (ru) | 2011-11-10 |
US8095600B2 (en) | 2012-01-10 |
KR20090034322A (ko) | 2009-04-07 |
IL195189A0 (en) | 2009-08-03 |
AU2007270008A1 (en) | 2008-01-10 |
RU2008152420A (ru) | 2010-07-10 |
EP2036256A1 (en) | 2009-03-18 |
MX2008015984A (es) | 2009-01-09 |
WO2008005086A1 (en) | 2008-01-10 |
BRPI0713964A2 (pt) | 2012-11-27 |
CN101491006A (zh) | 2009-07-22 |
JP2009543188A (ja) | 2009-12-03 |
AU2007270008B2 (en) | 2011-01-27 |
JP5049344B2 (ja) | 2012-10-17 |
TW200803303A (en) | 2008-01-01 |
EP2036256A4 (en) | 2012-01-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101491006B (zh) | 会合联盟内的近邻间通信 | |
CN101485149A (zh) | 会合联盟内的近邻间通信 | |
CN102035886B (zh) | 联盟基础结构内的一致性 | |
CN1764171B (zh) | 将资源请求与对应的资源会合 | |
RU2400806C2 (ru) | Организация стыковки запросов на ресурс с соответствующими ресурсами | |
Aberer | P-Grid: A self-organizing access structure for P2P information systems | |
Baldoni et al. | Distributed event routing in publish/subscribe communication systems: a survey | |
CN102714665A (zh) | 用于分解对等网络并且使用分解的对等网络的方法和设备 | |
CN101102250B (zh) | 用于自组织网络的分布式散列机制 | |
US20110082928A1 (en) | Maintaining consistency within a federation infrastructure | |
Michail et al. | Causality, influence, and computation in possibly disconnected synchronous dynamic networks | |
Tato et al. | Split and migrate: Resource-driven placement and discovery of microservices at the edge | |
CN102316154B (zh) | 优化对基于联盟基础结构的资源的访问 | |
Yoon et al. | Exploring a system architecture of content‐based publish/subscribe system for efficient on‐the‐fly data dissemination | |
Zhou et al. | Unstructured P2P-enabled service discovery in the cloud environment | |
Ahulló et al. | Supporting geographical queries onto DHTs | |
Sotiriadis et al. | Using self-led critical friend topology based on P2P chord algorithm for node localization within cloud communities | |
Roßrucker | Implementing the WebMap: An Extension to the Web | |
Chand | Large scale diffusion of information in Publish/Subscribe systems | |
Guo et al. | Decentralized grid resource locating protocol based on grid resource space model | |
Vernica | Publish/Subscribe in Peer-to-Peer Networks | |
Zheng et al. | A scalable and adaptive distributed service discovery mechanism in SOC environments | |
Clarke et al. | Probabilistic discovery of semantically diverse content in MANETs | |
Jurca | Data Aware Multicast Implementation based on P-Grid |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120711 Termination date: 20130329 |