详细说明
本发明的原理提供将资源组织成集合,以促进更有效和可靠的资源访问。在有些实施例中,在一个名字空间联盟基础结构中传输名字空间注册请求。接收注册一个名字空间分支的名字空间注册请求,该名字空间注册请求包括一个标识该名字空间分支的名字空间串。一个至少单向的等价数字标识值如散列值,是基于平面URI方案的整个名字空间串或者基于直到分层URI模式的名字空间串的第一路径段的部分产生的。名字空间注册请求被发送(并且有可能被路由)到一个名字空间管理器,它具有在数字上比其它名字空间管理器的标识符更接近该至少单向的等价数字标识值的标识符。将该名字空间分支与该名字空间管理器相关联。
在其它实施例中,在一个名字空间联盟基础结构中迁移一个名字空间注册请求。确定一个名字空间管理器已经满足了政策约束。标识能够迁移来满足与该政策约束相关联的政策动作的名字空间分支。该名字空间分支的现有注册,响应于该政策动作,被迁移到一个合作伙伴名字空间管理器。
在还有的其它实施例中,在一个名字空间联盟基础结构中处理一个名字空间注册请求。接收注册一个名字空间分支的名字空间注册请求。该名字空间注册请求包括一个标识该名字空间分支的名字空间串和请求注册该名字空间分支的供应者的标识符。确定名字空间管理器对该名字空间分支感兴趣。该名字空间串保存在一个经适当索引的名字空间注册数据库中。还确定注册请求发起者(例如名字空间供应者)的活动性随后要以什么频度来验证。
在还有一些实施例中,在一个名字空间联盟基础结构中发送(并且有可能路由)一个名字空间查找请求。接收包括标识一个名字空间分支的名字空间串的名字空间查找请求。一个至少单向的等价数字标识值如散列值,是基于平面URI方案的整个名字空间串或者基于直到分层URI方案的名字空间串的第一路径段的部分产生的。名字空间查找请求被发送(并且有可能被路由)到一个目的地名字空间管理器,例如,按照接近度量。目的地名字空间管理器可以是在一个具有唯一的在数字上最接近该至少单向的等价数字标识值的标识符的名字空间管理器的预定范围内的邻近名字空间管理器中的任何一个。名字空间查找请求被转送以交付给相应注册请求的发起者(例如名字空间供应者),它们已经表达了对该名字空间分支感兴趣或者负责该名字空间分支。
在还有一些另外的实施例中,在一个联盟名字空间基础结构中迁移一个名字空间查找请求。名字空间管理器接收一个名字空间分支的名字空间查找请求。该名字空间管理器包括一个唯一的名字空间标识符,它标识该名字空间分支。名字空间管理器唯一的标识符标识比一个或多个其它名字空间管理器的名字空间管理器唯一标识符更接近所产生的名字空间分支唯一标识符(例如,至少单向的等价数字标识值)的名字空间管理器。检测名字空间分支已经被迁移到一个具有不同名字空间管理器唯一标识符的名字空间管理器的标志。
在还有一些其它实施例中,在一个联盟名字空间基础结构中处理一个名字空间查找请求。接收包括标识一个名字空间的名字空间分支的名字空间串的名字空间查找请求。标识该名字空间查找请求的名字空间查找请求类型。检测一个或多个已经注册了与该名字空间分支相关的名字空间的部分的供应者。基于所标识的名字空间查找请求类型,该名字空间查找请求被转送到至少一个供应者。
在其它实施例中,一个资源参加联盟名字空间基础结构中的多个名字空间。建立资源的唯一资源标识符。在第一名字空间中发布该资源的可用性。该唯一资源标识符被链接到第一名字空间中一个现有的名字空间节点资源,使得可以穿过第一名字空间来标识该资源。在第二名字空间中发布该资源的可用性。该唯一资源标识符被链接到第二名字空间中的一个现有的名字空间节点资源,使得可以穿过第二名字空间来标识该资源。
在还有的一些其它实施例中,标识名字空间联盟基础结构中的一个资源子集。从一个发起者接收一个查询。该查询包括第一查询部分,它标识在名字空间分层结构的第一层上满足第一查询准则的第一部分资源。该查询包括第二查询部分,它标识从包括在第一部分资源内的资源中选择的第二部分资源。第二部分资源是在名字空间联盟基础结构中第二不同位置上标识的。第二部分资源的身分被返回给发起者。
在还有的其它实施例中,组织多个资源。确定一个资源被包括在一个或多个名字空间内,其中,这一个或多个名字空间的每一个被配置成组织一个或多个资源。标识在这一个或多个名字空间的第一名字空间内第一资源,并且标识与该资源相关的名字空间。第一名字空间段用于将该资源链接到第一资源,使得可以穿越该名字空间段从第一资源导航到该名字空间内的该资源。
在本发明范围内的实施例包括用于携带或者具有存储在其上的计算机可执行指令或数据结构的计算机可读介质。这类计算机可读介质可以是任何可用的、可由通用或专用计算机***访问的介质。作为例子而非限制性地,这类计算机可读介质可以包括物理存储介质,诸如RAM、ROM、EPROM、CD-ROM或者其它光盘存储、磁盘存储或者其它磁存储设备,或者任何可以用于以计算机可执行指令、计算机可读指令或者数据结构或者可由通用或专用计算机***访问的形式携带或者存储所需要的程序代码方法的其它介质。
在本说明书中以及在所附的权利要求书中,“网络(network)”被定义为一个或多个数据链接(有可能速度不同),支持在计算机***和/或模块(例如,硬件和/或软件模块)之间传输电子数据。当信息通过网络或其它通信连接(或者硬线的,无线的,或者硬线或无线的组合)传送或者提供给计算机***时,将该连接适当地视为计算机可读介质。因而,任何这类连接适当地称为计算机可读介质。上述的组合也应该包括在计算机可读介质内。计算机可执行指令包括,例如,使通用计算机***或专用计算机***执行某个功能或者一组功能的指令和数据。计算机可执行指令可以是,例如,二进制的,中间格式指令如汇编语言,或者甚至是源代码。在有些实施例中,硬件模块,诸如例如,专用集成电路或门阵列被优化以实现本发明的原理。
在本说明书中以及在所附的权利要求书中,“计算机***(computersystem)”被定义为一个或多个软件模块,一个或多个硬件模块,或者它们的组合,它们一起工作以对电子数据执行操作。例如,计算机***的定义包括个人计算机的硬件组件,以及软件模块,诸如个人计算机的操作***。这些模块的物理布局不重要。计算机***可以包括一个或多个通过网络耦合的计算机。同样,计算机***可以包括一个单个的物理设备(诸如移动电话或者个人数字助理“PDA”),其中内部模块(诸如存储器和处理器)一起工作以对电子数据执行操作。而且,计算机***可以包括专用硬件,诸如例如,包括专用集成电路的路由器。
那些本领域的熟练技术人员将意识到,本发明可在网络计算环境中实践,该环境具有许多类型的计算机***配置,包括个人计算机、膝上型计算机、手持设备、多处理器***、基于微处理器的或者可编程消费电子产品、网络PC、小型机、大型机、移动电话、PDA、寻呼机、路由器、网关、中介器(broker)、代理、防火墙、重定向器、网络地址翻译器等等。本发明还可在分布式***环境中实践,其中本地和远程计算机***通过网络链接起来(或者通过硬线数据链路,无线数据链路,或者通过硬线数据链路和无线数据链路的组合)共同执行任务。在分布式***环境中,程序模块可位于本地和远程两者的存储器存储设备中。
在本说明书中以及在所附的权利要求书中,“资源(resource)”被定义为任何模块、对象、计算机***、设备、文件、数据库项、模式、服务等等,它们可以用于满足指定的功能,诸如例如,存储数据,定义数据格式,打印文档等。资源可以由服务组件来支持和/或主机控。例如,文件资源可以具有一个作为访问该文件的服务组件的文件服务器。同样,会议室可以具有一个接待员邮箱作为安排会议时间的服务组件。实现的资源可跨多个其它资源分布。
资源还定义为包括名字空间节点资源,例如,被包括在一个名字空间内,促进或者提供对名字空间功能的访问,诸如例如,名字空间安全和管理功能,和/或可以被穿过以访问其它资源,诸如例如,另一个名字空间节点资源、计算机***或计算机***组件。在有些实施例中,名字空间节点资源可以以分布方式实现。而且,名字空间节点资源可以表示一个名字空间树中的相应节点。
在本说明书中以及在所附的权利要求书中,“资源描述符(resourcedescriptor)”定义为描述资源的数据结构(例如,按照资源描述符模式格式化的)。
在本说明书中以及在所附的权利要求书中,“名字空间(namespace)”定义为确定范围机制,用于将资源(例如,在因特网上的全部资源)分解成多个部分,在这些部分上可以执行解析、发现和消息路由。名字空间是可扩展的,因此可以定义新的范围并且各个范围可以是分层的。
名字空间可以视为森林,其中每个名字空间(树)表示为具有方案的统一资源标识符(“URI”)并且紧跟在其后的用作根的部分。URI方案可以是分层的或者是平面的。分层方案诸如“名字(name)”和“http”(与平面方案如“uuid”相反)可以由在方案名字之后“:/”字符序列的存在来标识。分层方案的第一部分可以标识负责URI组件其余部分的命名授权机构。这类URI是由在方案名字之后的“://”字符序列的存在来标识的。名字空间可以既是分层的又是可路由的,意思是名字空间用作可以用于标识从发送者到接收者的通信路径的标识符。
在有些实施例中,名字空间可以定义为如下:
Namespace:=Flat|Hierarchical(平面的|分层的)
Flat:=Scheme‘:’Opaque_part(方案‘:’不透明部分)
Hierarchical:=Scheme“:/”(‘/’Authority‘/’)?Segment(‘/’Segment)*(方案“:/”(‘/’授权机构‘/’)?段(‘/’段)*)
Scheme:=按URI一般句法由RFC-2396定义的
Opaque-part:=按URI一般句法由RFC-2396定义的
Authority:=按URI一般句法由RFC-2396定义的
Segment:=按URI一般句法由RFC-2396定义的
资源可以使其在树中的任何分支上可用,并且给定资源可以在多个名字空间中揭示。而且,给定的名字空间可以标识单个资源或者名字空间分支(一组资源)。这样的分组可以是逻辑的或物理的,取决于名字空间的语义。分组是通过在所标识的名字空间分支上执行深度优先搜索来获得的。一旦一个资源分组已经被标识,就可以在它们上面执行许多操作,诸如选择满足某些准则的资源,仅发送(并且有可能路由)给定的消息到在一个分组中那些资源,等等。
单个资源可以视为一个平凡的集合。因而,每个资源可以分配一个名字(空间)。因为名字空间是可路由的,消息可以通过名字空间联盟基础结构被路由到任何具有名字的资源。这样的路由可以跨越信任边界并且穿过防火墙。
通常,资源可以分配一个或多个URI,它们可以用于访问该资源。一个URI,分配给资源的资源ID,在最低程度上可以跨越由一个给定的名字空间联盟基础结构实现的所有名字空间,使得资源可以以异乎寻常的方式被引用。其它有可能非唯一的URI也可以分配给资源。这些其它有可能非唯一的URI提供通过由一个给定名字空间联盟基础结构实现的名字空间内的附加位置来访问资源。资源可以分配至少一个有可能非唯一的URI,用于可以被穿过以访问该资源的每个名字空间。
图5例示从名字空间的供应者和集合观点来看的名字空间联盟基础结构的例子。名字空间联盟基础结构500示出供应者可以在名字空间树中任何分支上注册。而且,供应者可以注册在有可能不同树中的多个名字空间分支上。例如,供应者501注册为名字空间分支location:/CorporateBuildings/bldg34(位置:/公司大楼/大楼34)、location:/CorporateBuildings/bldg50/floor2(位置:/公司大楼/大楼50/楼层2)和location:/CorporateBuildings/bldg50/floor1/room1304(位置:/公司大楼/大楼50/楼层1/房间1304)。供应者502注册为名字空间分支location:/CorporateBuildings/bldg50(位置:/公司大楼/大楼50)和location:/CorporateBuildmgs/bldg26(位置:/公司大楼/大楼26)注册。供应者503向location:/CorporateBuildings/bldg50/floor1(位置:/公司大楼/大楼50/楼层1)。
如图5所示,应用可以将名字空间视为可以分层嵌套的资源逻辑集合。即,中间名字空间节点(例如,Location:/CorporateBuildings/bldg50/floor1(位置:/公司大楼/大楼50/楼层1)和Location:/CorporateBuildings/bldg50(位置:/公司大楼/大楼50)被视为资源一名字空间节点资源。应用可以有效地以相干和可伸缩的方式在这类逻辑集合上操作,包括发布、搜索、定位、跟踪、确定来自集合内部的事件的目标与源。注意,不是逻辑集合内的所有资源有必要定位在单个计算机***或设备上。资源可以在空间和时间上跨计算机***和设备分布。名字空间联盟基础结构照管有效地将查找请求路由到参加任何给定集合的计算机***和设备,从而对应用提供统一和一致的视图。
图6例示了使其资源在多个名字空间中可用的示例名字空间联盟基础结构600。URIOrganization:/Product(组织/产品)标识名字空间树601的根。同样,URILocation:/Bldg(位置:/大楼)42标识名字空间树602的根。如所示的,Printer(打印机)603既在名字空间树601中又在名字空间树602中出现。
在本说明书和所附的权利要求书中,名字空间节点资源可以简单地视为名字空间树中的一个节点。有些名字空间节点资源可以被视为根节点(例如,Location:/Bldg(位置:/大楼)42),其它的可以被视为中间节点(例如,Organization:/Product/Devices Team(组织:/产品/设备团队)),还有其它的可以被视为叶节点(例如,Location:/Bldg 42/Floor 1/Room 112/Printer603(位置:/大楼42/楼层1/房间112/打印机603))。然而,应该理解,一个名字空间树中的名字空间节点资源可以引用另一个名字空间树中的名字空间节点资源(或者其它资源)。因而,将名字空间节点资源视为一个名字空间树中的根、中间或者叶不限制从其它名字空间树对该名字空间节点资源的查询。
名字空间还包括将两或多个名字空间节点资源链接(或者相关)起来的名字空间段。名字空间段可以用于链接同一名字空间中的名字空间节点资源。例如,名字空间段611(“Devices(设备)”)链接Organization:/Product(组织/产品)到设备团队。而且,名字空间段可以链接(或者连接)不同名字空间树中的名字空间节点资源,从而提供符号链接的功能。穿过名字空间段包括导航到所有目标名字空间节点资源。例如,名字空间段641(“工程”)将PM Team(PM团队)连接到文件资源SpecTemplate.doc和Milestone.prj。
因此,可以穿过名字空间树601中的名字空间段611(“Devices(设备)”),名字空间段621(“设备”)和名字空间段631(“Printer(打印机)”)来标识Printer(打印机)603。同样,可以穿过名字空间树602中的名字空间段612(“Floor(楼层)1”)、名字空间段622(“Room(房间)1226”)和名字空间段632(“Printer(打印机)”)来标识Printer(打印机)603。应该理解,名字空间树601的URI方案和名字空间树602的URI方案可以不同。
由于同一资源可以参加多个名字空间并且提供符号链接功能,因此所有参加它们的名字空间和资源的全局视图形成有向图,其中名字空间段用作有标签的图边,而其它资源用作图节点。名字空间根有效地将这个全局图中的名字空间节点资源和其它资源划分成起始和可到达资源的集合,其中起始名字空间节点资源提供名字空间确定范围的基础。因此,用于实现查询的高速缓存的信息被减少并跨每个名字空间分布。
而且,任何给定的名字空间可以形成一个图,因为同一资源可以使其在多个名字空间分支上可用并且有些段可以连接以其它方式连接的名字空间节点资源。
图1例示名字空间联盟基础结构100的例子。名字空间联盟基础结构100包括名字空间管理器101,102,103,111和112,它们可以形成不同类型的结成联盟的合作伙伴。例如,名字空间管理器101,102,103彼此对等地结成联盟而没有根名字空间管理器。另一方面,名字空间管理器111和112分别与名字空间管理器101和102结成联盟,其中名字空间管理器101和102用作根名字空间管理器。不同类型的设备可以参加名字空间联盟基础结构,包括主机(例如,PC主机资源),消息路由器,消息网关(例如,防火墙,网络地址翻译(“NAT”盒,以及重定向器)和消息中介器(例如,发布-预订中介(pub-subintermediarie))。名字空间联盟基础结构100便利于总线协议(例如,活动性,控制,事件化和流化)。而且,名字空间联盟基础结构100可以使用相关的WS协议诸如例如WS-发现和WS-事件化来与第三方软件和硬件堆栈互操作。
通常,名字空间管理器101,102,103,111和112可以利用名字空间联盟协议来形成合作伙伴关系并且交换名字空间信息。合作伙伴关系的形成和名字空间信息的交换促进对名字空间资源更有效和可靠的访问。对等名字空间管理器(例如,名字空间管理器101,102和103)可与其它对等名字空间管理器交换名字空间信息。然而,其它名字空间管理器(例如,名字空间管理器111和112)可与相应的根名字空间管理器(例如,名字空间管理器101和102交换名字空间信息。名字空间管理器101,102,103,111和112每一个可以维护一个名字空间信息的数据库,诸如例如,什么名字空间管理器或者供应者对哪些名字空间分支感兴趣。
名字空间联盟基础结构100包括供应者121,122,123,124,126和127。每个供应者可以对名字空间联盟基础结构中一个或多个名字空间分支感兴趣。供应者与相应的名字空间管理器交换名字空间信息。例如,供应者122与名字空间管理器111交换名字空间信息。相应的名字空间管理器随后促进将名字空间信息传送到其它名字空间管理器。例如,名字空间管理器111可以将名字空间信息传送到名字空间管理器101,而名字空间管理器101可以接着将名字空间信息的有关部分传送到名字空间管理器102和103。
名字空间联盟基础结构(例如,名字空间联盟基础结构100)促进在名字空间上分发查找请求到合适的供应者。例如,供应者501,502,503可以是供应者121,122,123,124,126或127中每一个。
名字空间管理器可以使用各种各样不同机制来结成联盟。第一种结成联盟机制包括对等名字空间管理器转送名字空间信息到所有其它对等名字空间管理器。当一个名字空间管理器要加入一个名字空间联盟基础结构时,该名字空间管理器使用广播/多播发现协议,诸如例如WS-发现,来宣布它的存在(广播/多播Hello(你好))并且发出广播/多播探测信号来检测其它名字空间管理器。该名字空间管理器随后与已经存在于网络上的其它名字空间管理器建立简单的转送合作伙伴关系,并且接受与新加入的名字空间管理器的新合作伙伴关系。之后,该名字空间管理器可以将每个名字空间请求转送到它的合作伙伴。
第二种结成联盟机制包括对等名字空间管理器有效地转送所有名字空间信息到其它对等名字空间管理器。当一个新的名字空间管理器要加入一个名字空间联盟基础结构时,新名字空间管理器使用广播/多播发现协议,诸如例如WS-发现来宣布它的存在(广播/多播Hello(你好))并且发出广播/多播探测信号来检测作为名字空间联盟基础结构一部分的其它名字空间管理器。在检测到另一个名字空间管理器时,新的名字空间管理器与其它名字空间管理器建立合作伙伴关系。从已建立的合作伙伴关系,新的名字空间管理器了解到已经参加联盟名字空间基础结构的其它名字空间管理器的存在。它接着与这些新了解到的名字空间管理器建立合作伙伴关系并且接受任何新进入的合作伙伴关系请求。
名字空间管理器的到达/离开和名字空间注册两者都是通过名字空间联盟基础结构来充满,使得每个名字空间管理器都具有其它名字空间管理器和名字空间注册的全局知识。有了这样的全局知识,任何名字空间管理器可以将查找请求只转送到具有已在请求中指定的名字空间分支下注册的供应者/预订者的合作伙伴。
第三种结成联盟机制包括对等名字空间管理器间接地将名字空间信息转送到其它对等的名字空间管理器。在这第三种机制中,名字空间管理器分配唯一的标识符(ID的),诸如例如,128位或160位ID。负责给定名字空间树的名字空间管理器被确定是一个其ID最接近于由至少单向映射功能诸如例如散列给定名字空间树而获得的名字空间管理器。基于名字空间的映射方案的这样一个散列化在下面更详细地描述。
在这第三种机制中,名字空间管理器在结构上来充满名字空间管理器到达和离开。另一方面,名字空间注册被转送到被确定为负责在请求中指定的名字空间分支的名字空间管理器。为了可伸缩性、负载平衡和容错,接收名字空间注册的名字空间管理器可靠地在那些在其邻近集合中内的名字空间管理器中充满这些注册。一个指定名字空间管理器的邻近集合被确定为具有在一个有限的模ID的地址空间内指定名字空间管理器的ID任何一边上预定义范围内的ID的名字空间管理器集合。
与机制2相似,新加入的名字空间管理器使用广播/多播发现协议,诸如例如WS-发现来宣布它的存在(广播/多播Hello(你好))并且发出一个广播/多播探测信号来检测已经是名字空间联盟基础结构一部分的名字空间管理器。新名字空间管理器与所发现的名字空间管理器建立合作伙伴关系并且使用该合作伙伴关系了解参加名字空间联盟基础结构的其它名字空间管理器的存在。新名字空间管理器随后与新发现的名字空间管理器建立进一步的合作伙伴关系并且接收任何新进入的合作伙伴关系请求。它从其在它所负责的名字空间分支之下的合作伙伴接受进入的名字空间注册,并且可在其邻近集合上充满它们。
响应于进入的查找请求,新名字空间管理器咨询其注册数据库并且将请求转送到具有在请求中指定的名字空间分支之下注册的供应者/预订者的名字空间管理器。因而,当使用这第三种机制时,在名字空间联盟基础结构中的每个名字空间管理器具有所有其它名字空间管理器的全局知识,但除了将注册信息有效地划分在名字空间管理器中。名字空间管理器因而间接地将查找请求只转送到那些具有在请求中指定的名字空间分支之下注册的供应者/预订者的合作伙伴。这个间接是通过具有在请求中指定的名字空间分支之下的名字空间注册的全局知识的名字空间管理器来完成的。
第四种结成联盟机制包括对等名字空间管理器间接地将名字空间信息路由到其它对等的名字空间管理器。这第四种机制不同于第三种机制,在于名字空间管理器到达/离开和名字空间注册/查找请求两者全部是路由的而不是充满的。路由协议设计为保证名字空间查找请求和名字空间注册请求之间的集合点。
图2例示促进将请求间接地路由到合作伙伴的计算机体系结构200的例子。计算机体系结构200示出不同类型的计算机***和设备有可能跨多个参加名字空间联盟基础结构的本地发现范围而扩展。
工作站233可以包括一个PnP供应者实例,它向在location:/architecture200/scope224/Devices(位置:/体系结构200/范围224/设备)名字空间分支之下的相应名字空间管理器注册。为通知其合作伙伴有关这个供应者实例的存在,工作站233经过名字空间联盟基础结构路由名字空间注册请求201。名字空间注册请求201最初被转送到膝上型231,它接着将名字空间注册请求201转送到消息中介器237,后者进而将名字空间注册请求201转送到消息网关241。消息网关241将注册信息注册请求201保存在它的数据库中并且返回成功消息204到工作站233。
随后,另一个供应者实例,这次是运行服务的供应者实例,在工作站233内出现活动,并且将它自己向在location:/architecture200/scope221/Services(位置:/体系结构200/范围221/服务)名字空间分支之下的相应名字空间管理器注册。这次名字空间管理器知道消息网关241负责在location:/architecture200(位置:/体系结构200)之下的注册并且将注册请求205直接转送到消息网关241。消息网关241将注册信息注册请求205保存在它的数据库中并且返回成功消息206到工作站233。
随后,打印机236(例如,UPnP打印机)加电并且发送宣告207。服务器234检测到宣告207,给打印机236分配名字空间location:/architecture200/scope224/Devices(位置:/体系结构200/范围224/设备),并且将注册请求208路由到消息中介器237。消息中介器237将注册请求208转送到消息网关241。消息网关241将注册信息注册请求208保存在它的数据库中并且返回成功消息210到服务器234。
随后,个人计算机242发出发现请求211以发现在名字空间分支location:/architecture200(位置:/体系结构200)之下的所有设备。由于个人计算机242不知道将发现请求211转送到哪里,因此它通过工作站243路由发现请求211。因为路由协议实质上保证给定名字空间树的注册和查找请求之间的集合点,所以工作站243将发现请求211转送到消息网关241。消息网关241将发现请求211转送到工作站233和服务器234两者。工作站233和服务器234分别发送应答消息214和216到个人计算机242。
这第四种机制通过将请求路由到具有在请求中指定的名字空间分支(例如,location:/architecture200(位置:/体系结构200)之下的名字空间注册的全局知识的名字空间管理器(消息网关241)来工作。这第四种机制实质上保证路由可以在0(logN)跳内完成,其中N是参加联盟名字空间基础结构的名字空间管理器的数量。由于这第四种机制有效地划分名字空间注册信息并且不要求所有参加的名字空间管理器的全局知识,因此它的尺度可达非常大的网络,甚至是因特网。
图3例示在一个名字空间联盟基础结构中名字空间管理器之间二元关系的例子。在图3中所示的二元关系是一种可用于实现名字空间管理器之间更有效路由的关系。使用反射的、反对称的、传递的和总的并且在名字空间管理器身分域上定义的二元关系,将参加名字空间联盟基础结构的名字空间管理器组织为一个经排序的列表。经排序列表的两端是连接的,从而形成环306。这使得在经排序列表中的每个名字空间管理器有可能将其本身视为在经排序列表的中间。经排序列表可以双向链接,因此任何名字空间管理器可以以任一方向穿过经排序列表。而且,存在从名字空间管理器身分的值域(例如,2,50或151)到名字空间管理器本身的1∶1映射。这个映射考虑到了在映射不紧密时是由于在值域中名字空间管理器的稀疏造成的。
在环306上的每个名字空间管理器可以包括一个路由表,它促进将名字空间信息(例如,注册和查找请求)路由到其它名字空间管理器。图3中示出一个具有ID 64的名字空间管理器的示例路由表。该路由表指示ID 64的后继者是ID 76。后继者可以是在环306上从ID 64顺时针方向的直接毗邻名字空间管理器。后继者可以改变,例如,当新的名字空间管理器(例如,具有ID为71的)加入或者现有的名字空间管理器(例如,ID 76)离开名字空间联盟基础结构时。
该路由表指示ID 64的先前者是ID 50。先前者可以是在环306上从ID 64逆时针方向的直接毗邻名字空间管理器。先前者可以改变,例如,当新的名字空间管理器(例如,具有ID为59的)加入或者现有名字空间管理器(例如,ID 50)离开名字空间联盟基础结构时。
该路由表指示ID 64的邻近者是ID 83,76,50和46。邻近者可以使用两个因子大小和范围中较大者来标识。名字空间管理器被标识为一个邻近的成员,当相应的ID在主ID(例如,以环306的顺时针或逆时针方向)的最小范围内或者小于在邻近中已经存在的某个配置的最小邻近大小时。例如,在环306上,指定的范围可以具有20的数量并且大小可以大于4。因此,在ID 64顺时针(+10)和逆时针(-10)两者的20个位置内的ID都是ID 64的邻近者。邻近者可以改变,例如,当名字空间管理器加入或者离开名字空间联盟基础结构时或者当指定的范围被改变时。例如,在大小等于4的情况下,具有ID 48的名字空间管理器可以替代具有ID 46的名字空间管理器。
该路由表指示ID 64可以直接路由到ID 200,2,30,46,50,64,76,83,98和135。因而,当具有ID 64的名字空间管理器接收请求时,名字空间管理器可以将请求路由到具有路由表中比较接近于请求中的名字空间管理器ID的ID的名字空间管理器。
图4例示促进将名字空间联盟基础结构与其它协议集成的体系结构400的例子。名字空间联盟基础结构可以支持基于供应者的扩展模型。因此,联盟名字空间基础结构可以与现有的协议集成,假定现有协议的资源模型与名字空间的兼容。体系结构400示出与现用目录402和UDDI服务器403互操作的名字空间管理器401,404,406(例如,名字空间联盟基础结构的)。实箭头指示名字空间管理器使用名字空间联盟协议通信,虚线区域指示名字空间管理器使用LDAP协议与现用目录402通信,而点线箭头指示名字空间管理器使用UDDI协议与UDDI服务器403通信。
发布-预订主题是名字空间的另一个示例用法。发布-预订主题可以视为对该主题的预订者的集合;因此,主题名字被视为名字空间。将发布-预订主题视为名字空间的优点是名字空间联盟基础结构可以用于将通知消息从发布者路由到预订者。对主题的预订者可以被视为名字空间注册请求并且对主题的发布可以被视为名字空间查找请求。
在有些实施例中,名字空间联盟基础结构可以给编程者提供类似总线的抽象来开发分布式应用。例如,名字空间联盟基础结构可以抽象活动性一应用使用这种机制来了解它们感兴趣的资源何时已经离开网络了。为了跟踪给定的资源,应用预订发送到在该资源的身分URI(例如,它的名字)之后命名的发布-预订主题的通知。通知给定资源已经离开网络的任何组件(例如应用)可以发布一个活动性通知消息给在资源的身分URI之后命名的主题,从而通知感兴趣跟踪该资源的其它应用。由于发布-预订的预订跨名字空间基础结构结成联盟并且由于许多身分方案是分层的(以从活动性观点捕捉资源的容纳(containment)方面),因此***避免了简单检测***的n2次ping(测试网络节点连通性)问题并且在网络规模很大时也非常好。而且,较感兴趣的组件(例如应用),对于给定的资源,越快注意到它已经离开网络,就越有利。
开发者可以将名字空间联盟基础结构视为在其中注册了资源诸如文件和事件源的云团。应用可以发出针对该云团的发现请求来发现已注册的资源。应用也可以请求该云团代表它们预订当前和将来的向该云团注册过的事件源。而且,应用可以预定在该云团中维护的发布-预订主题。任何人可以发布通知消息并且该云团照管将该消息转送给向其发布该消息的事件主题的预订者。
各种类型的资源可以在名字空间中发布,包括服务、设备、文件、主机、组件、数据库中的项、关于元数据的元数据(模式)等等。资源可以具有作为它的主管/支持它的服务组件。例如,文件源可以具有文件服务器作为访问该文件的服务组件。会议室可以具有接待员邮箱作为安排会议时间的服务组件。
每个资源可以与捕捉其描述性方面的资源描述符相关联。因而,可以查询资源描述符来标识感兴趣的资源。当标识了一个资源时,该资源可以通过该资源的相应服务方面来访问。可以发送到作为资源的主管/支持资源的服务的消息类型从一种资源类型改变成另一种类型。例如,文件服务器支持开放文件资源而接待员接受会议室的安排时间请求。
实现资源描述符的数据模型可以是可版本化的,可扩展的和可互操作的。这样一个资源数据模型可以跨许多当前的框架诸如分布式文件***(“DFS”),AD和UDDI来共享。这样一个单一的共享的数据模型可以促进AD对象和DFS文件(或者形成其它资源管理***的资源)被视为使用名字空间方法结成联盟的资源,并且通过发送消息给作为主管的服务来访问。
因此,资源可以定义为具有下列属性:
资源ID:可以任选地用一组引用属性来增补并且可以在空间和时间上稳定的URI。可以表示为资源引用模式的实例。资源ID连同资源属性可以共同地表示资源的身分。
描述符:资源专用模式实例,包含有关该资源的半静态元数据。该元数据用于资源选择。资源描述符模式可以分类。配置数字:单调增强的数字,标识资源描述符数据的特定版本。这个数字每当资源描述符被修改时就增加。
实例ID:单调增加的数字,标识活动资源的特定实例。例如,这可以与服务/设备资源的引导时间相同或者与文件资源的文件修改时间相同。
进一步参考描述符,设备可以具有按照一个或多个模式的元数据。例如,打印机可以具有按照描述该打印机不同方面的不同模式的元数据。资源描述符模式可以由组织如UPnP论坛工作组(例如,打印机模式可以由UPnP打印机工作组来标准化)和W3C来标准化。图13示出描述资源的示例分类1300。在分类1300内,不同模式通常表示为如下:
服务引用模式:扩展资源引用模式并且指定一个动作类型列表,该列表标识由资源支持的消息,它的断言的政策容器(诸如所支持的传输),以及一组扩展名。
资源描述符模式:扩展资源引用模式并且指定描述符的配置数字(见下面的说明),资源的友好名字,支持资源的服务的服务引用,以及一组扩展名。
名字空间节点描述符模式:扩展资源描述符模式并且指定从它可达到的资源作为边缘描述符模式的实例。
边缘描述符模式:指定在本地确定范围的边缘名字,边缘类型和目标资源。
设备描述符模式:扩展资源描述符模式并且指定序列号和制造者名字。
打印机描述符模式:扩展设备描述符模式并且指定打印机专用属性诸如分辨率,彩色打印的能力,每分钟页数,以及所支持的纸张大小。
以上述任何描述模式定义的任何信息可以包括在一个用于标识联盟名字空间基础结构中资源的查询中。例如,可以使用过滤器(或者查询)表达式搜索和导航描述符数据。例如,可以按照描述符模式或字段值类型来过滤,导航到从它的引用字段可到达的实例,对这些应用预订者的过滤器,等等。在有些实施例中,使用基于XPath的过滤器表达式。回来参考图6,使用XPath句法,在由资源描述符模式指定的描述数据上操作的过滤器表达式可以用于定位一个在Location:/Bldg42/Floor1(位置:/大楼42/楼层1)的可以彩色打印的打印机。
名字空间可以指定一个过滤器表达式,以URI段参数的形式,用于在选择和穿越的名字空间节点资源上定义的字段/属性。例如,名字空间Location:/Bldg42/Floor1/Room1226;employee=″employee1″/printer(位置:/大楼42/楼层1/房间1226;职员=“职员1”/打印机)仅当“Room 1226(房间1226)”描述符具有“employee(职员)”字段具有值“employee1(职员1)”时才穿越名字空间节点资源“Room 1226(房间1226)”。同样,名字空间Orgamzation:/Product/DevicesTeam;building=″Bldg33″/Dev/Computer604;printer=″color″(组织:/产品/设备团队;大楼=“大楼33”/设备/计算机604;打印机=“彩色”)仅当它的描述符具有值为“Bldg33(大楼33)”的“building(大楼)”字段(因而标识资源的第一部分)时才穿越名字空间节点资源“Devices Team(设备团队)”,并且仅当它的描述符具有值“color(彩色)”的“printer(打印机)”(意味着标识一台彩色打印机已经附在它上面了)字段时才选择名字空间节点资源“Computer 604(计算机604)”。
##
使用唯一的名字空间管理器ID,可以提供下面的功能来路由名字空间联盟基础结构中的名字空间信息:
RouteNumerically(V,Msg):给定从名字空间管理器的值域标识的值V和消息“Msg”,将该消息递送给名字空间管理器X(它的身分可以使用映射功能映射到V)。
Neighborhood(X,S):Neighborhood(邻近)是在名字空间管理器X的任一侧的具有集的势等于S的名字空间管理器集合(例如在环306上)。
本发明的实施例还可以使用参***的名字空间管理器的接近准则。接近准则可以定义为一种等价关系,将结成联盟的名字空间管理器集合划分成一组不相交的类(或分区)。通常,在集合S上的关系R如果满足下列属性就是等价关系:
·反射:x是S的一个元素→x R x
·对称:给定S的x,y元素,x R y→y R x
·传递:给定S的x,y,z元素,x R y∧y R z→x R z
本发明的实施例可以支持多个不同接近准则,并且接近准则可以以偏序来排列。例如,认为所有属于“公司1”的名字空间节点资源是最接近的准则在认为在“公司1,位置A”内的所有名字空间管理器是最接近的准则之前。这是前面的准则(属于“公司A”)认为最接近的名字空间管理器的集合为后面的准则(属于“公司1,位置A”)认为最接近的名字空间管理器的集合的超集所得到的结果。另一方面,在认为“公司1”内所有名字空间管理器最接近的准则与认为“公司1,位置A”内所有名字空间管理器最接近的准则之间没有先后关系。
在计算联盟中每个名字空间管理器的路由名字空间管理器时考虑接近事项,其结果是在到最终目的地的路径上的每个路由跳跃保持在发起请求的名字空间管理器的最接近范围内。而且,仍能产生用数字表示的空间中名字空间管理器之间闭合距离的明显进步。
使用唯一的ID连同接近准则,可以提供下面的附加功能用于在名字空间联盟基础结构中路由名字空间信息:
RouteProximally(V,Msg,P):给定从名字空间管理器的域标识的值V和消息“Msg”,将该消息递送到名字空间管理器Y,其身分可以被映射到接近准则P认为等价的名字空间管理器之中的V。
当供应者/预订者在名字空间分支注册一个名字空间管理器时,注册请求被发送(并且有可能被路由)到负责维护在注册请求中指定的名字空间树的注册信息的合作伙伴名字空间管理器。可供替换地,发起名字空间注册请求到结构中的名字空间管理器是负责的名字空间管理器。将相对于图1的名字空间联盟基础结构和图6的名字空间来描述方法710。
方法710包括接收注册一个名字空间分支的名字空间注册请求的动作,该名字空间注册请求包括标识该名字空间分支的名字空间标识符(动作711)。例如,名字空间管理器112可以从供应者131接收注册请求132,它包括名字空间ID 142。由于名字空间管理器112不是对等名字空间管理器,因此名字空间管理器112可以将注册请求132转送到名字空间管理器102。名字空间管理器112可以在经过名字空间联盟基础结构100传递注册请求132之前按照它的方案所标识的规则规范化名字空间ID 142。
方法710包括一个动作,基于名字空间标识符连同该名字空间标识符路径部分的至少一部分来产生至少单向等价标识值(动作712)。例如,名字空间管理器102可以基于名字空间ID 142连同名字空间ID 142的路径部分的至少一部分来产生散列152。任何各种各样不同的散列函数,诸如例如,SHA,可以用于从名字空间串的各部分产生散列值。产生名字空间串的散列值可以基于名字空间联盟基础结构的配置而改变。
对于非分层的名字空间方案诸如“uuid”(例如,由在方案之后不包含“:/”字符序列来标识的),可以在整个名字空间上产生散列。例如,整个名字空间串“uuid:a36fab9c-9c7f-42c3-97d8-36cd57e9bd29”可用于产生SHA散列值。
分层的名字空间可以是授权的或非授权的,方案部分之后用两个相应的字符序列“://”和“:/”来区分。对于授权的名字空间诸如“name(名字)”,在跟随在“://”字符序列之后的方案部分、授权分量和名字空间的第一路径分量上产生散列。例如,名字空间串″name://red.pm.xrx:200/printers/b42-1749-a″的″name://red.pm.xrx:200/printers″部分可用于产生SHA散列值。对于非授权的名字空间诸如图6的“location(位置)”方案,可以在跟随在“:/”字符序列之后的方案部分和名字空间的第一路径分量上产生散列。例如,名字空间串″location:/Bldg42/Floor1/Room1226″的″location:/Bldg42″部分。
方法710包括一个动作,发送名字空间注册请求到一个名字空间管理器,这个名字空间管理器具有一个在数字上比其它名字空间管理器的标识符更接近于至少单向的等价数字标识值的标识符(动作713)。例如,名字空间管理器102可以启用RouteNumerically(在数字上路由)函数,提供散列152和注册消息132作为输入,例如,RouteNumerically(散列152,注册消息132)。可供替换地,可以使用RouteProximally(最接近地路由)函数。在有些实施例中,名字空间注册请求被直接发送而没有路由发生。
联盟名字空间基础结构100随后使用联盟协议来将注册消息转送到适当的名字空间管理器。例如,注册消息132可以被路由到名字空间管理器103。名字空间管理器103可已将名字空间分支的责任迁移到了另一个名字空间管理器。因而,名字空间管理器103可返回一个指引消息给名字空间管理器102。因此,当已经指向了名字空间分支的责任时,名字空间管理器102可以接收指定适当的名字空间管理器的指引消息。名字空间管理器102进而可以发送注册请求132到适当的名字空间管理器。可以遇到一个或多个指引,直到有一个名字空间管理器接受或者拒绝该注册请求为止。
方法710包括一个动作,将该名字空间管理器与该名字空间分支相关联(动作714)。例如,名字空间管理器103可以与由名字空间ID 142标识的名字空间分支相关联(通过供应者131)。名字空间ID 142可以,例如,标识名字空间601或名字空间602的一部分。在名字空间管理器与名字空间分支之间的关联允许请求(例如,查找请求)指定在要转送的注册请求中所指定的之下的名字空间分支,代替被路由到在该关联中指定的名字空间管理器。当检测到名字空间管理器故障或者获得对一个不同名字空间管理器的指引时,关联被打断。当检测到故障时,路由后来的请求,直到可以形成一个新的关联为止。
图7B例示迁移名字空间注册请求的方法720的示例流程图。方法720将相对于图1的名字空间联盟基础结构和图6的名字空间来描述。
方法720包括一个动作,确定名字空间管理器已经满足了政策约束(动作721)。例如,名字空间管理器103可以确定在名字空间管理器103处正在处理的名字空间信息的数量(与联盟名字空间基础结构100有关的)已经超过一个配置的阈限。配置的阈限可以是,例如,保持在名字空间管理器处的注册总数或者在名字空间管理器处正在服务的查找请求的总数。
方法720包括一个动作,标识一个可以被迁移以满足与政策约束相关联的政策行动的名字空间分支(动作722)。例如,名字空间管理器103可以标识一个可以被迁移以减少在名字空间管理器103处理的名字空间信息低于配置的阈限的名字空间分支(例如,相应于名字空间ID 142)。名字空间管理器可标识一个更重地填充了的和/或更重地服务的名字空间分支用于迁移。
方法720包括一个动作,响应于政策行动,将名字空间分支的现有注册迁移到合作伙伴名字空间管理器(动作723)。例如,名字空间管理器103可以响应于一个行动,将现有注册迁移到合作伙伴(例如,邻近)名字空间管理器,这个行动是为减轻较重填充了的和/或较重服务的名字空间分支上的负担而发生的。
方法730也可以包括一个动作,接收相应于名字空间分支的名字空间请求。例如,名字空间管理器103可以接收相应于由名字空间ID 142表示的名字空间分支的注册请求132。
方法720还可以包括一个动作,采取行动将名字空间请求重定向到合作伙伴名字空间管理器。例如,由点线箭头指示,名字空间管理器103可以重新将注册请求132路由到名字空间管理器101。迁移名字空间分支的名字空间管理器可以启用RouteNumerically(在数字上路由)来将请求重新路由到不同的名字空间管理器。例如,可以启用RouteNumerically(H,migrateMsg)来将请求重新路由到由正在迁移的名字空间分支的至少单向的等价值标识的名字空间管理器(例如,名字空间管理器101)。例如,要迁移分支location:/Bldg42/Floor1(位置:/大楼42/楼层1),名字空间管理器103在串“location:/Bldg42/Floor1”上产生散列H,启用RouteNumerically(H,migrateMsg)来标识负责被迁移分支的名字空间管理器101,并且将在被迁移名字空间分支之下的所有名字空间注册如location:/Bldg42/Floor1/Room1226(位置:/大楼42/楼层1/房间1226)和location:/Bldg42/Floor1/Room1119(位置:/大楼42/楼层1/房间1119)迁移到所标识的名字空间管理器101。
名字空间管理器也可决定将所有沿被迁移的名字空间分支的干线所遇到的名字空间注册转送到作为该分支主机的合作伙伴名字空间管理器。这促进合作伙伴名字空间管理器分支为所有指定该名字空间分支的查找请求服务,而不必让这些请求经历正在迁移的名字空间管理器,或者直接或者间接地,自始至终。正在迁移的名字空间管理器可以留在指示它已经迁移了指定名字空间分支之下的注册信息的树桩之后。正在迁移的名字空间管理器也可以废除对跟踪在被迁移的注册中指定的供应者/预订者的活动性通知的预订,如果有的话。因此,随后在由正在迁移的名字空间管理器接收的被迁移名字空间分支的干线之下和沿此干线的名字空间注册被转送到合作伙伴名字空间管理器。
图7C例示处理名字空间注册请求的方法730的示例流程图。方法720将相对于图1的名字空间联盟基础结构和图6的名字空间来描述。
方法730包括一个动作,接收注册一个名字空间分支的名字空间注册请求,该名字空间注册请求包括一个标识该名字空间分支的名字空间URI串,并包括一个唯一的引用或标识符,用于请求该名字空间分支中注册的供应者(或者预订者)(动作731)。例如,名字空间管理器103可以接收包括对供应者131的引用的注册请求132。
方法730包括一个动作,确定名字空间管理器对该名字空间分支感兴趣(动作732)。例如,名字空间管理器102可以确定名字空间管理器102是否负责由名字空间ID 142表示的名字空间分支(例如,Organiztion:/Product/Messaging Team(组织:/产品/消息团队))。当名字空间管理器102不负责时,名字空间管理器102可以将该名字空间注册请求(例如,注册请求132)转送到指定名字空间分支的负责的名字空间管理器(例如名字空间管理器103)。可供替换地,当名字空间管理器102不负责时,名字空间管理器102可以发送指引消息134到发起该注册请求(例如注册请求133)的名字空间管理器(例如,名字空间管理器103)来代替联系负责的名字空间管理器(例如,名字空间管理器101)。当名字空间管理器102负责时,名字空间管理器102可以保留该名字空间注册请求。
方法730包括一个动作,将名字空间标识符保存在适当索引的名字空间注册数据库(动作733)。例如,如果名字空间标识符是URI串,则以字母顺序存储在名字空间注册数据库中,其中较长的串排列得较高。例如,名字空间管理器103可以将名字空间ID 142保存在名字空间注册数据库中。围绕供应者131的虚线和相应的虚线框,指示名字空间管理器103已经将供应者131引用为对名字空间ID 142表示的名字空间感兴趣。
方法730还可以包括一个动作,确定随后要多么频繁地验证供应者的活动性。例如,名字空间管理器103可以确定随后要多么频繁地验证供应者131的活动性。名字空间供应者103可以可选地预订发布到由ID 161标识的供应者的发布-预订主题的活动性通知。发布-预订主题可以由ID 161标识。可供替换地,如果没有进行活动性预订,则给注册分配一段时间有限的租期。供应者131可以在租期期满之前通过直接联系名字空间管理器103来更新注册。其它活动性机制也可以使用。
名字空间管理器和供应者活动性可以跨分层结构来分布。位于分层结构中较高层处的名字空间管理器可以依赖于位于相似位置的其它名字空间管理器来报告相应的较低层名字空间管理器和供应者的活动性信息。例如在图1中,名字空间管理器103可以跟踪名字空间管理器102的活动性(两者都是根名字空间管理器)。名字空间管理器103可以依赖于名字空间管理器102来报告任何相应的较低层名字空间管理器(例如,名字空间管理器112)或者供应者(例如,供应者124)的故障。名字空间管理器102进而依赖于名字空间管理器103来报告相似类型故障(例如,供应者126的故障)。
在成功注册供应者131(或者失败)之后,名字空间管理器102可以发送指示成功(或失败)消息到供应者131。
有时,消费者(其它计算机***或设备)可能希望访问由一个供应者管理的名字空间分支中的资源。为获得对资源的访问,消费者可发出查找请求以试图标识资源。查找请求可以在名字空间管理器处接收并且递送到一个或多个适当的供应者。通常,当名字空间管理器接收查找请求时,它将该查找请求路由到最接近它(如由有个预定义的接近度量确定的)并且朝着负责在该请求中指定的名字空间分支的名字空间管理器邻近的合作伙伴名字空间管理器。随着跨邻近名字空间管理器复制注册信息,该查找请求可以由在邻近集合中任何名字空间管理器来满足。
通过最接近发起该查找请求的名字空间管理器来路由,其结果是改善的网络吞吐量和动态负载平衡,因为从查找请求满足的角度,查找请求获得跨邻近名字空间管理器自动和有效地划分。为促进路由,映射查找请求中指定的名字空间ID的算法可以实质上与映射注册请求中指定的名字空间ID的算法相同。例如,从名字空间身分的值域到名字空间管理器的1∶1映射可以用于映射查找和注册请求两者的名字空间ID。
图8A例示了路由名字空间查找请求的方法810的示例流程图。方法810将相对于图1的联盟名字空间基础结构和图6的名字空间来描述。
方法810包括一个动作,接收名字空间查找请求,它包括一个标识名字空间分支的名字空间标识符(动作811)。例如,名字空间管理器103可以接收查找请求133。查找请求133可以指定标识名字空间树602的一个分支的名字空间ID 143,诸如例如,Location:/Bldg 42/Floor 2/ConfRoom 2005(位置:/大楼42/楼层2/会议室2005)。
方法810包括一个动作,基于该名字空间标识符产生一个至少单向的等价数字标识值(动作812)。例如,名字空间管理器102可以散列名字空间ID 143的方案部分连同名字空间ID 143的路径部分的至少一部分来产生散列153。
方法810包括一个动作,发送名字空间查找请求到目的地名字空间管理器(动作813)。目的地名字空间管理器包括在邻近的名字空间管理器中,这些名字空间管理器在一个名字空间管理器的预定范围之内,这个名字空间管理器具有一个在数字上最接近该至少单向的等价数字标识值的唯一标识符。为了路由查找请求133,名字空间管理器103可启用RouteProximally(最接近地路由)(或者RouteNumerically(在数字上路由))功能。例如,名字空间管理器103可以启用RouteProximally(散列153,查找消息133,接近准则P)来路由查找消息133到合作伙伴名字空间管理器102,因为在被认为在指定的接近准则P下最接近名字空间管理器103的名字空间管理器之中,它被标识为一个具有在数字上最接近的唯一ID的名字空间管理器。通过RouteProximal1y(最接近地路由)功能,名字空间管理器102可以被标识。
方法810也可以包括一个动作,转送名字空间查找请求以递送到一个或多个对该名字空间分支感兴趣的供应者。例如,名字空间管理器103可以转送查找请求133到名字空间管理器102。名字空间管理器102可以转送查找请求133到供应者131。
图8B例示迁移名字空间查找请求的方法820的示例流程图。方法820将相对于图1的名字空间联盟基础结构和图6的名字空间来描述。
方法820包括一个动作,接收一个名字空间分支的名字空间查找请求(动作821)。名字空间查找请求包括一个唯一的名字空间标识符,它标识特定的名字空间分支。例如,名字空间标识符可以是URI ID 143。而且,所接收的名字空间查找请求可任选地包括一个至少单向的等价数字标识值,它是基于指定的名字空间分支的标识符产生的。例如,它可以从方案和名字空间ID 143的路径部分的至少一部分产生的散列值153。该名字空间管理器的名字空间管理器标识符比一个或多个其它名字空间管理器的名字空间分支标识符更接近名字空间分支标识符。名字空间管理器102可以接收查找请求133作为唯ID 172比名字空间联盟基础结构100中其它名字空间管理器的唯一标识符(例如ID174)更接近散列153的结果。
方法820包括一个动作,检测该名字空间分支已经被迁移到一个具有不同名字空间分支标识符的不同名字空间管理器的标志(动作822)。例如,名字空间管理器102可以检测树桩的存在,它指示由名字空间ID 143表示的名字空间分支已经被迁移到名字空间管理器101。
方法820还可以包括至少通知发起的名字空间管理器该名字空间分支已经被迁移到不同名字空间管理器的动作。例如,名字空间管理器102可以至少通知名字空间管理器103由名字空间ID 143表示的名字空间分支已经被迁移。例如,名字空间管理器102可以发送指引消息134到名字空间管理器103,指示名字空间管理器103应该联系名字空间管理器101或者为被迁移的分支发起一个新的查找请求132。
名字空间管理器103可以遵循来自名字空间管理器102包括在指引消息中的指令。
名字空间管理器102可以可供替换地重新路由查找请求133本身,通过在其本身上启用RouteProximally(新ID H,查找请求133,接近准则CriteriaP)。例如,与原始散列值相比,新ID H可以通过散列经迁移的名字空间分支的整个分量来产生,前者是通过只散列方案部分和路径组件的第一部分来产生的。启用RouteProximally(最接近地路由)可以使查找请求133被路由到其它名字空间管理器来递送到名字空间管理器101(如由包括查找请求133的虚线箭头所指示的)。
图8C例示处理名字空间查找请求的方法830的示例流程图。方法830将相对于图1的名字空间联盟基础结构和图5的名字空间来描述。
方法830包括一个动作,接收一个名字空间查找请求,它包括一个标识名字空间的名字空间分支的名字空间标识符(动作831)。例如,名字空间管理器102可以接收包括名字空间ID 143的名字空间查找请求133。名字空间ID 143可以标识名字空间基础结构500的名字空间分支。
方法830包括一个动作,标识名字空间查找请求的名字空间查找请求类型(动作832)。例如,名字空间管理器102标识查找请求133的名字空间查找请求类型。在有些实施例中,名字空间查找请求类型可以是一般的请求类型(例如对于任何名字空间分支)或者确定目标的请求类型(例如对于一个特定的名字空间分支)。
方法830包括检测一个或多个供应者已经注册了与该名字空间分支有关的名字空间的各部分的动作(动作833)。例如,名字空间管理器102可以检测一个或多个供应者已经注册了由名字空间ID 143表示的名字空间分支有关的名字空间的各部分。现在参考图5,如果名字空间ID 143是Location:/CorporateBuildings/Bldg 50/Floor1(位置:/公司大楼/大楼50/楼层1),则供应者501、502和503可以被标识。供应者502已经为Room 1304(房间1304)(名字空间树500的Floor1(楼层1)下面)注册,供应者502为Bldg 50(楼层50)(在名字空间树500的楼层1上面)注册,而供应者503向名字空间树500的Floor1(楼层1)注册。
方法830还可以包括一个动作,将名字空间查找请求转送到至少一个供应者,基于所标识的名字空间查找请求类型。例如,名字空间管理器102可以将查找请求133转送到供应者501、502和503中的一个或多个。
对于一个一般请求,名字空间管理器102将请求转送到所有其注册名字空间分支是查找请求中指定的名字空间管理器的前缀或后缀的供应者。例如,名字空间管理器102可将名字空间查找请求133转送到供应者501、502和503,如果名字空间ID 143是Location:/Corporate Buildings/Bldg 50/Floor1(位置:/公司大楼/大楼50/楼层1)。对于一个确定目标的请求,名字空间管理器将请求只转送到其注册名字空间分支是查找请求中指定的名字空间管理器的最大前缀的供应者。然而,对于一般和确定目标类型两者,如果不止一个给定供应者的拷贝诸如501可用,则名字空间管理器102将请求转送到在所选择的接近度量之下较接近查找请求的起点(在这种情况下,名字空间管理器103)的供应者。
名字空间管理器103可以在由名字空间ID 143表示的名字空间分支与名字空间管理器102之间创建一关联(例如,将它存储在名字空间数据库中)。这样一个关联促进名字空间查找请求指定在关联中指定的名字空间分支之下的一个名字空间分支(例如,在Location:/Corporate Buildings/Bldg 50/Floor1(位置:/公司大楼/大楼50/楼层1)之下)要被转送而不是被路由到名字空间管理器102。关联在检测到目标名字空间管理器故障或者获得对一个不同名字空间管理器的指引时被打断。在前一情况下,路由以后的请求,直到可以形成一个新的关联。
图9例示资源参加多个名字空间的方法900的示例流程图。方法900将相对于图6中的名字空间树描述。
方法900包括一个动作,创建资源的唯一资源标识符(动作901)。动作901可以包括创建相应于该资源的URI的路径部分。例如,可以为一个打印机建立“printer 603(打印机603)”的标识符。
方法900包括一个动作,在第一名字空间中发布该资源的可用性(动作902)。例如,打印机603可以发布它在名字空间树601中的可用性。方法900包括一个动作,将唯一资源标识符链接到第一名字空间中的第一名字空间节点资源,使得第一名字空间可以被穿过以标识该资源(动作903)。例如,可以建立名字空间段631以将打印机603链接到“Dev Team(设备团队)”名字空间节点资源。因此,名字空间树601(以及“Dev Team(设备团队)”名字空间节点资源)可以被穿过以标识打印机603。
方法900包括一个动作,在第二名字空间中发布该资源的可用性(动作904)。例如,打印机603可以发布它在名字空间树602中的可用性。方法900包括一个动作,将唯一资源标识符链接到第二名字空间中第二名字空间节点资源,使得第二名字空间可以被穿过以标识该资源(动作905)。例如,可以建立名字空间段632,将打印机603链接到“Room 1226(房间1226)”名字空间节点资源。因此,名字空间树602(和“Room 1226(房间1226)”名字空间节点资源)可以被穿过以标识打印机603。
图10例示了标识名字空间联盟基础结构中资源子集的方法1000的示例流程图。方法1000将相对于图6中的名字空间树描述。
方法1000包括一个动作,从设备接收查询(动作1001)。例如,名字空间树602的供应者可以从可网络连接到该供应者的设备接收查询。该查询包括第一查询部分,标识满足名字空间分层结构中第一层上的第一查询准则的第一部分资源。例如,第一查询部分可以标识在穿过名字空间段“Floor 2(楼层2)”之后满足第一查询准则的第一部分资源(在名字空间树602中)。第一部分资源可以是,例如职员,而第一准则也可以包括例如分配给“Messaging Team(收发消息团队)”的准则。因而,第一查询部分可以标识所有分配给在(Bldg 42(大楼42)的)Floor 2(楼层2)上工作的“Messaging Team(收发消息团队)”的职员。在有些实施例中,第一查询准则用于导航通过引用第一部分资源的资源属性。
查询包括第二查询部分,标识从包括在第一部分资源中的资源中选择的第二部分资源。例如,第二查询部分可以标识在穿过名字空间段“Room 2005(房间2005)”之后满足第二查询准则的第二部分资源(在名字空间树602中)。第二部分资源可以是例如管理员,而第二准则可以是例如设备。因而,第二查询部分可以标识在Room 2005(房间2005)中带有办公室小房间的打印机管理员。在有些实施例中,第二查询准则用于导航通过引用第二部分资源的第一部分资源的属性。
因此,提供从第一查询部分标识的资源作为到第二查询部分的输入,所接收的查询结果可以(取决于资源模式的字段定义)标识带有在第二楼层上Room2005(房间2005)的办公室的且分配给“Messaging Team(收发消息团队的)打印机管理员。
方法1000包括一个动作,返回第二部分资源的身分给该设备(动作1002)。例如,名字空间树602的供应者可以返回ConfRoom 2005(会议室2005)中设备的管理员身分给网络可连接的设备,这些设备是由收发消息团队的职员拥有的。
图12例示了组织多个资源的方法120的示例流程图。方法1200将相对于图6中的名字空间基础结构600来描述。
方法1200包括一个动作,确定一个新的资源要包括在一个或多个名字空间中,一个或多个名字空间的每一个配置为组织一个或多个资源(动作1201)。例如,可以确定打印机603要被包括在名字空间601和/或名字空间602中。方法1200包括一个动作,标识一个或多个名字空间的第一名字空间内的第一资源要与新资源相关(动作1202)。例如,可以标识在名字空间602中的房间1226要与打印机603相关。同样,可以标识名字空间601中的Dev Team(设备团队)要与打印机603相关。
方法1200包括一个动作,使用第一名字空间段链接新资源到第一资源,使得该名字空间段可以被穿过以从现有资源导航到该名字空间内的新资源(动作1203)。例如,名字空间段632可以用于链接603到房间1226,使得名字空间段632可以被穿过以从房间1226导航到打印机603。同样,名字空间段631可以用于链接打印机到Dev Team(设备团队),使得名字空间段631可以被穿过以从Dev Team导航到打印机603。
图11和下面的讨论目的是要提供适合于实现本发明的示例计算环境的简短概括的说明。尽管没有要求(例如,当在硬件中实现时),但本发明将在计算机可执行指令的一般上下文诸如由计算机***执行的程序模块中描述。通常,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机可执行指令,相关联的数据结构,以及程序模块表示执行在此所揭示方法的动作的程序代码的装置。
参考图11,实现本发明的示例***包括计算机***1120形式的通用计算设备,包括处理单元1121,***存储器1122,以及耦合包括***存储器1122在内的各种***组件到处理单元1121的***总线1123。处理单元1121可以执行设计为实现包括本发明特征在内的计算机***1120特征的计算机可执行指令。***总线1123可以是任何若干类型总线结构,包括存储器总线或存储器控制器,外设总线,以及使用任何各种各样总线体系结构的局部总线。***存储器包括只读存储器(“ROM”)1124和随机存取存储器(“RAM”)1125。基本输入/输出***(“BIOS”)1126,包含诸如在启动时帮助在计算机***1120内元件之前传输信息的基本例程,可存储在ROM 1124中。
计算机***1120也可包括读写硬磁盘1139的硬磁盘驱动器1127,读写可移动磁盘1129的磁盘驱动器1128,以及读写可移动光盘1131诸如CD-ROM或其它光介质的光盘驱动器1130。硬磁盘驱动器1127,磁盘驱动器1128和光盘驱动器1130分别通过硬盘驱动器接口1132、磁盘驱动器接口1133和光盘驱动器接口1134连接到***总线1123。驱动器及其相关联的计算机可读介质为计算机***1120提供计算机可执行指令、数据结构、程序模块和其它数据的非易失性存储。尽管在此描述的示例环境使用硬磁盘1139、可移动磁盘1129和可移动光盘1131,但可以使用其它类型的计算机可读介质,包括磁带、闪存卡、数字多功能盘,伯努利盒(Bernoulli cartridge)、RAM、ROM等等。
包括一个或多个程序模块的程序代码方法可存储在硬盘1139、磁盘1129、光盘1131、ROM 1124或RAM 1125,包括操作***1135,一个或多个应用程序1136,其它程序模块1137和程序数据1138。用户可通过键盘1140、定点设备1142或其它输入设备(未示出)诸如例如话筒、操纵杆、游戏垫、扫描仪等等将命令和信息输入到计算机***1120中。这些和其它输入设备可以通过耦合到***总线1123的输入/输出接口1146连接到处理单元1121。输入/输出接口1146在逻辑上表示任何多种多样的不同接口,诸如例如,串行端口接口,PS/2接口,并行端口接口,通用串行总线(“USB”)接口,或者电气和电子工程协会(“IEEE”)1394接口(即,FireWire接口),或者甚至可在逻辑上表示不同接口的组合。
监示器1147或其它显示设备也可以通过视频接口1148连接到***总线1123。扬声器1169或者其它音频输出设备也通过音频接口1149连接到***总线1123。其它***输出设备(未示出),诸如例如,打印机也可以连接到计算机***1120。
计算机***1120可连接到网络,诸如例如,办公室级或者企业级计算机网络,家庭网络,内联网,和/或因特网。计算机***1120可以通过这样的网络与外部源诸如例如远程计算机***,远程应用和/或远程数据库交换数据。
计算机***1120包括网络接口1153,通过它计算机***1120从外部源接收数据和/或发送数据到外部源。如图11所示,网络接口1153促进通过链路1151与远程计算机***1183的数据交换。网络接口1153可以在逻辑上表示一个或多个软件和/或硬件模块,诸如例如网络接口卡和相应的网络驱动程序接口规范(“NDIS”)堆栈。链路1151表示网络的一部分(例如以太网段),并且远程计算机***1183表示网络的一个计算机***。
同样,计算机***1120包括输入/输出接口1146,通过它计算机***1120从外部源接收数据和/或发送数据到外部源。输入/输出接口446通过链路459耦合到调制解调器454(例如,标准调制解调器,电缆调制解调器,或者数据订户线(“DSL”)调制解调器),通过它计算机***1120从外部源接收数据和/或发送数据到外部源。如图11所示,输入/输出接口1146和调制解调器1154促进通过链路1152与远程计算机***1193的数据交换。链路1152表示网络的一部分,而远程计算机***1193表示网络的一个计算机***。
尽管图11表示适合于本发明的操作环境,但本发明的原理可在任何能够实现本发明原理的(如果必要可做适当修改的)***中使用。在图11中例示的环境仅是说明性的,并且决不表示可实现本发明原理的多种多样环境的一小部分。
按照本发明,名字空间管理器,供应者和资源以及相关联的数据,包括名字空间数据库、名字空间标识符和串、散列、资源标识符、路由表和名字空间树,可从任何与计算机***1120相关联的计算机可读介质中存储和访问。例如,这类模块的部分和相关联程序数据的部分可包括在操作***1135、应用程序1136、程序模块1137和/或程序数据1138中,以存储在***存储器1122中。
当大容量存储设备诸如例如硬磁盘驱动器1139耦合到计算机***1120,这类模块和相关联的程序数据也可存储在大容量存储设备中。在网络化环境中,相对于计算机***1120所示的程序模块或其部分,可以存储在远程存储器存储设备中,诸如***存储器和/或与远程计算机***1183相关联的大容量存储设备和/或远程计算机***1193中。这类模块的执行可在分布式环境中完成,如前所述。
本发明可在不脱离它精神或实质特性的情况下以其它特定的形式实现。所述本发明是要在所有方面被认为只是说明性而不是限制性的。本发明的范围因此是由所附的权利要求书而不是由上述说明来表示的。所有来自权利要求书的等价意义和范围内的改变要包括在它们的范围之内。