具体实施方式
本发明涉及用于优化对基于联盟基础结构的资源的访问的方法、系统和计算机程序产品。本发明的各实施例包括优化对环基础结构资源的访问。在一些实施例中,接收对访问环基础结构资源的用户请求。该用户请求是从作出请求的用户组件发送的。
基于作出请求的用户组件的特性,检测出该用户请求并没有针对用于访问环基础结构内的环基础结构资源的优化的位置。基于作出请求的用户组件的特性,发送用于所述作出请求的用户组件访问环基础结构资源的适当优化的位置的指示。
在其他实施例中,环基础结构检测组件请求。组件请求用于优化对与节点环上的组件相关联的一个或多个环基础结构资源的访问。优化的访问用于减少节点环上的节点之间的节点间通信。
确定从该一个或多个环基础结构资源中选择的相关联的环基础结构资源的主存位置和访问位置中的至少一个没有在节点环上被优化。对主存位置没有被优化的确定是基于该组件的一个或多个用户具有对该相关联的资源的共同兴趣。这指示出,响应于组件请求,节点环上的该相关联的环基础结构资源的主存位置和访问位置中的至少一个要被优化,以减少节点环上的节点之间的节点间通信成本。
本发明的各实施例可以包括或利用诸如,一个或多个处理器和系统存储器等包括计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到计算机存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。由此,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
在本说明书和所附权利要求书中,“节点”被定义为一起工作来对电子数据执行操作的一个或多个软件模块、一个或多个硬件模块、或其组合。例如,节点的定义包括个人计算机的硬件组件、以及诸如个人计算机的操作系统等软件模块。这些模块的物理布局并不重要。节点可以包括经由网络耦合的一台或多台计算机。同样,节点可以包括单个物理设备(诸如移动电话或个人数字助理“PDA”),其中,内部模块(诸如存储器和处理器)一起工作来对电子数据执行操作。此外,节点可以包括专用硬件,诸如,例如包括专用集成电路的路由器。
在本说明书和所附权利要求中,“资源”被定义为可由诸如客户机、通信中介或节点等之类的计算机系统使用或作用于的电子数据。资源的非穷举示例列表包括文件、设备、数据库、数据包、电子消息、数据字段以及其部分。资源还被定义成包括标识符空间内的标识符,例如用于标识联盟基础结构标识符空间内的节点的节点标识符。
在本说明书和所附权利要求中,“资源描述符”被定义为描述资源的数据结构(例如根据资源描述符模式格式化)。
在本说明书和所附权利要求中,“名字空间”被定义为用于将资源(例如因特网上的所有资源)分成各部分的定范围机制,可对各部分进行分解、发现和消息路由。名字空间是可扩展的,使得可定义新的范围且各个范围可以是分层的。
图1A和1B示出便于提供对基于联盟基础结构的资源的优化访问的示例联盟基础结构100。参考图1,联盟基础结构100包括环101以及客户机102。环101和客户机102可通过诸如局域网(“LAN”)、广域网(“WAN”)和甚至因特网等之类的网络(或作为网络的一部分)彼此连接。因此,环101和客户机102以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
如图1A中所描绘的,环101包括诸如基于各种可能的联盟伙伴关系而联盟在一起的节点111-117等之类的多个节点。一般而言,节点可利用联盟协议来形成伙伴关系并交换信息(例如,涉及与其他节点的交互的状态信息)。伙伴关系的形成以及信息的交换便于对资源的更高效且更可靠的访问。
其他中间节点(未示出)可在节点111-117之前、之后或之间存在。由此,例如在节点111和节点116之间路由的消息可穿过一个或多个其他中间节点。在一些实施例中,节点在彼此之间联盟成为对等节点,而没有根节点。每个节点具有相应的节点ID。
如下文进一步详细描述的,节点可联盟以形成一致联盟以及最大努力联盟。如下进一步详细描述的,名字空间管理服务可用于将资源组织成集合,可能通过多个名字空间提供资源访问。
客户机102可以是环101外部的请求对环101内主存的资源的访问的计算机系统。客户机102可知道如何与环101的节点中的一个或多个(但可能不是全部)通信。因此,一般来说,客户机102可依赖于环101内使用的联盟协议以使得通信被路由到适当的节点。
例如,客户机102可知晓环101的进入节点以及名字空间内资源的资源名称。如此,客户机102可向进入节点提交该资源名称。进入节点然后可利用环101内的联盟协议以将消息路由到主存了该被指名的资源的节点。
在某些实施例中,节点保持用于提供对基于联盟基础结构的资源的优化访问的处理信息。例如,对于指定的资源,环101上的一节点可保持将该指定的资源与环101上的另一节点相关联的信息。该另一节点可以是主存该指定的资源的节点。另选地,该另一节点可以是这样一个节点,该节点在被联系时导致降低的环间通信成本以将消息路由到主存该指定的资源的节点。例如,与从并非本来就知晓存在主存节点的节点请求资源(即节点依赖于联盟协议来使得程序趋往主存节点)相比,从邻域集中具有资源的主存节点的节点请求资源导致更少的环间通信。
节点可存储各种类型和实例的处理信息。处理信息可包括重定向信息、服务信息类、优先级信息等。可基于可用的处理信息结合作出请求的实体的特性和/或请求的特性,来确定如何优化资源的主存位置、对资源的访问位置以及用于对资源的请求的合适的进入节点中的任何一个。作出请求的实体的特性和/或请求的特性包括:客户机特性、网络诊断信息、联盟基础结构信息、资源特性、应用特性、日期、时间等。例如,“优质”客户机可被重定向到资源的主存节点。然而,其他客户机可被重定向到离资源的主存节点某一数量的路由跳的节点。
用于优化的优化算法可以具有任意复杂性。算法可包括将进入的消息变换成转发到进入节点的零个或更多个输出消息的各种变换。例如,优化算法可利用处理信息结合实体特性和/或请求特性,以将接收到的消息中的目的地地址变换成零个或更多个不同的目的地地址以包含在相应的输出消息中。
如图1B中所描绘的,联盟基础结构100还可包括通信中介103。通信中介可以是用于代表外部客户机与环101进行通信的代理或其他类似设备。通信中介103可将客户机请求转发到环101的节点。通信中介103还可将来自环101的资源返回给外部客户机。
在一些实施例中,通信中介103响应于客户机请求而与环101通信。在其他实施例中,通信中介103发起与环101的通信和/或接收来自环101的通信(不管它是否接收到任何客户机请求)。例如,环101的节点可不时地将处理信息推出给通信中介103。另选地,可使用请求/回复机制。通信中介103可向环101上的节点发送请求。作为响应,环可将处理信息返回给通信中介103。
通信中介103可保持用于一个或多个指定资源的处理信息的高速缓存。当接收到资源请求时,通信中介103可检查高速缓存以确定用于访问资源的优化的位置是否在被高速缓存的处理信息中。当找到优化的位置时,通信中介103可按需将客户机请求定向到优化的位置。例如,如果请求还没有定向到优化的位置,则通信中介103可调节该请求以发送到优化的位置。在调节客户机请求时,通信中介103可或可以不向客户机通知其请求被调节了。此外,通信中介103可以或可以不向客户机指示所利用的处理信息。
图4示出了用于提供对基于联盟基础结构的资源的优化访问的示例方法400的流程图。方法400将参考计算机架构100的组件和数据来描述。
方法400包括接收访问环基础结构资源的用户请求的动作,该用户请求是从作出请求的用户组件发送的(动作401)。例如,参考图1A,客户机102可向节点111发送资源请求131。节点111可从客户机102接收资源请求131。资源请求131可以是访问资源121的请求(例如用于标识联盟基础结构100内的节点的节点标识符)。资源请求131可包括名字空间路径或标识资源121的其他数据。客户机可请求对资源的访问,使得客户机可对资源采取某种动作,例如从资源提取数据、编辑或删除资源。
方法400包括基于处理信息和作出请求的用户组件的特性以及用户请求的特性中的一个或多个来检测用户请求没有定向到用于访问环基础结构内的环基础结构资源的优化位置的动作(动作402)。例如,节点111可参考存储的处理信息以基于客户机102的特性和/或请求131的特性确定请求131没有定向到访问资源121的优化位置。如此,节点111可从存储的处理信息为客户机102标识适当优化的位置来进行通信(例如与适当的进入节点通信)。例如,节点111可利用各种优化算法来将请求131中的目的地地址变换成零个或更多个目的地地址以包含在其他相应请求中。
处理信息可本地存储在节点上和/或可存储在对一个或多个节点可访问的某一其他位置处。
方法400包括基于处理信息以及作出请求的用户组件的特性和用户请求的特性中的一个或多个,为作出请求的用户组件发送适当优化的位置的指示以访问环基础结构资源的动作(动作403)。例如,节点111可以向客户机102发送重定向通知132。重定向通知132可包括用于访问资源121的优化位置。优化位置可以是一目的地地址,以包含在对资源121的进一步请求中。
在某些实施例中,用于访问资源的适当的优化位置是主存资源的节点。例如,重定向通知132可指示客户机102要请求从节点116访问资源121(并可包括节点116的目的地地址)。响应于接收到重定向通知132,客户机102可向节点116发送资源请求133。节点116可从客户机102接收资源请求133。资源请求133可以是访问资源121的请求。资源请求133可包括名字空间路径或标识资源121的其他数据。节点116可参考存储的处理信息以及客户机102的特性和/或请求133的特性中的一个或多个,以确定节点116是访问资源121的优化位置。作为响应,节点116可将对资源121的访问返回给客户机102。
在其他实施例中,用于访问资源的适当的优化位置是除了主存资源的节点之外的节点。例如,重定向通知132可指示客户机102要请求从节点115访问资源121(并可包括节点115的目的地地址)。响应于接收到重定向通知132,客户机102可向节点115发送资源请求133。节点115可从客户机102接收资源请求133。节点115可参考存储的处理信息以及客户机102的特性和/或请求133的特性中的一个或多个,以基于客户机102的特性确定节点115是访问资源121的优化位置。
相应地,节点115接受资源请求133。节点115然后使用环间通信(例如联盟协议)以将基于资源请求133的进一步消息发送到节点116。一旦环间通信到达节点116,节点116就可将对资源121的访问返回给客户机102。
在进一步的实施例中,重定向通知132可指示客户机102要请求从环101的某一其他节点(例如节点191)访问资源121。响应于接收到重定向通知132,客户机102可向该其他节点发送资源请求133。该其他节点可从客户机102接收资源请求133。该其他节点可参考存储的处理信息(本地存储在该节点上或存储在某一其他位置处)以及客户机102的特性和/或请求133的特性中的一个或多个,以确定它是访问资源121的优化位置。
相应地,该其他节点接受资源请求133。该其他节点然后使用环间通信(例如联盟协议)以将基于资源请求133的进一步消息发送到节点116。环间通信可包括使用路由协议来在环101内执行一个或多个路由跳。一旦环间通信到达节点116,节点116就可将对资源121的访问返回给客户机102。
现在参考图1B,客户机102可基于电子地址将资源请求141发送到某一通信端点(例如环101上的节点)。在到通信端点的路径上,资源请求141可通过通信中介103。例如,当IP包被定址到给定的目的地IP地址时,该IP包可通过沿到通信端点的路径的一个或多个路由器(这些路由器对于端对端通信的每一端来说在某种程度上是透明的)。资源请求141可包括名字空间路径或标识资源121的其他数据。从名字空间路径和/或其他数据,通信中介103可确定请求141是访问资源121的请求。
通信中介103可参考被高速缓存的处理信息以确定请求是否定向到访问资源121的适当优化的位置。当通信中介103缺乏处理信息以作出该确定时,通信中介103可向环101的节点询问进一步的处理信息。环101的节点可不时地将处理信息推向通信中介103。例如,响应于询问或在指定的时间,节点111可向通信中介103发送映射通知142。映射通知142可包括用于确定用于请求对资源121的访问的适当优化的位置的处理信息。推送机制还可结合用于传送处理信息的其他触发机制一起使用。
从映射通知142,通信中介103可确定用于访问资源121的适当的优化位置。适当优化的位置可以是节点116、节点115或某一其他节点。通信中介103然后可向适当优化的位置发送资源请求143。一旦接收到请求143或代表请求143的环间通信,节点116就可将对资源121的访问返回给通信中介103。通信中介103可将对资源121的访问转发回客户机102。另选地,节点116可将对资源121的访问直接返回给客户机102。
可使用诸如超文本传输协议(“HTTP”)等之类的请求回复协议或其他定制协议来请求和/或发送重定向通知和映射通知。环101外部的诸如客户机102和/或通信中介103等之类的组件可以是外部客户机侧主存的应用/服务组件、外部客户机侧联盟基础结构组件、或对客户机透明的底层通信/路由基础结构。外部通信/路由基础结构可被包含在数据中心内和/或可以是因特网覆盖网络,例如因特网本身内的组件。
在某些实施例中,联盟基础结构包括向节点环提供不同功能的多个不同的层。图2示出了联盟基础结构200内不同层的示例。如所描绘的,联盟基础结构200包括环201、命名服务层202、通信服务层203以及外部客户机204。类似于环101,环201可包括使用一个或多个可能的联盟伙伴关系而联盟在一起的多个节点。命名服务层202在名字空间路径和环201上的节点的节点ID之间进行转换。通信服务层203实现通信抽象以在与外部客户机的通信和环201内的环间通信之间进行转换。外部客户机204可以是先前所述的任何组件。
位于任何层的组件,包括在环201内的组件,都可向环201发信号表示位置事件改变事件。例如,联盟基础结构成员资格组件可发信号表示位置改变事件,包括改变的节点ID所有权以及改变的节点ID范围所有权。联盟基础结构存储组件可通过使用分布在环的节点上的环字典数据结构来发信号表示位置改变事件。联盟基础结构命名服务可发信号表示名字空间的给定分支的位置改变事件,包括改变的节点ID所有权以及改变的节点ID范围所有权。联盟基础结构通信组件可发信号表示经命名服务实现的命名的分组的位置改变事件。这些和其他位置改变事件可在一致联盟以及最大努力联盟中实现。
位置改变事件可指示环201调节资源的主存位置和/或优化的访问位置。响应于位置改变事件,资源的主存位置和/或优化的访问位置可被改变。响应于位置改变事件,环201内的节点还可更新所存储的关于资源的处理信息。在某些实施例中,所存储的处理信息即使在主存位置不被改变时也更新。例如,响应于节点故障或添加新节点,即使在资源仍然被主存在相同位置处,优化的访问位置也可改变。
图3示出了便于优化基于联盟基础结构的资源的主存位置的示例联盟基础结构300。如所描绘的,联盟基础结构300包括环301、命名服务层302和通信服务层303。组件304驻留在通信服务层303。环301包括节点311-317以及使用一个或多个可能的联盟伙伴关系而联盟在一起的一个或多个其他节点。
图5示出了用于配置对基于联盟基础结构的资源的优化访问的示例方法500的流程图。方法500将参考联盟架构300的组件和数据来描述。
方法500包括检测组件请求以优化对与节点环上的组件相关联的一个或多个环基础结构资源的访问,以便减少节点环上的节点之间的节点间通信的动作(动作501)。例如,组件304可向节点313发送优化消息311。优化消息391可以是优化对资源321的访问的请求。节点313可接收优化消息391。优化消息391是优化对与环301相关联的一个或多个资源(包括资源321)的访问的请求。优化对资源321的访问可减少环301上节点之间的节点间通信。
方法500包括基于组件的对相关联的资源具有共同兴趣的一个或多个用户,确定从一个或多个环基础结构资源中选择的相关联的环基础结构资源的主存位置和访问位置中的至少一个没有在节点环上被优化的动作(动作502)。例如,节点313可基于对资源312有兴趣的一个或多个外部客户机,确定资源321的主存位置和/或访问位置没有在环301上被优化。主存位置可在另一主存位置可被用于减少用于访问资源的环间通信的情况下不被优化。访问位置可在另一访问位置可被用于减少用于访问资源的环间通信的情况下不被优化(用于一个或多个组件)。非优化的访问位置可考虑多种因素,例如客户机特性、网络诊断信息、联盟基础结构信息、资源特性、应用特性、日期、时间等。
方法500包括响应于组件请求,指示出相关联的环基础结构资源的主存位置和访问位置中的至少一个要在节点环上被优化,以减少节点环上的节点之间的节点间通信成本的动作(动作503)。例如,环301可指示出资源321的主存位置和访问位置中的至少一个要被优化。资源321的主存位置然后可从节点311移动到节点315。另选地或组合地,环301可指示出用于请求对资源321的访问的一个或多个客户机(未示出)的访问位置也要被优化。对访问位置的优化可考虑多种因素,例如客户机特性、请求特性、网络诊断信息、联盟基础结构信息、资源特性、应用特性、日期、时间等。
在某些实施例中,有状态的和唯一可标识的实体被应用系统(例如303/304)主存/所拥有(作为其一部分)。实体可与联盟基础结构中的至少一个资源(例如在命名服务层302或环301中)相关联(例如感兴趣、具有亲和性等)。例如,通信服务层303可为其外部客户机连接中的每一个保持诸如应用上下文之类的唯一状态,所述外部客户机连接为去往给定名称(即资源)的消息提供源或为来自给定名称的消息提供宿。通信服务层304可(经301)指示出该唯一状态(即应用上下文)要被最优地主存用于至少一个资源。命名服务层302然后可不时地回头向通信服务层303指示该唯一状态(即应用上下文)要被移动到一不同的节点,以保持与命名服务层302和/或环301的适当的成本。
从而,诸如通信服务层303等之类的应用系统可指示(例如经优化请求391)其应用上下文中的至少一个具有与联盟基础结构300内主存的至少一个资源(例如资源321)的亲和性。资源可被主存在联盟基础结构300的另一组件处或由联盟基础结构300主存在例如命名服务层302或环301等处。随后,较低层(301和/或302)可向应用系统(303)发出一事件,指示出该至少一个应用上下文要被主存在一不同节点上。
因此,本发明的实施例包括指示出节点所有权ID改变的覆盖环节点API。主存的分布式环字典拒绝对当前节点不是原来的(所有者)的数据元素的请求。
命名服务可用显式名字空间向应用上下文指示图节点亲和性要被主存(在什么节点中),以便与主题名称处于同一位置。可指示至少一个最优位置作为结果。如果应用上下文不被主存在最优机器中,则命名服务层302可拒绝命名操作的合格形式。因此,拒绝指示出至少一个最优主存位置。
在某些实施例中,组通信组件(例如向通信服务层303和命名服务层302提供命名组注册和发现的支持)在命名组通信端点没有最优地被放置于当前主机内时用信号通知通信服务层303。主存的应用/服务使用此信号来进一步向其外部客户机指示进一步的通信必须被重定向到另一外部通信端点。该外部指示可使用主存的应用/服务服务器侧组件和其客户机侧组件之间的专用协议消息,或例如使用HTTP重定向响应来传送。
如此,当某一节点ID的所有权或节点ID范围的所有权变化时,主存联盟基础结构内主存的应用服务被告知。作为响应,主存的应用/服务将外部通信重新定向到对象节点ID或节点ID范围的新所有权环节点的机器。这可发生在一致联盟基础结构或最大努力联盟基础结构内。
此外,应用/服务可被主存在附加地提供存储组件的联盟基础结构内,该存储组件在对象数据资源的主存环节点的所有权改变时支持对主存的应用/服务生成位置改变事件。此外,这种主存的应用/服务可使用这些位置改变事件来将外部客户机通信重定向到对象数据资源的新的拥有环节点的机器。
应用/服务还可主存在提供通信工具的主存联盟基础结构内,该通信工具使得主存的应用/服务能够在多个端点之间建立并使用命名的通信组(可能是分层的)。这种通信工具可支持诸如1:1、1:n、n:1以及n:n等各种MEP。从而,通信工具向主存的应用/服务发信号表示位置改变事件,以优化为通用命名的组保持给定的一组端点所需的内部联盟基础结构通信。主存的应用/服务还使用这些位置改变事件来将相关外部客户机通信重定向到从主存联盟基础结构接收的位置改变事件中指示的机器内的至少一个端点。
在某些实施例中,位置改变事件以主存联盟基础结构为源,导致相应的信号、命令或消息要被推送到外部通信基础结构中,该外部通信基础结构将外部客户机端点与联盟基础结构及其主存的应用/服务互连,导致对客户机通信的透明重定向。
最大努力联盟基础结构
如前所述,在某些实施例中,节点可联盟在一起以形成最大努力联盟基础结构。图6示出了联盟基础结构600的一个示例。联盟基础结构600包括可以形成不同类型的联盟伙伴关系的节点601、602、603。例如,节点601、602、603可彼此联盟为对等体而不需要根节点。节点601、602和603中的每一个各自都有相应ID671、682和693。
一般而言,节点601、602、603可利用联盟协议来形成伙伴关系并交换信息(例如,涉及与其他节点的交互的状态信息)。伙伴关系的形成以及信息的交换便于对资源的更高效且更可靠的访问。其他中间节点(未示出)可以存在于节点601、602和603之间(例如,ID在671和693之间的节点)。由此,例如在节点601和节点603之间路由的消息可通过一个或多个其他中间节点。
联盟基础结构600中的节点(包括其他中间节点)可以包括相应的会合协议栈。例如,节点601、602和603分别包括相应的会合协议栈641、642和643。协议栈641、642和643中的每一个包括应用层(例如,应用层621、622和623)和其他较低层(例如,相应的其他较低层631、632和633)。会合协议栈中的每一层负责与将资源请求与相应的资源会合相关的不同功能。
例如,其他较低层可包括信道层、路由层和功能层。一般而言,信道层负责可靠地将消息(例如,使用WS-可靠消息通信(WS-ReliableMessaging)和简单对象访问协议(“SOAP”))从一个端点传输到另一端点(例如,从节点601到节点603)。信道层还负责处理传入和传出的可靠消息通信首部,并维护与可靠消息通信会话相关的状态。
一般而言,路由层负责计算向目的地的下一跳。路由层还负责处理传入和传出的寻址和路由消息首部并维护路由状态。一般而言,功能层负责发出并处理诸如加入和离开请求、查验、更新和其他消息等会合协议消息,以及生成对这些消息的响应。功能层处理来自路由层的请求消息,并且如果有相应的响应消息,则使用路由层将其发回到始发节点。功能层还发起请求消息并利用路由层来传递请求消息。
一般而言,应用层处理从功能层传递的非会合协议专用数据(即,应用消息)。功能层可以访问来自应用层的应用数据,并且可以获得应用数据以及将应用数据置于会合协议消息(例如,查验和更新)中。即,功能层可使得应用数据被承载在会合协议消息上,并且可使得应用数据被传回接收会合协议节点中的应用层。在某些实施例中,应用数据用于标识资源和资源兴趣。由此,应用层可以包括处理从其他较低层接收到的和发送到其他较低层的数据以标识资源和资源兴趣的应用专用逻辑和状态。
联盟机制
节点可以使用各种不同的机制来联盟。第一个联盟机制包括对等节点将信息转发给所有其他对等节点。当节点要加入一联盟基础结构时,该节点利用诸如WS发现(WS-Discovery)等之类的广播/多播发现协议来通告其存在并发出广播/多播查找来检测其他节点。该节点然后建立与已经存在于网络上的其他节点的简单转发伙伴关系,并接受与新加入的节点的新的伙伴关系。之后,该节点只需将所有应用专用消息转发给所有其伙伴节点。
第二种联盟机制包括对等节点最高效地将应用专用消息发送到其目的地。当一新节点要加入一联盟基础结构时,该新节点利用诸如WS发现等之类的广播/多播发现协议来通告其存在并发出广播/多播查找来检测作为该联盟基础结构的一部分的其他节点。在检测到另一节点时,该新节点建立与该另一节点的伙伴关系。从所建立的伙伴关系中,该新节点获知已经参与联盟基础结构的其他节点的存在。它然后与这些新获知的节点建立伙伴关系,并接受任何新传入的伙伴关系请求。
特定应用专用消息中的节点到达/离开和兴趣注册在该联盟基础结构上泛滥,导致每一节点都在应用专用消息中具有其他伙伴节点和兴趣注册的全局知识。有了这一全局知识,任何节点可直接向已经表达了对应用专用消息的兴趣的节点直接发送应用专用消息。
第三种联盟机制包括对等节点间接地将所有应用专用消息转发到其目的地。在该第三种机制中,节点被分配诸如128位或160位ID等之类的标识符(ID)。负责维护给定对应用专用消息的兴趣的注册的节点可被确定为其ID最接近通过将应用专用消息的目的地身份(例如,URI)映射(例如,散列)到该128位或160位ID空间而获得的ID的节点。
在该第三种机制中,节点到达和离开在整个结构上泛滥。另一方面,对特定应用专用消息的兴趣的注册被转发给被确定为负责维护这一注册信息的节点。出于可伸缩性、负载平衡和容错的目的,接收对特定应用专用消息的兴趣的注册的节点可以在其邻域集中可靠地使该注册信息泛滥。对于指定节点的邻域集可以被确定为其ID在该指定节点的ID的任一侧上的预定范围内的节点集。
类似于第二种机制,新加入的节点利用诸如WS发现等之类的广播/多播发现协议来通告其存在并发出局部广播/多播查找来检测已经是该联盟基础结构的一部分的节点。该新节点建立与所发现的节点的伙伴关系,并使用该伙伴关系来获知参与该联盟基础结构的其他新节点的存在。该新节点然后与新发现的节点建立进一步的伙伴关系,并接受任何新传入的伙伴关系请求。该新节点接受从其所负责的伙伴传入的对特定应用层专用资源的兴趣的注册,并且可在其邻域集上使该注册泛滥。由此,消息一般可经由中间路由节点(例如,新加入的节点与其具有伙伴关系或者伙伴节点知道的节点)转发到其最终目的地。
响应于接收到传入的应用专用消息,该新节点将该消息转发给可能负责维护关于在消息中指定的目的地的注册信息的伙伴节点。由此,当使用该第三种机制时,联盟基础结构中的每一节点具有所有其他节点的全局知识,但是注册信息在节点之间高效地分区。应用专用消息仅经由可能负责维护对这些应用专用消息的兴趣的注册信息的伙伴节点来发送到其最终目的地。由此,通过仅转发给具有对所处理的消息的兴趣的注册信息的全局知识的伙伴节点来实现了间接性。这与其中间接性是通过转发给所有伙伴节点来实现的第一种机制形成对比。
第四种联盟机制包括对等节点将消息路由给其他对等节点。该第四种机制与第三种机制的区别至少在于节点到达/离开和对特定应用专用消息的兴趣的注册都被路由而不是被泛滥。路由协议被设计成保证应用专用消息和表达对这些应用专用消息的兴趣的注册消息之间的会合。
图7示出了便于间接地将请求路由到伙伴的计算机架构700的示例。计算机架构700描绘了可能分布在参与联盟基础结构的多个局部发现范围上的不同类型的计算机系统和设备。
工作站733可以包括已注册的PnP提供者实例。为向其伙伴告知该PnP提供者实例的存在,工作站733在联盟基础结构上路由注册请求701。注册请求701最初被转发给膝上型计算机731,膝上型计算机进而将注册请求701转发给消息代理737,消息代理又进而将注册请求701转发给消息网关741。消息网关741将注册信息注册请求701保存在其数据库中,并将成功消息704返回给工作站733。
随后,另一已注册提供者实例,此次是运行服务的提供者实例,在工作站733内变得活跃。此次,该节点知道消息网关741负责注册,并将注册请求705直接转发给消息网关741。消息网关741将注册信息注册请求705保存在其数据库中,并将成功消息706返回给工作站733。
随后,打印机736(例如,UPnP打印机)通电,并发送通告707。服务器734检测到通告707,并将注册请求708路由到消息代理737。消息代理737将注册请求708转发给消息网关741。消息网关741将注册信息注册请求708保存在其数据库中,并将成功消息791返回给服务器734。
随后,个人计算机742发出发现所有设备的查找请求792。由于个人计算机742不知道将查找请求792转发到何处,因此它通过工作站743来路由查找请求792。由于注册和查找请求被路由到同一目的地,因此路由协议本质上保证两个请求之间的会合将导致工作站743将查找请求792转发给消息网关741。消息网关741查找其所维护的注册信息,并将查找请求792转发给工作站733和服务器734两者。工作站733和服务器734分别将响应消息714和716发送给个人计算机742。
该第四种机制通过将请求路由(而非泛滥)到具有请求中所指定的注册的全局知识的节点(消息网关741)来工作。如将在以下更详细描述的,该第四种机制本质上保证路由可在O(logN)个跳中实现,其中N是参与联盟基础结构的节点数。由于该第四种机制高效地划分了节点伙伴关系和注册信息,因此它能伸缩到非常大的网络,甚至因特网。
尽管描述了多种联盟机制,但是本领域的技术人员在仔细阅读了本说明书之后可以清楚其它联盟机制也是可能的。
联盟中的节点之间的关系
因此,联盟由一组节点组成,该组节点在节点之间协作以形成其中可系统地且高效地散布并定位信息的动态且可伸缩网络。节点使用自反的、反对称的、传递的、总的、且在节点身份域上定义的二元关系被组织为已排序列表来参与联盟。该已排序列表的两端是联接的,由此形成环。由此,该列表中的每一节点可将其自身视为在该已排序列表的中间(作为使用模算术的结果)。此外,该列表被双向链接,使得任何节点可以在任一方向上遍历该列表。
每一联盟节点可被分配一来自0和某一固定上限之间的固定的一组ID的ID(例如,由带有重复检测的随机数生成器分配)。由此,将该固定上限的ID加6将导致为0的ID(即,从链表的末尾移回该链表的开头)。另外,定义了从节点身份的值域到节点本身的1:1映射函数。
图8描绘了示例链表804和相应的环806。给定这一环,可定义以下函数:
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-6的ID,其中b等于例如8或66,而n等于例如628位或660位等效数字。因此,节点可被分配例如范围在0到6640-6(或近似地6.461502E48)之间的ID。范围0到6640-6将提供例如足够数量的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或66,且n=128位或660位等效数字。
因此,路由节点可以形成跨越环的对数索引。取决于节点在环上的位置,例如,当在集合id±bi(其中i=(1,2,…(n-1)))中的每一数字处有一现有节点时,精确的对数索引是可能的。然而,可能的是在该集合中的每一数字处没有现有节点。在这些情况下,可选择最接近id±bi的节点作为路由节点。所得的对数索引并不是精确的,并且甚至可能对集合中的某些数字缺少唯一路由节点。
再次参考图8,图8示出了联盟基础结构中的节点之间采用已排序列表804和相应的环806的形式的二元关系的示例。已排序列表804的ID空间在范围0到28-6(即255)中。即,b=2且n=8。由此,图8所示的节点被分配到在0到255范围中的ID。已排序列表804利用自反的、反对称的、传递的、总的、且在节点身份域上定义的二元关系。已排序列表804的两端是联接的,由此形成环806。这使得图8中的每一节点将其自身视为在已排序列表804的中间成为可能。已排序列表804被双向链接,使得任何节点可以在任一方向上遍历已排序列表804。用于遍历已排序列表804(即环806)的算术以模28来执行。由此,255(即已排序列表804的末尾)+6=0(即已排序列表804的开头)。
路由表指示ID64的后继者是ID76(从ID64开始顺时针的紧接着的ID)。后继者可以在例如新节点(例如,具有ID71)加入联盟基础结构或现有节点(例如,ID76)离开联盟基础结构时改变。同样,路由表指示ID64的前导者是ID50(从ID64开始逆时针地紧接着的ID)。前导者可以在例如新节点(例如,具有ID59)加入联盟基础结构或现有节点(例如,ID50)离开联盟基础结构时改变。
路由表还指示ID64的一组邻域节点具有ID83、76、50和46。一组邻居节点可以是在ID64的指定范围(即,邻居范围u)内的指定数量的节点(即,邻域大小v)。可能使用各种不同的邻域大小和邻居范围,如V=4和U=60等,来标识该组邻域节点。邻域集可以例如在节点加入或离开联盟基础结构时,或在指定数量的节点或指定范围改变时改变。
该路由表还指示ID64可以路由到ID为200、2、30、46、50、64、64、64、64、76、83、98、635和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的节点。然而,由于ID250不是对于ID64的路由节点,因此ID64可将消息路由到ID2(对243最接近的路由节点)。ID为2的节点可以进而实现RouteNumerically(243,Msg)以使得消息被路由(直接地或通过其它中间节点)到ID为250的节点。由此,可能的是RouteNumerically函数被递归地调用,其中每一调用将消息路由到更接近目的地的地方。
邻近性
有利的是,本发明的其它实施例便于基于一个或多个邻近性类别(例如,地理边界、路由特性(例如,IP路由跳)、管理域、组织边界等)的多个邻近性准则来将环划分成环的环或环的树。应当理解,环可使用同一类型的邻近性准则来多次划分。例如,环可基于大陆邻近性准则和国家邻近性准则(两者都是地理边界邻近性类别)来划分。
由于ID可在ID空间上均匀分布(随机数生成的结果),因此环形ID空间的任何给定段有很高的可能性包含属于不同邻近性类的节点,只要这些类具有大致相同的势。该概率在存在足够数量的节点来获得有意义的统计行为时进一步增加。
由此,任何给定节点的邻域节点从邻近性的观点来看通常是良好分散的。由于所发布的应用状态可以在邻域节点之间复制,因此所发布的信息从邻近性的观点来看也可以是良好分散的。
图9示出了便于邻近路由的环的环900。环901可被视为主或根环,且包含环902、903和904的每一个中的所有节点。环902、903和904的每一个可包含来自环901的、基于指定的邻近性准则划分的节点子集。例如,环901可以基于地理位置来划分,其中环902包含在北美的节点,环903包含在欧洲的节点,而环904包含在亚洲的节点。
在包含65536(216)个ID的数值空间中,将消息从ID为5345的北美节点路由到ID为23345的亚洲节点可包括在环902内路由消息,直到标识了亚洲节点的邻居节点。该邻居节点然后可将该消息路由到亚洲节点。由此,在北美节点和亚洲节点之间形成了单个跳(而非多个跳)。因此,路由是以资源高效的方式来执行的。
图10示出了便于邻近路由的示例性的、邻近性导致的环的分区树1000。如图所示,环的分区树1000包括多个环。每一个环表示一已排序链表的一个分区。每一个环包括其ID在该已排序链表中的多个节点。然而,为了清楚起见,由于潜在节点的数量,未在环上明确地描绘节点(例如,分区树1000的ID空间可以是b=66且n=40)。
在分区树1000内,根环1001基于准则1071(第一管理域边界准则)被划分成多个子环,包括子环1011、1012、1013和1014。例如,DNS名称的每一分量可被认为是一邻近性准则,它们之间的部分排序按照其从右到左出现在DNS名称中的次序来导出。相应地,子环1011可基于准则1081(第二管理域边界准则)被进一步划分成多个子环,包括子环1021、1022和1023。
子环1022可基于准则1072(地理边界准则)被进一步划分成多个子环,包括子环1031、1032和1033。基于位置的邻近性准则可以按照大陆、国家、邮政编码等来部分地排序。邮政编码本身是分层地组织的,这意味着它们能够被视为进一步导出邻近性准则的部分排序的子列表。
子环1031可基于准则1073(第一组织边界准则)被进一步划分成多个子环,包括子环1041、1042、1043和1044。邻近性准则的部分排序的列表可以按照一给定公司在组织上如何结构化(如分公司、部门和产品组)来导出。相应地,子环1043可基于准则1083(第二组织边界准则)被进一步划分成多个子环,包括子环1051和1052。
在分区树1000内,每一节点具有单个ID,并沿着从根开始到叶的相应分区路径参与环。例如,参与子环1052的每一节点也参与子环1043、1031、1022、1011和根1001。到目的地节点(ID)的路由可以通过如下实现RouteProximally函数来完成:
RouteProximally(V,Msg,P):给定来自节点身份的域的值V和消息“Msg”,将消息传递到按照邻近性准则P被认为是等效的节点中其身份可被映射到V的节点Y。
由此,路由可以通过以下来完成:逐渐移向给定环内更接近目的地节点的地方,直到如从目的地节点位于当前节点和其后继者或前导者节点之间的条件所确定的在该环内的路由不能做出任何进一步的进展。此时,当前节点开始经由其所参与的下一更大的环中其父节点而路由。在如最初在RouteProximally调用中指定的、在所请求的邻近上下文中达到最接近目的地节点的节点时,这一通过沿着分区路径向着根环爬行来逐渐移向目的地节点的过程终止。
路由跳可以保留在发起该请求的节点的邻近邻域中,直到由于目的地节点位于其外部而在该邻域中不能做出任何进一步的进展。此时,邻近性准则被放宽以增加邻近邻域的大小来做出进一步的进展。重复该过程,直到足够地扩展了邻近邻域来包括目的地节点(ID)。在每一相继的邻近邻域准则放宽之后做出的路由跳可能是与前一跳相比、在邻近空间中更大的跳跃,而在数值空间中更小的跳跃。由此,在到达目的地之前,仅做出绝对需要的数量的此类(环间)跳。
情况可能是对于查找消息避免了某些跳,因为所发布的应用数据在其在目的地节点的邻域节点之间复制时沿着分区树向下被复制。
为实现邻近路由,每一联盟节点维护对其作为成员所参与的所有环中其后继者和前导者节点(类似于对于单个环的后继者和前导者),即邻近前导者、邻近后继者和邻近邻域,的引用。为了使得路由高效,节点还可维护对作为路由伙伴的、最接近该环的任一半上距离呈指数地增加的其它节点(类似于对单个环的路由节点)的引用。在某些实施例中,落入一对连续的后继者或前导者节点之间的路由伙伴节点参与由当前节点和在后继者或前导者节点对中数值上最接近它的节点所分别共享的同一最低环。由此,向着目的地节点的路由跳仅在绝对被需要来做出进一步的进展时才转换成使用放宽的邻近性准则(即,转换到更高的环)。因此,消息可高效地与相应的联盟节点会合。
在某些实施例中,节点实现邻近路由函数来基于等效性准则关系来路由消息。由此,给定数字V和消息“Msg”,节点可以实现RouteProximally(V,Msg,P)来将消息传递到按照邻近性准则P被认为是等效的节点中其身份可被映射到V的节点Y。邻近性准则P标识了分区树中作为被其认为邻近地等效的所有节点的公共祖先的最低环。它可被表示为通过将沿着从根环到由邻近性准则标识的环的路径找到的邻近性准则串接起来而获得的串,由路径分隔符‘/’来分隔。例如,标识子环1042的邻近性准则可被表示为“邻近性:/.COM/公司2/位置A/分公司2”。分区树1000中的每一个环可以例如通过将其表示串用基于SHA的算法来散列而被分配唯一数字。如果为根环保留了数字0,则可以推断出RouteNumerically(V,Msg)≡RouteProximally(V,Msg,0)。
例如,子环1044中的节点可以实现RouteProximally以标识子环1031中更接近的节点(例如,到子环1013中的节点)。进而,子环1031可以实现RouteProximally以标识子环1022中更接近的节点。同样,子环1022可以实现RouteProximally以标识子环1011中更接近的节点。类似地,子环1011可以实现RouteProximally以标识环1001中更接近的节点。由此,可能的是RouteProximally函数被递归地调用,其中每一调用将消息路由到更接近目的地的地方。
由此,当考虑邻近性准则时,到最终目的地的路径上的路由跳可以保持在发起请求的节点的附近内,同时在数值空间中在始发节点和目的地节点之间做出显著的进展,直到或者到达目的地节点,或者在所选邻近性准则下不能做出任何进一步的进展,此时只需将该准则放宽到足够向着目的地做出进一步的进展。例如,邻近性准则可以被放宽以足以将消息从环1031向上路由到环1022等等。
利用以上关于邻近性的方法,有可能将所发布的信息限于一给定环。例如,组织可能希望确保组织专用信息不对其信任域之外的实体以以下方式可用:(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如所预期的那样工作而无需任何修改。
每一邻近环可根据(可能不同的)环参数来配置。环参数可用于定义邻域(例如,环参数可表示邻域范围、邻域大小、用于查验和离开消息的查验消息和离开消息定时和分发模式)、指示特定的联盟机制(例如,从上述先前描述的第一到第四种联盟机制中,或从其它联盟机制中)、或定义同一邻近环中的路由伙伴之间的通信细节。某些环参数可能更为一般化,适用于多个不同的联盟机制,而其它环参数更具体且适用于特定类型的联盟机制。
用于配置较高级邻近环的环参数在某些实施例中可以由较低级邻近环继承。例如,可能的是环1043继承环1031的某些环参数(后者进而从环1022继承,等等)。由此,与环1031相关联的邻域大小和邻域范围也与环1041相关联。
然而,所继承的环参数可以被更改,和/或邻近环可以根据不同的环参数来个别地配置。例如,可能的是环1011是用于包含大量节点的管理域的,且因此上述第四种联盟机制更适合于环1011。另一方面,可能的是环1021是用于具有相对较少数量的节点的小型企业的,且因此上述第二种联盟机制更适用于环1021。由此,与环1021相关联的环参数可以被设为(或将继承的参数改为)与同环1011相关联的环参数不同的值。例如,指示特定类型的联盟机制的环参数可以在环1011和1021之间不同。类似地,定义邻域的参数可以在环1011和1021之间不同。此外,环1021可以根据对上述第二种联盟机制专用的特定参数来配置,而环1011根据对上述第四种联盟机制专用的特定参数来配置。
因此,邻近环可以基于邻近环中的节点的特性(例如数量、所包括的资源等)来灵活地配置。例如,管理员可以使用配置过程(例如,通过用户界面)为邻近环选择环参数。配置过程可以便于对邻近环之间的继承关系的配置,以及对个别邻近环的配置,以便诸如覆盖以其它方式继承的环参数。
本发明的各实施例包括划分联盟基础结构的节点。划分联盟基础结构的节点可包括访问包含已被分配给联盟基础结构中的节点的节点ID的已排序链表的动作。例如,返回图10,可访问环1001所表示的已排序链表。已排序链表的节点ID(环1001上所描绘的节点)可以表示联盟基础结构(例如,联盟基础结构600)中的节点。
划分联盟基础结构的节点可包括访问表示用于划分已排序链表的多个不同邻近性准则的邻近性类别的动作。例如,可访问表示域边界1061、地理边界1062、以及组织边界1063的邻近性准则。然而,在所访问的邻近性准则中也可以表示其它邻近性准则,诸如信任域边界。邻近性类别可以包括先前创建的邻近性准则的部分排序的列表。环可以基于邻近性准则的部分排序的列表来划分。
划分联盟基础结构的节点可包括基于第一邻近性准则将已排序链表划分成一个或多个第一子列表的动作,所述一个或多个第一子列表中的每一个都至少包含来自已排序链表的节点ID的子集。例如,环1001可以基于准则1071被划分成子环1011、1012、1013和1014。子环1011、1012、1013和1014中的每一个可以包含来自环1001的节点ID的不同子集。
划分联盟基础结构的节点可包括基于第二邻近性准则将选自所述一个或多个第一子列表的一第一子列表划分成一个或多个第二子列表的动作,所述一个或多个第二子列表的每一个都至少包含该第一子列表中所包含的节点ID的子集。例如,子环1011可以基于准则1081被划分成子环1021、1022和1023。子环1021、1022和1023中的每一个可以包含来自子环1011的节点ID的不同子集。
本发明的各实施例包括填充节点的路由表。填充节点的路由表可包括将前导者节点插入路由表的动作,前导者节点在已排序链表的第一方向中相对于当前节点位于当前节点之前。例如,参考图8,ID为50的节点可作为ID为64的节点(当前节点)的前导者被插入到路由表中。在顺时针方向821上移动(从已排序链表804的A端向着已排序链表804的B端),ID为50的节点在ID为64的节点之前。插入前导者节点可以在当前节点和前导者节点之间建立对称伙伴关系,使得当前节点是前导者节点的伙伴,而前导者节点是当前节点的伙伴。
填充节点的路由表可包括将后继者节点插入路由表的动作,后继者节点在已排序链表的第一方向中相对于当前节点位于当前节点之后。例如,ID为76的节点可作为ID为64的节点(当前节点)的后继者被插入到路由表中。在逆时针方向822上移动,ID为76的节点在ID为64的节点之后。插入后继者节点可以在当前节点和后继者节点之间建立对称伙伴关系,使得当前节点是后继者节点的伙伴,而后继者节点是当前节点的伙伴。
填充节点的路由表可包括将适当的邻域节点插入到路由表中的动作,邻域节点是基于邻域范围和邻域大小在第一方向和第二相反方向这两个方向上从已排序链表中被标识出的。例如,ID为83、76、50和46的节点可作为ID为64的节点(当前节点)的邻域节点被插入到路由表中。基于邻域范围20和邻域大小4,可在顺时针方向821上标识ID为83和76的节点,并在逆时针方向822上(从已排序链表804的B端移向已排序链表804的A端)标识ID为50和46的节点。可能的是在某些实施例中无适当的邻域节点被标识。插入邻域节点可以在当前节点和邻域节点之间建立对称伙伴关系,使得当前节点是邻域节点的伙伴,而邻域节点是当前节点的伙伴。
填充节点的路由表包括将适当的路由节点插入到路由表中的动作,路由节点是基于联盟基础结构的ID空间的数基和字段大小在第一和第二两个方向上从已排序链表中被标识的,路由节点表示在第一和第二两个方向上该已排序链表的对数索引。例如,ID为200、2、30、46、50、64、64、64、64、64、76、83、98、135和200的节点可作为ID为64的节点的路由节点被插入到路由表中。基于数基2和字段大小8,可在方向821上标识ID为64、64、76、83、98、135和200的节点,并在方向822上标识ID为64、64、50、46、30、2和200的节点。如在环806内描绘的,路由节点表示顺时针方向821和逆时针方向822两个方向上已排序链表804的对数索引。插入路由节点可以在当前节点和路由节点之间建立对称伙伴关系,使得当前节点是路由节点的伙伴,而路由节点是当前节点的伙伴。
本发明的各实施例包括填充考虑邻近性准则的节点路由表。填充考虑邻近性准则的节点路由表可包括将当前节点参与的每个分层划分的路由环的前导者节点插入到路由表中的动作。每一前导者节点在当前节点所参与的每一分层划分的路由环中在第一方向(例如,顺时针)上在当前节点之前。分层划分的路由环是根据相应的邻近性准则来划分的,并且至少包含双向链表的子集(可能是整个双向链表)。例如,再次参考图10,可能的是指定节点参与根环1001以及子环1011、1022、1023、1031和1042。由此,从环1001和子环1011、1022、1023、1031和1042的每一个中为指定节点选择一前导者节点。
填充考虑邻近性准则的节点路由表可包括将当前节点参与的每个分层划分的路由环的后继者节点插入到路由表中的动作。每一后继者节点在当前节点所参与的每一分层划分的路由环中在第一方向上在当前节点之后。例如,从环1001和子环1011、1022、1023、1031和1042的每一个中为指定节点选择一后继者节点。
填充考虑邻近性准则的节点路由表可包括将当前节点参与的每个分层划分的路由环的适当的邻域节点插入到路由表中的动作。邻域节点可以基于邻域范围和邻域大小从当前节点所参与的分层划分的路由环中在第一方向(例如,顺时针)和第二相反方向(例如,逆时针)两个方向上被标识。例如,从环1001和子环1011、1022、1023、1031和1042的每一个中为指定节点标识邻域节点。
填充考虑邻近性准则的节点路由表可包括将当前节点参与的每个分层划分的路由环的适当的路由节点插入到路由表中的动作。例如,从环1001和子环1011、1022、1023、1031和1042的每一个中为指定节点标识路由节点。
在某些实施例中,对节点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的路由伙伴的邻近环。
本发明的各实施例包括向目的地节点路由消息。向目的地节点路由消息可包括接收节点接收带有指示出目的地的数字的消息的动作。例如,再次参考图8,ID为64的节点可接收指示目的地212的消息。
向目的地节点路由消息可包括确定接收节点是数值上比相应的前导者节点离目的地更远和数值上比相应的后继者节点离目的地更远中的至少一种的动作。例如,在方向822上,ID64比ID50离目的地212更远,而在方向821上,ID64比ID76离目的地212更远。向目的地节点路由消息可包括确定目的地不在对应于接收节点的邻域节点集中的动作。例如,ID为64的节点可确定目的地212不在邻域集83、76、50和46内。
向目的地路由消息可包括从对应于接收节点的路由表中标识中间节点的动作,该中间节点数值上比相应的路由表中的其它路由节点离目的地更近。例如,ID为64的节点可将ID为200的路由节点标识为在数值上比其它路由节点离目的地212更近。向目的地节点路由消息可包括将消息发送到中间节点的动作。例如,ID为64的节点可将消息发送到ID为200的节点。
本发明的各实施例包括基于邻近性准则向目的地节点路由消息。基于邻近性准则向目的地节点路由消息可包括接收节点接收带有指示出目的地的数字和邻近性准则的消息的动作。邻近性准则定义了一个或多个节点类。接收节点作为基于邻近性准则从一个或多个节点类中选择的当前节点类的一部分接收消息。例如,参考图9,ID为172的节点可接收指示目的地201的消息以及指示目的地节点是由环901所表示的类的一部分的邻近性准则。ID为172的节点可以接收该消息作为环904的一部分。
基于邻近性准则向目的地节点路由消息可包括确定在所选节点类中的节点间、接收节点是数值上比相应的前导者节点离目的地更远和数值上比相应的后继者节点离目的地更远中的至少一种的动作。例如,在环904内,ID为172的节点在顺时针方向上比ID为174的节点离目的地201更远,且在逆时针方向上比ID为153的节点离目的地201更远。
基于邻近性准则向目的地路由消息可包括确定对于邻近性准则所定义的一个或多个节点类中的任一个,目的地不在接收节点的邻域节点集中的动作。例如,ID为172的节点可确定目的地201不在环904或环901中相应的邻域集内。
基于邻近性准则向目的地路由消息可包括从接收节点的路由表中标识中间节点的动作,该中间节点数值上比路由表中的其它路由节点离目的地更近。例如,ID为172的节点可标识ID为194的节点在数值上比环904中的其它路由节点离目的地201更近。基于邻近性准则向目的地节点路由消息可包括将消息发送到中间节点的动作。例如,ID为172的节点可将所接收到的消息发送到ID为194的节点。ID为172的节点可将所接收到的消息发送到ID为194的节点,以遵循先前定义的邻近性准则的部分排序的列表。
节点194可在环904内尽可能地接近目的地201。由此,可将邻近性放宽到刚好足以允许在下一分支中在环901内向目的地进一步路由。即,路由从环904转换到环901,因为在环904上不能做出向着目的地的任何进一步进展。或者,可能的是ID为201的节点在环901中ID为194的节点的邻域内,导致没有进一步的路由。由此,在某些实施例中,放宽邻近性准则以到达下一更高的环足以引起进一步的路由。
然而,在其它实施例中,导致转换到下一更高的环的邻近性准则的增量放宽继续,直到能发生进一步的路由(或直到遇到根环)。即,在可做出进一步的路由进展之前发生向更高环的多个转换。例如,现在参考图10,当在环1031上不能做出进一步路由进展时,可将邻近性准则放宽到足够转换到环1011或甚至转换到根环1001。
节点阶段
参与联盟基础结构的节点可以在不同的操作阶段中操作。节点的有效阶段值可被定义为一有序集的成员。s例如,{NodeId}.{InstanceIds}.{PhaseValue[Phase-StateValues:Inserting,Syncing,Routing,Operating].[Phase.UnknownIndication:phaseknownattimeoftransmission,phaseunknownattimeoftransmission]}({节点Id}.{实例Id}.{阶段值[阶段状态值:插入,同步,路由,操作].[阶段.未知指示:传输时已知的阶段,传输时未知的阶段]})定义了表示联盟基础结构内的给定节点的阶段空间的一种可能的有序集。节点实例可以按序转换(或前进)通过从插入(Inserting)到同步(Syncing)到路由(Routing)到操作(Operating)的节点阶段状态。此外,在某些实施例中,节点实例可被配置成使得防止节点实例转换回先前的节点阶段状态。在某些实施例中,在每次节点到来时,节点将其实例ID前进。
例如,可防止节点实例从路由转换回同步(或转换回插入)等等。因此,在某些实施例中,当已知给定节点实例(例如,由(节点Id,实例Id)标识)前进到特定的节点阶段状态(例如,操作)时,则也已知该给定节点实例不可能(且在某些实施例中不会)回退到先前的节点阶段状态(例如,回到路由、同步或插入)。由此,在特定节点阶段状态之前的节点阶段中的任何节点实例很有可能是该节点的新(且前进的)实例。
在某些实施例中,将阶段信息和相应的实例Id(当节点到来时前进)一起传输。由此,有可能确定对于同一实例,越小的节点阶段状态越旧。此外,当已知一较新的节点实例(在任何阶段状态值)时,关于较旧实例的任何信息被认为是过时的。
节点经常可以重新启动或者丢失与彼此的通信,例如在首次启动时、通过优雅地离开、或作为异常终止(崩溃)的结果。由此,任何节点阶段状态中的节点都有可能重新启动或丢失与其它节点的通信。例如,崩溃可导致路由阶段状态中的节点重新启动。在重新启动或丢失通信期间,可能没有方法来确定一节点处于什么节点阶段状态。因此,当一节点正在重新启动或丢失与节点的通信时,可设置[Phase.UnknownIndication]([阶段.未知指示])来指示该节点的阶段状态当前是未知的。然而,可维护任何先前表达的和/或检测到的关于该节点的阶段状态且该状态不会丢失。
可使用[阶段.未知指示]来指示在发送阶段状态值时阶段状态是否已知(例如,未设置phase.unknown(阶段.未知)的阶段值),或者阶段状态是否是先前表达的阶段状态且该阶段状态在发送该阶段状态时不是已知的(例如,设置了phase.unknown(阶段.未知)的阶段值)。由此,节点的阶段(其阶段值)可以使用阶段状态值和phase.unknown(阶段.未知)指示两者来表示。
加入协议
节点可以时常加入和离开现有联盟。节点可以实现用于加入和离开联盟的适当协议。例如,节点可以实现Join()函数以成为现有联盟的一部分。实现Join()函数的节点在到达最终的操作阶段状态之前可以转换通过三个有序阶段状态:插入阶段状态、同步阶段状态以及路由阶段状态。在其它实施例中,这些特定的有序阶段状态可能不存在,而可以定义其它阶段状态。图11A示出了节点建立联盟基础结构内的成员资格的示例。图11B示出了联盟基础结构内的节点交换消息的示例。
插入阶段:节点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的活跃度阶段是处于插入阶段状态的状态消息,来请求向其发送消息的其它节点通过不同的节点重定向发送给它的消息。
一般而言,有时,节点可以交换同步请求和响应消息。同步请求和同步响应消息可以包括从发送者的观点来看的关于其它节点的活跃度信息(例如,首部)。也可在同步请求和响应消息中包括邻域状态,使得邻域中的应用层知晓彼此的状态。何时交换同步请求和响应消息的一个示例是在加入节点的同步阶段状态期间。然而,同步请求和响应消息也可以在其它可操作阶段状态(例如,在操作(Operating)阶段状态中)期间交换。
图12描绘了消息模型和相关的处理模型1200的示例。如图12所示,节点可以发送和接收同步请求消息。例如,同步请求消息1201可以在功能层1651处从新插入的节点(例如,图11B中ID为144的节点)接收。应用数据1202(例如,名字空间订阅)可以承载在同步请求消息1201中。功能层1251可以将包括在同步请求消息中的任何应用数据通知给应用层1252。例如,功能层1251可以向应用层1252调用包括应用数据1202的邻域状态同步事件1203。包括应用数据1207的同步请求1231也可被发送到处理模型1200中类似于对同步请求1201的处理来处理同步请求1231的另一节点。
响应于某一功能层事件(例如,同步请求消息1201、同步响应消息1241、或查验消息1212),功能层1251可以调用应用层1252中的邻域状态请求功能1204。邻域状态请求1204是对应用层的获得需要在邻域中传播的状态的请求。响应于邻域状态请求1204,应用层1252可以向功能层1251提供包括任选的应用数据1207的邻域状态1206。或者,应用层1252可以作为对某一应用层事件的反应来发送包括任选的应用数据1207的邻域状态1206。使用类似于以上的内部机制,功能层1251可以发送包括任选的应用数据1207的同步响应消息1208来传播应用层邻域状态。
同步阶段:在处理了加入响应消息之后,节点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.简要地参考图12,经由邻域状态请求(例如,邻域状态请求1204)查询Y的本地应用层(例如,应用层1252)来获得任选的应用专用邻域数据(例如,应用专用数据1207)。
SP3.将至少包括从Y的观点来看的每一邻近邻域和路由伙伴节点的活跃度状态信息的同步消息至少发送给邻近后继者和前导者节点。经由SP2访问的任何任选的应用专用邻域数据(例如,应用数据1207)被包括在同步请求1231中。
SP3.Y从处理在SP2中发送的同步消息的这些节点接收回同步响应消息。例如,节点Y可以与其计算的邻域内的一个或多个节点交换同步消息(请求/响应)。在与节点Y的至少一个以及可能所有的邻域节点交换了同步消息之后,计算的邻域节点可以交换进一步的消息以传播经同步的数据。同步消息(请求或响应)可以是由一节点发送的未经路由的消息,以抢先地将其数据与例如在节点邻域中的一目标节点同步。
SP4.当接收到SP3中的同步响应消息(例如,同步响应消息1241)时,可经由邻域状态同步事件1203将这些接收到的同步响应消息中存在的任何任选的应用专用邻域数据(例如,应用数据1222)提供给Y的应用层1252。
作为同步阶段状态的一部分,邻近后继者(例如,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.否则,通过对节点0调用RouteProximally并将邻近性准则设为环d的邻近性准则来计算路由伙伴Y.r±i。这意味着Y.r±i=Q.RouteProximally(z,updateMsg,d)。
RP3.此时,节点Y不仅能处理目的地为该节点的消息,而且还能路由消息。
RP4.如果尚未订阅,则对伙伴路由节点的端点ID订阅从应用层发送的活跃度通知事件。并且,对于不再是伙伴路由节点的那些节点,撤消先前与应用层建立的任何活跃度事件订阅。例如,暂时返回图6,订阅和/或撤消请求可向上传递到实现用于相应的应用(例如,名字空间应用)的发布-订阅逻辑的应用层(例如,应用层621)。当在应用层处接收到后续的应用专用活跃度消息(例如,由名字空间订阅产生的消息)时,可将通知(事件)向下推送至其它较低层(例如,其它较低层631)以供处理。
图13描绘了可在功能层1351和应用层1352之间发生的多个活跃度交互的示例。如图13所示,端点是例如表示各节点的发布/订阅话题(例如,由URL或URI表示),并且可以是例如联盟基础结构节点。订阅活跃度事件1301可以从功能层1351向应用层1352调用以订阅活跃度事件(例如,订阅发布/订阅话题)。撤消活跃度订阅1302可以从功能层1351向应用层1352调用以撤消对活跃度事件的订阅。端点停机事件1303可以从应用层1352向功能层1351发送以指示端点可能停机并向功能层1351提供任选的替换端点。端点停机事件1303可以基于先前的订阅(例如,订阅活跃度事件1301)异步地发送。
节点停机1304可以从功能层1351向应用层1352调用,以指示功能层1351(或某一其它较低层)检测到了故障节点并可任选地向应用层1352提供替换节点。应用层1352可以随后将检测到可能故障的节点传播到其它感兴趣的各方。节点停机事件1304可以在功能层1351或某一其它较低层检测到可能故障的节点的任何时刻异步地发送。发送活跃度1306可以在应用层1352检测到一节点停机(例如,从节点停机事件1304或从某一其它带外机制)时从应用层1352向功能层1351调用。发送活跃度事件1306可以使得功能层1351发送活跃度消息。发送活跃度事件1306也可在应用层1352检测到节点停机的任何时刻异步地调用并且不依赖于任何先前建立的订阅(经由订阅活跃度)。
由此,在某些实施例中,功能层1351被递归地使用。例如,功能层1351可以向应用层1352指示对指定节点的兴趣(例如,该特定节点是开机还是停机)。应用层1352可以制定对涉及该指定节点的通知的应用专用订阅,然后重复使用功能层1351来将所制定的订阅传递到其它联盟节点中的适当的相应应用层1352实例。例如,如果联盟节点内的应用层1352实现名字空间发布/订阅行为,则功能层1351可以将该订阅路由给管理关于指定节点的通知的发布/订阅管理器,该发布订阅管理器被实现为至少是相关的联盟节点中的应用1352的一部分。因此,功能层1351用于路由功能层1351所引起的被生成的订阅。也可使用类似的递归机制来取消订阅或以其它方式指示对指定节点不再感兴趣。
操作阶段:在完成了路由阶段状态之后,节点转换到操作阶段状态。节点可以保持在操作阶段状态中,直到其停机(例如,重新启动)。在操作阶段状态中,节点可以不时地将更新消息发送给路由伙伴。更新消息(更新请求和更新响应)可包括关于发送节点(例如,对于所有感兴趣的邻近邻域)的邻域节点活跃度信息。该发送的活跃度信息也可包括发送者的活跃度信息。更新消息可以是节点发起的用以周期性地更新其路由伙伴节点的经路由的消息。应用数据可被承载在更新消息上,使得应用数据可以在路由伙伴更新期间传播。消息目的地被设为期望的路由索引处的理想路由伙伴的身份。该消息的消息ID特性被分配一应用序列号,以便使处理该消息的节点能确定最新消息并且该消息被邻近地路由。
接收更新消息的节点可以用更新响应来响应。更新响应携带了与更新消息相同的数据,除了该数据是从响应节点的观点来看的之外。通过交换更新消息和更新响应,节点能够交换路由信息。操作节点可不时地更新路由伙伴。
操作节点也可不时地发送查验消息(例如,图12中的查验消息1209和1211)。查验消息是节点发送的单向消息,用于周期性地通告其存在并在其邻域内散布关于其邻域/路由节点的信息并复制(例如,承载的)应用数据。
原始节点可以向其一个或多个直接前导者和后继者邻域节点发送查验消息。由此,取决于查验分发模式(即,向哪些节点发送查验消息),与原始节点有关的信息被传播给该原始节点的邻域内的环上的其它节点。例如,原始节点可以仅将查验消息发送给其直接前导者和后继者节点,并且查验消息从原始节点的位置(节点ID)在两个方向上沿着环向外传播到该原点的邻域的边缘。或者,原始节点可以将查验消息发送给其邻域中其前导者和后继者两个方向上每第n个节点。
接收查验消息的每一节点检查从邻域范围的观点来看其对原始节点的兴趣。如果不感兴趣,则它丢弃该查验消息。如果感兴趣,则它处理该查验消息,并且如果转发被约束到始发节点的邻域,则根据其指定的查验模式来转发该查验消息。例如,在处理了查验消息之后,如果发送和原始节点在其前导者节点集中,则接收节点可将查验消息转发给至少其后继者节点,或者如果发送和原始节点在其后继者节点集中,则至少转发给其前导者节点。
由此,查验消息的向外传播在该消息到达原始节点周围的邻域节点集的边缘时停止。查验消息的消息ID特性被分配一应用序列号,以便使处理该消息的节点能确定来自原始节点的最新消息并避免重复处理或另外不需要的转发。
返回图12,查验消息1209可以在功能层1251处从邻域节点接收。应用数据1212(例如,名字空间订阅)可以被承载在查验消息1209中。功能层1251可以将包括在查验消息中的任何应用数据通知给应用层1252。类似地,功能层1251可以将包括在同步请求消息中的任何应用数据通知给应用层1252。这两种传递情况都可经由向应用层1252发送包括应用数据1212的邻域状态同步事件1203来实现。
响应于某一功能层事件(例如,接收到查验消息1209),功能层1251可以向应用层1252发送邻域状态请求1204。邻域状态请求1204是在应用层1252上调用的,以获得需要在邻域中任选地被传播的状态。响应于邻域状态请求1204,应用层1252可以向功能层1251返回包括任选的应用数据1207的邻域状态1206。功能层1251可以发送包括任选的应用数据1207的查验消息1211,以传播邻域和路由伙伴节点活跃度信息以及任选的应用层邻域状态。功能层1251也可发送包括任选的应用数据1207的同步响应1208来传播应用状态。
离开协议
当对于节点而言离开联盟是适当的时候,节点可以实现Depart(离开)函数来优雅地从联盟中移除。节点通过向其一个或多个直接邻近前导者和后继者节点,以及可能的同一邻近邻域中的其它节点发送离开消息来离开现有联盟。由此,取决于离开分发模式(即,向哪些节点发送离开消息),与离开节点有关的信息被传播给该离开节点的邻域内的环上的其它节点。离开消息是优雅地离开的节点始发的单向消息,用于向其至少一个邻近邻域内的一个或多个其它节点通知其即将发生的离开。离开节点以类似于查验消息的传播的方式来传播离开消息(例如,在其邻域内)。例如,返回图11,ID为30的节点可将离开消息1119发送到ID为17和40的节点。ID为30的节点然后可从给定邻近环的观点来看将其自身从联盟基础结构中移除。注意,有可能节点将其自身从一个邻近邻域中移除,但不从其可能所属的其它邻域中移除。
由于在ID为30的节点被移除之后ID为17和40的节点(即,前导者和后继者节点)可能是最接近ID30的节点,因此使ID为17和40的节点知晓ID为30的节点的离开。由此,要传递给ID30的将来消息可在ID为17和40的节点处适当地被处理。ID为17和40的节点可以将ID为30的节点的离开传播到环1206上的其它节点。在缺少ID为30的节点的情况下,ID为17和40的节点也可重新计算前导者和后继者指针,这些指针可能指向对方。
离开消息的消息ID特性被分配与查验消息一样的应用序列ID,以使处理该离开消息的节点能够确定由原始节点发送的一系列查验和离开消息中最新的消息。从联盟邻近环的优雅离开是可任选的,但鼓励这样做。然而,联盟被设计成在节点突然离开的情况下自我复原。
活跃度
在联盟的生存期期间,节点可以交换活跃度信息来维护该联盟。活跃度信息可以按活跃度消息首部的形式被包括在联盟内交换的实际上任何消息中。例如,加入消息、加入响应、同步消息、同步响应、更新消息、更新响应、应用专用消息、活跃度消息以及查验消息都可包括活跃度信息首部。当联盟节点发送任何消息或响应时,该节点可包括活跃度信息以供其它节点处理。活跃度信息可被包括在活跃度消息的活跃度信息首部中。
指示节点的活跃度状态的活跃度信息可以使用以下特性来表示:
[节点]:标识其活跃度状态正被表示的节点。节点可以基于进一步包括[实例ID]的[引用特性]来标识。
[引用特性]:在WS寻址规范中指定的元素信息项。WS寻址定义了用于包括在引用特性集中的[实例ID]引用特性。
[实例ID]:标识节点的某一实例的数字。可使用递增自举计数(bootcount)作为节点的实例ID。
[阶段]:传达所标识的节点的阶段。
[阶段状态值]传达所指示的节点实例已知已达到的最高阶段状态(插入、同步、路由、操作)。
[阶段.未知指示]传达当前阶段是已知还是未知的指示符。
[新鲜度]:传达信息的新鲜度并且其值范围从0到MaxFreshness(最大新鲜度)。该值越高,信息就越新鲜,0意味着没有信息,而MaxFreshness是协议定义的常量。
[色彩]:标识节点所属的邻近性等效类。具有相同色彩值的两个节点总是被认为是最邻近的,因为它们都属于由该色彩值所标识的相同的等效类。邻近性等效类的数量可以随着时间随着更多节点加入联盟而增加。
[权重]:提供节点能力度量,且其值范围从0到MaxWeight(最大权重)。它度量联盟节点的所希望的特性,诸如大计算能力、高网络带宽和长正常运行时间。该值越高,则节点越能够使其从伙伴关系的观点来看是更希望的。
在某些环境中,节点的[节点]和[新鲜度]特性或者隐式地或者显式地在诸如[原始]和[发送者]消息首部等较大范围内传达,且因此,再次在活跃度首部中包括上述特性将是重复的。例如,消息的发送者只需传达其当前阶段、色彩和权重信息,因为其ID、实例Id在消息寻址首部中提供且其新鲜度被暗指。
活跃度状态可以基于如下定义的“<”二元关系来至少部分地排序:
“L1<L2”为真,如果
1.“L1.[节点].[名称]==L2.[节点].[名称]”为真,且在测试被执行并按照所列出的次序短路时以下之一为真:
●L1.[节点].[引用特性].[实例ID]<L2.[节点].[引用特性].[实例ID]
●L1.[阶段.未知指示]!=真且L2.[阶段.未知指示]!=真且L1.[阶段状态]<L2.[阶段状态]
●L1.[新鲜度]<L2.[新鲜度]
2.或者,“L1.[色彩]==L2.[色彩]”为真,且在测试被执行并按照所列出的次序短路时以下之一为真:
●L1.[阶段状态]<L2.[阶段状态]
●L1.[权重]<L2.[权重]
此外,当检测到或怀疑指定节点变得不可用(例如,停机)时,可以向指定节点发送活跃度“停机”消息。作为一个示例,暂时返回图6,当应用层(例如,应用层621)检测到另一应用层(例如,应用层623)或主存该另一应用层的节点停机时,进行检测的应用层可以例如根据消息模型和相关的处理模型1200和/或1300通知其它较低层(例如,其它较低层631)该节点可能停机。这一通知可使得诸如功能层1251等其它较低层发送活跃度停机消息。这仅是对活跃度停机消息的生成的促成因素的一个示例。
由于活跃度停机消息被路由且因此被传递给最接近被怀疑停机的那些节点的节点,因此如果指定节点的活跃度停机消息被传递回到该指定节点,则要么该指定节点从未停机,要么该指定节点是一不同的实例(例如,具有不同的实例ID)。另一方面,如果活跃度停机消息被传递到另一节点,则它指示出指定节点的确看似已停机。因此,如果接收活跃度停机消息的节点将其自身视为在指定节点的邻近邻域中,则它可如所描述的那样将用于该指定节点的离开消息发送到该邻近邻域中,并向其应用层指示(例如,使用节点停机1304)指定节点可能停机且接收节点是其替换。用于指定节点的活跃度停机消息可被邻近地路由,其中其目标ID被设为可能停机的节点的ID。
平衡过程
本发明的各实施例被设计成适应大量节点在短时间段内加入和离开联盟。如果在各节点处维护的对数搜索树变得不平衡,则网络中的此类改变可导致路由延迟。即,如果在环的一侧的节点要比另一侧多。为促进最优路由效率,参与联盟的节点在满足特定准则时执行平衡过程。
例如,当以下条件中的任一个为真时,任何节点可执行平衡过程来确保平衡的路由表以获得最优路由效率:
●接收到配置的数量的上述活跃度消息。
●自从接收到最后一条上述活跃度消息以来已经经过了一配置的的时间量。
●邻域在某些新节点已到来或某些现有节点已离开的意义上已改变。
平衡路由表是简单的过程。例如,具有未平衡的路由表的节点可以重新执行加入协议的同步和路由阶段状态。
与1)找出最接近于一数字的路由节点,2)优雅地离开联盟的节点所遵循的离开协议,以及3)接收活跃度消息的节点所遵循的平衡过程相组合的动作RP2b、RP2d和RP4在联盟节点相当快速且大量地加入和离开网络时导致更快速的复原系统。
状态消息
状态消息是由接收者节点向发送者节点发送的非路由的消息,其通知发送者节点先前转发给接收者节点的相关消息的路由成功/故障。图14描绘了形成请求-响应消息交换模式的一部分的消息如何跨环上的节点路由的示例。状态消息可包括标识其路由状态正被报告的原始的相关消息的首部。由此,状态消息可以在节点之间用于指示消息被成功地从一个节点路由到下一节点。例如,从节点1401到节点1406路由请求消息1411包括通过节点1402、1403、1404和1405发送请求1411。对应的级联成功状态消息(状态1417、1418、1419、1420和1421)可分别从节点1406发送到节点1405,从节点1405发送到节点1404,从节点1404发送到节点1403,从节点1403发送到节点1402,以及从节点1402发送到节点1401。响应于请求1411,可从节点1407到节点1401端对端地发送响应1416。响应1416是可任选的,并且可能不在单向消息交换模式中存在。
加入联盟基础结构
本发明的各实施例包括节点加入联盟基础结构。加入联盟基础结构可包括向联盟基础结构发出加入消息的动作。例如,返回图11A,ID为144的节点可以向包括环1106的联盟基础结构发出加入1101。加入联盟基础结构可包括从加入节点接收加入消息的动作。例如,包括环1106的联盟基础结构中的现有节点可接收加入1101。
加入联盟基础结构可包括将加入消息路由到处理节点的动作。处理节点可以是在路由加入消息时其ID数值上比联盟基础结构中的其它活动节点更接近加入节点的ID的节点。例如,加入1101最初可在ID为64的节点处接收,路由到ID为135的节点,并路由到ID为151的节点。
加入联盟基础结构可包括为加入节点计算一个或多个前导者节点和一个或多个后继者节点的动作。例如,ID为151的节点可以为ID为144的节点计算直接前导者节点和直接后继者节点。在环1106内,ID为151的节点可以计算ID为135的节点是直接前导者节点,而ID为151的节点是直接后继者节点。可对其它邻近环进行类似的计算。
加入联盟基础结构可包括为加入节点计算一个或多个路由节点的动作。例如,ID为151的节点可以为ID为144的节点计算路由节点(从ID为151的节点的观点来看)。在环1106内,ID为151的节点可例如计算ID为218和40的节点为ID为144的节点的路由节点。可对其它邻近环进行类似的计算。
加入联盟基础结构可包括向加入节点发送加入响应的动作。加入响应可以在给定其当前的联盟基础结构视图的情况下标识由处理节点所计算的加入节点的所有前导者和后继者邻域和路由伙伴节点。例如,加入响应1102可以至少将ID为135的节点标识为对ID为144的节点的直接前导者节点,可以将ID为151的节点标识为对ID为144的节点的直接后继者节点,并可以标识在ID为151的节点处为ID为144的节点(新加入的节点)计算的任何路由节点(对于ID为144的节点)。
加入联盟基础结构可包括从处理加入消息的联盟节点接收加入响应的动作。例如,ID为144的节点可从ID为151的节点接收加入响应1102。
加入联盟基础结构可包括至少向直接邻近前导者节点和直接邻近后继者节点中的每一个发送同步请求的动作。例如,现在参考图11B,ID为144的节点可以向ID为135和151的节点发送同步请求1103。同步请求1103可以包括ID为144的节点的任何邻域节点的标识和/或ID为144的节点的任何路由伙伴的标识。
ID为135和151的节点可接收同步请求1103。响应于接收同步请求1103,ID为135和151的节点可以从相应的路由表中标识其邻域和路由伙伴节点。ID为135和151的节点可以在同步响应1104中包括其标识的邻域和路由伙伴节点的活跃度信息,并将同步响应1104发送给ID为144的节点。
加入联盟基础结构可包括从邻近前导者和后继者节点中的每一个接收同步响应的动作。例如,ID为144的节点可从ID为135和151的节点接收同步响应1104。同步响应1104可以包括关于环1106或联盟基础结构中的其它环上的一个或多个节点的活跃度信息。同步响应1104还可标识ID为144的节点的任何预期的路由伙伴节点。
加入联盟基础结构可包括计算邻居节点的动作。例如,ID为144的节点可以基于ID为135和151的节点的邻域节点的并集来计算相应的邻域节点。邻域节点可以基于加入响应消息和任何同步响应消息的概括视图来计算。
加入联盟基础结构可包括计算路由节点的动作。例如,ID为144的节点可以从环1106的节点中计算路由节点。路由伙伴可以基于加入响应消息和任何同步响应消息的概括视图来计算。
加入联盟基础结构可包括至少与计算出的路由伙伴交换邻域节点信息的动作。例如,ID为144的节点和ID为218的节点(计算出的路由伙伴)可以交换对应于其各自的邻域节点的状态信息(例如,实例ID、阶段状态等)。这些交换通过新加入的节点如在以上路由阶段状态中描述的那样至少向每一个唯一计算出的路由伙伴发送(路由)更新消息来实现。处理更新消息的节点作为对从新加入的节点接收这些更新消息的反应,将发送相应的更新响应消息。更新响应至少包括其本身的及其邻域节点的活跃度信息。
加入联盟基础结构还可包括发起向至少一个邻域节点的路由表的初始传播的动作。例如,ID为144的节点可以在查验消息中包括计算出的邻域和路由伙伴节点,并将该查验消息发送给ID为174的节点(例如,计算出的邻域节点之一)。ID为174的节点可以接收该查验消息,并用源自ID为144的节点处的活跃度信息来更新相应的路由表。ID为174的节点也可以在第二查验消息中包括其相应的路由表,并将该第二查验消息在某一将来时刻发送给ID为144的节点。ID为144的节点可以接收该第二查验消息,并可用包括在该第二查验消息中的活跃度信息中的节点(即,ID为174的节点的路由表中的节点)来更新其相应的路由表。ID为144的节点可以对环1206中的其它邻域节点重复查验消息的发送。
应当理解,当新加入的节点加入联盟时,该新加入的节点可能未找到现有联盟成员,且因此变为唯一的成员。由此,可能没有为该新加入的节点分配的前导者、后继者或邻居节点。因此,新加入的节点在所有情况下都被映射为最佳路由伙伴。
此外,尽管已相对于单个环(环1106)描述了加入联盟基础结构,但是应当理解,在某些实施例中,固有地加入一个环的节点也可加入一个或多个其它环。例如,暂时返回图10,固有地加入环1051的节点也加入环1043、1031、1022、1011和1001。由此,加入联盟基础结构可被实现来加入多个环。在其它实施例中,可在加入多个环时重复加入联盟基础结构的动作中的部分或所有动作。例如,再次参考图10,当节点既加入环1051又加入环1014(例如别名化)时,加入联盟基础结构的动作可重复。
在任何情况下,可访问加入节点ID,并用其来标识已排序链表中的加入节点,以及该加入节点要参与的相应的分层划分的子列表。从已排序链表和每一划分的子列表中标识接收节点。加入消息被路由到已排序链表和每一划分的子列表中的处理节点(例如,基于ID)。从已排序链表和每一划分的子列表中的处理节点接收加入响应。
在联盟基础结构中维护成员资格
本发明的各实施例包括节点在联盟基础结构中维护成员资格。加入联盟基础结构可包括向联盟基础结构发出加入消息的动作。节点在联盟基础结构中维护成员资格可包括向邻域节点发送第一查验消息的动作。第一查验消息指示发送第一查验消息的当前节点是邻域节点的邻居。第一查验消息还可包括当前节点的路由伙伴和邻域节点的状态。例如,在附图11B中,ID为144的节点可将查验消息发送到ID为151的节点。在接收到第一查验消息之后,可以使ID为151的节点知道ID为144的节点是ID为151的节点的邻居。节点151还可从节点144发现较新的活跃度信息(关于环1206上的其它节点的),作为该动作的副作用。
查验消息可基于例如与查验消息要被发送到其中的邻近环相关联的配置状态来以指定的频率周期性地重复。该频率可以取决于配置状态而变化。例如,对WAN的指定查验频率可以与对LAN的指定频率不同。查验消息也可根据查验分发模式来发送。始发节点的查验分发模式可以指示查验消息要被发送到环上两个方向上的邻域节点。例如,ID为144的节点可以在ID为135的节点的方向和ID为151的节点的方向这两个方向上发送查验。查验分发模式和频率可以变化。例如,按照每一邻近环。
节点在联盟基础结构中维护成员资格可包括从邻域节点接收第二查验消息的动作。该第二查验消息向当前节点指示至少发起第二查验消息的邻域节点是当前节点的邻居。第二查验消息还可包括始发邻域节点的路由伙伴和邻域节点的状态。例如,ID为151的节点可将第二查验消息发送到ID为144的节点。在接收到第二查验消息之后,可以使ID为144的节点知道ID为151的节点是ID为144的节点的邻居。第二查验消息还可包括关于环1106上的其它节点的活跃度信息。由此,一般而言,查验消息可以在邻域内交换,并且可用于维护联盟内节点存在的邻域成员资格(对每一邻近成员资格)和近似的公共邻域视图。
接收到的查验消息可被周期性地重复/转发给向其中发起该查验(由始发节点发送)的邻近邻域内的其它节点。转发的查验消息也可根据查验分发模式来发送。转发节点的查验分发模式可以指示查验消息要被发送到远离始发节点的方向上的邻域节点。例如,ID为151的节点可以将发自ID为144的节点的查验在ID为174的节点的方向上转发。查验转发分发模式可以例如根据每一邻近环而变化。
节点可被配置成以相应的间隔接收查验消息。当未接收到预期的查验消息时,节点可以认为是通信故障,并对应发起该预期的、但至少晚了的查验消息的节点将另一节点的阶段.未知指示设为真。
节点在联盟基础结构中维护成员资格可包括向理想路由节点邻近路由更新请求消息的动作。更新请求消息向接收这一经路由的更新请求的路由节点指示当前节点正作为接收路由节点的路由伙伴参与。更新请求消息还可至少包括当前节点的邻域节点的身份(例如,采用活跃度信息的形式)。例如,ID为144的节点可以将更新消息1116路由到ID为208的节点(从144偏移了64的理想路由伙伴)。由于节点210(先前计算出的路由节点)最接近208,因此它将接收并处理经路由的更新请求。在接收到更新消息1116之后,使ID为210的节点知道(或得到加强)ID为144的节点是ID为210的节点的路由伙伴。
节点在联盟基础结构中维护成员资格可包括从处理(接收)路由节点接收更新响应消息的动作。更新响应向当前节点指示处理路由节点正作为当前节点的路由伙伴来参与。更新响应消息还可至少包括处理路由伙伴的邻域节点的标识符。例如,ID为210的节点可将更新响应1107发送到ID为144的节点。在接收到更新响应1107之后,使ID为144的节点知道ID为210的节点是ID为144的节点的路由伙伴。
节点在联盟基础结构中维护成员资格还可包括适当地更新节点信息以指示当前节点和邻域节点正作为邻居参与,且当前节点和邻域节点正作为路由伙伴参与的动作。例如,ID为144的节点可以更新和ID为151的节点相对应的节点信息来指示ID为144和141的节点正参与(邻近)邻域。类似地,ID为144的节点可以更新和ID为210的节点相对应的节点信息来指示ID为144和210的节点正作为路由伙伴参与。
在某些实施例中,在指定节点X处保存的应用状态使用可靠泛滥协议在其邻域(X)节点之间复制。应用状态中的每一项都有分配的所有者,可以是创建该项的端点。应用状态中的每一项还有由其所有者给予的相关联的时间戳(也称为序列号)。时间戳具有至少三个分量:
○拥有实体的实例ID(例如,无符号整数)。必须至少是单调(>1)递增的。
○标识由所有者生成的特定序列的序列ID(例如,URI)。该分量允许同一拥有者生成多个独立序列。
○标识所标识的应用序列ID内的偏移量的序数(例如,无符号整数)。
项时间戳用于在复制期间检测与相应的项相关联的最新信息,因为项时间戳至少生成具有<实例ID,序列ID,偏移量>三元组的部分排序。与所复制的项相关联的时间戳与本地时间戳(如果有)进行比较以检测最新的那一个。项时间戳也用于支持创建/更新/删除操作的幂等(idempotent)语义。例如,当一节点接收到更新应用状态中的现有项的请求时,该更新仅在与该更新请求相关联的时间戳高于与本地项相关联的时间戳的情况下才被接受。可在项不能被分配单个所有者的情况下利用基于向量时间戳的冲突解决技术。应用状态复制提供了容错并方便了跨邻域节点的负载平衡请求。
作为一个可选行为,(在一段时间之后)未检测到来自(源自)其它伙伴(路由和/或伙伴)节点的预期的更新或查验的节点可以认为阶段状态未知,将阶段.未知指示设为真,并照此向其它第三方节点报告。换言之,可能需要更新和查验的周期性生成。该要求和实际超时值可以是各个邻近环的属性。例如,环对于某些子环(例如,在LAN段中)可具有更限制性的定时要求,并且节点故障检测/报告相对较快。另一方面,环对于其它子环(例如,在因特网上)可具有较不限制的定时要求(或甚至没有定时要求),并且主动节点故障检测/报告相对较长(或不存在)。
发现联盟基础结构中的活跃度
本发明的各实施例包括节点发现联盟基础结构中另一节点的活跃度信息。一般而言,参考图11A和11B,诸如同步1103、同步响应1104、更新1116、更新响应1107等任何消息可包括至少一个活跃度首部。在某些实施例中,活跃度首部包括节点的<节点ID,实例ID,阶段[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,权重值>。在其它实施例中,活跃度首部包括<阶段[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,权重值>。在这些其它实施例中,活跃度首部可被用于扩充已经包括了发送者和原始节点的节点ID和实例ID的寻址首部。由于寻址首部已经包括了节点ID和实例ID,因此该信息可在活跃度首部中省略。
节点发现另一节点的活跃度信息可包括接收表示参与联盟基础结构的节点的状态信息的活跃度首部。活跃度首部至少包括接收到的参与节点ID、接收到的节点的实例ID、接收到的阶段值、以及接收到的新鲜度值。例如,ID为144的节点可从ID为151的节点接收同步响应1104中的第一活跃度首部。该第一活跃度首部可包括ID为174的节点的<参与节点ID,实例ID,阶段值[阶段状态值].[阶段.未知指示],新鲜度值,色彩(邻近性)值,权重值>。阶段状态值(例如,插入、同步、路由、操作)标识在第一新鲜度值的时刻、ID为174的节点的所表达出的阶段。阶段值(例如,阶段状态:[插入,同步,路由,操作]和阶段.未知)标识在第一新鲜度值所指示的时刻、ID为174的节点的所表达出的和/或检测出的阶段信息。
然而,可以因通信延迟而不理会新鲜度值。新鲜度值也可随着时间的流逝而衰减。新鲜度值的衰减曲线可以对不同阶段状态(包括未知)而不同(并且可能不是线性或对称的)。由此,跨不同的节点阶段,新鲜度值的衰减可以是非线性和/或非对称的。
节点发现另一节点的活跃度信息可包括至少访问在当前节点处维护的参与节点的当前实例ID、当前阶段值、以及当前新鲜度值的动作。例如,ID为144的节点可以访问先前接收并存储的ID为174的节点的实例ID、阶段值[阶段状态值].[阶段.未知指示]、以及新鲜度值。
节点发现另一节点的活跃度信息可包括至少分别将接收到的实例ID、接收到的阶段值和接收到的新鲜度值与在当前节点处的当前实例ID、当前阶段值和当前新鲜度值进行比较的动作。例如,ID为144的节点可以将先前接收并存储的ID为174的节点的实例ID、阶段值[阶段状态].[阶段.未知指示]、新鲜度值与在活跃度首部中接收到的实例ID、阶段值[阶段状态].[阶段.未知指示]、新鲜度值进行比较。
ID为144的节点可基于(按序)第一实例ID大于当前存储的ID为174的节点的实例ID、基于第一阶段状态值比当前存储的ID为174的节点的阶段状态值更前、或基于第一新鲜度值是大于当前存储的ID为174的节点的新鲜度值的值,确定ID为174的节点的当前状态信息(例如,从ID为151的节点接收)是陈旧的。ID为144的节点还可确定至少一个阶段.未知指示(或者是当前存储的,或者是在活跃度首部中接收的)指示在检测/发送阶段状态时阶段状态是已知的。
节点发现另一节点的活跃度信息可包括基于所述比较在当前节点处确定参与节点的状态信息是否要被更新的动作。例如,基于ID为174的节点的值的比较,ID为144的节点可确定ID为174的节点的状态信息要被更新。更新ID为174的节点的过时的状态信息可包括用包括在活跃度首部中的值来替换当前存储的值(例如,对于实例ID、阶段状态值、阶段.未知指示或新鲜度值)。例如,ID为144的节点可以更新ID为174的节点的状态信息以指示ID为174的节点已转换到更前面的阶段状态。
在某些实施例中,可以检测到与参与节点的通信可能已丢失。例如,ID为144的节点可以检测到与ID为151的节点的通信已丢失。简要地参考图13,响应于对活跃度事件1301的先前的订阅(对于ID为151的节点的端点),应用层1752可以向功能层1351发送端点停机事件1303(对于ID为151的节点的端点)。在这些实施例中,这些检测到的活跃度状况可以在阶段.未知指示符被设为真且带有上一个已知的阶段状态值的活跃度信息中指示。
节点发现另一节点的活跃度信息还可包括从联盟基础结构中的第二个不同的节点接收包括第二活跃度首部的消息的动作。例如,ID为144的节点可以接收包括第二活跃度首部的状态消息(从ID为103的节点或环1106的某一其它节点)。该第二活跃度首部可包括ID为174的节点的<参与节点ID,第二实例ID,第二阶段值[阶段状态值].[阶段.未知指示],第二新鲜度值,第二色彩(邻近性)值,第二权重值>。第二阶段值(例如,阶段状态:[插入,同步,路由,操作]和阶段.未知指示)标识在第二新鲜度值的时刻、ID为174的节点的所表达出的/检测到的阶段。
或者,在接收第一活跃度首部之后,ID为144的节点可尝试直接与ID为174的节点通信。如果通信成功,则ID为174的节点可以返回在寻址首部中有节点ID和第二实例ID且具有活跃度首部的消息(例如,同步响应),该活跃度首部包括<第二阶段值,第二新鲜度值,第二色彩(邻近性)值,第二权重值>。如果检测到故障,则ID为144的节点生成内部活跃度状态改变(例如,新鲜度=最大,且阶段.未知指示=真)并如同该状态改变是从另一节点接收的那样来处理该状态改变。这一状态改变具有最高新鲜度值。
节点发现另一节点的活跃度信息还可包括分别将第二实例ID、第二阶段值和第二新鲜度值与当前实例ID、当前阶段值和当前新鲜度值进行比较的动作。例如,在从ID为103的节点接收到状态消息之后,ID为144的节点可以基于(按序)第二实例ID大于第一实例ID、第二阶段比第一阶段值更前、或第二新鲜度值大于第一阶段值,来确定ID为151的节点的当前状态信息是陈旧的。
节点发现另一节点的活跃度信息可包括基于所述比较确定参与节点的状态信息是否要被更新。例如,基于ID为174的节点的值的比较,ID为144的节点可确定ID为174的节点的状态信息要被更新。更新ID为174的节点的过时的状态信息可包括用包括在第二活跃度首部中的值来替换当前存储的值(例如,对于实例ID、阶段状态值、阶段.未知指示或新鲜度值)。例如,ID为144的节点可以更新ID为174的节点的状态信息以指示ID为174的节点已转换到更前面的阶段状态。
在某些实施例中,在相等的色彩值的上下文中比较阶段值。如上所述,节点可参与多个邻近环。参与多个邻近环可以作为对更具体的环的参与暗指对更一般的环(沿着公共脊)的参与的结果而发生。例如,返回图10,节点对环532的参与也暗指节点正参与环1022、1011和1001。由此,更具体的环的色彩也代表所有父邻近环。同样如先前所述,对多个邻近环的参与可以在一个环中的节点被别名化到一个或多个其它环(可能沿着不同的脊)时发生。例如,仍参考图10,参与环1032的节点可以被别名化到环1031(或甚至环1041,这暗指了对环1031、1022、1011和1001的参与)。由此,一个环(例如,环1031)的色彩可被视为另一个环(例如,环1032)的对等色彩(或邻近性)。
当一节点以别名化的方式参与多个邻近环时,该节点的阶段值(例如,阶段状态值和/或阶段.未知指示)有可能在不同邻近环之间有所不同。由此,接收关于另一节点的状态信息的节点在确定对该节点和色彩是否要更新当前状态信息之前标识关于状态信息(色彩)的相应的邻近环。例如,ID为144的节点可以在将所接收到的状态信息与当前状态信息进行比较之前标识对于所接收到的和ID为174的节点相对应的状态信息的相应的邻近环。
标识适当的邻近环可以包括将接收到的色彩值与一个或多个当前色彩值进行比较。当接收到的色彩值和当前色彩值相等时,可将诸如当前实例ID、当前阶段值和当前新鲜度值等其它状态信息与诸如接收到的实例ID、接收到的阶段值和接收到的新鲜度值等相应的接收到的状态信息进行比较。另一方面,当接收到的色彩值和当前色彩值不同时,不发生进一步的比较。
色彩值之间的相等可以用多种方式来获得。例如,色彩值之间的相等可以在当前色彩值和接收到的色彩值指示相同的邻近环(例如,环1032)时获得。此外,色彩值之间的相等可以在将更具体的色彩值与相应的父色彩值(例如,沿着同一脊的另一环)比较来获得。例如,将环1032的色彩值与环1011(或环1022或1001)的色彩值进行比较可得到相等。由此,子邻近性是父邻近性,但是更为具体。
由此,一般而言,联盟基础结构中当前可操作的节点可以甚至在与其它节点的通信看似丢失时交换关于这些其它节点的所表达出的和检测到的活跃度状态信息。
自举机制
一般而言,为使节点成为联盟的活动成员(例如,加入),节点必须与已经是它打算加入的叶环的活动成员的至少一个其它节点通信。为帮助确保该初始形式的通信是可用的,联盟可以利用自举(bootstrapping)机制。自举机制可用作当其它类型的通信无法标识叶环的活动成员或者安全约束要求新加入的节点最初与诸如种子节点等一组特殊节点中的至少一个节点通信时的最后手段。即,当其它类型的通信故障时或者由于安全要求,可使用自举机制来标识叶环的活动成员节点。
在某些实施例中,使用种子节点来自举与联盟的通信。种子节点提供了对某些类型的跨邻近(邻近间)通信的公知的入口点。种子节点因基础结构故障/恢复和一般的动态性而帮助复原环分区。每一个环可具有至少一个可操作种子节点以便为联盟提供基本自举特性。
对等种子节点可以在它们之中通信以便为一近邻性维护一环结构(例如,双向链表),该环结构至少由对于该邻近性的所有活动种子节点构成。可使用专用种子节点同步协议来向每一种子节点至少提供关于所有其它种子节点的存在(活动)状态的总知识。活动种子节点是它所归属的邻近性叶环以及该叶环的所有其它祖先环的成员节点。由此,种子节点可以表示例如从种子节点的叶环到根环的这些邻近环的整个脊。因此,种子节点可以作为这些邻近环的每一个中的高度可靠且公知的入口节点来运作。结果,关于种子节点的存在状态可用于联盟内的各种形式的通信(例如邻近间通信)。因此,种子节点可以提供多个特殊的特性,例如担当对于加入节点的公知的“加入点”,担当安全环管理机构,协助复原基础结构分区,以及担当对于其每一近邻的稳定“入口节点”。
为提供存在数据,种子节点的到来和有序的离开可以被注册为其每一近邻中的会合点处的稳定入口点。例如,注册消息可被路由到其目的地ID是串“Proximity:/”的SHA-1散列的固定URI。尽管在一个实施例中担当稳定入口点的种子节点以此方式来注册它们自己,但是存在其中所选的非种子节点也可用同一方式并用此处对种子节点描述的相同或相似的协议来注册其自身的其它实施例。当稳定入口节点(诸如种子节点)注册时,该稳定入口节点可以指示它作为成员的每一个环。由此,在由该固定URI标识的会合点处维护的信息本质上是稳定入口节点及其相应的环成员资格的列表。因此,任何节点可以参考由该固定URI标识的会合点来获得可用稳定入口节点及其环成员资格的列表。
在一个实施例中,稳定入口节点直接注册这些到达和离开事件。在另一实施例中,稳定入口节点直接在其直接邻近环内的会合点处注册这些事件,并且该会合点透明地帮助(直接地或间接地)更新注册/取消注册稳定入口节点所属的每一剩余的邻近环中的所有其它适当的会合点。联盟的应用状态定序和传播特性可用于维护并传播该稳定入口节点注册信息。例如,可使用可靠泛滥协议来在节点的邻域节点之间复制保存的应用状态。
稳定入口节点的存在数据向着根环的提升允许联盟中的其它节点在每一近邻中查找至少一个入口节点。入口节点查找可通过将节点查找消息向着执行查找的节点的叶环和期望的邻近环的最低公共祖先环(“LCAR”)中的上述确定的会合点路由来促进。例如,参考图10,环1041中的节点可能期望与环1033中的节点通信。然而,环1041中的节点可能没有环1033中的任何节点的直接知识。由此,环1041中的节点可以向环1022(环1041和环1033的LCAR环)发送节点查找消息。环1022中处理入口节点存在信息(例如,由于源自该入口节点的注册消息而导致存在于系统中)的会合点节点可返回具有至少关于环1033中的已注册的稳定入口节点的联系信息的查找响应消息。
在某些实施例中,稳定入口节点是被特别地配置为用于维护各个近邻的存在数据的稳定入口节点的种子节点。在其它实施例中,其它类型的节点也可担当维护关于各个近邻的存在数据的稳定入口节点,并且还可被配置成执行其它操作。例如,某些其它类型的节点可被配置(例如,由管理员)为高度可用,且因此适用作稳定入口节点(即,要被如上所述地注册)。然而,其它类型的节点可能不包括附加种子节点功能(例如,可能不被信任为安全环管理机构)。在某些实施例中,维护关于其直接近邻的入口节点存在状态的会合点可以在一个或多个祖先环中将其自身注册为稳定入口节点。
节点监视
图15A示出了便于一个节点监视另一个节点的示例环架构1500。如图所示,环架构至少包括环1501(以及任意数量的其他较高和/或较低层环(未示出))。环1501可类似于图8的环806来配置。然而,监视可在任何节点环上发生,包括图9、10、11A和11B中的环的任一个。图15A描绘了对象节点1502(具有ID=83)和监视节点1503(具有ID=2)的扩展视图。在所描绘的实施例中,监视节点1503要监视对象节点1502。然而,环1501上的任何节点可被配置成监视环1501上的任何其他节点。
本发明的各实施例包括一个节点监视另一个节点。一个节点监视另一个节点可包括对象节点生成对象侧生存时间持续时间值用于在监视对象节点时使用。例如,对象节点1502可建立生存时间(TTL)持续时间值1513。TTL持续时间值1513指示对象节点1502能将与监视节点1503的监视关系认为是活动的持续时间。
一个节点监视另一个节点可包括对象节点向监视节点发送建立请求的动作,该建立请求指示出对象节点请求监视节点来监视对象节点,该建立请求包括对象侧生存时间持续时间值。例如,对象节点1502可向监视节点1503发送包括TTL持续时间值1513的建立请求1522。
一个节点监视另一个节点可包括对象节点基于对象侧生存时间持续时间值和发送建立请求的时间来建立现有对象侧死亡期(time-to-die)时间的动作,其中在从监视节点接收建立授权之前、对象节点时钟到达现有的对象侧死亡期时间是对象节点必须转换到故障状态的指示。例如,对象节点1502可基于TTL持续时间值1513和向监视节点1503发送建立请求1522的时间来建立对象侧死亡期时间1517。对象侧死亡期时间1517可以是相对于对象节点1502的时间。如果在从监视节点1503接收到建立授权之前、对象节点1502的时钟到达对象侧死亡期时间1517,则对象节点1502要转换到故障状态。在某些实施例中,当在从监视节点1503接收到建立授权之前、对象节点1502的时钟到达对象侧死亡期时间1517,则导致故障状态。在其他实施例中,发生其他活动以使对象节点1502转换到故障状态。
一个节点监视另一个节点可包括监视节点从对象节点接收建立请求的动作,该建立请求指示出对象节点请求监视节点来监视对象节点,该建立请求至少包括对象侧生存时间持续时间值,该对象侧生存时间持续时间值用于确定对象节点处的对象侧死亡期时间,其中在从监视节点接收到建立授权之前、对象节点时钟到达对象侧死亡期时间是对象节点必须转换到故障状态的指示。例如,监视节点1503可从对象节点1502接收包括TTL持续时间值1513的建立请求1522。TTL持续时间值1513在对象节点1502处用于建立对象侧死亡期时间1517。
一个节点监视另一个节点可包括监视节点从对象侧生存时间持续时间值中导出监视侧生存时间持续时间值的动作。例如,监视节点1502可使用TTL持续时间值1513来导出TTL持续时间值1519。在某些实施例中,监视节点1503复制TTL持续时间值1513以导出TTL持续时间值1519。在这些实施例中,TTL持续时间值1513和TTL持续时间值1519是相等的。在其他实施例中,监视节点1503修改TTL持续时间值1513以导出TTL持续时间值1519。在这些其他实施例中,TTL持续时间值1513和TTL持续时间值1519是不同的。例如,监视节点1503可以增加TTL持续时间值1513的值以导出TTL持续时间值1519,使得TTL持续时间值1519大于TTL持续时间值1513。
一个节点监视另一个节点可包括监视节点基于监视侧生存时间持续时间值和接收到建立请求的时间来建立监视侧死亡期时间的动作,在从对象节点接收到续订(renew)请求之前、监视节点时钟到达监视侧死亡期时间指示出被怀疑的对象节点故障。例如,监视节点1503基于TTL持续时间值1519和接收到建立请求1522的时间来建立监视侧死亡期时间1514。监视侧死亡期时间1514可以是相对于监视节点1503的时间。如果在从对象节点1502接收到续订请求之前、监视节点1503的时钟到达监视侧死亡期时间1514,则监视节点1503怀疑对象节点1502发生故障。
一个节点监视另一个节点可包括监视节点向对象节点发送建立授权以向对象节点指示监视节点已同意监视对象节点的动作。例如,监视节点1503可向对象节点1502发送建立授权1523。一个节点监视另一个节点可包括对象节点从监视节点接收建立授权的动作,该建立授权指示监视节点监视对象节点。例如,对象节点1502可从监视节点1503接收建立授权1523。一般而言,建立授权1523指示监视节点1503已同意监视对象节点1502。在某些实施例中,建立授权消息可包括监视侧TTL持续时间值。例如,可能的是建立授权1523包括TTL持续时间值1519。
或者,监视节点可向对象节点发送建立拒绝以向对象节点指示监视节点不同意监视对象节点。例如,响应于接收到建立请求1522,监视节点1503可替换地(如由虚线所指示的)向对象节点1502发送建立拒绝1531。对象节点可接收从监视节点发送的建立拒绝。例如,对象节点1502可从监视节点1503接收建立拒绝1531。建立拒绝1531一般向对象节点1502指示监视节点1503不同意监视对象节点1502。
有时(并且掺杂在环架构1500内的其他操作的执行之间),对象节点可续订所建立的与监视节点的监视协定。一般而言,对象节点离开在有效期内的(当前监视侧时间到死亡时间)现有协定,直到接收到新的授权。然而,对象节点可以生成新的TTL持续时间值并导出更新的死亡期时间将是什么。对象节点然后向监视节点发送该新的TTL持续时间值。监视节点接收该新的TTL持续时间值。当适当时,监视节点对续订请求授权,并向对象发回续订授权。对象节点接收该续订授权。响应于接收到续订授权,对象使用经更新的死亡期时间作为新的当前死亡期时间来实现续订的协定。
如此,一个节点监视另一个节点可包括对象节点在对象节点时钟达到对象侧死亡期时间之前向监视节点发送续订请求的动作。例如,对象节点1502可在对象节点1502的时钟到达对象侧死亡期时间1517之前向监视节点1503发送包括TTL持续时间值1513的续订请求1515。在某些实施例中,续订请求1515不包括对象侧TTL持续时间值。在这些实施例中,可推断对TTL持续时间值1513的继续使用。在其他实施例中,TTL持续时间值1513被明确地包括在续订请求1515中。在又一些实施例中,在续订请求1515中包括不同的对象侧TTL持续时间值。响应于对象节点1502的配置改变和/或响应于环1501中别处的配置改变(例如,改变的网络条件),对象节点1502可生成并使用新的对象侧TTL持续时间值。
节点1502还可计算如果接收到响应于续订请求1515的相应的续订授权,则经更新的对象侧死亡期时间将是什么。该计算可以至少基于发送续订请求1515的时间以及与续订请求1515有关或相关联的对象侧TTL持续时间值。
一个节点监视另一个节点可包括监视节点在发送了建立授权消息之后并在监视节点时钟到达监视侧死亡期时间之前从对象节点接收续订请求的动作,该续订请求指示对象节点未发生故障。例如,监视节点1503可在发送建立授权1523之后并在监视节点1503的时钟到达监视侧死亡期时间1514之前接收续订请求1515。对续订请求1515的接收可向监视节点1503指示对象节点1502未发生故障。
一个节点监视另一个节点可还可包括监视节点向对象节点授权续订请求的动作。例如,监视节点1503可对续订请求1515授权。
一个节点监视另一个节点可包括监视节点响应于并至少基于接收到续订请求的时间来建立经更新的监视侧死亡期时间的动作,在从对象节点接收到另一续订请求之前、监视节点时钟到达经更新的监视侧死亡期时间指示出被怀疑的对象节点故障。例如,监视节点1503可以响应于并基于接收到续订请求1515的时间以及所暗指或指示出的与续订请求1515有关或可能包含在续订请求1515中的监视TTL持续时间值来建立经更新的监视侧死亡期时间1521。经更新的监视侧死亡期时间1521可以是相对于监视节点1503的时间。经更新的监视侧死亡期时间1521可以是在监视侧死亡期时间1514之后。然而,并不要求监视侧死亡期时间1514出现在建立经更新的监视侧死亡期时间1521之前。由此,有可能经更新的监视侧死亡期时间1521实际上在监视侧死亡期时间1514之前(或与其相同)。如果在从对象节点1502接收到另一续订请求之前、监视节点1503的时钟到达经更新的监视侧死亡期时间1521,则监视节点1503怀疑对象节点1502发生故障。
如果在续订请求1515中没有包括对象侧TTL持续时间值(且因此推断TTL持续时间值1513),或者如果续订请求明确地包括TTL持续时间值1513,则监视节点1503也可使用TTL持续时间值1519来建立经更新的监视侧死亡期时间1521。另一方面,如果在续订请求1515中明确包括除TTL持续时间值1513之外的对象侧TTL持续时间值,则监视节点1503可使用其他明确地被包括的对象侧TTL持续时间值来导出新的监视侧TTL持续时间值。从该新的监视侧TTL持续时间值,监视节点1503然后可建立经更新的监视侧死亡期时间1521。
一个节点监视另一个节点可包括监视节点向对象节点发送续订授权以向对象节点指示监视节点已同意继续监视对象节点的动作。例如,监视节点1503可向对象节点1502发送续订授权1527。一个节点监视另一个节点可包括对象节点在发送了相应的续订请求之后并在对象节点时钟到达对象侧死亡期时间之前从监视节点接收续订授权的动作,该续订授权消息指示出监视节点继续监视对象节点。例如,对象节点1502可在发送了续订请求1515之后并在对象节点1502处的时钟到达对象侧死亡期时间1517之前从监视节点1503接收续订授权1527。一般而言,续订授权1527指示出监视节点1503同意继续监视对象节点1502。
或者,监视节点可向对象节点发送续订拒绝以向对象节点指示出监视节点不再同意监视对象节点。例如,响应于接收到续订请求1515,监视节点1503可替换地(如由虚线所指示的)向对象节点1502发送续订拒绝1533。对象节点可接收从监视节点发送的续订拒绝。例如,对象节点1502可从监视节点1503接收续订拒绝1533。续订拒绝1531一般向对象节点1502指示监视节点1503不再同意监视对象节点1502。
一个节点监视另一个节点可包括对象节点响应于接收到续订授权转换到先前计算的经更新的对象侧死亡期时间的动作,其中在从监视节点接收到另一续订授权之前、对象节点时钟到达经更新的对象侧死亡期时间是对象节点必须转换到故障状态的指示。例如,对象节点1502可在接收到相应的续订授权消息时转换到经更新的对象侧死亡期时间1552。经更新的对象侧死亡期时间1552可能已在续订请求1515被发送到监视节点1503的时间附近被计算出。经更新的对象侧死亡期时间1552可能已基于发送相应的续订请求1515的时间并基于与续订请求1515有关或相关联的TTL持续时间而被计算出。经更新的对象侧死亡期时间1552可以是相对于对象节点1502的时间(例如,在对象侧死亡期时间1517之后、之前或与其相等)。
如果TTL值1513仍是适当的TTL值,则对象节点1502也可使用TTL持续时间值1513来建立经更新的对象侧死亡期时间1552。如果已经生成了另一TTL持续时间值,则对象节点1502也可使用其他所生成的TTL持续时间值来建立经更新的对象侧死亡期时间1552。
在建立当前对象侧死亡期时间(或者是1517,或者是1552)之后,可能的是在从监视节点1503接收到另一续订授权之前、对象节点1502处的时钟到达当前对象侧死亡期时间。这可因对象节点1502和监视节点1503之间的通信出错引起。例如,对象节点1502可在接收到续订授权1527之后并在对象节点1502的时钟到达经更新的对象侧死亡期时间1552之前发送另一续订请求。然而,由于通信故障,其他续订请求没有到达监视节点1503。或者,其他续订请求可在监视节点1503处被接收,但是来自监视节点1503的相应的续订授权由于通信出错而没有到达对象节点1502。在任一情况下,在接收到响应于其他续订请求的相应续订授权之前,对象节点1502处的时钟可到达当前对象侧死亡期时间。
或者,对象节点1502可能不正常运转,使得在对象节点1502处的时钟到达经更新的对象侧死亡期时间1552之前,对象节点1502被阻止向监视节点1503发送另一续订请求。
然而,不论是否发送了续订请求,如果在对象节点1502处的时钟到达当前对象侧死亡期时间1552之前未接收到续订授权,对象节点1502就转换到故障状态。
回头参看监视节点1503,可能的是在从对象节点1502接收到另一续订请求之前,监视节点1503处的时钟到达监视侧死亡期时间(或者是1514,或者是1521)(这要么是由于对象节点1502处的不正常运转,要么是由于环1501中的通信出错)。结果,监视节点1503怀疑对象节点1502发生故障。监视节点1503可转换到一超时状态,指示出检测到另一节点处的被怀疑的故障。
双向节点监视
在其他实施例中,一对节点可彼此监视。由此,第一节点可监视第二节点,而第二节点也可监视第一节点。例如,每一节点可实现对象节点侧和监视节点侧的关于其他节点的节点监视。图15B示出了便于两个节点彼此监视的示例环架构1500。
节点1571可生成用于监视节点1571的TTL持续时间值1529。节点1571可以向节点1572发送包括TTL持续时间值1529的建立请求1562。节点1571还可基于TTL持续时间值1529来建立对象侧死亡期时间1573。节点1572可以从节点1571接收包括TTL持续时间值1529的建立请求1562。节点1572可以从TTL持续时间值1529中导出TTL持续时间值1549。节点1572可基于TTL持续时间值1549来建立监视侧死亡期时间1539。节点1572可以向节点1571发送建立授权1574。节点1571可以从节点1572接收建立授权1574。
并行地,节点1572可生成用于监视节点1572的TTL持续时间值1575。节点1572可以向节点1571发送包括TTL持续时间值1575的建立请求1526。节点1572还可基于TTL持续时间值1575来建立对象侧死亡期时间1535。节点1571可以从节点1572接收包括TTL持续时间值1575的建立请求1526。节点1571可以从TTL持续时间值1533中导出TTL持续时间值1553。节点1571可基于TTL持续时间值1553来建立监视侧死亡期时间1537。节点1571可以向节点1572发送授权消息1576。节点1572可以从节点1571接收授权消息1576。
或者,节点1571和1572的任一个拒绝来自另一节点的建立请求。例如,节点1571可以拒绝建立请求1562。同样,节点1572可以拒绝建立请求1526。当任一节点拒绝建立请求时,它可向另一节点发送建立拒绝(例如,类似于建立拒绝1531)。这向另一节点指示没有监视协定已被建立。
节点1571和1572然后可以如先前所述地交换续订请求和续订授权(以及类似于续订拒绝1533的续订拒绝)。因此,节点1571和1572的每一个都既是对象节点又是监视节点。基于图15B所描绘的TTL持续时间值和死亡期时间,在建立监视关系期间和/或之后可发生各种事件。
如果在从节点1572接收到续订授权之前、节点1571处的时钟到达对象侧死亡期时间1573,则节点1571转换到故障状态。如果在从节点1571接收到续订请求之前、节点1572处的时钟到达监视侧死亡期时间1539,则节点1572怀疑节点1571发生故障。
如果在从节点1571接收到续订授权之前、节点1572处的时钟到达对象侧死亡期时间1535,则节点1572转换到故障状态。如果在从节点1572接收到续订请求之前、节点1571处的时钟到达监视侧死亡期时间1537,则节点1571怀疑节点1572发生故障。
节点故障的仲裁
由于各种不同类型的通信出错和节点不正常运转,存在一对节点中的每一节点将怀疑另一节点发生故障的某种可能性。此外,每一节点可觉得其正在正确工作。
在某些环架构中,资源的各部分被配置成使得在给定时刻单个节点控制资源。此外,对某些资源的所需的可用性也可能很高,使得需要节点进行实际上恒定的控制。由此,当一节点发生故障时,对各种资源的控制可能需要被转移到另一节点。因此,当一对节点中的一个节点怀疑另一节点发生故障时,可使用仲裁机制来至少确定哪一节点已经或将要发生故障。
例如,当一对节点中的每一节点怀疑另一节点发生故障时,每一节点可转换到超时状态并向仲裁机构报告其怀疑。当在超时状态中时,可挂起每一节点处的某些其他处理,直到接收到仲裁结果。仲裁机构可以回过来向节点报告,指示其是否要保持活动。例如,仲裁机构可以向要保持活动的报告节点发送认可消息。仲裁机构可以向要转换到故障状态的报告节点发送否认消息。接收到认可消息的节点可保持活动。未接收到认可消息(例如,由于网络条件)或接收到否认消息的节点转换到故障状态。
图15C示出了在互相监视的节点各自能够报告另一节点被怀疑发生故障时便于仲裁的示例环架构1500。图15C描绘了节点1581(具有ID=98)、监视节点1582(具有ID=64)以及仲裁者1582的扩展视图。
在某些实施例中,仲裁者1583也是环1501的成员。在其他实施例中,仲裁者1583是环1501的祖先环的成员,但不是环1501的成员。在另外一些实施例中,仲裁者1583在包括环1501的环分层结构的外部。例如,仲裁者1583可被包括在单独的仲裁联盟节点环中。仲裁联盟中的节点可被配置为用于环1501及其祖先的节点的仲裁者。
在某些实施例中,仲裁者1583被节点1571和节点1582相互同意以便对节点1581和1582进行仲裁。在其他实施例中,仲裁者1583由另一实体分配来对节点1581和1582进行仲裁。该另一实体可以是包括环1501的环分层结构内部的节点(例如,种子节点),或是例如人类管理员。例如,该另一节点可以是环1501的成员,或是环1501的祖先环的成员但不是环1501的成员。或者,该另一实体可以在包括环1501的环分层结构的外部。例如,该另一实体可以是作为单独的仲裁联盟环的成员的节点。
仲裁者1583可具有关于包括环1501的环分层结构的变化的知识。例如,仲裁者1583可具有关于包括环1501的环分层结构的全局知识。或者,仲裁者1583可以具有关于包括在包括环1501的环分层结构中的环的某一子集的知识。在其他实施例中,仲裁者1583具有关于包括(且可能仅包括)节点1581和1582的环1501中的节点子集的知识。
仲裁者1583可被配置成对包括但不限于节点1581和1582在内的任意数量的节点对进行仲裁。在某些实施例中,仲裁机制在接收到被怀疑的节点故障的报告之前没有关于它要仲裁的节点的知识。由此,尽管一对节点已同意使用仲裁者1583或仲裁者1583已被分配来对一对节点进行仲裁,但仲裁者1583在接收到关于该对节点中的一节点的被怀疑的节点故障的报告之前仍可能不了解任何协定或分配。
仲裁可包括在提出冲突故障报告的节点之间进行仲裁。例如,当第一节点正在监视第二节点且第二节点也正在监视第一节点时,可能的是每一节点都报告怀疑另一节点发生故障。被怀疑的故障可使用实际上任何故障检测机制来检测,包括本文中先前描述的那些机制。
故障节点列表1547可以包括已被报告为被怀疑的故障节点的节点列表。节点可以向仲裁者1583将其他节点报告为被怀疑的故障节点,且在适当时,仲裁者1583可以在故障节点列表1547中包括所报告的节点。仲裁者1583在适当的时间段之后(例如,在继续冲突的可能性已经不太可能的将来时刻)可以从故障节点列表1547中移除故障节点。例如,故障节点列表1547中的条目可在其被插入到故障节点列表1547之后的恢复时间间隔1542被移除。恢复时间间隔1542可以足够长以确保被告知发生故障的节点的确发生故障。
从而,本发明的各实施例可包括在被怀疑的节点故障的冲突报告之间进行仲裁。在被怀疑的节点故障的冲突报告之间进行仲裁可包括第一节点向仲裁机构发送关于第二节点被怀疑发生故障的报告的动作。例如,节点1581可以向仲裁者1583发送报告1534。在被怀疑的节点故障的冲突报告之间进行仲裁可包括仲裁者从第一节点接收关于第二节点被怀疑发生故障的报告的动作。例如,仲裁者1583可以从节点1581接收报告1534。
在被怀疑的节点故障的冲突报告之间进行仲裁包括仲裁者确定在从第一节点接收报告之前、在指定的恢复时间间隔内没有其他节点怀疑第一节点发生故障的动作。例如,仲裁者1583可以确定在恢复时间间隔1542内没有其他节点怀疑节点1581发生故障(此后,仲裁者1583无论如何将从故障节点列表1547中移除节点1581)。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括仲裁者在列表中记录第二节点处于故障状态中的动作。例如,仲裁者1583可以在故障节点列表1547中记录节点1582(ID=64)处于故障状态。
在被怀疑的节点故障的冲突报告之间进行仲裁包括仲裁者在最大响应时间间隔内向第一节点发送认可消息的动作,该认可消息包括指示一时间段的故障时间值,在该时间段之后第二节点保证转换到故障状态。例如,仲裁者1583可在接收报告1534的最大响应时间间隔1543内向节点1581发送认可消息1584。认可消息1584包括指示节点1582保证转换到故障状态的时间的故障时间间隔1536。一般而言,最大响应时间间隔表示一时间点,在该时间点之后请求者(例如,节点1581或1582)假设仲裁机构(仲裁者1583)不会回答对仲裁的请求(例如,报告1534或1538)。当在发送了对仲裁的请求之后在请求者处最大响应时间间隔到期时,请求者执行类似于(可能相同于)在接收到明确的否认消息的情况下将执行的那些操作的操作。
在被怀疑的节点故障的冲突报告之间进行仲裁包括第一节点在最大响应时间间隔内从仲裁机构接受认可消息的动作,该认可消息包括指示一时间段的时间值,在该时间段之后第二节点保证转换到故障状态。例如,节点1581可从仲裁者1583接收包括故障时间间隔1536的认可消息1584。故障时间间隔1536指示节点1582保证已转换到故障状态的时间。由此,在故障时间间隔1536到期之后,节点1581可以试图要求对先前由节点1582控制的一个或多个环资源的控制。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括在所述时间段到期之后第一节点要求对先前由第二节点控制的一个或多个环资源的控制的动作。例如,节点1581可以在故障时间间隔1536到期之后要求对先前由节点1582控制的环1501内的一个或多个环资源的控制。
所要求的环资源可以取决于节点1582在转换到故障状态之前所控制的环资源而变化。例如,节点1581可以承担节点1582的消息路由责任(例如,接收定向到环1501上的标识符范围的消息的责任)、节点1582的任何种子节点责任、节点1582的任何仲裁责任,等等。
在第一节点报告第二节点的某一时刻或在这之后,第二节点也可怀疑第一节点发生故障。例如,可能的是节点1582也怀疑节点1581发生故障。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括第二节点向仲裁机构发送关于第一节点被怀疑发生故障的报告的动作。例如,节点1582可以向仲裁者1583发送节点1581被怀疑发生故障的报告1538。在被怀疑的节点故障的冲突报告之间进行仲裁可包括仲裁者从第二节点接收第一节点被怀疑发生故障的报告的动作,来自第二节点的报告是在从第一节点接收报告之后的指定恢复时间间隔内被接收的。例如,仲裁者1583可以在接收报告1534的恢复时间间隔1542内从节点1582接收节点1581被怀疑发生故障的报告1538。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括仲裁者查阅列表以确定第二节点要转换到故障状态的动作。例如,仲裁者1583可以查阅故障节点列表1547以确定节点1582(ID=64)要转换到故障状态。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括向第二节点发送否认消息以使得第二节点转换到故障状态的动作。例如,仲裁者1583可以向节点1582发送否认消息1585以使得节点1582转换到故障状态。在被怀疑的节点故障的冲突报告之间进行仲裁可包括第二节点从仲裁机构接收否认消息的动作。例如,节点1582可从仲裁者1583接收否认消息1585。
在被怀疑的节点故障的冲突报告之间进行仲裁可包括第二节点转换到故障状态的动作。例如,节点1582可响应于接收到否认消息1585而转换到故障状态。在发生故障之后,节点1582随后可试图重新加入环1501。
根据高速缓存的协定的路由
在某些实施例中,消息是根据高速缓存的路由协定来路由的。例如,环的相邻节点可同意对相邻节点之间未占用标识符范围的责任的划分。标识符可由于任意数量的原因而未被占用。例如,标识符可由于该标识符未被分配(即,未被分配给节点的标识符)而未被占用。对于已分配的标识符(即,已分配给节点的标识符),标识符可由于相应节点已被故意关闭或该节点出于某一原因(例如由于通信或节点故障)而不可达到,而未被占用。
在准许节点接受关于要成为相邻节点的责任的任一未占用标识符的消息并传送该消息之前,可建立并高速缓存节点之间的路由协定。对高速缓存的路由协定的引用显著地减少了(可能的)相邻节点之间本来会发生以确定哪一节点负责特定的未占用标识符的任何通信。
高速缓存的路由协定可以按任意方式、根据可配置规则、或根据固定方法来划分未占用标识符范围。在某些实施例中,环上的相邻节点之间的标识符范围基本上对半划分。这减小了未占用标识符远离负责该未占用标识符的节点的可能性。
当在相邻节点之间存在偶数个未占用标识符时,相邻节点之间的中点在未占用标识符之间。由此,对于未占用标识符的责任可在相邻节点之间的该中点处划分。因此,每一相邻节点可被分配对于相等数量的未占用标识符的责任。
另一方面,当相邻节点之间存在奇数个未占用标识符时,相邻节点之间的中点在一未占用标识符上。由此,对这些未占用标识符的责任可在位于该中点上的未占用标识符的一侧或另一侧划分。因此,一个相邻节点可被分配对比另一相邻节点多一个未占用标识符的责任。
例如,现在参考图16A,图16A示出了便于根据节点之间的高速缓存的双向协定来路由消息的示例环架构1600。如图所示,包括(但不限于)节点1601、1602、1603、1661、1662和1663的各节点(示为环1650上的方块)被包括在环1650上。每一节点具有指示其在环1650上的位置的相应ID(在括号内示出)。例如,节点1601具有ID=64,而节点1602具有ID=30。
在所描绘的节点之间有未占用标识符的各范围。例如,未占用标识符范围1611表示节点1602和1601之间未占用标识符31到63。
如所描绘的,节点1601和1602已经建立并高速缓存了双向协定1623。例如,通过先前的通信,节点1601和1602可确定在ID=64和ID=30之间当前未散布有任何其他节点。由此,节点1601和1602可进一步确定它们在环1650上彼此相邻。因此,节点1601和1602可划分对于未占用标识符范围1611(即,未占用标识符31到63)的责任,使得节点1602负责未占用标识符范围1611的一部分,而节点1601负责未占用标识符范围1611的其余部分。每一节点也负责其分配的ID。即,节点1602负责ID=30,而节点1601负责ID=64。
因此,如由责任边界1613(在未占用标识符47和未占用标识符48之间)所描绘的,节点1602(ID=30)负责其自身以及未占用标识符31到47,而节点1601(ID=64)负责其自身以及未占用标识符48到63。尽管节点1601和1602之间的中点在未占用标识符47上,但节点1602被分配对未占用标识符47的责任,使得每一未占用标识符是单个节点的责任。由此,如先前所述,当责任边界落在未占用标识符上时,相邻节点之一可被分配对该未占用标识符的唯一责任。
本发明的各实施例包括根据高速缓存的双向协定路由消息。根据高速缓存的双向协定路由消息可包括接收节点接收带有指示出节点环上的目的地的目的地标识符的消息的动作,该目的地标识符位于接收节点和直接邻居节点之一之间。例如,节点1601可接收指示要传送到ID=55的消息1651。或者,节点1601可接收指示要传送到ID=39的消息1652。消息1651和1652可从环1650中的另一节点接收(环内通信)、从环架构1600的另一环中的节点接收(环间通信)、或通过非环通信来接收。
根据高速缓存的双向协定路由消息可包括接收节点查阅接收节点和直接邻居节点之间的高速缓存的双向协定,以确定要接收该消息的下一合适的节点的动作。该双向协定至少暗示接收节点和直接邻居节点之间对于标识符空间的责任的划分。例如,节点1601可查阅高速缓存的双向协定1623来确定要处理消息1651的下一合适的节点。由于高速缓存的双向协定1623指示节点1601(ID=64)负责未占用标识符55,因此节点1601确定它是处理消息1651的合适节点。同样,节点1601可查阅高速缓存的双向协定1623来确定要处理消息1652的下一合适的节点。由于高速缓存的双向协定1623指示节点1602(ID=30)负责未占用标识符39,因此节点1601确定节点1602是处理消息1652的下一合适的节点。
根据高速缓存的双向协定路由消息可包括基于对下一合适的节点的确定将消息发送到下一合适的组件的动作。例如,节点1601可将消息1651提供给其对应于未占用标识符55的资源处理程序实例,因为高速缓存的双向协定1623指示节点1601负责未占用标识符55。或者,节点1601可将消息1652提供给节点1602,因为高速缓存的双向协定1623指示节点1602负责未占用标识符39。随后,节点1602可将消息1652提供给其对应于未占用标识符39的资源处理程序实例。
当一标识符未被包括在高速缓存的双向协定中时,节点可查阅路由表(例如,如图8所描绘的)以便向着目的地前进。例如,节点1601可向节点1661(ID=200)发送指示要传送到ID=203的消息1653。节点1661然后可查阅与其相邻节点的任何高速缓存的双向协定以确定负责标识符203的节点。
在某些实施例中,从给定节点的观点来看,多个双向协定可本质上表示给定节点、给定节点的直接前导者节点、和给定节点的直接后继者节点之间的三向协定。图16B示出了便于根据多个高速缓存的双向协定来路由消息的示例环架构1600。
如先前所描述的,节点1601和1602可建立高速缓存的双向协定1623。类似地,节点1601和1603可建立高速缓存的双向协定1624,以划分对未占用标识符范围1612(即,未占用标识符65到101)的责任。由此,通过先前的通信,节点1601和1603可确定在ID=65和ID=101之间当前未散布有任何其他节点。由此,节点1601和1603可进一步确定它们在环1650上彼此相邻。因此,节点1601和1603可划分未占用标识符范围1612,使得节点1602负责未占用标识符范围1612的一部分,而节点1601负责未占用标识符范围1612的其余部分。因此,如在双向协定1624内所描绘的,节点1601(ID=64)负责其自身以及未占用标识符65到82,而节点1602(ID=101)负责其自身以及未占用标识符范围83到100。
从节点1601的观点来看,高速缓存的双向协定1623和高速缓存的双向协定1624的组合本质上表示三向协定1673。即,节点1601负责节点1601和1602之间的标识符空间的一部分,且负责节点1601和节点1603之间的标识符空间的一部分。括号中的标识符范围指示形成节点1601的任一侧上的高速缓存的双向协定1623和1624的责任范围(即,47到64和64到82)。
本发明的各实施例包括根据多个高速缓存的双向协定路由消息。
根据多个高速缓存的双向协定路由消息可包括接收节点接收带有指示出节点环上的目的地的目的地标识符的消息的动作。例如,节点1601可接收指示要分别传送到节点ID=55、ID=39、ID=203、ID=74和ID=94的消息1651、1652、1653、1654和1656中的任一个。消息1651、1652、1653、1654和1656可从环1650中的另一节点接收(环内通信)、或从环架构1600的另一环中的节点接收(环间通信)、或通过非环通信来接收。
根据多个高速缓存的双向协定路由消息可包括接收节点查阅与前导者节点的第一高速缓存的双向协定和与后继者节点的第二高速缓存的双向协定,以确定要接收该消息的下一合适的节点的动作。第一和第二高速缓存的双向协定至少暗示前导者节点和后继者节点之间关于标识符空间的责任的划分。例如,节点1601可查阅高速缓存的三向协定1623和1624来确定要接收消息1651、1652、1653、1654和1656中的任一个的下一合适的节点。
由于高速缓存的双向协定1623指示节点1602(ID=30)负责未占用标识符39,因此节点1601确定节点1602是处理消息1652的下一合适的节点。由于高速缓存的双向协定1623指示节点1601(ID=64)负责未占用标识符55,则节点1601确定它是处理消息1652的合适的节点。由于高速缓存的双向协定1624指示节点1601(ID=64)负责未占用标识符74,因此节点1601确定它是处理消息1654的合适的节点。由于高速缓存的双向协定1624指示节点1603(ID=101)负责未占用标识符94,则节点1601确定节点1603是处理消息1654的下一合适的节点。
根据多个高速缓存的双向协定路由消息可包括基于对下一合适的节点的确定将消息发送到下一合适的组件的动作。例如,节点1601可基于对要处理消息1651、1652、1653、1654和1656的下一合适的节点的确定,将消息1651、1652、1653、1654和1656发送到环1650上的下一合适的组件。
例如,节点1601可将消息1652提供给节点1602,因为高速缓存的双向协定1623指示节点1602负责未占用标识符39。随后,节点1602可将消息1652提供给其对应于未占用标识符39的资源处理程序实例。节点1601可将消息1651提供给其对应于未占用标识符55的资源处理程序实例,因为高速缓存的双向协定1623指示节点1601负责未占用标识符55。节点1601可将消息1654提供给其对应于未占用标识符74的资源处理程序实例,因为高速缓存的双向协定1624指示节点1601负责未占用标识符74。节点1601可将消息1656提供给节点1603,因为高速缓存的双向协定1624指示节点1603负责未占用标识符94。随后,节点1603可将消息1656提供给其对应于未占用标识符94的资源处理程序实例。
当一标识符未被包括在高速缓存的多个高速缓存的双向协定的任一个中时,节点可查阅路由表(例如,如图3所描绘的)以便向着目的地前进。例如,节点1601可向节点1661(ID=200)发送指示要传送到ID=203的消息1656。节点1661然后可查阅与其前导者节点和/或其后继者节点的任何高速缓存的双向协定来确定要接收消息1653的下一合适的组件。
制定高速缓存的协定
环可不时地被重新配置,例如当新节点加入环时或当现有节点离开环时(例如,通过优雅移除、作为节点监视的结果、通过参考仲裁者等等)。当一节点检测到环的配置已改变时,该节点可重新制定与任何相邻节点的高速缓存的路由协定。在协定重新制定期间,节点可将任何接收到的消息排队,除了用于制定协定的那些消息之外。在协定制定完成之后,该节点然后可根据该协定来处理消息。
环的重新配置可导致多个路由协定被重新制定。例如,当一节点离开环时,该离开节点的任一侧上的直接相邻节点可制定对于先前是离开节点的责任的未占用标识符的范围的协定(由此可能获得对额外的未占用标识符的责任)。该重新制定将来自离开节点的未占用标识符的范围的一部分与每一直接相邻节点的未占用标识符的范围的责任相联接。即,每一直接相邻节点获得对离开节点的未占用标识符的范围的一部分以及该离开节点的标识符的责任。
图17A到17D示出了便于制定高速缓存的双向协定的示例环架构1700。如图17A中所示,节点1701和1702制定了在责任边界1713(在未占用标识符47和未占用标识符48之间)处划分对未占用标识符范围1712(即,未占用标识符31到63)的责任的高速缓存的双向协定1723。类似地,节点1702和1762制定了在责任边界1733(在未占用标识符14和15之间)处划分对未占用标识符范围1711(即,未占用标识符255到29)的责任的高速缓存的双向协定1743。
在高速缓存的双向协定1723和1743的制定之后的某一时刻,节点1702可离开环1750(例如,通过优雅移除、作为节点监视的结果、基于来自仲裁者的指令等等)。现在参考图17B,在节点1702离开环1750之后,没有节点负责先前是节点1702的责任的未占用标识符。未占用标识符范围1713(未占用标识符15到47,现在包括未占用的标识符30)表示节点1702在离开环1750之前负责的未占用标识符的范围。
响应于节点1702离开环1750,节点1701和1762试图标识新的直接邻居节点。节点1762试图标识新的直接后继者节点(即,在与节点1702相同的相对于节点1762的方向上的直接邻居节点)。节点1701试图标识新的直接前导者节点(即,在与节点1702相同的相对于节点1701的方向上的直接邻居)。在图17B中,节点1762将节点1701标识为其新的直接后继者,而节点1701将节点1762标识为其新的直接前导者。
在标识了新的直接邻居节点之后,节点1762和1701制定划分对未占用标识符范围1714(未占用标识符255到63,现在包括未占用的标识符30)的责任的高速缓存的双向协定1763。未占用标识符范围1714包括先前是节点1702的责任的未占用标识符范围1713。由此,在节点1703离开环1750之后,未占用标识符范围1713的各部分可变为节点1751或节点1701的责任。
因此,如由责任边界1753(在未占用标识符31和未占用标识符32之间)所描绘的,节点1762(ID=254)和节点1701(ID=30)制定高速缓存的双向协定1763。根据高速缓存的双向协定1763,节点1762(ID=254)负责其自身以及未占用标识符255到31,而节点1701(ID=64)负责其自身以及未占用标识符范围32到63。尽管节点2201和2202之间的中点在未占用标识符31上,但节点1762被分配对未占用标识符31的责任,使得每一未占用标识符是单个节点的责任。
在节点1702的离开与高速缓存的双向协定1763的制定之间的时间期间,节点1701和1762不处理指示要传送到255和63之间的范围内的标识符的消息。取而代之的是,节点1701和1762将任何消息排队,除了用于制定高速缓存的双向协定1763的那些消息之外。在高速缓存的双向协定1763的制定完成之后,节点1701和1762然后可根据高速缓存的双向协定1763来处理消息。
当一新的节点在两个现有节点之间加入环,每一现有节点可制定与该新节点的路由协定(且由此可能放弃对未占用标识符的一部分的责任)。该制定可实质上在加入节点和现有节点之间拆分现有节点所负责的未占用标识符的范围。即,每一现有节点可能将对现有节点的未占用标识符的一部分的责任让给加入节点。
现在参考图17C,在制定高速缓存的双向协定1763之后的某一时刻,节点1704(ID=44)可加入环1750。在节点1704加入环1750之后,节点1762可检测到节点1704为其直接后继者。同样,节点1701可检测到节点1704为其直接前导者。响应于每一检测,未占用标识符范围1714实质上被拆分成未占用标识符范围1715(未占用标识符255到43)和未占用标识符范围1716(未占用标识符45到63)。然后可制定新的高速缓存的双向协定以划分对未占用标识符范围1715和1716的责任。
现在参考图17D,在将节点1704标识为新的直接后继者节点之后,节点1762和1704制定划分对未占用标识符范围1715(未占用标识符255到43)的责任的高速缓存的双向协定1794。未占用标识符范围1715包括未占用标识符范围1714的各部分,这些部分先前是节点1762的责任且在该情况下其中的一些先前是节点1701的责任。由此,未占用标识符范围1714中曾是节点1762或节点1701的任一个的责任的部分在节点1704加入环1750时可成为节点1704的责任。
因此,如由责任边界1793(在未占用标识符17和未占用标识符24之间)所描绘的,节点1762(ID=254)和节点1704(ID=44)制定高速缓存的双向协定1794。根据高速缓存的双向协定1794,节点1762(ID=254)负责其自身以及未占用标识符255到17,而节点1704(ID=44)负责其自身以及未占用标识符范围24到43。尽管节点2201和2202之间的中点在未占用标识符17上,但节点1762被分配对未占用标识符17的责任,使得每一未占用标识符是单个节点的责任。
类似地,在将节点1704标识为新的直接前导者节点之后,节点1701和1704制定划分对未占用标识符范围1716(未占用标识符45到64)的责任的高速缓存的双向协定1783。未占用标识符范围1716包括未占用标识符范围1714中先前是节点1701的责任的那些部分。由此,未占用标识符范围1714中曾是节点1701的责任的那些部分在节点1704加入环1750时可成为节点1704的责任。
因此,如由责任边界1773(在未占用标识符54和未占用标识符55之间)所描绘的,节点1704(ID=44)和节点1701(ID=64)制定高速缓存的双向协定1783。根据高速缓存的双向协定1783,节点1704(ID=44)负责其自身以及未占用标识符45到54,而节点1701(ID=64)负责其自身以及标识符范围55到63。尽管节点2201和2202之间的中点在未占用标识符54上,但节点1704被分配对未占用标识符54的责任,使得每一未占用标识符是单个节点的责任。
在节点1704的加入与高速缓存的双向协定1794的制定之间的时间期间,节点1762和1704不处理指示要传送到255和43之间的范围内的标识符的消息。取而代之的是,节点1762和1704将任何消息排队,除了用于制定高速缓存的双向协定1794的那些消息之外。在高速缓存的双向协定1794的制定完成之后,节点1762和1704然后可根据高速缓存的双向协定1794来处理消息。
类似地,在节点1704的加入与高速缓存的双向协定1783的制定之间的时间期间,节点1704和1701不处理指示要传送到45和63之间的范围内的标识符的消息。取而代之的是,节点1704和1701将任何消息排队,除了用于制定高速缓存的双向协定1783的那些消息之外。在高速缓存的双向协定1783的制定完成之后,节点1704和1701然后可根据高速缓存的双向协定1783来处理消息。
从节点1704的观点来看,高速缓存的双向协定1794和高速缓存的双向协定1783的组合本质上表示节点1704、节点1762和1701之间的三向协定(未示出)。从节点1704的观点来看,相应的所表示的三向协定定义了对从ID=254(包括254)到ID=64(包括64)的(已分配的和未占用的)标识符的责任。
本发明的各实施例包括加入双向协定。
加入双向协定可包括当前节点访问关于节点环的配置已改变的指示的动作,该指示表明需要制定划分对至少环上的在当前节点和直接邻居节点之间的未占用标识符的责任的双向协定。例如,参考图17A和17B,节点1701和/或节点1762可访问例如来自节点1702(通过对节点1702的监视)或来自仲裁者的关于节点1702离开了环1750的指示。节点1702离开环1750的指示向节点1701和/或节点1762表明需要制定划分对未占用标识符范围1714(未占用标识符255到63)的责任的双向协定。
或者,参考图17C和17D,节点1701可访问节点1704已加入环1750的指示(例如,作为节点1704的加入过程的一部分而发送的)。节点1704加入环1750的指示向节点1701表明需要制定划分对未占用标识符范围1716(未占用标识符45到63)的责任的双向协定。类似地,节点1762可访问节点1704已加入环1750的指示(例如,作为节点1704的加入过程的一部分而发送的)。节点1704加入环1750的指示向节点1762表明需要制定划分对未占用标识符范围1715(未占用标识符255到43)的责任的双向协定。
加入双向协定可包括当前节点和直接邻居节点同意当前节点和直接邻居节点之间的责任边界的动作,该责任边界要在当前节点和直接邻居节点之间划分对未占用标识符的责任。当前节点和责任边界之间的未占用标识符是当前节点的责任,而责任边界和直接邻居节点之间的未占用标识符是直接邻居节点的责任。
例如,参考图17B,节点1701和节点1762可同意责任边界1753,责任边界1753实质上在未占用标识符31和32之间。由此,节点1701和责任边界1753之间的未占用标识符(即,未占用标识符32到63)是节点1701的责任。同样,责任边界1753和节点1762之间的未占用标识符(即,未占用标识符255到31)是节点1762的责任。
参考图17D,节点1701和节点1704可同意责任边界1773,责任边界1773实质上在未占用标识符54和55之间。由此,节点1701和责任边界1773之间的未占用标识符(即,标识符55到63)是节点1701的责任。同样,责任边界1773和节点1704之间的未占用标识符(即,未占用标识符45到54)是节点1704的责任。
仍参考图17D,节点1704和节点1762可同意责任边界1793,责任边界1793实质上在未占用标识符17和24之间。由此,节点1704和责任边界1793之间的标识符(即,未占用标识符24到43)是节点1704的责任。同样,责任边界1793和节点1762之间的未占用标识符(即,未占用标识符255到17)是节点1762的责任。
加入和离开具有环一致性的节点环
如先前所述,在某些实施例中,节点可联盟在一起以形成一致联盟基础结构。图18示出了便于节点加入具有环一致性的联盟内的节点环的示例环架构1800。环架构1800包括节点环1805。在某些实施例中,节点环1805可类似于如上所述的图17C中的环1750或与其相同。节点环1805可包括加入节点1810,该加入节点可能正试图在直接相邻节点1(1820)和直接相邻节点2(1830)之间加入环。在某些实施例中,加入节点1810可按类似于图17C中所描述的方式加入节点环1805,其中加入节点基于节点1701和1762之间的高速缓存的协定来确定标识符范围。图19示出了用于加入节点加入具有环一致性的节点环的状态图1900。
本发明的各实施例包括在节点加入联盟基础结构期间维护环一致性,这将参考图18和19来描述。在节点的加入期间维护环一致性可包括加入节点检测环上的多个其他节点的邻域的动作,该邻域至少包括直接相邻前导者节点和直接相邻后继者节点。例如,加入节点1810可检测和/或建立环1805上的多个其他节点的邻域,其中该邻域包括直接相邻节点1820和其他直接相邻节点1830。在某些实施例中,诸如在状态图1900中,加入节点1905可通过在步骤1中发送介绍消息(例如,介绍1906)来建立邻域。接收这一介绍消息的每一节点可在该状态图的步骤2中用确认(ACK)消息(例如,ACK1907)来响应。介绍1906可包括用于标识加入节点的信息的一个或多个部分,并指示加入节点1810打算加入环1805。
根据加入节点1905接收回来的ACK消息,加入节点可被配置成确定哪一节点在环上最靠近它。例如,每一ACK消息可包括指示环上的节点位置以及该节点负责的范围的标识符范围和/或位置标识符。由此,在状态图1900中,加入节点1905可确定直接相邻节点3(1910)是加入节点的直接相邻前导者节点,而直接相邻节点5(1915)是加入节点的直接相邻后继者节点。此外,加入节点1905可确定相邻节点1(1920)和相邻节点2(1925)与加入节点在同一环上,但不一定是加入节点的直接最近节点。由此,邻域建立1950可以根据示例性状态图1900来实现。
在节点的加入期间维护环一致性可包括加入节点向选自直接相邻前导者节点和直接相邻后继者节点的一个直接相邻节点指示加入节点要取得对加入节点和所选的直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的动作。例如,加入节点1810可以向选自直接相邻节点1(1820)和直接相邻节点2(1830)的直接相邻节点1(1820)指示加入节点1810要对加入节点1810和所选直接相邻节点1820之间的标识符空间的一部分的标识符空间所有权的意图。如上所述,标识符空间可包括给定节点所负责的标识符范围(未占用的或其他)。例如,标识符空间可包括给定节点负责的节点标识符的数值范围。
在某些实施例中,诸如在状态图1900中,加入节点1905向选自直接相邻前导者节点和直接相邻后继者节点的一个直接相邻节点指示加入节点要取得对加入节点1905和所选直接相邻节点1910之间的标识符空间的一部分的标识符空间所有权的意图的动作包括:向选自直接相邻前导者节点1910和直接相邻后继者节点1915的直接相邻节点1910发送令牌请求1931的动作,该令牌请求包括一节点标识符,使得只有具有该节点标识符的节点才能够回复,并且还包括第一生存时间持续时间值1931,该第一生存时间持续时间值指示加入节点1905能将与所选直接相邻节点的监视关系认为是活动的持续时间。
在某些情况下,令牌请求消息1931包括指示加入节点1905期望的所有权范围的经更新的状态的标记。生存时间值(TTL)和关系监视可以基本上与图15A-15C中所描述的相同。
在节点的加入期间维护环一致性可包括加入节点指示要监视所选直接相邻节点的意图的动作。例如,加入节点1810可指示要如在监视指示1812中所指示地监视直接相邻节点1(1820)的意图。在这一监视关系中,加入节点1810可同意监视某一节点标识符范围。在某些情况下,范围可包括直接相邻节点1820的标识符和直接相邻节点1830的标识符之间的标识符。在某些实施例中,监视指示1812和标识符空间所有权指示可被组合在单个消息中。
在节点的加入期间维护环一致性可包括第一所选直接相邻节点接收来自加入节点的指示的动作,该指示指示出加入节点要取得对加入节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权。例如,直接相邻节点1(1820)可从加入节点1810接收指示出加入节点1810要取得加入节点和节点1820之间的标识符空间的一部分的标识符空间所有权的意图的指示(例如,标识符空间所有权指示1811)。
在节点的加入期间维护环一致性可包括第一所选直接相邻节点从加入节点接收加入节点的监视所选直接相邻节点的意图的指示的动作。例如,直接相邻节点1(1820)可从加入节点1810接收加入节点的要监视直接相邻节点1820的意图的指示(例如,监视指示1812)。
在节点的加入期间维护环一致性可包括第一所选直接相邻节点向加入节点发送指示出接受加入节点的要取得对加入节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示的动作。例如,直接相邻节点1(1820)可发送指示出接受加入节点的要取得对加入节点1810和直接相邻节点1820之间的标识符空间的一部分的标识符空间所有权的意图的标识符空间所有权接受1873(例如,标识符空间所有权接受1873)。
在节点的加入期间维护环一致性可包括第一所选直接相邻节点向加入节点发送指示出接受加入节点的监视所选直接相邻节点的意图的第二指示的动作。例如,直接相邻节点1(1820)可发送指示出接受加入节点1810的监视所选直接相邻节点1820的意图的监视接受1883。
在节点的加入期间维护环一致性可包括第一所选直接相邻节点向加入节点发送指示出第一所选直接相邻节点的监视加入节点的意图的第三指示的动作。例如,直接相邻节点1(1820)可向加入节点1810发送指示第一所选直接相邻节点1820的监视加入节点1810的意图的监视指示1893。在某些实施例中,第一、第二和第三指示可以被组合在单个指示中。另外地或另选地,第一、第二和第三指示的任意组合可被组合在单个组合中(例如,第一和第三或第二和第三)。
在节点的加入期间维护环一致性可包括加入节点从所选直接相邻节点接收指示出接受加入节点的要取得对加入节点和所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的第一指示的动作。例如,加入节点1810可从直接相邻节点1(1820)接收指示出接受加入节点的要取得加入节点1810和直接相邻节点1820之间的标识符空间的一部分的标识符空间所有权的意图的标识符空间所有权接受1873。
在节点的加入期间维护环一致性可包括加入节点从所选直接相邻节点接收指示出接受加入节点的监视所选直接相邻节点的意图的第二指示的动作。例如,加入节点1810可从所选直接相邻节点1820接收指示出接受加入节点的要监视所选直接相邻节点1820的意图的监视接受1883。
在节点的加入期间维护环一致性可包括加入节点从所选直接相邻节点接收指示出第一所选直接相邻节点的监视加入节点的意图的第三指示的动作。例如,加入节点1810可从所选直接相邻节点1820接收指示出所选直接相邻节点的要监视加入节点1810的意图的监视指示1893。在某些情况中,第一、第二和第三指示可以被组合在单个指示中。另外地或另选地,第一、第二和第三指示的任意组合可被组合在单个组合中。
在某些实施例中,诸如在状态图1900中,加入节点1905从所选直接相邻节点1910接收指示出接受加入节点的要取得对加入节点和所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图、并指示出所选直接相邻节点1910的要监视加入节点1905的意图的指示的动作包括:从所选直接相邻节点1910接收第一令牌传输1932的动作,该第一令牌传输包括:加入节点对节点环中在加入节点1905和所选直接相邻节点1910之间的未占用节点标识符的所有权范围;第二生存时间持续时间值1932,其指示所选直接相邻节点能将与加入节点1905的监视关系认为是活动的持续时间;以及指示所选直接相邻节点1910监视加入节点的第一建立授权。
在节点的加入期间维护环一致性可包括加入节点指示接受所选直接相邻节点的要监视加入节点的意图的动作。例如,加入节点1810可在监视协定1814中指示接受第一所选直接相邻节点1(1820)的要监视加入节点1810的意图。在某些实施例中,诸如在状态图1900中,加入节点1905指示接受所选直接相邻节点1910的要监视加入节点1905的意图的动作包括:向所选直接相邻节点1910发送确认所选直接相邻节点的要监视加入节点1905的意图的确认消息1933的动作。
再次参考图18,在节点的加入期间维护环一致性可包括第一所选直接相邻节点从加入节点1810接收指示出第一所选直接相邻节点的要监视加入节点1810的意图的指示的动作。例如,直接相邻节点1820可从加入节点1810接收同意参与与直接相邻节点1820的单向监视关系的协定(例如,监视关系协定1814)。
在某些实施例中,所选直接相邻节点1820可另外地或另选地执行向第二所选直接相邻节点指示第一节点的要终止与该第二所选直接相邻节点的任何监视关系的意图的动作、从第二所选直接相邻节点接收指示第二节点的要终止与第一所选直接相邻节点的任何监视关系的指示的动作、以及确认第二节点的要终止的意图的动作。例如,直接相邻节点1(1820)可向直接相邻节点2(1830)指示节点1的要终止与节点2(1830)的任何监视关系的意图。直接相邻节点1(1820)还可从节点2(1830)接收指示出节点2的要终止与节点1的任何监视关系的意图的指示。直接相邻节点1(1820)还可确认节点2的终止的意图。
在某些情况下,诸如在状态图1900中,直接相邻节点3(1910)可被配置成在该状态图的步骤5(1934)中向直接相邻节点5(1915)指示节点3的要终止与节点5(1915)的任何监视关系的意图。直接相邻节点3(1910)还可在该状态图的步骤6(1935)中从节点5(1915)接收指示出节点5的要终止与节点3的任何监视关系的意图的指示。这在某些实施例中也可用于确认1934。直接相邻节点3(1910)还可在该状态图的步骤7(1936)中确认节点5的终止的意图。应当注意,状态图1900的步骤(1-8)可串行或并行地发生。由此,在某些实施例中,例如标为(5)的所有步骤可同时发生,而其他步骤可串行发生。串行或并行执行的步骤的任意组合是可能的。
在某些实施例中,在节点的加入期间维护环一致性可包括以下任选动作:从加入节点接收介绍消息,该介绍消息可包括被指示为加入节点所拥有的节点标识符的期望的所有权范围;以及向加入节点发送确认消息,该确认消息可包括关于加入节点所标识的节点标识符的范围与所选直接相邻节点的节点标识符的范围相一致的指示。在某些情况下,节点标识符的范围可能不被包括在介绍消息或确认消息的任一个中。取而代之的是,节点标识符范围可在发送或接收消息的节点进行接收或发送时计算。
在节点的加入期间维护环一致性可包括选自直接相邻前导者节点和直接相邻后继者节点的另一直接相邻节点向加入节点指示对加入节点和第一所选直接相邻节点之间的标识符空间的所述一部分的标识符空间所有权的动作。例如,选自直接相邻节点1(1820)和直接相邻节点2(1830)的直接相邻节点2(1830)可向加入节点1810指示对加入节点1810和直接相邻节点1830之间的标识符空间的所述一部分的标识符空间所有权。
在节点的加入期间维护环一致性可包括该另一直接相邻节点指示该另一直接相邻节点的要监视加入节点的意图的动作。例如,直接相邻节点2(1830)可指示节点2的要监视加入节点1810的意图(1894)。
在节点的加入期间维护环一致性可包括加入节点从该另一直接相邻节点接收指示出对加入节点和该另一直接相邻节点之间的标识符空间的所述一部分的标识符空间所有权的指示的动作。例如,加入节点1810可从直接相邻节点2(1830)接收指示出对加入节点1810和直接相邻节点1830之间的标识符空间的所述一部分的标识符空间所有权的标识符空间所有权指示1884。
在节点的加入期间维护环一致性可包括加入节点从该另一直接相邻节点接收指示出该另一直接相邻节点的要监视加入节点的意图的指示的动作。例如,加入节点1810可从该另一直接相邻节点1830接收指示出该另一直接相邻节点的要监视加入节点1810的意图的监视指示1894。
在某些实施例中,诸如在状态图1900中,加入节点1905从另一直接相邻节点1915接收指示出对加入节点1905和另一直接相邻节点1915之间的标识符空间的所述一部分的标识符空间所有权、以及指示出另一直接相邻节点的要监视加入节点的意图的指示动作包括:接收第三生存时间持续时间值1937的动作,该第三生存时间持续时间值指示该另一直接相邻节点1915能将与加入节点1905的监视关系认为是活动的持续时间。在某些实施例中,加入节点可在步骤6中从该另一直接相邻节点1915接收第二令牌传输1937,该第二令牌传输包括加入节点的对加入节点1905和该另一直接相邻节点1915之间的未占用节点标识符的所有权范围。在其他情况下,所有权范围可由加入节点和该另一直接相邻节点中的任一个或两者来计算。
再次参考图18,在节点的加入期间维护环一致性可包括加入节点向该另一直接相邻节点指示出加入节点的要建立对加入节点和该另一直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的动作。例如,加入节点1810可向直接相邻节点2(1830)指示出(例如,在标识符空间所有权指示1821中)加入节点1810的要建立对加入节点1810和直接相邻节点1830之间的标识符空间的一部分的标识符空间所有权的意图。
在某些实施例中,诸如在状态图1900中,加入节点1905向该另一直接相邻节点1915指示出加入节点的要建立对加入节点1905和该另一直接相邻节点1915之间的标识符空间的一部分的标识符空间所有权的意图的动作包括:发送建立加入节点1905和该另一直接相邻节点1915之间的第二所有权范围的建立请求(步骤7中的1938)的动作,该建立请求1938包括第四生存时间持续时间1938以及指示加入节点监视该另一直接相邻节点1915的第三建立授权,该第四生存时间持续时间指示加入节点1905能将与该另一直接相邻节点1915的监视关系认为是活动的持续时间。在某些实施例中,建立请求1938还可表示加入节点1905和该另一直接相邻节点1915之间的第二所有权范围的指示。在其他情况下,如上所述,该范围可由节点环1805上的任意直接相邻节点对来计算。
在节点的加入期间维护环一致性可包括加入节点发起要监视该另一直接相邻节点的意图的动作。例如,加入节点1810可发起(例如,经由监视指示1822)要监视直接相邻节点2(1819)的意图。在某些实施例中,诸如在状态图1900中,加入节点1905向该另一直接相邻节点1915指示加入节点的要建立对加入节点1905和该另一直接相邻节点1915之间的标识符空间的一部分的标识符空间所有权的意图的动作包括:发送建立加入节点1905和该另一直接相邻节点1915之间的第二所有权范围的建立请求1938的动作,该建立请求1938包括加入节点和该另一直接相邻节点之间的第二所有权范围;第四生存时间持续时间1938,该第四生存时间持续时间指示加入节点能将与该另一直接相邻节点的监视关系认为是活动的持续时间;以及指示加入节点监视该另一直接相邻节点的第三建立授权1938。
在节点的加入期间维护环一致性可包括该另一直接相邻节点接收加入节点的要建立对加入节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示的动作。例如,直接相邻节点2(1830)可接收指示出加入节点的要建立对加入节点1810和直接相邻节点1830之间的标识符空间的一部分的标识符空间所有权的意图的标识符空间所有权指示1821。
在节点的加入期间维护环一致性可包括该另一直接相邻节点接收加入节点的监视第一所选直接相邻节点的意图的指示的动作。例如,直接相邻节点2(1830)可接收指示出加入节点的要监视直接相邻节点1830的意图的监视指示1822。
在节点的加入期间维护环一致性可包括该另一直接相邻节点向加入节点指示该另一直接相邻节点的要监视加入节点的意图的动作。例如,直接相邻节点2(1830)可向加入节点1810指示(例如,经由监视指示1894)该直接相邻节点的要监视加入节点1810的意图。
在某些情况中,直接相邻节点2(1830)可另外地或另选地执行从第二所选直接相邻节点接收指示出第二节点的要终止与第一所选直接相邻节点的任何监视关系的意图的指示的动作、向第二所选直接相邻节点指示出第一节点的要终止与第二所选直接相邻节点的任何监视关系的意图的动作、以及接收确认第一节点的终止的意图的确认的动作。该另一直接相邻节点还可确认来自第二所选直接相邻节点的指示。例如,直接相邻节点2(1830)可从直接相邻节点1(1820)接收指示节点1的要终止与节点2的任何监视关系的意图的指示。节点2(1830)还可接收确认节点2的终止的意图的确认(状态图1900中的1936)。节点2(1830)还可确认来自节点1的指示(1820)。
在节点的加入期间维护环一致性可包括加入节点从该另一直接相邻节点接收指示出该另一直接相邻节点的要监视加入节点的意图的指示的动作。例如,加入节点1810可从直接相邻节点2(1830)接收指示出该另一直接相邻节点的要监视加入节点1810的意图的监视指示1894(如监视)。在某些实施例中,诸如在状态图1900中,加入节点从该另一直接相邻节点接收指示出该另一直接相邻节点的要监视加入节点的意图的指示的动作包括:接收对建立请求的第四建立授权(例如,步骤8中的1939)的动作,该第四建立授权指示该另一相邻节点1915监视加入节点1905。
此外,加入节点1810可从环上节点中的至少一个(例如,直接相邻节点1(1820))接收否定确认(NAK)消息,其中NAK消息包括NAK发送者的环视图的指示。使用NAK发送者的邻域视图,加入节点1810可以基于NAK发送者的环视图来更新其邻域视图。
图20示出了用于离开节点离开具有环一致性的节点环的状态图2000。本发明的各实施例包括在节点离开联盟基础结构期间维护环一致性,这将参考图18和20来描述。
在节点离开联盟期间维护环一致性可包括第一所选直接相邻节点接收关于离开节点的离开节点环的动作的指示的动作。例如,直接相邻节点3(2010)可从环上的任一节点(例如,从离开节点4(2005))接收指示离开节点2005离开节点环的动作的指示。在某些情况下,在接收到指示时,离开节点2005可能已经离开了节点环。或者,离开节点2005可能正在离开的过程中或正在计划离开节点环。在某些实施例中,第一所选直接相邻节点2010接收离开节点2005正在离开节点环的指示的动作包括:第一所选直接相邻节点2010从离开节点2005接收离开消息2021(状态图2000中的步骤1),该离开消息可包括被指示为离开节点2005所拥有的节点标识符的所有权范围。在其他实施例中,直接相邻节点2010可从节点环之外的节点,诸如从底层总线和/或网络接收指示(例如,离开指示2021)。
在节点离开联盟期间维护环一致性可包括第一所选直接相邻节点向第二所选直接相邻节点发送指示出要承担离开节点对离开节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示的动作。例如,直接相邻节点3(2010)可向直接相邻节点5(2015)发送指示要承担离开节点对离开节点2005和直接相邻节点2010之间的标识符空间的一部分的标识符空间所有权的意图的指示(例如,建立和TTL2022)。
在节点离开联盟期间维护环一致性可包括第一所选直接相邻节点向第二所选直接相邻节点发送指示出第一所选直接相邻节点和第二所选直接相邻节点之间的至少单向监视关系的建立的指示的动作。例如,直接相邻节点3(2010)可向直接相邻节点5(2015)发送指示出直接相邻节点3(2010)和直接相邻节点5(2015)之间的至少单向监视关系的建立的指示(例如,建立和TTL2022)。
在某些实施例中,诸如在状态图2000中,第一所选直接相邻节点向第二所选直接相邻节点发送指示出要承担离开节点对离开节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示的动作包括:第一所选直接相邻节点2010向第二所选直接相邻节点2015发送建立第一所选直接相邻节点2010和第二所选直接相邻节点2015之间的所有权范围的第一建立请求2022的动作(例如,在状态图2000的步骤2中),该第一建立请求包括第一生存时间持续时间2022,该第一生存时间持续时间指示第一所选直接相邻节点2010能将与第二所选直接相邻节点2015的监视关系认为是活动的持续时间;以及第一相邻节点2010接收对第一建立请求2022的第一建立授权2023的动作(例如,在状态图2000的步骤3中),该第一建立授权2023指示第二相邻节点2015监视第一所选直接相邻节点2010。
在节点离开联盟期间维护环一致性可包括第一所选直接相邻节点从第二所选直接相邻节点接收指示出接受第一节点的要承担对离开节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示的动作。例如,直接相邻节点3(2010)可从直接相邻节点5(2015)接收指示出接受直接相邻节点5的要承担对离开节点2005和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图的指示(例如,建立和TTL2024)。
在节点离开联盟期间维护环一致性可包括第一所选直接相邻节点从第二所选直接相邻节点接收指示出第二所选直接相邻节点和第一所选直接相邻节点之间的单向监视关系的建立的指示的动作。例如,直接相邻节点2010指示直接相邻节点2015和直接相邻节点2010之间的单向监视关系的建立。
在某些实施例中,诸如在状态图2000中,其中第一所选直接相邻节点从第二所选直接相邻节点接收指示出接受第一节点的要承担对离开节点和第一所选直接相邻节点之间的标识符空间的一部分的标识符空间所有权的意图、以及指示出第二所选直接相邻节点和第一所选直接相邻节点之间的单向监视关系的建立的指示的动作包括:第一相邻节点2010从第二相邻节点2015接收建立第一相邻节点2010和第二相邻节点2015之间的所有权范围的第二建立请求(例如,在状态图2000的步骤2中)的动作,该第二建立请求包括第二生存时间持续时间2024,该第二生存时间持续时间指示第二相邻节点2015能将与第一相邻节点2010的监视关系认为是活动的持续时间;以及第一相邻节点2010发送对二建立请求的第二建立授权2023(例如,在状态图2000的步骤3中)的动作,该第二建立授权指示第一相邻节点2010监视第二相邻节点2015。
数据一致性
图21示出了便于维护环架构联盟内的副本集和数据一致性的示例环架构2100。在某些实施例中,节点环2105可类似于如上所述的图17C中的环1750和/或图18中的环1805或与其相同。
本发明的各实施例包括在联盟基础结构内的副本集内执行数据访问事务。
在各实施例中,在副本集内执行数据访问事务可包括从节点的副本集中的多个节点中选择主节点的动作。例如,主节点2111可选自节点的副本集2110中的多个节点。为帮助维护数据一致性,可创建副本集以复制或重复数据的一个或多个部分。由此,当节点离开环(或者由于故障或者通过平滑离开)时,其他节点还将包含该离开节点所持有的信息。在某些情况下,副本集中的每一节点可包括:1)副本集的身份、2)配置序列号(CSN)、3)副本集的成员资格以及主节点是谁、4)最后使用的序列号(LSN)、以及5)存储在副本集中的数据。1-3中表示的状态信息可被称为副本集的“配置状态”,而4-5中表示的状态信息可被称为副本集中“存储的数据”。
应当注意,以上提供的关于路由一致性和环一致性的原理、描述和解释适用于领导者选择(即,选择主节点)。例如,维护环内的标识符空间所有权的原理可应用于此处讨论的主节点和副节点。一般而言,主节点和副节点的特性与在以上各节中描述的任何或所有其他节点相一致。
在某些实施例中,副本集2110可用担当其主节点(主节点2111)的单个节点来创建。主节点2111可将其LSN和CSN初始化为0并初始化副本成员资格,该成员资格仅包括其自身作为成员。副本集2110然后可通过使用各种重配置算法向该副本集添加节点来扩展为所需大小,如将在以下更详细描述的。在某些情况下,副本集中不是主节点的任一节点被称为副节点。可递增LSN以创建写和重配置操作中的全序。CSN可指向副本集中的最后一次配置改变。由此,在这一情况中,CSN共享LSN序列。LSN序列中的间隙通常指示数据丢失,且应被避免。
在副本集内执行数据访问事务可包括确定已从节点的副本集中的多个节点之中选择了主节点的动作,所述主节点被配置成接受和处理客户机数据访问请求,所述副本集包括所选的主节点和一个或多个副节点。例如,主节点2111可确定它已从节点的副本集2110中的多个节点之中被选出,其中主节点2111被配置成接受和处理客户机数据访问请求2115,并且其中副本集2110包括主节点2111和副节点2112。
可能期望增加多个副节点以增大容错(即,更多副节点存储相同的数据)。要添加的副节点的数量可基于最大可容许同时故障数量来确定。由此,如果最大可容许同时故障数量是例如3,则可期望至少有4个副节点,使得至少一个节点即使在其他三个节点发生故障之后仍是该副本集的一部分。在某些情况下,要成为副本集的成员的副节点的数量对应于主节点的邻域中的成员的数量。
在某些情况下,该最大可容许同时故障数量可以与副节点的阈值数量相关。这一阈值数量的副节点可被称为选出成员(quorum)。当数据访问请求2115是数据写请求时,该阈值数量的副节点可被称为写选出成员。类似地,当数据访问请求2115是数据读请求时,该阈值数量的副节点可被称为读选出成员。由此,读和写选出成员可表示为给定数量的可容许同时故障提供完全容错所必需的最小阈值数量的节点。
在副本集内执行数据访问事务可包括主节点接收一个或多个客户机数据访问请求的动作,每个数据访问请求指示出要在副本集中的至少一个副节点上访问的至少一部分数据。例如,主节点2111可从客户机2150接收客户机数据访问请求2115,其中请求2115指示要在副本集2110中的副节点2112上访问的至少一部分数据。数据访问请求2115可以例如包括要被写入副本集中的至少一个节点的文件。另外地或另选地,数据访问请求2115可包括要从副本集中的至少一个节点读取和检索的文件的名称。主节点2111管理传入的数据请求,并向副节点2112发送包括对应于副本集的配置状态信息的适当信息。该部分数据还可包括关于副本集本身的一组控制信息,包括节点的数据序列号(DSN)、LSN、CSN、主节点身份或副节点身份。
在副本集内执行数据访问事务可包括主节点以接收到客户机数据访问请求的顺序向使状态改变的每一客户机数据访问请求分配数据序列号(DSN)的动作,这些数据序列号包括所述副本集中的每一节点要遵循的线性化处理顺序。例如,主节点2111可按照接收到请求的顺序向使状态改变的每一客户机数据访问请求2115分配DSN。该DSN可包括副本集2110中的每一节点要遵循的线性化处理顺序。在某些情况下,该线性化处理顺序可被称为操作序列2201,如图22所示。在请求不使状态改变的情况下,主节点2111可省略向客户机数据访问请求分配数据序列号。
根据数据序列号(DSN2205),操作序列2201可包括以接收的顺序排列的多个操作。例如,主节点2111可分配OP1来表示第一操作,分配OP2来表示第二操作,并如OPn所表示地沿着该线向下。OPn+1可表示最后使用的序列号(LSN2215)。如上所述,可递增LSN2215以创建写和重配置操作中的全序。CSN2210可指向副本集2110中的最后一次配置改变。在某些情况下,CSN2210可共享LSN序列。LSN序列中的间隙通常指示未遵循操作序列2201,这通常导致数据丢失。
在副本集内执行数据访问事务可包括主节点向至少一个副节点发送包括任何对应的数据序列号的至少一个客户机数据访问请求的动作。例如,主节点2111可向副节点2112发送包括任何分配的DSN2116的客户机数据访问请求2115。在某些情况下,客户机数据访问请求可被发送到诸如写选出成员或读选出成员等选出成员。选出成员可用预期信息来响应,并另外地用关于主节点不知道的其他数据访问请求的指示来响应。例如,副节点可能在主节点2111被选出之前已处理了其他事务,或者可能已经被分配了主节点不知道的某些事务。由此,该信息可被发送到主节点2111,其可用于更新主节点的操作序列2201。在某些情况下,该过程仅在副本集重配置期间发生,如将在下文中更详细解释的。
在副本集内执行数据访问事务可包括主节点从至少阈值数量的副节点接收指示出对客户机数据访问请求的接收的确认的动作。例如,主节点2111可从阈值数量的副节点(例如,读或写选出成员)接收确认对客户机数据访问请求2115的接收的确认消息2120。确认2120还可指示发送了该消息的副节点已将客户机数据访问请求2115插入到其数据访问队列(即,操作序列2201)中。在某些情况下,主节点2111可从副本集中的所有节点或从其选出成员接收确认消息。确认可以另外地或另选地指示出对客户机数据访问请求的接受或拒绝。
在副本集内执行数据访问事务可包括主节点提交数据访问请求的动作,提交包括根据客户机数据访问请求访问数据。例如,主节点2111可在单个阶段中提交数据访问请求2115,其中提交包括根据客户机数据访问请求2115来访问数据。由此,在数据访问请求是写请求的情况下,主节点2111可在单个阶段中提交写请求。在单个阶段中提交可以在不从每一副节点发送和接收提交查询的情况下完成。在单个阶段中提交可被称为无阻塞(non-blocking)事务。如上所述,由于副本集中的故障检测是完美的,因此主节点不需要从每一副节点发送和接收提交查询。
在某些实施例中,主节点2111可向第二副本集发送客户机数据访问请求2115。第二副本集可以在与主节点的邻域不同的邻域中。在某些情况下,主节点的邻域包括与副本集中的节点相同的节点。主节点2111可请求副本集2110处理客户机数据访问请求2115的第一部分,并请求第二副本处理数据访问请求的第二不同部分。然而,这些实施例将使用二阶段提交过程。例如,该过程可包括从副本集2110接收对应于客户机数据访问请求2115的第一部分的回复。该过程还可包括从第二副本集接收对应于数据访问请求的第二不同部分的回复。回复可被组合,且基于所组合的回复,可生成最新的数据访问响应。
在一示例性实施例中,主节点2111可如下响应客户机数据写请求:1)主节点2111对照应用一致性约束来确认请求。如果主节点2111确定违反,则它用应用一致性违反的故障状态来响应于客户机2150,并跳至以下步骤(7)。2)主节点2111向写操作分配可通过原子地递增主节点的LSN而获得的序列号。在该示例中,与给定写操作相关联的序列号被称为其DSN。3)主节点2111将DSN、CSN和要写入的数据传送到所有副节点,并等待副节点的写选出成员响应(一种变型方法可以是主节点将要写入的数据仅发送到写选出成员)。
4)在收到来自副节点的写选出成员的确认之后,主节点2111本地地执行写操作,并且这是考虑提交写操作的点。主节点2111回过来用成功状态向客户机响应,并跳至以下步骤(7)。5)如果主节点2111无法从副节点的写选出成员得到确认,则它发起重配置操作以消除发生故障的副节点。6)如果主节点2111无法本地地执行写操作,则它发起重配置操作以转换到新的主节点,将其自身从副本集2110中移除,并跳至步骤(7)。7)主节点2111等待下一传入的客户机数据访问请求。应当注意,如上所述,其他实施例是可能的,并且可包括更多或更少的步骤。
在一示例性实施例中,一个或多个副节点2112可按照以下方式来处理数据写请求:1)副节点将传入的写操作中指定的CSN与其CSN进行比较。如果指定的CSN小于其CSN,则副节点忽略该请求并跳至以下步骤(4)。副节点2112断言所指定的CSN不能大于其CSN,因为这一条件暗示重配置是用不完美的故障检测器来完成的。2)副节点2112将传入的写数据请求的DSN与其LSN进行比较。如果该DSN小于其(LSN+1),则副节点2112忽略该写数据请求。如果该DSN大于其(LSN+1),则副节点2112缓存该数据写请求并跳至以下步骤(4)。否则,副节点2112原子地递增其LSN并接受数据写请求,且发回确认2120。如果副节点2112由于本地故障而无法接受该请求,则它请求主节点发起重配置以将其作为副节点从副本集中移除。3)副节点2112检查当前缓存的操作并处理它们,直到其检查了它们中的每一个,从而接受其DSN在此处描述的副节点的LSN值的范围内的任何请求,由此保存了主节点建立的全序。4)副节点2112等待来自主节点2111的下一数据访问请求。处理动作可包括将相关数据写入稳定存储设施中。
在数据库设置中,用于执行写事务的一种示例性方法如下:1)对于在“提交”之前的包括“中止”在内的操作,主节点2111只需本地地执行操作并跳至以下步骤(6)。2)对于“提交”,主节点2111通过本地地准备事务来确定事务顺序。该步骤还对照数据库一致性约束来确认事务。如果本地准备发生故障,则它用故障状态回过头向客户机2150响应,并跳至以下步骤(6)。3)如在前一示例中的步骤(2)-(3)中所指定的,主节点2111将带有“提交”请求的事务转发给副节点2112。4)在主节点2111从副节点的写选出成员得到确认之后,它本地地提交事务并向客户机2135报告成功。5)如果主节点2111无法从副节点的写选出成员得到确认,则它中止本地地准备的事务并发起重配置操作以消除发生故障的副节点。6)主节点2111等待下一传入的客户机数据访问请求2115。
本发明的各实施例包括在联盟基础结构内建立和维护一致副本集。
在联盟基础结构内建立和维护一致副本集可包括从节点环中的多个节点之中建立副本集的动作,所述副本集包括主节点和一个或多个副节点作为成员。例如,副本集2110可从节点2111、2112和节点环2105上的其他节点之中建立。副本集2110可包括主节点2111和副节点2112作为成员。在某些情况下,副本集2110的边界可以与主节点的邻域相同,副节点也是该邻域的成员。
在联盟基础结构内建立和维护一致副本集可包括接收指示出影响至少一个副本集成员的副本集配置事件发生的指示的动作。例如,副本集2110中的节点2111和2112中的任一个可接收影响主节点2111和副节点2112中的至少一个的副本集配置事件发生的指示。副本集配置事件可包括副本集内的节点故障、节点离开副本集或节点加入副本集。将导致重配置的影响副本集的节点的其他事件也是可能的。在某些情况下,这一配置事件可在客户机数据访问请求期间发生。
在联盟基础结构内建立和维护一致副本集可包括基于所接收到的指示确定副本集要被重配置的动作,基于副本集配置事件的发生,该重配置包括从副本集中移除现有副节点、向副本集添加新的副节点、突然转换到新的主节点以及平滑地转换到新的主节点中的至少一个。例如,基于所接收到的指示,副本集2110中的节点之一可确定副本集2110要被重配置。取决于发生了哪一配置事件,重配置可包括从副本集中移除现有副节点、向副本集添加新的副节点、突然转换到新的主节点或平滑地转换到新的主节点。
用于重配置副本集以及转换到新的主节点的示例方法和算法包括在下文中。副本集重配置的示例一般覆盖四种情况,包括1)突然转换到新的主节点,2)平滑地转换到新的主节点,3)移除副节点,以及4)添加副节点。这四个一般的示例中的每一个可独立地发生,并且至少在某些实施例中,不涉及现有主节点的更换。
在联盟基础结构内建立和维护一致副本集可包括根据对应于副本集配置事件的重配置来重新配置副本集的动作。例如,副本集2110可根据对应于副本集配置事件的重配置来重配置。由此,在副本集配置事件是节点故障的情况下,副本集2110可通过添加副节点、移除副节点或转换到新的主节点来重配置。类似地,当副本集配置事件是节点加入时,副本集2110可根据以上方法的任一种来重配置。在某些情况下,特定重配置方法可对应于特定重配置事件。该对应性可由用户来配置或者可以是自动的。
在某些情况下,主节点2111可基于配置状态信息来检测正在进行中的一个或多个副本集重配置。如上所述,在重配置过程期间,可对副本集选择新的主节点。根据上述实施例,环2105中的节点可以与该新的主节点通信以确保该新的主节点的信息相对于环上的其他节点是最新的。
在某些实施例中,可使用与上述相似或相同的一致副本集来访问和存储数据。例如,副本集2110可被配置成维护一个或多个副本集节点上(例如,在副节点2112上)的数据存储的一部分。主节点2111可接收客户机数据访问请求2115。请求2115可包括要在节点的副本集2110内的至少一个节点上访问的信息的指示。主节点可直接处理该请求,或者将其传递给副节点。在主节点2111检测到它无法访问所接收到的客户机数据访问请求2115中所指示的信息的至少一部分的情况下,主节点2111可从副本集中移除其自身,使得防止存储在主节点2111上的信息响应于客户机数据访问请求而被访问。这消除了返回陈旧或过时信息的可能性,并确保响应于客户机数据访问请求2115返回的任何信息是最新的。
根据某些实施例,突然转换到新的主节点可按以下方式发生。当现有主节点发生故障时,使用可靠领导者选择算法按照上述方法选择一新的主节点。在接受任何客户机操作之前,该新的主节点可以执行以下配置改变来从副本集中移除旧的主节点:1)新的主节点检查以查看其是否知道副本集状态。如果新的主节点没有该知识,则它默示地确定副本集的所有成员都发生故障并跳至以下步骤(9)。2)新的主节点联系副本集的每一节点以确定它们的CSN和LSN,直到它在联系了所有现有副节点方面命中一固定点。使用在该步骤中收集的信息,新的主节点确定最早的CSN、最晚的CSN和最晚的LSN。注意,最早的CSN和最晚的CSN在某些(或大多数)情况下可以相同。当最早和最晚CSN不同时,指示在重配置操作的中间主节点发生故障。然后,具有大于最早CSN的CSN的任何副本当然具有最晚的数据。由此,在该步骤的最后,当最早CSN和最晚CSN不同时,新的主节点已经具有最晚的数据。否则,该新的主节点只有在最晚CSN之前写入的数据,并且步骤(3)中的检查确保它也具有在最晚CSN过去之后写入的数据。
3)如果最早CSN和最晚CSN相同且新的主节点无法联系副节点的读选出成员,则可能有数据丢失且新的主节点跳至以下步骤(9)。在某些情况下,读选出成员与其写选出成员相交是高度有利的(或甚至是必要的)。对于基于大小的选出成员,读选出成员是大于(n-w)的任何集合,其中n是在CSN中指定的副本节点的数量,而w是写选出成员。
4)新的主节点试图通过向副节点发送在副节点的报告的LSN和以上步骤(2)中确定的最晚LSN之间的操作,使得在其配置中将副节点变为关于数据是当前的。最早CSN之后并直到最晚CSN的不完整的重配置操作可在该步骤中作为缩短的空重配置操作来发送。5)新的主节点在从具有最晚CSN的配置中移除了发生故障的主节点(例如,主节点2111)和副节点(例如,副节点2112)之后本地地构建新的副本配置,使最晚LSN成为其LSN,并向新的配置分配通过递增LSN而获得的CSN。6)新的主节点将新的副本配置传送到所有副节点。
7)如果响应于在以上步骤(6)中发送的重配置操作、新的主节点无法从所有副节点得到成功状态,或收到来自任何副节点的故障状态,则新的主节点重新执行上述步骤(2)-(6)。在收到来自至少某些(或全部)副节点的成功状态之后,则新的主节点跳至以下步骤(10)。9)新的主节点采取执行诸如在数据中心中响铃、发送寻呼消息等灾难恢复的步骤。在某些情况下,副本集只能使用手动干预来还原。10)新的主节点在此时继续进行客户机操作的处理。在以上步骤(2)中,当旧的主节点发生故障时,新的主节点可能发现正在被添加到副本集的过程中的新的副节点。该固定点是要捕捉新的主节点认为是新配置的一部分的陈旧的副节点集。如果消除围绕同样处理新的副节点的突然主节点转换的优化,则可消除该固定点计算。
根据某些实施例,平滑地转换到新的主节点可按以下方式发生。从现有主节点转换到新的主节点与向副本集添加新的副节点(将在下文中解释)非常相似。注意,该新的主节点可以是或不是副本集中的当前副节点。在该示例中,潜在的新的主节点遵循该算法来成为副本集的一部分:1)新的主节点联系副本集中的一个或多个现有副节点以向其传输数据,2)新的主节点同时联系现有主节点(例如,主节点2111)以向其转发新操作。
3)如果从新的主节点接收到的新操作的DSN大于从副节点接收到的数据,则其将新的主节点发送的新的写操作与从副节点接收到的数据进行合并。4)在新的主节点在以上步骤(1)中所联系的所有副节点都报告数据传输完成之后,该新的主节点联系现有主节点2111以发起配置改变来使得该新的主节点成为副本集的当前主节点。5)在从现有主节点接收到作为对在步骤(4)中发送的重配置请求的响应的成功状态之后,新的主节点承担副本集的主节点的角色,以及6)直到步骤(5)中的重配置请求,新的主节点将它接收到的任何客户机操作转发给现有主节点。
根据某些实施例,移除副节点的过程可按以下方式发生。当完美的故障检测器(如上参考图14和19所述的)向环节点之一(例如,主节点2111)报告现有副节点2112发生故障时,或当现有副节点联系其他节点之一(例如,主节点)以主动将其自身从副本集2110中移除时,节点之一(例如,主节点)可实行以下算法来从副本集中移除副节点。在该示例中,1)主节点阻断对传入的客户机操作(例如,2115)的处理,并且或者缓存它们或者要求客户机(例如,2150)稍后重试,2)主节点通过从副本集成员资格中移除发生故障的副节点来本地地安装新的副本配置,并通过原子地递增其LSN来向新的配置分配CSN。在某些情况下,这意味着重配置操作采用与数据操作相同的序列流。3)主节点将新配置传送到所有副节点,以及4)在从至少某些(或全部)副节点收到成功状态之后,主节点继续进行对客户机操作的处理。
在这一重配置过程中,被重配置的副节点可如下行动:1)副节点将重配置操作的CSN与其LSN进行比较。如果CSN小于(LSN+1),则副节点向主节点发送故障状态并跳至以下步骤(3)。如果CSN等于(LSN+1),则副节点原子地递增其LSN并接受重配置操作,且发回成功状态。否则,副节点缓存重配置操作,并跳至以下步骤(3),2)副节点检查当前缓存的操作并处理它们,直到它检查了它们中的至少某些(或全部),以及3)副节点等待来自主节点的下一操作请求。
故障检测器的完美性确保旧的和新的重配置不同时存在。在某些实施例中,总体假设是存在能用于检测故障停止(fail-stop)故障的完美故障检测器。该句中对“完美”的使用捕捉了以下假设,即故障检测器从不报告一节点实例已变为不可用,除非它(该节点的实例的存在)的确变得永久不可用。如上所述,故障检测可以与上述环一致性和路由一致性特性的概念相结合,并且可依赖于这些概念。由于旧的和新的重配置不同时存在,这意味着副本集状态不存在于副本集成员之外,因为副本集节点仅在其发生故障或主动移除自身之后才从副本集中移除。该特性在标识副本集的所有成员都发生故障的条件时是有用的,因为新选出的主节点将意识到它在该条件下无法访问副本集状态。
在该示例中,由于主节点阻断对传入的操作的处理直到重配置操作完成,因此其允许操作者忽略已变得不可见的重配置操作。当发起了重配置操作的主节点在重配置过程本身中发生故障并且发生故障的主节点曾经联系的副节点随后也发生故障时,重配置操作可变得不可见。该特性允许向在副本集的现有副节点中查找单个CSN的新选出的主节点确保:要么其找到的CSN从观察整个系统的谕示观点来看确实是最晚的CSN,要么在自从变得不可见的稍后的重配置操作之后没有启动任何数据操作。由此,新选出的主节点可安全地基于它在现有副节点中找到的最晚CSN来确定数据丢失,如在关于突然转换到新的主节点的示例中所解释的。
假定重配置操作可以采用与数据操作相同的序列,在重配置操作的结束处,至少某些(或全部)副节点变为相对于数据是当前的(意味着它们都具有相同的LSN)。在存在写选出成员时,该特性使得新选出的主节点能够安全地基于它在现有副节点中找到的最晚CSN来确定数据丢失。
根据某些实施例,添加副节点的过程可按以下方式发生。在该示例中,新的副节点遵循以下算法来成为副本集的一部分:1)副节点联系副本集中的一个或多个现有副节点以向其传输数据,2)该副节点同时联系主节点(例如,2111)以向其转发新操作,3)如果从主节点接收到的新操作的DSN大于从副节点接收到的数据,则该副节点将主节点发送的新的写操作与从该副节点接收到的数据进行合并,以及4)在该副节点在以上步骤(1)中联系的至少某些(或全部)副节点报告数据传输完成之后,该副节点联系主节点以发起配置改变来将其自身添加到副本集。
继续该示例,主节点所遵循的向副本集添加新的副节点的算法如下:1)响应于来自新的副节点的第一请求,主节点开始向即将成为的新的副节点转发新操作,尽管它还不是副本集的一部分,以及2)响应于来自新的副节点的后续重配置请求,主节点可使用实际上与上述在“移除副节点”示例中所述的相同的步骤来发起重配置操作,不同之处在于新配置添加新的副节点而非移除现有副节点。
图23示出了用于从联盟基础结构内的副本集访问数据的示例性系统2300。环境2300包括数据访问系统2310,其包括多个模块。一般而言,以下描述的每一模块都存在于环实现(例如,节点环2105)中,并且可被实现为跨构成邻域和/或副本集的节点、更一般地跨构成节点环排列的节点以及试图成为这一节点环排列中的活动节点的设备的分布式算法。该系统包括被配置成建立环上的多个节点的邻域的邻域建立模块2320,该邻域至少包括直接相邻前导者节点和直接相邻后继者节点。节点环2105可包括加入节点2306,该加入节点可能正试图在直接相邻节点1(2308)和直接相邻节点2(2309)之间加入环。在某些实施例中,加入节点2306可按类似于图17C中所描述的方式加入节点环2305,其中加入节点基于节点1701和1762之间的高速缓存的协定来确定标识符范围。
该系统还包括被配置成确定所建立的邻域外的加入节点已指示加入节点环中所建立的邻域的意图的意图确定模块2325。意图确定模块2325可以从邻域建立模块2320接收指示节点邻域的建立的邻域指示2321。该邻域可包括直接相邻节点1(2308)、加入节点2306和直接相邻节点2(2309)。意图确定模块2325可向一致性维护模块2330发送加入节点的加入意图2326。
一致性维护模块2330可被配置成维护所建立的邻域内的一致性,使得多个节点中的每一节点取得对该邻域中的标识符空间的一部分的标识符空间所有权。如上在标题“加入和离开节点环”下的内容所述,可在加入节点2306加入节点环2305时维护邻域内的一致性。一致性维护模块2330可向选择确定模块2335发送一致性指示2331。应当注意,在某些实施例中,对于在环的标识符空间中的给定标识符处一致地维护的所有状态,存在为该状态单元形成的副本集,其主节点是在任何给定时刻拥有该标识符的环节点。当标识符空间所有权对于节点之间的给定标识符(一致地)转移时,存储在该拥有节点处(或由其控制)的任何服务状态单元的相应主度(primary-ness)也转移。在该实施例中,标识符空间所有权和主度以同时的方式来转移。
选择确定模块可被配置成确定多个节点中的一个节点已被选为主节点,该主节点具有对于被配置成如主节点所指示地响应客户机数据访问请求的节点副本集的责任。如上关于主节点选择所解释的,选择确定模块可确定已经对副本集(可包括所建立的邻域中的所有节点)选出了主节点,并向请求接收模块发送哪一节点被选为主节点的指示(2336)。如上所述,这一领导者选择可以遵循如本文早先定义的环一致性和路由一致性(包括至少部分地形成完美故障检测器机制的监视协定)的原理。
请求接收模块2340可被配置成从客户机2315接收一个或多个客户机数据访问请求,其中每一数据访问请求2341指示要在副本集中的至少一个节点上访问的数据的至少一部分。请求接收模块2340还可接收主节点指示2323。主节点指示2323和数据访问请求2341可以对数据访问模块2345组合2341A和2323A(或可以各自单独地发送(未示出))。数据访问模块2345可被配置成经由通信2307与节点环2305中的一个或多个节点通信,并访问在客户机数据访问请求2341中指示的数据。由此,整个系统可被实例化,其中节点可加入和离开节点环2305,一致性将被维护,主节点被选出且数据被可靠地访问。该系统中所描述的每一模块可以执行这些功能以及在以上各节中详细描述的对应于每一模块的其他功能。
在某些实施例中,要被访问的数据包括服务。例如,加入节点2306可提供客户机2315期望访问的服务。例如,服务可以是电子邮件应用。客户机2315可以指示要被访问的数据,并且数据访问系统2310可被配置成访问该数据,而不论加入节点是否由于数据访问系统所维护的环和数据一致性而离开该环。在其他情况下,所提供的服务可以是锁管理器、数据存储系统、生产者-消费者队列或任何其他服务。在该系统用于访问诸如数据库等数据的情况下,系统2310可被配置成为副本集中的数据维护原子性、一致性、隔离和耐久性(ACID)特性中的每一个特性。由此,提出了这样一种系统,其可被配置成提供一致的、可靠的数据访问,而不论哪一节点实际包含数据、哪些节点正在加入或离开节点环、或是否有大量包含该数据的节点发生故障。
在某些情况下,服务所展示的操作可被划分成改变状态的操作和不改变状态的操作。在存储服务的情况下,改变状态的操作可被称为“写”,而不改变状态的操作可被称为“读”。在锁管理器服务的情况下,改变状态的操作被称为“获取”和“释放”,而不改变状态的操作被称为“查询”。在生产者-消费者队列(有时用于分布式计算)的情况下,改变状态的操作称为“入队”和“出队”,而不改变状态的操作称为“取数(peek)”。由此,在此处的某些实施例中,术语“写”捕捉了改变状态的任何操作,而术语“读”捕捉了不改变状态的任何操作。
返回图21,在某些情况下,读操作由主节点2111本地地处理。如果在即将成为的主节点处由于客户机请求的状态不在那里存在而无法满足读,则该状态将(保证)不会存在于任一副节点处。在某些实施例中,写操作可通过主节点2111来排序。在这些情况下,主节点2111可以实际上不本地地写入客户机提供的状态,直到至少副节点的写选出成员确认了它们已经自己写入了该状态。然后,主节点2111实际本地地写入(或尝试写入)该状态。在某些实施例中,重配置可以在副本集成员(主或副节点)不能写入所请求的状态的任何时刻发生。在这些情况下,节点可以通过从副本集中移除其自身来在副本集中发起重配置。此外,任何不响应的副节点将发生故障(由于完美故障检测器,这是有保证的),并且主节点将通过从副本集中移除该副节点来触发重配置。在某些情况下,这将不会导致主节点停止成为副本集的主节点。
数据访问系统2310可被配置成根据客户机数据写请求来写入数据。由此,在数据访问请求2341(或数据访问请求2115)是或包括写请求的情况下,主节点2111可指示副节点2112将客户机数据写请求中指示的数据写入副节点中的数据存储中。在某些情况下,主节点以两个阶段将写请求复制到一个或多个副节点2112。该变型的优点在于如果写选出成员是由副本集2110中的所有副节点组成,则其允许读操作由副节点来服务。在某些情况下,在副节点处接受写操作,且主节点可以触发附加逻辑,如将数据个别地写入每一节点可用的稳定存储。
数据访问系统2310可被配置成根据客户机数据读请求来读取数据。由此,在数据访问请求2341(或数据访问请求2115)是或包括读请求的情况下,主节点2111或副节点2112可被配置成直接处理读请求。在某些情况下,主节点2111不必访问副节点来读取请求中指示的数据。在其他情况下,副节点能够自主地读取数据并响应客户机数据读请求。
名字空间
如先前所描述的,名字空间管理服务可用于将资源组织成集合,可能通过多个名字空间提供资源访问。名字空间可被看作森林,其中每个名字空间(树)被表示为统一资源标识符(URI),紧跟着它的模式(scheme)和部分(part)用作根。URI模式可以是分层的或平坦的。诸如“名字”和“http”之类的分层模式(与诸如“uuid”之类的平坦模式相对)可由模式名字后存在的“:/”字符序列来标识。分层模式的第一部分可标识负责URI组成部分的其余部分的命名机构。此类URI由模式名字后出现的“://”字符序列来标识。名字空间可以是既是分层的也是可路由的,意味着名字空间用作可用于标识从发送者到接收者的通信路径的标识符。
在某些实施例中,名字空间可被如下定义:
名字空间:=平坦|分层
平坦:=模式‘:’不透明部分(Opaque_part)
分层:=模式“:/”(‘/’机构‘/’)?段(‘/段)*
模式:=如由关于URI通用句法的RFC-2396定义
不透明部分:=如由关于URI通用句法的RFC-2396定义
机构:=如由关于URI通用句法的RFC-2396定义
段:=如由关于URI通用句法的RFC-2396定义
可在树中的任何分支处使得资源可用,给定资源可被展示在多个名字空间中。另外,给定名字空间可标识单个资源或名字空间分支(一组资源)。取决于名字空间的语义,这种分组可以是逻辑的或物理的。该组是通过在标识的名字空间分支上执行深度优先搜索来获得的。一旦已标识出一组资源,可对这些资源执行许多操作,例如选择满足某一准则的资源、将给定消息发送(且可能路由)到仅组中的那些资源等等。
单个资源可被看作是微小的集合。因此,每个资源可被分配一名字(空间)。因为名字空间是可路由的,因此消息可在名字空间联盟基础结构上被路由到具有名字的任何资源。这种路由可跨信任边界和穿越防火墙。
一般来说,资源可被分配可用于访问资源的一个或多个URI。分配给资源的一个URI,即资源ID,可以至少是跨给定名字空间联盟基础结构实现的所有名字空间唯一的,使得资源可被单数地引用。其他的(可能非唯一的)URI也可被分配给资源。这些其他的可能非唯一的URI提供了经给定名字空间联盟基础结构实现的名字空间内附加位置的对资源的访问。资源可被分配对于每个可被遍历以访问该资源的名字空间的至少一个可能非唯一的URI。
图28示出了从名字空间的提供者和集合的观点来看的名字空间联盟基础结构2800的示例。名字空间联盟基础结构2800描绘了提供者可以注册在名字空间树中的任何分支处。此外,提供者可被注册在多个名字空间分支(可能在不同的树中)。例如,提供者501是对名字空间分支location:/CorporateBuildings/bldg34(位置:/公司建筑/34号楼)、location:/CorporateBuildings/bldg50/floor2(位置:/公司建筑/50号楼/第2层)、以及location:/CorporateBuildings/bldg50/floor1/room1304(位置:/公司建筑/50号楼/第1层/1304号房间)注册的。提供者2802是对名字空间分支location:/CorporateBuildings/bldg50(位置:/公司建筑/50号楼)和location:/CorporateBuildings/bldg26(位置:/公司建筑/26号楼)注册的。提供者2803是对location:/CorporateBuildings/bldg50/floor1(位置:/公司建筑/50号楼/第1层)注册的。
如图28中所描绘的,应用可将名字空间看作可分层嵌套的资源的逻辑集合。也就是说,中间名字节点(例如location:/CorporateBuildings/bldg50/floor1和location:/CorporateBuildings/bldg50)被看作资源——名字空间节点资源。应用可以相干且可伸缩的方式高效地在这些逻辑集合上操作,包括发布事件、搜索事件、定位事件、跟踪事件、以事件为目标、以及从集合内提供事件。注意,并非逻辑集合内的全部资源都需要位于单个计算机系统或设备上。资源可在空间和时间上跨许多计算机系统和设备分布。名字空间联盟基础结构维护对参与任何给定集合的计算机系统和设备高效路由查找请求,从而对应用提供了统一目一致的视图。
图29示出了具有在多个名字空间中可用的资源的示例名字空间联盟基础结构2900。URIOrganization:/Product(组织:/产品)标识了名字空间树2901的根。类似地,URILocation:Bldg42(位置:/42号楼)标识了名字空间树2902的根。如所描绘的,打印机603被展示在名字空间树2901和名字空间树2902两者中。
在本说明书和所附权利要求书中,名字空间节点资源可被简单地视为名字空间中的节点。某些名字空间节点资源可被视为根节点(例如,Location:/Bldg42(位置:/42号楼)),其他可被视为中间节点(例如,Organiztion:Product/DevicesTeam(组织:/产品/设备团队)),而另一些可被视为叶节点(例如,Location:/Bldg42/Floor1/Room112/Printer2903(位置:/42号楼/第1层/112号房间/打印机2903))。然而,应理解,一个名字空间树中的名字空间节点资源引用另一名字空间树中的名字空间节点资源(或其他资源)。因此,将名字空间节点资源视为一个名字空间树中的根、中间或叶不会限制从其他名字空间树对该名字空间节点资源的查询。
名字空间还包括将两个或更多名字空间节点资源链接(或使之相关)的名字空间段。名字空间段可被用于链接同一名字空间中的名字空间节点资源。例如,名字空间段2911(“设备”)将Organization:Product(组织:/产品)链接到设备团队。此外,名字空间段可链接(另外连接)不同名字空间树中的名字空间节点资源,从而提供符号链接的功能。遍历名字空间段包括导航到所有目标名字空间节点资源。例如,名字空间段2941(“项目”)将PM团队连接到文件资源SpecTemplate.doc和Milestone.prj。
因此,名字空间段2911(“设备”)、名字空间段2921(“开发”)和名字空间段2931(“打印机”)可在名字空间树2901中被遍历以标识打印机2903。类似地,名字空间段2912(“第1层”)、名字空间段2922(“1226号房间”)、名字空间段632(“打印机”)可在名字空间树2902中被遍历以标识打印机2903。应注意,名字空间树2901的URI模式和名字空间树2902的URI模式可不同。
由于在存在符号链接功能的情况下,相同的资源可参与多个名字空间,全部名字空间以及参与它们的资源的全局视图形成了有向图,其中名字空间段用作带标记的图边,而名字空间节点资源和其他资源用作图节点。名字空间根高效地将该全局图中的名字空间节点资源和其他资源划分成具有起始名字空间节点资源的一组起始和可达到的资源,所述起始名字空间节点资源为名字空间范围确定提供了基础。因此,用于实现查询的经高速缓存的信息被减少并跨各个名字空间分布。
同样,任何给定的名字空间可形成图,因为可在多个名字空间分支处使相同的资源可用,且某些段可另外连接被连接的名字空间节点资源。
图24示出了名字空间联盟基础结构2400的一个示例。名字空间联盟基础结构2400包括可以形成不同类型的联盟伙伴关系的名字空间管理者2401、2402、2403、2411和2412。例如,名字空间管理者2401、2402、2403可彼此联盟为对等体而不需要根名字空间管理者。另一方面,名字空间管理者2411和2412分别与名字空间管理者2401和2402联盟,其中名字空间管理者2401和2402用作根名字空间管理者。不同类型的设备可参与名字空间联盟基础结构,包括主机(如主存资源的PC)、消息路由器、消息网关(如防火墙、网络地址转换(NAT)盒、重定向器)、以及消息代理(如发布-订阅中介)。名字空间联盟基础结构2400利于总线协议(如活跃度、控制、事件化、以及流化)。此外,名字空间联盟基础结构2400可使用诸如WS-发现和WS-事件化等相关WS协议与第三方软件和硬件栈互操作。
一般来说,名字空间管理者2401、2402、2403、2411和2412可利用名字空间联盟协议来形成伙伴关系以及交换名字空间信息。伙伴关系的形成以及名字空间信息的交换便于对名字空间资源的更高效且更可靠的访问。可能的是对等名字空间管理者(如名字空间管理者2401、2402和2403)与其他对等名字空间管理者交换名字空间信息。然而,其他名字空间管理者(如名字空间管理者2411和2412)可与相应的根名字空间管理者(如名字空间管理者2401和2402)交换名字空间信息。名字空间管理者2401、2402、2403、2411和2412中的每一个可维护诸如什么名字空间管理者或提供者对哪些名字空间分支感兴趣之类的名字空间信息的数据库。
名字空间联盟基础结构2400包括提供者2421、2422、2423、2424、2426和2427。每个提供者可对名字空间联盟基础结构中的一个或多个名字空间分支感兴趣。提供者与相应的名字空间管理者交换名字空间信息。例如,提供者2422与名字空间管理者2411交换名字空间信息。相应的名字空间管理者于是便于将名字空间信息转移到其他名字空间管理者。例如,名字空间管理者2411可将名字空间信息转移到名字空间管理者2401,而名字空间管理者2401可继而将名字空间信息的相关部分转移到名字空间管理者2402和2403。
名字空间联盟基础结构(如名字空间联盟基础结构2400)便于将名字空间上的查找请求分发给合适的提供者。例如,可能的是提供者2801、2802和2803各自是提供者2421、2422、2423、2424、2426或2427中的一个。
名字空间管理者可以使用各种不同的机制来联盟。第一种联盟机制包括对等名字空间管理者将名字空间信息转发给所有其它对等名字空间管理者。当一名字空间管理者要加入一名字空间联盟基础结构时,该名字空间管理者利用诸如WS-发现等之类的广播/多播发现协议来通告其存在(广播/多播Hello(喂)),并发出广播/多播探查来检测其它名字空间管理者。该名字空间管理者然后建立与已经存在于网络上的其它名字空间管理者的简单转发伙伴关系,并接受与新加入的名字空间管理者的新的伙伴关系。此后,该名字空间管理者可将每一个名字空间请求转发给其伙伴。
第二种联盟机制包括对等名字空间管理者高效地将所有名字空间信息转发给其它对等名字空间管理者。当一新的名字空间管理者要加入一名字空间联盟基础结构时,该新的名字空间管理者利用诸如WS-发现等之类的广播/多播发现协议来通告其存在(广播/多播Hello),并发出广播/多播探查来检测是该名字空间联盟基础结构的一部分的其它名字空间管理者。一旦检测到另一名字空间管理者,该新的名字空间管理者就建立与该另一名字空间管理者的伙伴关系。从所建立的伙伴关系中,该新的名字空间管理者获知已经参与联盟名字空间基础结构的其它名字空间管理者的存在。它然后与这些新获知的名字空间管理者建立伙伴关系,并接受任何新传入的伙伴关系请求。
名字空间管理者到达/离开以及名字注册都被泛滥在名字空间联盟基础结构中,导致每个名字空间管理者都具有关于其他名字空间管理者和名字空间注册的全局知识。利用这种全局知识,任何名字空间管理者可将查找请求转发到仅那些已经在请求所指定的名字空间分支下注册了提供者/订阅者的伙伴。
第三种联盟机制包括对等名字空间管理者间接地将名字空间信息转发给其它对等名字空间管理者。在该第三种机制中,名字空间管理者被分配诸如128位或160位ID等之类的唯一标识符(ID)。负责给定名字空间树的名字空间管理者被确定为ID最接近于诸如散列给定名字空间树的至少单向映射函数获得的一个ID的一个名字空间管理者。名字空间的这种基于散列的映射模式在下面进一步描述。
在该第三种机制中,名字空间管理者到达和离开在整个结构上泛滥。另一方面,名字空间注册被转发到被确定为负责该请求中指定的名字空间分支的名字空间管理者。为了可伸缩性、负载平衡以及容错性,接收名字空间注册的名字空间管理者可可靠地将这些注册泛滥在其邻域集内的那些名字空间管理者之中。指定的名字空间管理者的邻域集被确定为在有限模ID-地址-空间中ID在指定的名字空间管理者的ID的任一侧上的预定范围内的名字空间管理者的集合。
类似于机制2,新加入的名字空间管理者利用诸如WS-发现等之类的广播/多播发现协议来通告其存在(广播/多播Hello),并发出广播/多播探查来检测已经是名字空间联盟基础结构的一部分的名字空间管理者。该新的名字空间管理者建立与所发现的名字空间管理者的伙伴关系,并使用该伙伴关系来获知参与该名字空间联盟基础结构的其它名字空间管理者的存在。该新的名字空间管理者然后与新发现的名字空间管理者建立进一步的伙伴关系,并接受任何新传入的伙伴关系请求。它接受来自它所负责的名字空间分支下的其伙伴的传入的名字空间注册,并将这些名字空间注册泛滥在其邻域集上。
响应于传入的查找请求,新的名字空间管理者咨询其注册数据库并将请求转发到在该请求中指定的名字空间分支下注册了提供者/订阅者的名字空间管理者。由此,当使用该第三种机制时,名字空间联盟基础结构中的每一名字空间管理者具有所有其它名字空间管理者的全局知识,但是注册信息在名字空间管理者之间高效地划分。名字空间管理者从而间接地将查找请求转发到仅那些在该请求中指定的名字空间分支下注册了提供者/订阅者的伙伴。该间接性是通过具有关于在该请求中指定的名字空间下的名字空间注册的全局知识的名字空间管理者来实现的。
第四种联盟机制包括对等名字空间管理者间接地将名字空间信息路由到其它对等名字空间管理者。在名字空间管理者到达/离开和名字空间注册/查找请求都被路由而不是被泛滥的意义上,该第四种机制与第三中机制不同。路由协议被设计成保证名字空间查找请求和名字空间注册请求之间的会合。
图25示出了便于间接地将请求路由到伙伴的计算机架构2500的示例。计算机架构2500描绘了可能分散在参与名字空间联盟基础结构的多个局部发现范围上的不同类型的计算机系统和设备。
工作站2533可包括向location:/architecture200/scope221/Device(位置:/架构200/范围221/设备)名字空间分支下的相应的名字空间管理者注册的PnP提供者实例。为向其伙伴告知该PnP提供者实例的存在,工作站2533在名字空间联盟基础结构上路由名字空间注册请求2501。名字空间注册请求2501最初被转发给膝上型计算机2531,膝上型计算机进而将名字空间注册请求2501转发给消息代理2537,消息代理又进而将名字空间注册请求2501转发给消息网关2541。消息网关2541将注册信息注册请求2501保存在其数据库中,并将成功消息2504返回给工作站2533。
接着,另一提供者实例(这一次是运行服务的提供者实例)在工作站2533内活跃起来,并向location:/architecture200/scope221/Services(位置:/架构200/范围221/服务)名字空间分支下的相应名字空间管理者注册其自己。此次,该名字空间管理者知道消息网关2541负责location:/architecture200(位置:/架构200)下的注册,并将注册请求2505直接转发给消息网关2541。消息网关2541将注册信息注册请求2505保存在其数据库中,并将成功消息2506返回给工作站2533。
随后,打印机2536(例如,UPnP打印机)通电,并发送通告2507。服务器2534检测到通告2507,将名字空间location:/architecture200/scope224/Devices(位置:/架构200/范围224/设备)分配给打印机2536,并将注册请求2508路由到消息代理2537。消息代理2537将注册请求2508转发给消息网关2541。消息网关2541将注册信息注册请求2508保存在其数据库中,并将成功消息2591返回给服务器2534。
接着,个人计算机2542发出查找请求2592,以发现名字空间分支location:/architecture200(位置:/架构200)下的所有设备。由于个人计算机2542不知道将查找请求2592转发到何处,因此它通过工作站2543来路由查找请求2592。由于对于给定的名字空间树,路由协议实质上保证了注册和查找请求之间的会合,工作站2543将查找请求2592转发到消息网关2541。消息网关2541将查找请求2592转发到工作站2533和服务器2534两者。工作站2533和服务器2534分别将响应消息2514和2516发送给个人计算机2542。
该第四种机制通过将请求路由到具有对请求中指定的名字空间分支(如location:/architecture200)下的名字空间注册的全局知识的名字空间管理者(消息网关2541)来工作。该第四种机制实质上保证了路由可在O(logN)个跳中实现,其中N是参与联盟名字空间基础结构的名字空间管理者的数量。由于该第四种机制高效地划分了名字空间注册信息,且不主存所有参与名字空间管理者的全局知识,因此它伸缩到非常大的网络,甚至是因特网。
图26示出了名字空间联盟基础结构中名字空间管理者之间的二元关系的示例。图26中描绘的二元关系是可用于实现名字空间管理者之间更高效的路由的一个关系。使用二元关系将参与名字空间联盟基础结构的名字空间管理者组织成已排序列表,该二元关系是反射性的,反对称的,可传递的,合计的,并且是在名字空间管理者身份的域上定义的。该已排序列表的两端是联接的,由此形成环2606。这使得已排序列表中的每个名字空间管理者可能将其自己视为在该已排序列表的中间。该已排序列表可被双向链接,使得任何名字空间管理者可以在任一方向上遍历该已排序列表。此外,存在从名字空间管理者身份的值域(如2、50或151)到名字空间管理者自身的1:1映射。这样的映射解决了在映射不紧凑时值域中的名字空间管理者的稀疏性。
环2606上的每个名字空间管理者可包括便于将名字空间信息(如注册和查找请求)路由到其他名字空间管理者的路由表。ID为64的名字空间管理者的示例路由表在图26中描绘。该路由表指示出ID64的后继者是ID76。该后继者可以是环2606上从ID64向顺时针方向的直接相邻名字空间管理者。后继者可以在例如新的名字空间管理者(例如,具有ID71)加入名字空间联盟基础结构或现有名字空间管理者(例如,ID76)离开名字空间联盟基础结构时改变。
该路由表指示出ID64的前导者是ID50。该前导者可以是环306上从ID64向逆时针方向的直接相邻名字空间管理者。前导者可以在例如新的名字空间管理者(例如,具有ID59)加入名字空间联盟基础结构或现有名字空间管理者(例如,ID50)离开名字空间联盟基础结构时改变。
该路由表指示出ID64的邻居是ID83、76、50和46。可使用大小和范围这两个因素中的较大的一个来标识邻居。当相应ID位于对象ID的最小范围内(如在环2606的顺时针方向或逆时针方向中)或比某一配置的最小邻域大小少的ID已存在于邻域中时,名字空间管理者被标识为邻域的成员。例如,在环2606上,指定的范围可以数量为20,大小可大于4。因此,ID64的20个位置内(在顺时针方向(+10)和逆时针方向(-10))的ID是ID64的邻居。例如当名字空间管理者加入或离开名字空间联盟基础结构或当指定的范围改变时,邻居可改变。例如,大小等于4的ID为48的新的名字空间管理者可替换ID46的名字空间管理者。
该路由表还指示ID64可以直接路由到ID200、2、30、46、50、64、76、83、98和135。从而,当ID64的名字空间管理者接收到一请求时,该名字空间管理者可将请求路由到路由表中ID更接近于该请求中的名字空间管理者ID的名字空间管理者。
图27示出了便于名字空间联盟基础结构与其他协议集成的架构2700的示例。名字空间联盟基础结构可支持基于提供者的扩展模型。因此,只要现有协议的资源模型与名字空间的资源模型兼容,则联盟名字空间基础结构可与现有协议集成。架构2700描绘了与活动目录2702和UDDI服务器2703互操作的名字空间管理者2701、2704、2706(如名字空间联盟基础结构的)。实线箭头指示出名字空间管理者使用名字空间联盟协议进行通信,短划线箭头指示出名字空间管理者使用LDAP协议与活动目录2702通信,点线箭头指示出名字空间管理者使用UDDI协议与UDDI服务器2703通信。
发布-订阅话题是名字空间的另一示例用途。发布-订阅话题可被看作对该话题的订阅者的集合;如此,话题名被当作名字空间对待。将发布-订阅话题当作名字空间对待的优点在于名字空间联盟基础结构可用于将通知消息从发布者路由到订阅者。对话题的订阅可被看作名字空间注册请求,而对话题的发布可被看作名字空间查找请求。
在某些实施例中,名字空间联盟基础结构可向程序员提供总线型(bus-like)抽象,用于开发分布式应用。例如,名字空间联盟基础结构可抽象活跃度—应用用来知道它们感兴趣的资源何时脱离网络的机制。为了跟踪给定资源,应用订阅发送到在资源的身份URI(即其名字)之后命名的发布-订阅话题的通知。注意到给定资源已脱离网络的任何组件(如应用)可向资源的身份URI后命名的话题发布活跃度通知消息,从而通知对跟踪该资源感兴趣的其他应用。由于发布-订阅订阅跨名字空间基础结构被联盟,且由于许多身份模式是分层的(以从活跃度的观点捕捉资源的包含方面),系统避免了简单检测系统的n2查验(pinging)问题并非常好地伸缩。此外,组件(如应用)对给定资源越感兴趣,将越快地有人注意到它已经脱离了网络,这是有利的。
开发者可将名字空间联盟基础结构视为云,其中注册了诸如文件和事件源之类的资源。应用可针对云发出查找请求,以发现已注册的资源。应用也可请求云来代表它们订阅向云注册的当前和将来的事件源。此外,应用可订阅云中维护的发布-订阅话题。任何人可发布通知消息,云维护将消息转发到该消息被发布到其中的事件话题的订阅者。
各种类型的资源可被发布在名字空间中,包括服务、设备、文件、主机、组件、数据库中的项目、关于元数据(模式)的元数据等等。资源可具有主存/支持它的服务组件。例如,文件资源可具有文件服务器作为用于访问该文件的服务组件。会议室可具有接待员的信箱作为用于安排会议的服务组件。
每个资源可与捕捉资源的描述性方面的资源描述符相关联。从而,资源描述符可被查询来标识感兴趣的资源。当资源被标识时,可通过资源的相应服务方面来访问该资源。可被发送到主存/支持资源的服务的消息类型对于不同资源类型是不同的。例如,文件服务器支持打开文件资源,接待员接受对会议室的安排请求。
用于实现资源描述符的数据模型可以是可版本化的、可扩展的和可互操作的。这种资源数据模型可在诸如分布式文件系统(DFS)、AD和UDDI之类的许多当前框架之间被共享。这种单一共享的数据模型可便于AD对象和DFS文件(或来自其他资源管理系统的资源)被视为资源,使用名字空间方法被联盟,以及通过将消息发送到主存它们的服务来被访问。
因此,资源可被定义为具有下列特性:
资源ID:可任选地用一组引用特性来扩大以及在空间和时间中是稳定的URI。它可被表示为资源引用模式的实例。资源ID与资源特性一起能够共同地表示资源的身份。
描述符:包含关于资源的半静态元数据的资源专用模式。该元数据对于资源选择来说是有用的。资源描述符模式可被分类化。
配置号:标识某一具体版本的资源描述数据的单调增加的数字。每当资源描述被修改时该数字递增。
实例ID:标识活动资源的某一具体实例的单调增加的数字。例如,这可以与服务/设备资源的引导时间或文件资源的文件修改时间相同。
进一步关于描述符,设备可具有根据一个或多个模式的元数据。例如,打印机可具有根据描述打印机的不同方面的不同模式的元数据。资源描述符模式可由诸如UPnP论坛工作组(例如打印机模式可由UPnP打印机工作组标准化)和W3C之类的组织标准化。图30描绘了用于描述资源的示例分类3000。在分类3000中,不同模式一般被如下表示:
服务引用模式:扩展资源引用模式并指定标识由资源支持的消息的行为类型的列表、用于其断言的(诸如支持的传输)策略容器以及一组扩展。
资源描述符模式:扩展资源引用模式并指定描述符的配置号(见下面的解释)、资源的友好名称、支持该资源的服务的服务引用、以及一组扩展。
名字空间节点描述符模式:扩展资源描述符模式并将从它可达到的资源指定为边缘描述符模式的实例。
资源描述符模式:指定局部范围的边缘名称、边缘类型和目标资源。
设备描述符模式:扩展资源描述符模式并指定序列号和制造者名称。
打印机描述符模式:扩展设备描述符模式并指定打印机专用特性,如分辨率、彩色打印能力、每分钟页数、支持的纸张大小。
上述描述模式中的任何一个描述模式中定义的任何信息可被包括在用于标识联盟名字空间基础结构中的资源的查询中。例如,可使用过滤(或查询)表达式来搜索和导航描述符数据。例如,可按照描述符模式的类型或字段值来过滤,导航到从其引用字段可达到的实例、对它们应用子过滤等等。在某些实施例中,使用基于X路径的过滤表达式。返回图29,使用X路径句法,在资源描述符模式指定的描述符数据上操作的过滤表达式可用于定位Location:/Bldg42/Floor1(位置:/42号楼/第1层)中的能进行彩色打印的打印机。
名字空间可采用URI段参数的形式对定义在名字空间节点资源上的字段/属性指定过滤表达式,用于选择和遍历。例如,仅在“Room1226”(1226号房间)的描述符具有值为“employee1”(雇员1)的“employee”(雇员)字段时,名字空间Location:/Bldg42/Floor1/Room1226;employee=“employee1/printer(位置:/42号楼/第1层/1226号房间;雇员=“雇员1/打印机)将遍历名字空间节点资源“Room1226”。类似地,名字空间Organization:/Product/DevicesTeam;building=“Bldg33/Dev/Computer2904;printer=“color”(组织:/产品/设备团队;建筑=“33号楼”/开发/计算机2904;打印机=“彩色”)仅在其描述符具有值为“Bldg33”(33号楼)的“building”(建筑)字段(从而标识了第一部分资源)时将遍历名字空间节点资源“DevicesTeam”(设备团队),且仅在其描述符具有值为“color”(彩色)的“printer”(打印机)字段(意味着标识出彩色打印机附连与它)时将选择名字空间节点资源“Computer2904”(计算机2904)。
如先前所描述的,名字空间管理者可被分配诸如160位ID之类的唯一数字标识符。在某些实施例中,该唯一标识符是通过对诸如域名服务(DNS)名称、位置、部门等一个或多个名字空间管理者特性进行散列而生成的。诸如SHA等各种不同的散列函数中的任何散列函数都可用于生成唯一ID。
使用唯一名字空间管理者ID,可提供下列函数用于在名字空间联盟基础结构中路由名字空间信息:
RouteNumerically(V,Msg):给定来自名字空间管理者身份的值域的值V和消息“Msg”,将消息传递到其身份可使用该映射函数映射到V的名字空间管理者X。
Neighborhood(X,S):Neighborhood(邻域)是名字空间管理者X)的任一侧上(例如环306上)其势等于S的名字空间管理者的集合。
本发明的各实施例也可利用参与联盟的名字空间管理者的邻近性准则。邻近性准则可被定义为将该组联盟名字空间管理者分区成一组不相交的类(或分区)的等价关系。一般来说,集合S上的关系R如果满足下列特性则是等价关系:
●反射的:x是S的元素→xRx
●对称的:给定S的元素x,y,xRy→yRx
●传递的:给定S的元素x,y,z,xRy∧yRz→xRz。
本发明的各实施例可支持多个不同的邻近性准则,邻近性准则可以安排成偏序。例如,将属于“Corporation1”(公司1)的所有名字空间节点资源考虑为最接近的的准则比将“Corporation1,LocationA”(公司1,位置A)内的所有名字空间管理者考虑为最接近的的准则优先。这是由于由前一准则(属于“公司A”)考虑为最接近的名字空间管理者的集合是由后一准则(属于“公司1,位置A”)考虑为最接近的名字空间管理者的集合的超集。另一方面,在将“公司1”内的所有名字空间管理者考虑为最接近的准则与将“公司1,位置A”内的所有名字空间管理者考虑为最接近的准则之间没有次序关系。
对联盟中的每个名字空间管理者计算路由名字空间管理者时考虑邻近性考虑因素导致到最终目的地的路径上的每个路由跳都保留在始发该请求的名字空间管理者的邻近内的增加的机会。此外,仍然可在数值空间中使名字空间管理者之间的距离接近方面作出显著的改进。
利用唯一ID以及邻近性准则,可提供下列附加的函数用于在名字空间联盟基础结构中路由名字空间信息:
RouteNumerically(V,Msg):给定来自名字空间管理者身份的域的值V和消息“Msg”,将消息传递到按照邻近性准则P被认为是等效的名字空间管理者中其身份可被映射到V的名字空间管理者Y。
当提供者/订阅者在名字空间分支向名字空间管理者注册时,注册请求被发送(且可能被路由)到负责对注册请求中指定的名字空间树维护注册信息的伙伴名字空间管理者。另选地,可能的是将名字空间注册请求发出到结构中的名字空间管理者是负责的名字空间管理者。因此,本发明的各实施例可包括路由名字空间注册请求。
路由名字空间注册请求可包括接收注册名字空间分支的名字空间注册请求的动作,该名字空间注册请求包括标识该名字空间分支的名字空间标识符。例如,名字空间管理者2412可从提供者2431接收包括名字空间ID2442的注册请求2432。由于名字空间管理者2412不是对等名字空间管理者,因此名字空间管理者2412可将注册请求2432转发到名字空间管理者2402。名字空间管理者2412可在将注册请求2432通过名字空间联盟基础结构2400传递时按照其模式标识的规则来正规化名字空间ID2442。
路由名字空间注册请求可包括基于名字空间标识符的模式部分以及名字空间标识符的至少部分路径部分来生成至少单向等效标识值的动作。例如,名字空间管理者2402可基于名字空间ID2442的模式部分以及名字空间ID2442的至少部分路径部分来生成散列2452。诸如SHA等各种不同的散列函数中的任何散列函数都可用于从名字空间串的各部分中生成散列值。对名字空间串生成散列值可基于名字空间联盟基础结构的配置而变化。
对于诸如“uuid”之类的非分层的名字空间模式(例如由模式后缺少“:/”字符序列来标识),可在整个名字空间上生成散列。例如,整个名字空间串“uuid:a36fab9c-9c7f-42c3-97d8-36cd57e9bd29”可被用于生成SHA散列值。
分层名字空间可以是机构性或非机构性的,两者是例如通过模式分量后跟的相应的字符序列“://”和“:/”来区分的。对于诸如“name”(名称)之类机构性名字空间,散列是在后跟“://”字符序列、机构分量、以及名字空间的第一路径分量的模式部分上生成的。例如,名字空间串“name://red.prn.xrx:200/printers/b42-1749-a”的“name://red.prn.xrx:200/printers”部分可被用于生成SHA散列值。对于诸如图6的“location”(位置)模式之类的非机构性名字空间,可在后跟“:/”字符序列以及名字空间的第一路径分量的模式部分上生成散列。例如,名字空间串“location:/Bldg42/Floor1/Room1226”的“location:/Bldg42”部分。
路由名字空间注册请求可包括将名字空间注册请求发送到具有比其他名字空间管理者的标识符在数值上更接近于所述至少单向等效数值标识符值的标识符的名字空间管理者。例如,名字空间管理者2402可调用RouteNumerically函数,以散列2452和注册消息2432作为输入,例如RouteNumerically(散列2452,注册消息2432)。另选地,RoutePRoximally函数可被使用。在某些实施例中,名字空间注册请求被直接发送,且无路由发生。
联盟名字空间基础结构2400然后利用联盟协议来将注册消息转发到合适的名字空间管理者。例如,注册请求2432可被路由到名字空间管理者2403。可能的是,名字空间管理者2403已经将对名字空间分支的责任转移给另一名字空间管理者。于是,可能的是,名字空间管理者2403将介绍消息返回给名字空间管理者2402。因此,当对名字空间分支的责任已被介绍时,名字空间管理者2402可接收指定合适的名字空间管理子和的介绍消息。名字空间管理者2402可继而将注册请求2432发送到合适的名字空间管理者。在名字空间管理者接受或拒绝注册请求之前,可遇到一个或多个介绍。
路由名字空间注册请求可包括向将名字空间管理者与名字空间分支相关联的动作。例如,名字空间管理者2403可(通过提供者2431)与名字空间ID2442标识的名字空间分支相关联。名字空间ID2442可例如标识名字空间2901或名字空间2902的一部分。名字空间管理者和名字空间分支之间的关联允许指定了注册请求中指定的一个名字空间管理者分支之下的名字空间分支的请求(例如查找请求)被转发而不是路由到该关联中所指定的名字空间管理者。当名字空间管理者故障被检测到或者获得了对一不同的名字空间管理者的介绍时,关联可被打破。当检测到故障时,后续请求被路由直到新的关联被形成。
本发明的各实施例包括转移名字空间注册请求。转移名字空间注册请求可包括确定名字空间管理者已满足策略约束的动作。例如,名字空间管理者2403可确定名字空间管理者2403处正被处理的名字空间信息(与联盟名字空间基础结构2400有关)的量已超过配置的阈值。配置的阈值可以是例如名字空间管理者处维护的注册的总数,或名字空间管理者处正被服务的查找请求的总数。
转移名字空间注册请求可包括标识可被转移以满足与策略约束相关联的策略动作的名字空间分支的动作。例如,名字空间管理者2403可标识可被转移以将名字空间管理者2403处处理的名字空间信息减少到配置的阈值之下的名字空间分支(例如对应于名字空间ID2442)。可能的是,名字空间管理者标识更大量填充的和/或更大量服务的名字空间分支用于转移。
转移名字空间注册请求可包括响应于策略动作将名字空间分支的现有注册转移到伙伴名字空间管理者的动作。例如,名字空间管理者2403可响应于要为了减轻大量填充和/或大量服务的名字空间分支上的负担而发生的动作,将现有注册转移到伙伴(例如邻域)名字空间管理者。
转移名字空间注册请求还可包括接收对应于名字空间分支的名字空间请求的动作。例如,名字空间管理者2403可接收对应于名字空间ID2442所表示的名字空间分支的注册请求2432。
转移名字空间注册请求还可包括采取行动以将名字空间请求重定向到伙伴名字空间管理者的动作。例如,如点线箭头所指示的,名字空间管理者2403可将注册请求2432重新路由到名字空间管理者2401。转移名字空间分支的名字空间管理者可调用RouteNumerically(数值地路由)来将请求重新路由到一不同的名字空间管理者。例如,RouteNumerically(H,migrateMsg)(RouteNumerically(H,转移消息))可被调用来将请求重新路由到正被转移的名字空间分支的至少单向等效值所标识的名字空间管理者(如名字空间管理者2401)。例如,为了转移分支location:/Bldg42/Floor1(位置:/42号楼/第1层),名字空间管理者2403在串“location:/Bldg42/Floor1”上生成散列H,调用RouteNumerically(H,migrateMsg)来标识负责被转移的分支的名字空间管理者2401,并将被转移的分支下的所有名字空间注册(例如location:/Bldg42/Floor1/Room1226和location:/Bldg42/Floor1/Room1119)转移到所标识的名字空间管理者2401。
名字空间管理者还可决定将沿被转移的名字空间分支的脊所遇到的所有名字空间注册转发到主存该分支的伙伴名字空间管理者。这方便了伙伴名字空间管理者分支对指定该名字空间分支的所有查找请求提供服务,而无需请求必须始终直接或间接地通过转移名字空间管理者。转移名字空间管理者可留下一存根,指示出它已经将注册信息转移到指定的名字空间分支之下。转移名字空间管理者还可调用对跟踪被转移的注册中指定的提供者/订阅者的活跃度通知的订阅(如果有的话)。因此,转移名字空间管理者接收到的位于被转移的名字空间分支下且沿着被转移的名字空间分支的脊的后续的名字空间注册被转发到伙伴名字空间管理者。
本发明的各实施例包括处理名字空间注册请求。处理名字空间注册请求可包括接收注册名字空间分支的名字空间注册请求的动作,该名字空间注册请求包括标识名字空间分支的名字空间URI串以及请求该名字空间分支中的注册的提供者(或订阅者)的唯一引用或标识符。例如,名字空间管理者2403可接收包括对提供者2431的引用的注册请求2432。
处理名字空间注册请求可包括确定名字空间管理者对该名字空间分支感兴趣。例如,名字空间管理者2402可确定名字空间管理者2402是否负责名字空间ID142表示的名字空间分支(例如Organiztion:/Product/MessagingTeam(组织:/产品/消息通信团队))。当名字空间管理者2402不负责时,名字空间管理者2402可将名字空间注册请求(如注册请求2432)转发到指定的名字空间分支的负责的名字空间管理者(如名字空间管理者2403)。另选地,当名字空间管理者2402不负责时,名字空间管理者2402可向发起该注册请求(如注册请求2432)的名字空间管理者(如名字空间管理者2403)发送介绍消息2434,以改为联系负责的名字空间管理者(如名字空间管理者2401)。当名字空间管理者2402是负责的时,名字空间管理者2402可保留名字空间注册请求。
处理名字空间注册请求可包括将名字空间标识符保存在适当索引的名字空间注册数据库中。例如,如果名字空间标识符是URI串,则它以字母表顺序存储在名字空间注册数据库中,其中越长的串排序越高。例如,名字空间管理者2403可将名字空间ID2442存储在名字空间注册数据库中。围绕提供者2431的短划线和相应的短划线框指示出名字空间管理者2403已经将提供者2431引用为在名字空间ID2442所表示的名字空间中被感兴趣。
处理名字空间注册请求还可包括确定提供者的活跃度将被随后验证的频率。例如,名字空间管理者2403可确定提供者2431的活跃度将被随后验证的频率。名字空间提供者2403可任选地订阅发布到ID2461所标识的提供者2431的订阅-发布话题的活跃度通知。订阅-发布话题可由ID2461标识。另选地,如果活跃度订阅没有作出,则注册被分配时间有限的租期。提供者2431可在租期到期之前通过直接联系名字空间管理者2403来续展注册。也可使用其他活跃度机制。
名字空间管理者和提供者活跃度可跨分层结构分布。位于分层结构的较高层的名字空间管理者可依赖于其他类似定位的名字空间管理者,以对相应的较低层名字空间管理者和提供者报告活跃度信息。例如,在图24中,名字空间管理者2403可跟踪名字空间管理者2402的活跃度(两者都是根名字空间管理者)。名字空间管理者2403可依赖于名字空间管理者2402来报告任何相应较低层名字空间管理者(如名字空间管理者2412)或提供者(如提供者2424)的故障。名字空间管理者2402将继而依赖名字空间管理者2403来报告类似类型的故障(如提供者2426的故障)。
在提供者2431的成功注册(或故障)之后,名字空间管理者2402可向提供者2431发送指示出成功(或故障)的消息。
有时,消费者(其他计算机系统或设备)可希望访问提供者所管理的名字空间分支中的资源。为了获得对资源的访问,消费者可发出查找请求以试图标识资源。查找请求可在名字空间管理者被接收并被传递到一个或多个合适的提供者。一般来说,当名字空间管理者接收到查找请求时,它将该查找请求路由到与它最近的(由某一预定义的邻近性度量确定)伙伴名字空间管理者,并朝向负责该请求中指定的名字空间分支的名字空间管理者的邻域。由于注册信息跨各邻域名字空间管理者被复制,该查找请求可由邻域集中的任何名字空间管理者来满足。
经最接近于发出查找请求的名字空间管理者的名字空间管理者进行路由导致提高的网络吞吐量和动态负载平衡,因为从查找请求满足的观点来看,查找请求自动地且高效地跨邻域名字空间管理者被分区。为了便于路由,用于映射查找请求中指定的名字空间ID的算法可实质上与用于映射注册请求中指定的名字空间ID的算法相同。例如,从名字空间身份的值域到名字空间管理器的1:1映射可被用于映射查找请求和注册请求两者的名字空间ID。
本发明的各实施例包括路由、转移和处理名字空间查找请求。类似于用于名字空间注册请求的那些方法也可用于名字空间查找请求。
本发明的各实施例包括资源参与多个名字空间。资源参与多个名字空间可包括建立资源的唯一资源标识符的动作,包括建立对应于该资源的URI的路径部分。例如,“printer2903”(打印机2903)的标识符可对打印机建立。
资源参与多个名字空间可包括在第一名字空间中发布资源的可用性的动作。例如,打印机2903可在名字空间树2901中发布其可用性。资源参与多个名字空间可包括将唯一资源标识符链接到第一名字空间中的第一名字空间节点资源的动作,以使得第一名字空间可被遍历以标识该资源。例如,名字空间段2931可被建立来将打印机2903链接到“DevTeam”(开发团队)名字空间节点资源。相应地,名字空间树2901(以及“DevTeam”名字空间节点资源)可被遍历以标识打印机2903。
资源参与多个名字空间可包括在第二名字空间中发布资源的可用性的动作。例如,打印机2903可在名字空间树2902中发布其可用性。资源参与多个名字空间可包括将唯一资源标识符链接到第二名字空间中的第二名字空间节点资源的动作,以使得第二名字空间可被遍历以标识该资源。例如,名字空间段2932可被建立来将打印机2903链接到“Room1226”(1226号房间)名字空间节点资源。相应地,名字空间树2902(以及“Room1226”名字空间节点资源)可被遍历以标识打印机2903。
本发明的各实施例包括标识名字空间联盟基础结构中的资源子集。标识名字空间联盟基础结构中的资源子集可包括从设备接收查询的动作。例如,名字空间树2902的提供者可以从网络连接到提供者的设备接收查询。查询包括标识满足名字空间分层结构中的第一层处的第一查询准则的第一部分资源的第一查询部分。例如,第一查询部分可标识在遍历名字空间段“Floor2”(第2层)(在名字空间树2902中)之后满足第一查询准则的第一部分资源。第一部分资源可以是例如雇员,而第一准则还可包括例如分配到“MessagingTeam”(消息通信团队)。因此,该第一查询部分可标识分配给工作在(42号楼的)第2层的“消息通信团队”的所有雇员。在某些实施例中,第一查询准则被用于在引用该第一部分资源的资源的特性中导航。
该查询包括标识从包含在第一部分资源中的资源中选择的第二部分资源的第二查询部分。例如,第二查询部分可标识在遍历名字空间段“Room2005”(2005号房间)(在名字空间树2902中)之后满足第二查询准则的第二部分资源。第二部分资源可以是例如管理者,而第二准则可以是例如设备。因此,第二查询部分可标识具有2005号房间中的办公室的打印机管理者。在某些实施例中,第二查询准则被用于在引用该第二部分资源的第一部分资源的特性中导航。
因此,提供了从第一查询部分标识的资源作为对第二查询部分的输入,所接收到的查询的结果可(取决于资源模式中的字段定义)标识在第2层2005号房间具有办公室且分配给消息通信团队的打印机管理者。
标识名字空间联盟基础结构中的资源子集可包括将第二部分资源的身份返回给设备的动作。例如,名字空间树2902的提供者可将第2层上消息通信团队员工所拥有的会议室2005中的设备的管理者的身份返回给网络可连接的设备。
本发明的各实施例包括组织多个资源。组织多个资源可包括确定新的资源要被包括在一个或多个名字空间中的动作,其中所述一个或多个名字空间中的每一个被配置成组织一个或多个资源。例如,可确定打印机2903要被包括在名字空间2901和/或名字空间2902中。组织多个资源可包括标识一个或多个名字空间的第一名字空间内的要与该新资源相关的第一资源的动作。例如,可标识名字空间2902中的房间1226要与打印机2903相关。类似地,可标识名字空间2901中的开发团队要与打印机2903相关。
组织多个资源可包括使用第一名字空间段来将该新的资源链接到第一资源的动作,使得该名字空间段可被遍历以从现有资源导航到名字空间内的该新的资源。例如,名字空间段2932可用于将打印机2903链接到房间1226,使得名字空间段2932可被遍历以从房间1226导航到打印机2903。类似地,名字空间段2931可用于将打印机2903链接到开发团队,使得名字空间段2931可被遍历以从开发团队导航到打印机2903。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。