欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的一致性的制作方法

文檔序號:6456467閱讀:291來源:國知局
專利名稱:聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的一致性的制作方法
聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的一致性
背景
1.背景和相關(guān)技術(shù)
計算機系統(tǒng)和相關(guān)技術(shù)影響社會的許多方面。的確,計算機系統(tǒng)處理信息 的能力己改變?nèi)藗兩詈凸ぷ鞯姆绞?。計算機系統(tǒng)現(xiàn)在通常執(zhí)行在計算機系統(tǒng) 出現(xiàn)以前手動執(zhí)行的許多任務(例如,文字處理、日程安排和數(shù)據(jù)庫管理)。 最近,計算機系統(tǒng)被彼此耦合并被耦合到其它電子設(shè)備,以形成計算機系統(tǒng)和 其它電子設(shè)備可以在其上傳送電子數(shù)據(jù)的有線和無線計算機網(wǎng)絡。結(jié)果,在計 算機系統(tǒng)處執(zhí)行的許多任務(例如,語音通信、訪問電子郵件、控制家用電子
設(shè)備、Web瀏覽、以及打印文檔)包括多個計算機系統(tǒng)和/或其他電子設(shè)備之 間經(jīng)由有線和/或無線計算機網(wǎng)絡的電子消息交換。
然而,為了利用網(wǎng)絡資源來執(zhí)行計算機化任務,計算機系統(tǒng)必須具有標識 并訪問網(wǎng)絡資源的某一方式。因此,資源通常被分配唯一地標識資源并可用于 將一個資源與其它資源進行區(qū)分的唯一標識符,例如網(wǎng)絡地址。由此,期望利 用資源的計算機系統(tǒng)可以使用對應于該資源的網(wǎng)絡地址來連接到該資源。然 而,如果計算機系統(tǒng)沒有關(guān)于網(wǎng)絡資源的網(wǎng)絡地址的先驗知識,則訪問網(wǎng)絡資 源可能是困難的。例如,除非計算機系統(tǒng)(或另一聯(lián)網(wǎng)計算機系統(tǒng))知道網(wǎng)絡 打印機的網(wǎng)絡地址,否則計算機系統(tǒng)不能在該網(wǎng)絡打印機處打印文檔。
因此,已經(jīng)開發(fā)了各種機制(例如,域名系統(tǒng)("DNS")、現(xiàn)用目錄("AD")、 分布式文件系統(tǒng)("DFS"))以供計算機系統(tǒng)標識(和訪問)先前未知的資 源。然而,由于可經(jīng)由不同計算機網(wǎng)絡訪問的資源(例如,設(shè)備和服務)的數(shù) 量和多樣性,開發(fā)者通常需要開發(fā)實現(xiàn)各種不同資源標識和訪問機制的應用程 序。每一不同機制可以具有不同的編碼要求,并且可能不向開發(fā)者提供應用程 序中所需的所有功能。
例如,盡管DNS具有分布式管理體系結(jié)構(gòu)(即,不需要集中式管理), 但DNS不夠動態(tài)、不是自組織的、支持弱數(shù)據(jù)和査詢模型、且具有一組固定的根。另一方面,AD足夠動態(tài),但是需要集中式管理。此外,不同機制的各
方面可能不彼此兼容。例如,使用DNS標識的資源可能不與DFS路由協(xié)議兼
容。由此,開發(fā)者可能被迫選擇最合適的機制并放棄其它機制的優(yōu)點。
用于標識資源的機制在對等網(wǎng)絡中尤其成問題。DNS提供了依賴于一組 特殊根服務器來實現(xiàn)査找請求的査找服務,其中主機名作為關(guān)鍵字且IP地址 作為值。此外,DNS需要信息(NS記錄)的管理來允許客戶機導航名稱服務 器分層結(jié)構(gòu)。由此,在一資源能在網(wǎng)絡上標識之前該資源必須進入DNS。在其 中節(jié)點頻繁地與網(wǎng)絡連接和斷開的更大規(guī)模的網(wǎng)絡中,依賴于信息的輸入并不 總是實用的。另外,DNS專用于找出主機或服務的任務,并且一般不適用于其 它類型的資源。
因此,已經(jīng)開發(fā)了用于資源標識和訪問的其它機制以試圖解決這些缺點。 多個機制包括比DNS更可伸縮的分布式査找協(xié)議。這些機制使用各種節(jié)點安 排和路由算法來將請求路由到相應的資源并存儲用于査找的信息。
這些機制中的至少一個在網(wǎng)絡中的每一節(jié)點處利用局部多級鄰居映射來 將消息路由到目的地節(jié)點。這本質(zhì)上得到其中每一節(jié)點是相應的節(jié)點樹(其鄰 居映射中的節(jié)點)的"根節(jié)點"的體系結(jié)構(gòu)。消息被遞增地逐位路由到目的地 ID (例如,***6=> **46=>, *346=>2346,其中*表示通配符)。這些類型的 機制的路由效率是O(logN)個路由跳,并且要求節(jié)點維護大小為O(logN)的路 由表。
這些機制中的至少另一機制向節(jié)點分配從線性數(shù)字環(huán)中取得的唯一 ID。 節(jié)點維護包含指向其直接后繼節(jié)點(根據(jù)ID值)以及其ID值是值ID+2L的最 近后繼者的節(jié)點的指針的路由表。這些類型的機制的路由效率也是O(logN)個 路由跳,并且要求節(jié)點維護大小為O(logN)的路由表。
至少一種另外的機制需要O(logN"d)個路由跳,并且要求節(jié)點維護大小為 O(D)的路由表。由此,所有這些機制的路由效率都至少部分地取決于系統(tǒng)中的 節(jié)點數(shù)。
此外,由于ID (對于至少某些機制)可以在環(huán)上均勻分布,因此始終存 在環(huán)上的節(jié)點之間的路由將導致某種低效的某一可能性。例如,路由跳可以橫 跨極大的地理距離,橫跨更昂貴的鏈接、或穿過不安全的域等等。另外,當消息路由涉及多個跳時,存在這些事件將發(fā)生多次的某一機率。不幸的是,這些 機制都沒有考慮到節(jié)點相對于彼此的鄰近性(物理的或其它方面的)。例如, 取決于環(huán)上的節(jié)點分布,將消息從紐約路由到波士頓可涉及將消息從紐約路由 到倫敦、到亞特蘭大、到東京然后到波士頓。
因此,至少另一種更新近的機制通過將鄰近性定義為單個標量鄰近性度量 (例如,IP路由跳或地理距離)來考慮鄰近性。這些機制使用對路由表條目的 基于鄰近性的選擇的概念。由于對每一路由表條目可能有許多"正確的"候選 節(jié)點,因此這些機制試圖從候選節(jié)點中選擇最接近的節(jié)點。為此,這些機制可 以提供允許每一節(jié)點確定具有給定IP地址的節(jié)點到其自身的"距離"的功能。 消息在更接近的節(jié)點之間路由,以在路由到更遠的節(jié)點之前向著目的地前進。 由此,可保存某些資源,并且路由更高效。
不幸的是,這些現(xiàn)有機制通常沒有特別地提供節(jié)點之間的對稱關(guān)系(即, 如果第一節(jié)點認為第二節(jié)點是其伙伴,則第二節(jié)點也將第一節(jié)點認為是其伙 伴)、不能在環(huán)上的兩個方向(順時針和逆時針)上路由消息、不能基于多個 鄰近性度量來劃分節(jié)點鏈表、并且不能基于多個鄰近性度量來路由消息。這些 缺陷可能在諸如,例如當將數(shù)據(jù)廣播到網(wǎng)絡的所有節(jié)點時限制網(wǎng)絡的節(jié)點之間 的數(shù)據(jù)的動態(tài)的、分布式的、且高效的傳輸。
在某些環(huán)境中,使用安全機制來確保節(jié)點責任不會不恰當?shù)刂丿B。例如, 可以使用安全機制來防止兩個不同的節(jié)點負責地要求該系統(tǒng)中的系統(tǒng)資源(例 如,消息)或邏輯身份。在某些環(huán)境中,使用活躍度機制來確保如果一消息被 重復地發(fā)送到目標則該消息被接受。不幸的是,許多現(xiàn)有異步系統(tǒng)僅提供有限 的安全和活躍度機制。例如,某些異步系統(tǒng)僅在最終提供安全和活躍度。由此, 這些異步系統(tǒng)不適合諸如,例如授權(quán)存儲等各種類型的應用。
簡要概述
本發(fā)明涉及用于在會合聯(lián)盟內(nèi)維護的副本集內(nèi)執(zhí)行數(shù)據(jù)訪問事務的方法、 系統(tǒng)和計算機程序產(chǎn)品。在某些實施例中,確定主節(jié)點已從節(jié)點的副本集中的 多個節(jié)點中選擇出來。該主節(jié)點被配置成接受并處理客戶機數(shù)據(jù)訪問請求。該 副本集包括該主節(jié)點和其它副節(jié)點。主節(jié)點接收客戶機數(shù)據(jù)訪問請求,且每一數(shù)據(jù)訪問請求指示要在該副本集中的主節(jié)點上訪問的至少一部分數(shù)據(jù)。
主節(jié)點按照接收客戶機數(shù)據(jù)訪問請求的順序向每一客戶機數(shù)據(jù)訪問請求 分配一數(shù)據(jù)序列號。該數(shù)據(jù)序列號包括副本集中的每一節(jié)點要遵循的線性化處 理順序。主節(jié)點向副節(jié)點發(fā)送包括任何對應的數(shù)據(jù)序列號的客戶機數(shù)據(jù)訪問請 求的至少一個。主節(jié)點從至少閾值數(shù)量的副節(jié)點接收指示客戶機數(shù)據(jù)訪問請求 的接收的確認。主節(jié)點提交數(shù)據(jù)訪問請求。提交包括根據(jù)客戶機數(shù)據(jù)訪問請求 來訪問數(shù)據(jù)。
提供本概述以便以簡化的形式介紹將在以下詳細描述中進一步描述的一 些概念。該概述不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨 在用于幫助確定所要求保護的主題的范圍。
另外的特征和優(yōu)點將在以下的描述中闡述,并且部分可從該描述中顯而易 見,或者可以從此處的教示實踐中習得。本發(fā)明的特征和優(yōu)點可以通過在所附 權(quán)利要求中特別指出的手段和組合來認識并獲取。本發(fā)明的特征將從以下描述 和所附權(quán)利要求書中變得完全顯而易見,或者可通過如下所述對本發(fā)明的實踐 而獲知。
附圖簡述
為了描述能夠獲得上述和其它優(yōu)點和特征的方式,將通過參考附圖中示出 的各具體實施例來呈現(xiàn)對以上簡述的主題的更為具體的描述??梢岳斫?,這些
附圖僅描述各典型實施例,從而不被認為是對其范圍的限制,將通過使用附圖 用附加特征和細節(jié)來描述和說明各實施例,附圖中

圖1示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)的一個示例。
圖2示出了幫助間接地將請求路由到伙伴的計算機體系結(jié)構(gòu)的示例。 圖3示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)中節(jié)點之間采用已排序列表和相應的環(huán)的形式 的示例二元關(guān)系。
圖4示出了幫助鄰近路由的示例性環(huán)的環(huán)。
圖5示出了幫助鄰近路由的示例性的、歸納了鄰近性的環(huán)的分區(qū)樹。 圖5A以關(guān)于圖5的環(huán)的分區(qū)樹的各部分的附加細節(jié)示出了圖5的環(huán)的示 例性的、歸納了鄰近性的分區(qū)樹。圖6示出了用于本發(fā)明的原理的合適的操作環(huán)境。
圖7示出了考慮了鄰近性準則的、用于填充節(jié)點路由表的方法的示例流程圖。
圖8示出了用于對聯(lián)盟基礎(chǔ)結(jié)構(gòu)的節(jié)點分區(qū)的方法的示例流程圖。 圖9示出了用于填充節(jié)點路由表的方法的示例流程圖。
圖IO示出了用于數(shù)值地將消息路由到目的地節(jié)點的方法的示例流程圖。 圖11示出了用于鄰近地將消息路由到目的地節(jié)點的方法的示例流程圖。
圖12A示出了節(jié)點建立現(xiàn)有聯(lián)盟內(nèi)的成員資格的示例。 圖12B示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的節(jié)點交換消息的示例。 圖13示出了用于建立聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的成員資格的方法的示例流程圖。 圖14示出了用于維護聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的成員資格的方法的示例流程圖。 圖15示出了用于發(fā)現(xiàn)關(guān)于另一節(jié)點的活躍度信息的方法的示例流程圖。 圖16示出了消息模型和相關(guān)的處理模型的示例。 圖17示出了可在功能層和應用層之間發(fā)生的多個活躍度交互的示例。 圖18示出了形成請求-響應消息交換模式的一部分的消息跨環(huán)上的節(jié)點路 由的示例。
圖19A示出了方便一個節(jié)點監(jiān)視另一個(例如,對象)節(jié)點的示例環(huán)體 系結(jié)構(gòu)。
圖19B示出了方便兩個節(jié)點彼此監(jiān)視的示例環(huán)體系結(jié)構(gòu)。
圖19C示出了在互相監(jiān)視節(jié)點各自能夠報告另一節(jié)點被懷疑發(fā)生故障時
方便仲裁的示例環(huán)體系結(jié)構(gòu)。
圖20示出了用于一個節(jié)點監(jiān)視另一節(jié)點的方法的示例流程圖。
圖21示出了用于在被懷疑的節(jié)點故障的沖突報告之間進行仲裁的方法的
示例流程圖。
圖22A示出了方便根據(jù)高速緩存的雙向協(xié)定來路由消息的示例環(huán)體系結(jié)構(gòu)。
圖22B示出了方便根據(jù)多個高速緩存的雙向協(xié)定來路由消息的示例環(huán)體 系結(jié)構(gòu)。
圖23A到23D示出了方便制定高速緩存的雙向協(xié)定的示例環(huán)體系結(jié)構(gòu)。圖24示出了用于根據(jù)高速緩存的雙向協(xié)定來路由消息的方法的示例流程圖。
圖25示出了用于根據(jù)多個高速緩存的雙向協(xié)定來路由消息的方法的示例 流程圖。
圖26示出了用于加入雙向協(xié)定的方法的示例流程圖。
圖27示出了方便節(jié)點加入聯(lián)盟內(nèi)的節(jié)點環(huán)的示例環(huán)體系結(jié)構(gòu)。
圖28示出了從加入節(jié)點、所選的直接相鄰節(jié)點和另一直接相鄰節(jié)點的觀
點來看的用于在加入節(jié)點加入節(jié)點環(huán)時維護環(huán)一致性的方法的示例流程圖。 圖29示出了用于在離開節(jié)點離開節(jié)點環(huán)時維護環(huán)一致性的方法的示例流程圖。
圖30示出了用于加入節(jié)點加入節(jié)點環(huán)的示例性狀態(tài)圖。 圖31示出了用于離開節(jié)點離開節(jié)點環(huán)的示例性狀態(tài)圖。 圖32示出了方便維護聯(lián)盟內(nèi)的副本集和數(shù)據(jù)一致性的示例環(huán)體系結(jié)構(gòu)。 圖33示出了用于在聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)維護的副本集內(nèi)執(zhí)行數(shù)據(jù)訪問事務的
方法的示例流程圖。
圖34示出了用于建立和維護聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的一致副本集的方法的示例
流程圖。
圖35示出了一個示例性操作序列。
圖36示出了用于從聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的副本集訪問數(shù)據(jù)的示例性系統(tǒng)。 詳細描述
本發(fā)明涉及用于在會合聯(lián)盟內(nèi)分配和回收資源的方法、系統(tǒng)和計算機程序 產(chǎn)品。在某些實施例中,消息被路由到目的地節(jié)點。接收節(jié)點接收消息以及指 示節(jié)點環(huán)上的目的地的目的地標識符。目的地標識符位于接收節(jié)點和直接相鄰 節(jié)點之間。直接相鄰節(jié)點選自直接前導者鄰域節(jié)點和直接后繼者鄰域節(jié)點。
接收節(jié)點參考接收節(jié)點和直接相鄰節(jié)點之間的高速緩存的雙向協(xié)定來 確定要接收該消息的下一適當節(jié)點。該高速緩存的雙向協(xié)定至少暗示接收節(jié)點 和直接相鄰節(jié)點之間關(guān)于標識符空間的責任的劃分。接收節(jié)點基于對下一適當 節(jié)點的確定將該消息發(fā)送到下一適當組件。在其它實施例中,制定當前節(jié)點和直接相鄰節(jié)點之間的雙向協(xié)定。當前 節(jié)點訪問節(jié)點環(huán)的配置已改變的指示。該指示表明至少當前直接相鄰節(jié)點中的 改變。當前直接相鄰節(jié)點選自當前直接前導者節(jié)點和當前直接后繼者節(jié)點。該 改變導致新的直接相鄰節(jié)點。
該指示還是制定在當前節(jié)點和新的直接相鄰節(jié)點之間劃分至少關(guān)于環(huán) 上的未占用標識符的責任的雙向協(xié)定的需求的指示。當前節(jié)點和新的直接相鄰 節(jié)點同意當前節(jié)點和新的直接相鄰節(jié)點之間的責任邊界。該責任邊界在當前節(jié) 點和新的直接相鄰節(jié)點之間劃分對于未占用標識符的責任。當前節(jié)點和責任邊 界之間的未占用標識符變?yōu)楫斍肮?jié)點的責任。同樣,責任邊界和新的直接相鄰 節(jié)點之間的未占用標識符現(xiàn)在是新的直接相鄰節(jié)點的責任。
本發(fā)明的各實施例可以包括或利用含有計算機硬件的專用或通用計算機, 這將在以下做出進一步討論。本發(fā)明范圍內(nèi)的各實施例還包括用于承載或儲存 計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這樣的計算機 可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機 可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。攜帶計算機可執(zhí)行指令的計算 機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括 至少兩種完全不同的計算機可讀介質(zhì)物理存儲介質(zhì)和傳輸介質(zhì)。
物理存儲介質(zhì)包括RAM、 ROM、 EEPROM、 CD-ROM或其他光盤存儲、 磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式 的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)。
"網(wǎng)絡"被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳 輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡或另一通信連接(硬連線、 無線或硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當 地視為傳輸介質(zhì)。傳輸介質(zhì)可包括可用于攜帶或傳輸計算機可執(zhí)行指令或數(shù)據(jù) 結(jié)構(gòu)形式的所需程序代碼裝置并可由通用或?qū)S糜嬎銠C訪問的網(wǎng)絡和/或數(shù)據(jù) 鏈路。以上的組合也應包括在計算機可讀介質(zhì)的范圍之內(nèi)。
然而,應當理解,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或 數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動轉(zhuǎn)移到物理存儲介質(zhì)。例如, 通過網(wǎng)絡或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡接口卡內(nèi)的RAM中,然后最終被傳送到計算機系統(tǒng)RAM和/或計算機系統(tǒng)處 的較不易失的物理存儲介質(zhì)。由此,應當理解,物理存儲介質(zhì)可被包括在同樣 (或甚至主要)利用傳輸介質(zhì)的計算機系統(tǒng)組件中。
計算機可執(zhí)行指令包括例如,使通用計算機、專用計算機、或?qū)S锰幚碓O(shè) 備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進 制代碼、諸如匯編語言等中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/ 或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的 主題不必限于上述特征或動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的 示例形式而公開的。
在某些實施例中,諸如,例如專用集成電路或門陣列等硬件模塊被優(yōu)化以 實現(xiàn)本發(fā)明的原理。
在本說明書和所附權(quán)利要求書中,"節(jié)點"被定義為一起工作來對電子數(shù) 據(jù)執(zhí)行操作的一個或多個軟件模塊、 一個或多個硬件模塊、或其組合。例如, 節(jié)點的定義包括個人計算機的硬件組件、以及諸如個人計算機的操作系統(tǒng)等軟 件模塊。這些模塊的物理布局并不重要。節(jié)點可以包括經(jīng)由網(wǎng)絡耦合的一臺或 多臺計算機。同樣,節(jié)點可以包括單個物理設(shè)備(諸如移動電話或個人數(shù)字助 理"PDA"),其中,內(nèi)部模塊(諸如存儲器和處理器) 一起工作來對電子數(shù) 據(jù)執(zhí)行操作。此外,節(jié)點可以包括專用硬件,諸如,例如包括專用集成電路的 路由器。
本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在許多類型的節(jié)點配置的網(wǎng)絡計算 環(huán)境中實踐,這些節(jié)點配置包括個人計算機、膝上型計算機、手持式設(shè)備、多 處理器系統(tǒng)、基于微處理器的或可編程消費電子產(chǎn)品、網(wǎng)絡PC、小型計算機、 大型計算機、移動電話、PDA、尋呼機、路由器、網(wǎng)關(guān)、代理程序、代理服務 器、防火墻、重定向器、網(wǎng)絡地址轉(zhuǎn)換器等。本發(fā)明也可以在通過網(wǎng)絡鏈接(或 者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組 合)的本地和遠程節(jié)點兩者都執(zhí)行任務的分布式系統(tǒng)環(huán)境中實踐。在分布式系 統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中。
聯(lián)盟體系結(jié)構(gòu)
圖l示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)100的一個示例。聯(lián)盟基礎(chǔ)結(jié)構(gòu)IOO包括可以形成不同類型的聯(lián)盟伙伴關(guān)系的節(jié)點101、 102、 103。例如,節(jié)點101、 102、 103 可彼此聯(lián)盟為對等體而不需要根節(jié)點。節(jié)點101、 102和103中的每一個各自 都有相應ID 171、 182和193。
一般而言,節(jié)點IOI、 102、 103可利用聯(lián)盟協(xié)議來形成伙伴關(guān)系并交換信 息(例如,涉及與其它節(jié)點的交互的狀態(tài)信息)?;锇殛P(guān)系的形成以及信息的 交換便于對資源的更高效且更可靠的訪問。其它中間節(jié)點(未示出)可以存在 于節(jié)點101、 102和103之間(例如,ID在171和193之間的節(jié)點)。由此, 例如在節(jié)點101和節(jié)點103之間路由的消息可穿過一個或多個其它中間節(jié)點。
聯(lián)盟基礎(chǔ)結(jié)構(gòu)100中的節(jié)點(包括其它中間節(jié)點)可以包括相應的會合協(xié) 議棧。例如,節(jié)點101、 102和103分別包括相應的會合協(xié)議棧141、 142和143。 協(xié)議棧141、 142和143中的每一個包括應用層(例如,應用層121、 122和123) 和其它較低層(例如,相應的其它較低層131、 132和133)。會合協(xié)議棧中的 每一層負責與將資源請求與相應的資源會合相關(guān)的不同功能。
例如,其它較低層可包括信道層、路由層和功能層。 一般而言,信道層負 責可靠地將消息(例如,使用WS-可靠消息通信(WS-ReliableMessaging)和 簡單對象訪問協(xié)議("SOAP"))從一個端點傳輸?shù)搅硪欢它c(例如,從節(jié) 點101到節(jié)點103)。信道層還負責處理傳入和傳出的可靠消息通信首部,并 維護與可靠消息通信會話相關(guān)的狀態(tài)。
一般而言,路由層負責計算向目的地的下一跳。路由層還負責處理傳入和 傳出的尋址和路由消息首部并維護路由表。 一般而言,功能層負責發(fā)出并處理 諸如加入和離開請求、查驗、更新和其它消息等會合協(xié)議消息,以及生成對這 些消息的響應。功能層處理來自路由層的請求消息,并且如果有相應的響應消 息,則使用路由層將其發(fā)回到始發(fā)節(jié)點。功能層還發(fā)起請求消息并利用路由層 來傳遞請求消息。
一般而言,應用層處理從功能層傳遞的非會合協(xié)議專用數(shù)據(jù)(即,應用程 序消息)。功能層可以訪問來自應用層的應用程序數(shù)據(jù),并且可以獲得會合協(xié) 議消息(例如,查驗和更新)中的應用程序數(shù)據(jù)以及將應用程序數(shù)據(jù)置于該消 息中。即,功能層可使得應用程序數(shù)據(jù)被承載在會合協(xié)議消息上,并且可使得 應用程序數(shù)據(jù)被傳回接收會合協(xié)議節(jié)點中的應用層。在某些實施例中,應用程序數(shù)據(jù)用于標識資源和資源興趣。由此,應用層可以包括處理從其它較低層接 收到的和發(fā)送到其它較低層的數(shù)據(jù)以標識資源和資源興趣的應用程序?qū)S眠?輯和狀態(tài)。
聯(lián)盟機制
節(jié)點可以使用各種不同的機制來聯(lián)盟。第一個聯(lián)盟機制包括對等節(jié)點將信 息轉(zhuǎn)發(fā)給所有其它對等節(jié)點。當節(jié)點要加入一聯(lián)盟基礎(chǔ)結(jié)構(gòu)時,該節(jié)點利用諸
如,例如WS發(fā)現(xiàn)(WS-Discovery)等廣播/多播發(fā)現(xiàn)協(xié)議來通告其存在并發(fā)出 廣播/多播尋找來檢測其它節(jié)點。該節(jié)點然后建立與已經(jīng)存在于網(wǎng)絡上的其它節(jié) 點的簡單轉(zhuǎn)發(fā)伙伴關(guān)系,并接受與新加入的節(jié)點的新的伙伴關(guān)系。之后,該節(jié) 點只需將所有應用程序?qū)S孟⑥D(zhuǎn)發(fā)給所有其伙伴節(jié)點。
第二種聯(lián)盟機制包括對等節(jié)點最高效地將應用程序?qū)S孟l(fā)送到其目 的地。當一新節(jié)點要加入一聯(lián)盟基礎(chǔ)結(jié)構(gòu)時,該新節(jié)點利用諸如,例如WS發(fā) 現(xiàn)等廣播/多播發(fā)現(xiàn)協(xié)議來通告其存在并發(fā)出廣播/多播尋找來檢測作為該聯(lián)盟 基礎(chǔ)結(jié)構(gòu)的一部分的其它節(jié)點。在檢測到另一節(jié)點時,該新節(jié)點建立與該另一 節(jié)點的伙伴關(guān)系。從所建立的伙伴關(guān)系中,該新節(jié)點獲知己經(jīng)參與聯(lián)盟基礎(chǔ)結(jié) 構(gòu)的其它節(jié)點的存在。它然后與這些新獲知的節(jié)點建立伙伴關(guān)系,并接受任何 新傳入的伙伴關(guān)系請求。
特定應用程序?qū)S孟⒅械墓?jié)點到達/離開和興趣注冊在該聯(lián)盟基礎(chǔ)結(jié) 構(gòu)上洪泛(flood),導致每一節(jié)點都在應用程序?qū)S孟⒅芯哂衅渌锇楣?jié)點 和興趣注冊的全局知識。有了這一全局知識,任何節(jié)點可直接向已經(jīng)表達了對 應用程序?qū)S孟⒌呐d趣的節(jié)點直接發(fā)送應用程序?qū)S孟ⅰ?br> 第三種聯(lián)盟機制包括對等節(jié)點非直接地將所有應用程序?qū)S孟l(fā)送到 其目的地。在該第三種機制中,節(jié)點被分配諸如,例如128位或160位ID等 標識符(ID)。負責維護給定對應用程序?qū)S孟⒌呐d趣的注冊的節(jié)點可被確 定為其ID最接近通過將應用程序?qū)S孟⒌哪康牡厣矸?例如,URI)映射(例 如,散列)到該128位或160位ID空間所獲得的ID的節(jié)點。
在該第三種機制中,節(jié)點到達和離開在整個結(jié)構(gòu)上洪泛。另一方面,對特 定應用程序?qū)S孟⒌呐d趣的注冊被轉(zhuǎn)發(fā)給被確定為負責維護這一注冊信息 的節(jié)點。出于可伸縮性、負載平衡和容錯的目的,接收對特定應用程序?qū)S孟⒌呐d趣的注冊的節(jié)點可以在其鄰域集中可靠地洪泛該注冊信息。對于指定節(jié) 點的鄰域集可以被確定為其ID在該指定節(jié)點的ID的任一側(cè)上的預定范圍內(nèi)的 節(jié)點集。
類似于第二種機制,新加入的節(jié)點利用諸如,例如WS發(fā)現(xiàn)等廣播/多播 發(fā)現(xiàn)協(xié)議來通告其存在并發(fā)出局部廣播/多播尋找來檢測已經(jīng)是該聯(lián)盟基礎(chǔ)結(jié) 構(gòu)的一部分的節(jié)點。該新節(jié)點建立與所發(fā)現(xiàn)的節(jié)點的伙伴關(guān)系,并使用該伙伴 關(guān)系來獲知參與該聯(lián)盟基礎(chǔ)結(jié)構(gòu)的其它新節(jié)點的存在。該新節(jié)點然后與新發(fā)現(xiàn) 的節(jié)點建立進一步的伙伴關(guān)系,并接受任何新傳入的伙伴關(guān)系請求。該新節(jié)點 接受從其所負責的伙伴傳入的對特定應用層專用資源的興趣的注冊,并且可在 其鄰域集上洪泛該注冊。由此,消息一般可經(jīng)由中間路由節(jié)點(例如,新加入 的節(jié)點與其具有伙伴關(guān)系或者伙伴節(jié)點知道的節(jié)點)轉(zhuǎn)發(fā)到其最終目的地。
響應于接收到傳入的應用程序?qū)S孟?,該新?jié)點將該消息轉(zhuǎn)發(fā)給可能負 責維護關(guān)于在消息中指定的目的地的注冊信息的伙伴節(jié)點。由此,當使用該第 三種機制時,聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的每一節(jié)點具有所有其它節(jié)點的全局知識,但是 注冊信息在節(jié)點之間高效地分區(qū)。應用程序?qū)S孟H經(jīng)由可能負責維護對這 些應用程序?qū)S孟⒌呐d趣的注冊信息的伙伴節(jié)點來發(fā)送到其最終目的地。由 此,通過僅轉(zhuǎn)發(fā)給具有對所處理的消息的興趣的注冊信息的全局知識的伙伴節(jié) 點來實現(xiàn)了間接性。這與其中間接性是通過轉(zhuǎn)發(fā)給所有伙伴節(jié)點來實現(xiàn)的第一 種機制形成對比。
第四種聯(lián)盟機制包括對等節(jié)點將消息路由給其它對等節(jié)點。該第四種機制 與第三種機制的區(qū)別至少在于節(jié)點到達/離開和對特定應用程序?qū)S孟⒌呐d 趣的注冊都被路由而不是洪泛。路由協(xié)議被設(shè)計成保證應用程序?qū)S孟⒑捅?達對這些應用程序?qū)S孟⒌呐d趣的注冊消息之間的會合。
圖2示出了幫助間接地將請求路由到伙伴的計算機體系結(jié)構(gòu)200的示例。 計算機體系結(jié)構(gòu)200描繪了可能分布在參與聯(lián)盟基礎(chǔ)結(jié)構(gòu)的多個局部發(fā)現(xiàn)范圍 上的不同類型的計算機系統(tǒng)和設(shè)備。
工作站233可以包括己注冊PnP提供者實例。為向其伙伴告知該PnP提 供者實例的存在,工作站233通過聯(lián)盟基礎(chǔ)結(jié)構(gòu)來路由注冊請求201。注冊請 求201最初被轉(zhuǎn)發(fā)給膝上型計算機231,后者進而將注冊請求201轉(zhuǎn)發(fā)給消息代理237,后者又進而將注冊請求201轉(zhuǎn)發(fā)給消息網(wǎng)關(guān)241。消息網(wǎng)關(guān)241將 注冊信息注冊請求201保存在其數(shù)據(jù)庫中,并將成功消息204返回給工作站 233。
隨后,另一己注冊提供者實例,此次是運行服務的提供者實例,在工作站 233內(nèi)變得活躍。此次,該節(jié)點知道消息網(wǎng)關(guān)241負責注冊,并將注冊請求205 直接轉(zhuǎn)發(fā)給消息網(wǎng)關(guān)241。消息網(wǎng)關(guān)241將注冊信息注冊請求205保存在其數(shù) 據(jù)庫中,并將成功消息206返回給工作站233。
隨后,打印機236 (例如,UPnP打印機)被通電,并發(fā)送通告207。服務 器234檢測到通告207,并將注冊請求208路由到消息代理237。消息代理237 將注冊請求208轉(zhuǎn)發(fā)給消息網(wǎng)關(guān)241。消息網(wǎng)關(guān)241將注冊信息注冊請求208 保存在其數(shù)據(jù)庫中,并將成功消息210返回給服務器234。
隨后,個人計算機242發(fā)出發(fā)現(xiàn)所有設(shè)備的査找請求211。由于個人計算 機242不知道將查找請求211轉(zhuǎn)發(fā)到何處,因此它通過工作站243來路由查找 請求211。由于注冊和査找請求被路由到同一目的地,因此路由協(xié)議本質(zhì)上保 證兩個請求之間的會合將導致工作站243將尋找請求211轉(zhuǎn)發(fā)給消息網(wǎng)關(guān)241 。 消息網(wǎng)關(guān)241查找其所維護的注冊信息,并將尋找請求211轉(zhuǎn)發(fā)給工作站233 和服務器234兩者。工作站233和服務器234將分別將響應消息214和216發(fā) 送給個人計算機242。
該第四種機制通過將請求路由(而非洪泛)具有請求中所指定的注冊的全 局消息的節(jié)點(消息網(wǎng)關(guān)241)來工作。如將在以下更詳細描述的,該第四種 機制本質(zhì)上保證路由可在O(logN)個跳中實現(xiàn),其中N是參與聯(lián)盟基礎(chǔ)結(jié)構(gòu)的 節(jié)點數(shù)。由于該第四種機制高效地劃分了節(jié)點伙伴關(guān)系和注冊信息,因此它能 伸縮到非常大的網(wǎng)絡,甚至因特網(wǎng)。
盡管描述了多種聯(lián)盟機制,但是本領(lǐng)域的技術(shù)人員在仔細閱讀了本說明書 之后可以清楚其它聯(lián)盟機制也是可能的。
聯(lián)盟中的節(jié)點之間的關(guān)系
因此,聯(lián)盟由在其間協(xié)作以形成其中可系統(tǒng)地且高效地散布并定位信息的 動態(tài)且可伸縮網(wǎng)絡的一組節(jié)點構(gòu)成。節(jié)點使用自反的、反對稱的、傳遞的、總 的、且在節(jié)點身份域上定義的二元關(guān)系被組織為已排序列表來參與聯(lián)盟。該已排序列表的兩端是聯(lián)接的,由此形成環(huán)。由此,該列表中的每一節(jié)點可將其自 身視為在該已排序列表的中間(作為使用模算術(shù)的結(jié)果)。此外,該列表被雙 重鏈接,使得任何節(jié)點可以在任一方向上遍歷該列表。
每一聯(lián)盟節(jié)點可被分配一來自0和某一固定上限之間的一組固定ID的ID (例如,由帶有重復檢測的隨機數(shù)生成器)。由此,將該固定上限的ID加1
將導致為0的ID (即,從鏈表的末尾移回該鏈表的開頭)。另外,定義了從 節(jié)點身份的值域到節(jié)點本身的1:1映射函數(shù)。
圖3描繪了示例鏈表304和相應的環(huán)306。給定這一環(huán),可定義以下函數(shù)-RouteNumerically(V, Msg):給定來自節(jié)點身份的值域的值V和消息
"Msg",將消息傳遞到其身份可使用該映射函數(shù)映射到V的節(jié)點X。
Neighborhood(X, S): Neighborhood (鄰域)是節(jié)點X的任一側(cè)上其勢 等于S的節(jié)點集。
當該聯(lián)盟內(nèi)的每一節(jié)點具有該環(huán)的全局知識時,通過直接將Msg發(fā)送到 其身份通過向V應用該映射函數(shù)而獲得的節(jié)點X來實現(xiàn)RouteNumerically(V, Msg)?;蛘撸敼?jié)點具有其它節(jié)點的有限知識(例如,僅具有直接相鄰的節(jié)點 的知識)時,通過沿著環(huán)將消息轉(zhuǎn)發(fā)到連貫的節(jié)點直到其到達目的地節(jié)點X來 實現(xiàn)RouteNumerically(V, Msg)。
或者(且有利地),節(jié)點可以存儲關(guān)于環(huán)的足夠的知識來執(zhí)行分布式二分 搜索(而不必具有全局知識或?qū)崿F(xiàn)直接相鄰節(jié)點之間的路由)。環(huán)知識的量是 可配置的,使得維護環(huán)知識對于每一節(jié)點有足夠小的影響,但允許從減少環(huán)跳 數(shù)目中提高路由性能。
如上所述,ID可使用在自然數(shù)的足夠大的、有界的集合上定義的"〈"(小 于)關(guān)系來分配,這意味著其范圍在O和某一固定值之間(包括端點)的一組 有限數(shù)字上。由此,參與該聯(lián)盟的每一節(jié)點被分配落入O和某一適當選擇的上 界之間(包括端點)的自然數(shù)。范圍不必是緊密的,并且在分配給節(jié)點的數(shù)字 之間可以有間隙。分配給節(jié)點的數(shù)字用作其在環(huán)中的身份。映射函數(shù)通過將落
在兩個節(jié)點身份之間的數(shù)字映射到其身份在數(shù)值上更接近該數(shù)字的節(jié)點來解決數(shù)字空間中的間隙。
該方法具有若干優(yōu)點。通過向每一節(jié)點分配均勻分布的數(shù)字,該環(huán)的所有
段都被均勻填充的可能性增加。此外,后繼者、前導者和鄰域計算可以使用模 算術(shù)來高效地完成。
在某些實施例中,聯(lián)盟節(jié)點被分配來自一ID空間的ID,該ID空間非常 大,以致于兩個節(jié)點被分配相同的ID的機率是高度不可能的(例如,當使用
隨機數(shù)生成時)。例如, 一節(jié)點可被分配范圍在0到b、1的ID,其中b等于 例如8或16,而n等于例如128位或160位等效數(shù)字。因此,節(jié)點可被分配例 如范圍在0到1640 - 1 (或近似地1.461502E48)之間的ID。范圍0到1640 1 將提供例如足夠數(shù)量的ID來向因特網(wǎng)上的每一節(jié)點分配唯一 ID。 由此,聯(lián)盟中的每一節(jié)點可具有
ID,其是均勻分布在范圍0到b"-l中的數(shù)值;以及 由以下各項構(gòu)成的路由表(所有算術(shù)都以模bn完成) 后繼者節(jié)點(S); 前導者節(jié)點(p);
鄰域節(jié)點(pk,…,P、P,S,S1,…,^),使得
As.id > (id + u/2), j》v/2-l,且pk.p.id < (id — u/2),且k》
v/2-l;以及
路由節(jié)點(r.(w),r小rhr^),使得 r±i = RouteNumerically(id ± b;, Msg)。 其中b是數(shù)基,n是以位數(shù)為單位的字段大小,u是鄰域范圍,v是鄰域
大小,且算術(shù)是以模bn來執(zhí)行的。為得到良好的路由效率和容錯,U和V的值
可以是u=b和v》max(log2(N), 4),其中N是物理上參與聯(lián)盟的節(jié)點的總數(shù)。N 可以例如在存在ID的均勻分布時從其長度大于或等于b的環(huán)段上存在的節(jié)點 數(shù)中估算。b和n的典型值是b-8或16,且『128位或160位等效數(shù)字。
因此,路由節(jié)點可以形成橫跨環(huán)的對數(shù)索引。取決于節(jié)點在環(huán)上的位置, 例如,當在集合id士b1 (其中1 = (1,2,...(11-1)))中的每一數(shù)字處有一現(xiàn)有節(jié) 點時,精確的對數(shù)索引是可能的。然而,情況可以是在該集合中的每一數(shù)字處 沒有現(xiàn)有節(jié)點。在這些情況下,可選擇最接近idibi的節(jié)點作為路由節(jié)點。所得的算術(shù)索引并不是精確的,并且甚至可能對集合中的某些數(shù)字缺少唯一路由 節(jié)點。
再次參考圖3,圖3示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的節(jié)點之間采用己排序列表304
和相應的環(huán)306的形式的二元關(guān)系的示例。已排序列表304的ID空間在范圍 0到28 —1 (即255)中。艮卩,b二2且n二8。由此,圖3所示的節(jié)點被分配范圍 在0到255的ID。已排序列表304利用自反的、反對稱的、傳遞的、總的、 且在節(jié)點身份域上定義的二元關(guān)系。已排序列表304的兩端是聯(lián)接的,由此形 成環(huán)306。這使得圖3中的每一節(jié)點可將其自身視為在已排序列表304的中間。 已排序列表304被雙重鏈接,使得任何節(jié)點可以在任一方向上遍歷己排序列表 304。用于遍歷已排序列表304 (或環(huán)306)的算術(shù)以模28來執(zhí)行。由此,255 (或已排序列表304的末尾)+1=0 (或已排序列表304的開頭)。
路由表指示ID 64的后繼者是ID 76(從ID 64開始順時針的緊接著的ID)。 后繼者可以在例如新節(jié)點(例如,具有ID71)加入或現(xiàn)有節(jié)點(例如,ID 76) 離開聯(lián)盟基礎(chǔ)結(jié)構(gòu)時改變。同樣,路由表指示ID 64的前導者是ID 50(從ID 64 開始逆時針的緊接著的ID)。前導者可以在例如新節(jié)點(例如,具有ID59) 加入或現(xiàn)有節(jié)點(例如,ID 50)離開聯(lián)盟基礎(chǔ)結(jié)構(gòu)時改變。
路由表還指示對ID64的一組鄰域節(jié)點具有ID83、 76、 50和46。 一組鄰 居節(jié)點可以是在ID 64的指定范圍(g卩,鄰居范圍u)內(nèi)的指定數(shù)量的節(jié)點(即, 鄰域大小v)??赡苁褂酶鞣N不同的鄰域大小和鄰居范圍,諸如,例如V:4和 U=10來標識鄰域節(jié)點集。鄰域集可以例如在節(jié)點加入或離開聯(lián)盟基礎(chǔ)結(jié)構(gòu)時, 或在指定數(shù)量的節(jié)點或指定范圍改變時改變。
該路由表還指示ID64可以路由到ID為200、 2、 30、 46、 50、 64、 64、 64、 64、 76、 83、 98、 135和200的節(jié)點。該列表通過標識最接近id ± 2;的集 合中的每一數(shù)字的節(jié)點來生成,其中i = (1, 2, 3, 4, 5, 6, 7)。艮卩,6=2且11=8。 例如,ID為76的節(jié)點可從計算對64 + 23,即72最接近的節(jié)點來標識。
節(jié)點可以將消息(例如,對資源訪問的請求)直接路由到前導者節(jié)點、后 繼者節(jié)點、鄰域節(jié)點集中的任何節(jié)點、或任何路由節(jié)點。在某些實施例中,節(jié) 點實現(xiàn)數(shù)值路由函數(shù)來路由消息。由此,可在節(jié)點X處實現(xiàn)RouteNumerically(V, Msg)來將Msg傳遞給聯(lián)盟中其ID數(shù)值上最接近V的節(jié)點Y,并將節(jié)點Y的ID返回給節(jié)點X。例如,ID為64的節(jié)點可以實現(xiàn)RouteNumerically(243, Msg) 來使得消息被路由到ID為250的節(jié)點。然而,由于ID 250不是對于ID64的 路由節(jié)點,因此ID64可將消息路由到ID2 (對243最接近的路由節(jié)點)。ID 為2的節(jié)點可以進而實現(xiàn)RouteNumerically(243, Msg)以使得消息被路由(直接 地或通過其它中間節(jié)點)到ID為250的節(jié)點。由此,情況可以是 RouteNumerically函數(shù)被遞歸地調(diào)用,其中每一調(diào)用將消息路由到更接近目的 地的地方。
Proximity
有利的是,本發(fā)明的其它實施例幫助基于一個或多個鄰近性類別(例如, 地理邊界、路由特性(例如,IP路由跳)、管理域、組織邊界等)的多個鄰近 性準則來將環(huán)劃分成環(huán)的環(huán)或環(huán)的樹。應當理解,環(huán)可使用同一類型的鄰近性 準則來多次劃分。例如,環(huán)可基于大陸鄰近性準則和國家鄰近性準則(兩者都 是地理邊界鄰近性類別)來劃分。
由于ID可在ID空間上均勻分布(隨機數(shù)生成的結(jié)果),因此循環(huán)ID 空間的任何給定段有很高的可能性包含屬于不同鄰近性類的節(jié)點,只有這些類 具有大致相同的勢。該概率在存在足夠數(shù)量的節(jié)點來獲得有意義的統(tǒng)計行為時 進一步增加。
由此,任何給定節(jié)點的鄰域節(jié)點從鄰近性的觀點來看通常是良好分散的。 由于所發(fā)布的應用程序狀態(tài)可以在鄰域節(jié)點之間復制,因此所發(fā)布的信息從鄰 近性的觀點來看也是良好分散的。
圖4示出了幫助鄰近路由的環(huán)的環(huán)400。環(huán)401可被視為主或根環(huán),且包 含環(huán)402、 403和404的每一個中的所有節(jié)點。環(huán)402、 403和404的每一個可 包含來自環(huán)401的、基于指定的鄰近性準則劃分的節(jié)點子集。例如,環(huán)401可 以基于地理位置來劃分,其中環(huán)402包含在北美的節(jié)點,環(huán)403包含在歐洲的 節(jié)點,而環(huán)404包含在亞洲的節(jié)點。
在包含65,536 (216)個ID的數(shù)值空間中,將消息從ID為5,345的北美節(jié) 點路由到ID為23,345的亞洲節(jié)點可包括在環(huán)402內(nèi)路由消息,直到標識了亞 洲節(jié)點的鄰居節(jié)點。該鄰居節(jié)點然后可將該消息路由到亞洲節(jié)點。由此,在北 美節(jié)點和亞洲節(jié)點之間形成了單個跳(而非多個跳)。因此,路由是以資源高效的方式來執(zhí)行的。
圖5示出了幫助鄰近路由的示例性的、歸納了鄰近性的環(huán)的分區(qū)樹500。
如圖所示,環(huán)的分區(qū)樹500包括多個環(huán)。每一個環(huán)表示一已排序鏈表的一個分 區(qū)。每一個環(huán)包括其ID在該已排序鏈表中的多個節(jié)點。然而,為了清楚起見, 由于潛在節(jié)點的數(shù)量,未在環(huán)上明確地描繪節(jié)點(例如,分區(qū)樹500的ID空 間可以是b二 16且11=40)。
在分區(qū)樹500內(nèi),根環(huán)501基于準則571 (第一管理域邊界準則)被劃分 成多個子環(huán),包括子環(huán)511、 512、 513和514。例如,DNS名稱的每一分量可 被認為是一鄰近性準則,它們之間的部分排序按照其從右到左出現(xiàn)在DNS名 稱中的次序來歸納。相應地,子環(huán)511可基于準則581 (第二管理域邊界準則) 被進一步劃分成多個子環(huán),包括子環(huán)521、 522和523。
子環(huán)522可基于準則572 (地理邊界準則)被進一步劃分成多個子環(huán),包 括子環(huán)531、 532和533?;谖恢玫泥徑詼蕜t可以按照大陸、國家、郵政編 碼等來部分排序。郵政編碼本身是分層地組織的,這意味著它們能夠被視為進 一步歸納了鄰近性準則的部分排序的子列表。
子環(huán)531可基于準則573 (第一組織邊界準則)被進一步劃分成多個子環(huán), 包括子環(huán)541、 542和543。鄰近性準則的部分排序的列表可以按照一給定公司 在組織上如何結(jié)構(gòu)化(如分公司、部門和產(chǎn)品組)來歸納。相應地,子環(huán)543 可基于準則583 (第二組織邊界準則)被進一步劃分成多個子環(huán),包括子環(huán)551 和552。
在分區(qū)樹500內(nèi),每一節(jié)點具有單個ID,并沿著從根開始到葉的相應分 區(qū)路徑參與環(huán)。例如,參與子環(huán)552的每一節(jié)點也參與子環(huán)543、 531、 522、 511和根501。路由到目的地節(jié)點(ID)可以通過如下實現(xiàn)RouteProximally函 數(shù)來完成
RouteProximally(V, Msg, P):給定來自節(jié)點身份的域的值V和消息 "Msg",按照鄰近性準則P將消息傳遞到被認為是等效的節(jié)點中其身份 可被映射到V的節(jié)點Y。
由此,路由可以通過逐漸移向給定環(huán)內(nèi)更接近目的地節(jié)點的地方,直到如從目的地節(jié)點位于當前節(jié)點和其后繼者或前導者節(jié)點之間的條件所確定的在 該環(huán)內(nèi)的路由不能做出任何進一步的進展來完成。此時,當前節(jié)點開始經(jīng)由其 所參與的下一更大的環(huán)中其父節(jié)點路由。這一通過沿著分區(qū)路徑向著根環(huán)爬來
逐漸移向目的地節(jié)點的過程在如最初在RouteProximally調(diào)用中指定的在所請 求的鄰近上下文中達到最接近目的地節(jié)點的節(jié)點時終止。
路由跳可以保留在發(fā)起該請求的節(jié)點的鄰近鄰域中,直到由于目的地節(jié)點 位于其外部而在該鄰域中不能做出任何進一步的進展。此時,鄰近性準則被放 松以增加鄰近鄰域的大小來做出進一步的進展。重復該過程,直到足夠地擴展 了鄰近鄰域來包括目的地節(jié)點(ID)。在每一相繼的鄰近鄰域放松之后做出的 路由跳可能是在鄰近空間中與前一跳相比更大的跳躍,而在數(shù)值空間中做出相 應的更小的跳躍。由此,僅絕對需要的數(shù)量的此類(環(huán)間)跳在到達目的地之 前做出。
情況可以是對于査找消息避免了某些跳,因為所發(fā)布的應用程序數(shù)據(jù)在其 在目的地節(jié)點的鄰域節(jié)點之中復制時沿著分區(qū)樹向下復制。
為實現(xiàn)鄰近路由,每一聯(lián)盟節(jié)點維護對其作為成員所參與的所有環(huán)中其后 繼者和前導者節(jié)點(類似于對于單個環(huán)的后繼者和前導者),即鄰近前導者、 鄰近后繼者和鄰近鄰域的引用。為了使得路由高效,節(jié)點還可維護對作為路由 伙伴的、最接近該環(huán)的任一半上距離呈指數(shù)地增加的其它節(jié)點(類似于對單個 環(huán)的路由節(jié)點)的引用。在某些實施例中,落入一對連貫的后繼者和前導者節(jié) 點之間的路由伙伴節(jié)點參與由當前節(jié)點和在后繼者和前導者節(jié)點對中數(shù)值上 最接近它的節(jié)點分別共享的同一最低環(huán)。由此,向著目的地節(jié)點的路由跳僅在 絕對需要來做出進一步的進展時才使用放松的鄰近性準則來轉(zhuǎn)換(即,轉(zhuǎn)換到 更高的環(huán))。因此,消息可高效地與相應的聯(lián)盟節(jié)點會合。
在某些實施例中,節(jié)點實現(xiàn)鄰近路由函數(shù)來基于等效性準則關(guān)系路由消 息。由此給定數(shù)字V和消息"Msg",節(jié)點可以實現(xiàn)RouteProximally(V,Msg,P) 來按照鄰近性準則P將消息傳遞到被認為是等效的節(jié)點中其身份可被映射到V 的節(jié)點Y。鄰近性準則P標識了分區(qū)樹中作為被其認為鄰近地等效的所有節(jié)點 的公共祖先的最低環(huán)。它可被表示為通過將沿著從根環(huán)到由其標識的環(huán)的路徑 找到的鄰近性準則串接起來而獲得的串,由路徑分隔符V'來分隔。例如,標識子環(huán) 542 的鄰近性準則可被表示為 "Proximity:/.COM/Corp2/LocationA/Div2"。分區(qū)樹500中的每一個環(huán)可以例 如通過將其表示串用基于SHA的算法來散列而被分配唯一數(shù)字。如果為根環(huán) 保留了數(shù)字0,則可以推斷出RouteNumerically(V,Msg)三RouteProximally(V, Msg, 0)。
例如,子環(huán)544中的節(jié)點可以實現(xiàn)RouteProximally以標識子環(huán)531中更 接近的節(jié)點(例如,對子環(huán)513中的節(jié)點)。進而,子環(huán)531可以實現(xiàn) RouteProximally以標識子環(huán)522中更接近的節(jié)點。同樣,子環(huán)522可以實現(xiàn) RouteProximally以標識子環(huán)511中更接近的節(jié)點。類似地,子環(huán)511可以實現(xiàn) RouteProximally以標識環(huán)501中更接近的節(jié)點。由此,情況可以是 RouteProximally函數(shù)被遞歸地調(diào)用,其中每一調(diào)用將消息路由到更接近目的地 的地方。
由此,當考慮鄰近性準則時,到最終目的地的路徑上的路由跳可以保留在 發(fā)起請求的節(jié)點的附近,同時在數(shù)值空間中在始發(fā)節(jié)點和目的地節(jié)點之間做出 顯著的進展,直到或者到達目的地節(jié)點,或者在所選鄰近性準則下不能做出任 何進一步的進展,此時只需足夠地放松該準則以向著目的地做出進一步的進 展。例如,鄰近性準則可以對于要從環(huán)531向上路由到環(huán)522的消息足夠地放 松等等。
利用以上關(guān)于鄰近性的方法,有可能將所發(fā)布的信息限于一給定環(huán)。例如, 組織可能希望確保組織特有的信息不對其信任域之外的實體或者(l)以向其域 外部的節(jié)點的鄰域復制的形式隱式地,或者(2)以服務對這一信息査找請求的形 式顯示地可用。第一方面通過僅在與指定環(huán)內(nèi)的目標ID相鄰的節(jié)點之中復制 所發(fā)布的信息來滿足。由于由節(jié)點發(fā)起的所有消息都通過向著根環(huán)相繼爬過它 所屬的環(huán)來路由,因此在一組織內(nèi)始發(fā)的所有査找請求有很大的可能性能夠定 位被限制到它的所發(fā)布的信息,由此隱式地滿足了第二方面。
并且,組織不希望節(jié)點自動與其信任域外部的節(jié)點聯(lián)盟。這可例如在訪問 的銷售人員將他/她的膝上型計算機連接到顧客房屋中的網(wǎng)絡時發(fā)生。理想地, 屬于該銷售人員的膝上型計算機希望定位到其歸屬域中所發(fā)布的信息和/或與 其歸屬域中從其最低的優(yōu)選鄰近環(huán)開始的節(jié)點聯(lián)盟。它通常不被允許與顧客的域外部的節(jié)點聯(lián)盟。支持這一情形需要定位歸屬域中的種子節(jié)點的能力。這些 種子節(jié)點可用于定位歸屬域中發(fā)布的信息、加入歸屬聯(lián)盟、選擇性地跨域?qū)?和導出所發(fā)布的信息、以及作為仲裁其他節(jié)點提交的沖突故障報告的一種可能 方法。種子節(jié)點有時被稱為消息網(wǎng)關(guān)。
在其它實施例中,實體發(fā)布對根環(huán)中的種子節(jié)點的引用。種子節(jié)點可以在 與環(huán)(作為目標ID)相關(guān)聯(lián)的唯一數(shù)字(諸如通過散列其表示串獲得的)處 發(fā)布。種子節(jié)點信息可以由在到根環(huán)中的相應目標ID的路徑上的各個環(huán)中的 節(jié)點按需進一步高速緩存。這一按需高速緩存提供了改進的性能并減少了在相 當頻繁地查找半靜態(tài)信息時可能發(fā)生的熱點。種子節(jié)點信息也可經(jīng)由諸如DNS 等其它手段來獲得。
為提供對于受限制的所發(fā)布信息的容錯,每一節(jié)點可以維護其所參與的所 有環(huán)中的一組鄰域節(jié)點。給定以上原因,由節(jié)點維護的狀態(tài)可概括如下 ID,其是均勻分布在范圍O到bn-l中的數(shù)值。
由以下各項構(gòu)成的路由表(所有算術(shù)都以模b"完成) O對節(jié)點參與的每一環(huán),如環(huán)d ■后繼者節(jié)點(Sd) ■前導者節(jié)點(Pd)
■ 令卩域節(jié)點(Pkd,…,Pid, Pd, sd, sld,…,Sjd),使得Sjd.sd.id > (id + u/2), j 2 v/2-l, pkd.pd.id < (id-u/2),且k^v/2-l。 o 路由節(jié)點(r.(n.!),…,r小rl5…,1^),使得r±i = RouteProximally(id ± I)1, updateMsg, d),使得適當時sd S id + b1 S sd+1或pd+1 S id - bj ^Pd。
其中b是數(shù)基,n是以位數(shù)為單位的字段大小,u是鄰域范圍,且v是鄰 域大小。
注意,由環(huán)"d"中的給定節(jié)點維護的鄰域節(jié)點的子集再次可作為鄰域節(jié) 點出現(xiàn)在給定節(jié)點也參與的子環(huán)"d+1"中。由此,可以得出由給定節(jié)點跨其 所參與的所有D個環(huán)維護的鄰域節(jié)點的總數(shù)的上限為D*maX(u,V)/2。這考慮了 僅保持對給定節(jié)點的一個引用,并且最壞情況的上限是針對平衡樹的。應當注意,當環(huán)被劃分成多個相應的兄弟子環(huán)時,例如通過別名化來準許 指定節(jié)點同時參與多個相應兄弟子環(huán)中多于一個子環(huán)。別名化可以被實現(xiàn)來將 例如來自不同子環(huán)的不同狀態(tài)與指定節(jié)點相關(guān)聯(lián)。由此,盡管對給定節(jié)點的別 名具有相同的ID,但是每一別名可以具有與其相關(guān)聯(lián)的完全不同的狀態(tài)。別 名化允許指定節(jié)點參與具有完全不同的鄰近性準則的多個環(huán),這些完全不同的 鄰近性準則不必是更具體的鄰近性準則的共同的祖先。即,指定節(jié)點可以參與 鄰近性樹的多個分支。
例如,雙NIC (有線和無線)膝上型計算機可被認為在鄰近性上等效于共
享與該膝上型計算機相同的LAN段的兩個其它無線和有線節(jié)點。但是,這兩
個不同的鄰近性準則可被建模為僅在應用了諸如,例如基于組織成員關(guān)系的不 同的更高優(yōu)先級的鄰近性準則之后才適用。由于該膝上型計算機屬于相同的組
織,因此兩個子環(huán)中帶別名的節(jié)點表示1)有線LAN段中的成員資格,以及2) 無線LAN段中的成員資格合并成表示該膝上型計算機所屬的組織的環(huán)中的單 個節(jié)點。應當理解,RouteProximally如所預期的那樣工作,而沒有對別名化的 存在有任何修改。
每一鄰近環(huán)可根據(jù)(可能不同的)環(huán)參數(shù)來配置。環(huán)參數(shù)可用于定義鄰域 (例如,環(huán)參數(shù)可表示鄰域范圍、鄰域大小、用于查驗和離開消息的査驗消息 和離開消息定時和分發(fā)模式)、指示特定的聯(lián)盟機制(例如,從上述先前描述 的第一到第四種聯(lián)盟機制中,或從其它聯(lián)盟機制中)、或定義同一鄰近環(huán)中的 路由伙伴之間的通信細節(jié)。某些環(huán)參數(shù)可能較概括,適用于多個不同的聯(lián)盟機 制,而其它環(huán)參數(shù)更具體,且適用于特定類型的聯(lián)盟機制。
用于配置較高級鄰近環(huán)的環(huán)參數(shù)在某些實施例中可以由較低級鄰近環(huán)繼 承。例如,情況可以是環(huán)543繼承環(huán)531的某些環(huán)參數(shù)(后者進而從環(huán)522繼 承,等等)。由此,與環(huán)531相關(guān)聯(lián)的鄰域大小和鄰域范圍也與環(huán)541相關(guān)聯(lián)。
然而,所繼承的環(huán)參數(shù)可以被更改,和/或鄰近環(huán)可以根據(jù)不同的環(huán)參數(shù) 來個別地配置。例如,情況可以是環(huán)511是用于包含大量節(jié)點的管理域的,且 因此上述第四種聯(lián)盟機制對環(huán)511更適當。另一方面,情況可以是環(huán)521是用 于具有相對較小數(shù)量的節(jié)點的小型企業(yè)的,且因此上述第二種聯(lián)盟機制對環(huán)
521更適當。由此,與環(huán)521相關(guān)聯(lián)的環(huán)參數(shù)可以被設(shè)為(或?qū)⒗^承的參數(shù)改為)與同環(huán)511相關(guān)聯(lián)的環(huán)參數(shù)不同的值。例如,指示特定類型的聯(lián)盟機制的
環(huán)參數(shù)可以在環(huán)511和521之間不同。類似地,定義鄰域的參數(shù)可以在環(huán)511 和521之間不同。此外,環(huán)521可以根據(jù)對上述第二種聯(lián)盟機制專用的特定參 數(shù)來配置,而環(huán)511根據(jù)對上述第四種聯(lián)盟機制專用的特定參數(shù)來配置。
因此,鄰近環(huán)可以基于鄰近環(huán)中的節(jié)點的特性(例如數(shù)量、所包括的資源 等)來靈活地配置。例如,管理員可以使用配置過程(例如,通過用戶界面) 為鄰近環(huán)選擇環(huán)參數(shù)。配置過程可以幫助配置鄰近環(huán)之間的繼承關(guān)系,以及配 置個別鄰近環(huán),以便諸如,例如覆蓋以其它方式繼承的環(huán)參數(shù)。
圖8示出了用于對聯(lián)盟基礎(chǔ)結(jié)構(gòu)的節(jié)點分區(qū)的方法800的示例流程圖。方 法800將參考圖5中的分區(qū)樹500的環(huán)來描述。方法800包括訪問包含已被分 配給聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的節(jié)點的節(jié)點ID的已排序鏈表的動作(動作801)。例 如,可訪問由環(huán)501表示的已排序鏈表。已排序鏈表的節(jié)點ID (環(huán)501上所 描繪的節(jié)點)可以表示聯(lián)盟基礎(chǔ)結(jié)構(gòu)(例如,聯(lián)盟基礎(chǔ)結(jié)構(gòu)100)中的節(jié)點。
方法800包括訪問表示用于對已排序鏈表分區(qū)的多個不同鄰近性準則的 鄰近性類別的動作(動作802)。例如,可訪問表示域邊界561、地理邊界562、 以及組織邊界563的鄰近性準則。然而,在所訪問的鄰近性準則中也可以表示 其它鄰近性準則,諸如信任域邊界。鄰近性類別可以包括先前創(chuàng)建的鄰近性準 則的部分排序的列表。環(huán)可以基于鄰近性準則的部分排序的列表來劃分。
方法800包括基于第一鄰近性準則將已排序鏈表劃分成一個或多個第一 子列表的動作(動作803),其中一個或多個第一子列表中的每一個都包含來 自已排序鏈表的節(jié)點ID的至少一個子集。例如,環(huán)501可以基于準則571被 劃分成子環(huán)511、 512、 513和514。子環(huán)511、 512、 513和514中的每一個可 以包含來自環(huán)501的節(jié)點ID的不同子集。
方法800包括基于第二鄰近性準則將選自一個或多個第一子列表的第一 子列表劃分成一個或多個第二子列表的動作(動作804),其中一個或多個第 二子列表的每一個都包含第一子列表中所包含的節(jié)點ID的至少一個子集。例 如,子環(huán)511可以基于準則581被劃分成子環(huán)521、 522和523。子環(huán)521、 522 和523中的每一個可以包含來自子環(huán)511的節(jié)點ID的不同子集。
圖9示出了用于填充節(jié)點路由表的方法900的示例流程圖。方法900將參考圖3中的己排序鏈表304和環(huán)306來描述。方法900包括將前導者節(jié)點插入 到路由表中的動作(動作901),該前導者節(jié)點在已排序鏈表的第一方向中相 對于當前節(jié)點在當前節(jié)點之前。例如,ID為50的節(jié)點可作為ID為64的節(jié)點 (當前節(jié)點)的前導者被插入到路由表中。在順時針方向321上移動(從已排 序鏈表304的A端向著已排序鏈表304的B端),ID為50的節(jié)點在ID為64 的節(jié)點之前。插入前導者節(jié)點可以在當前節(jié)點和前導者節(jié)點之間建立對稱伙伴 關(guān)系,使得當前節(jié)點是前導者節(jié)點的伙伴,而前導者節(jié)點是當前節(jié)點的伙伴。
方法900包括將后繼者節(jié)點插入到路由表中的動作(動作902),該后繼 者節(jié)點在已排序鏈表的第一方向中相對于當前節(jié)點在當前節(jié)點之后。例如,ID 為76的節(jié)點可作為ID為64的節(jié)點(當前節(jié)點)的后繼者被插入到路由表中。 在逆時針方向322上移動,ID為76的節(jié)點在ID為64的節(jié)點之后。插入后繼 者節(jié)點可以在當前節(jié)點和后繼者節(jié)點之間建立對稱伙伴關(guān)系,使得當前節(jié)點是 后繼者節(jié)點的伙伴,而后繼者節(jié)點是當前節(jié)點的伙伴。
方法900包括將適當?shù)泥徲蚬?jié)點插入到路由表中的動作(動作903),該 鄰域節(jié)點基于鄰域范圍和鄰域大小在第一方向和第二相反方向兩個方向上從 已排序鏈表中標識。例如,ID為83、 76、 50和46的節(jié)點可作為ID為64的 節(jié)點(當前節(jié)點)的鄰域節(jié)點被插入到路由表中?;卩徲蚍秶?0和鄰域大 小4,可在順時針方向321上標識ID為83和76的節(jié)點,并在逆時針方向322 上(從已排序鏈表304的B端移向已排序鏈表304的A端)標識ID為50和 46的節(jié)點。情況可以是在某些實施例中沒有標識適當?shù)泥徲蚬?jié)點。插入鄰域節(jié) 點可以在當前節(jié)點和鄰域節(jié)點之間建立對稱伙伴關(guān)系,使得當前節(jié)點是鄰域節(jié) 點的伙伴,而鄰域節(jié)點是當前節(jié)點的伙伴。
方法900包括將適當?shù)穆酚晒?jié)點插入到路由表中的動作(動作904),該 路由節(jié)點基于聯(lián)盟基礎(chǔ)結(jié)構(gòu)的數(shù)基和ID空間的字段大小在第一和第二兩個方 向上從已排序鏈表中標識,該路由節(jié)點表示在第一和第二兩個方向上該已排序 鏈表的對數(shù)索引。例如,ID為200、 2、 30、 46、 50、 64、 64、 64、 64、 76、 83、 98、 135和200的節(jié)點可作為ID為64的節(jié)點的路由節(jié)點被插入到路由表 中?;跀?shù)基2和字段大小8,可在方向321上標識ID為64、 64、 76、 83、 98、 135和200的節(jié)點,并在方向322上標識ID為64、 64、 50、 46、 30、 2和200的節(jié)點。如在環(huán)306內(nèi)描繪的,路由節(jié)點表示順時針方向321和逆時針 方向322兩個方向上己排序鏈表304的對數(shù)索引。插入路由節(jié)點可以在當前節(jié) 點和路由節(jié)點之間建立對稱伙伴關(guān)系,使得當前節(jié)點是路由節(jié)點的伙伴,而路 由節(jié)點是當前節(jié)點的伙伴。
圖7示出了考慮了鄰近性準則的、用于填充節(jié)點路由表的方法700的流程 圖。方法700將參考圖5的環(huán)來描述。方法700包括將關(guān)于當前節(jié)點所參與的 每一分層地劃分的路由環(huán)的前導者節(jié)點插入到路由表中的動作(動作701)。 每一前導者節(jié)點在當前節(jié)點所參與的每一分層地劃分的路由環(huán)中在第一方向 (例如,順時針)上在當前節(jié)點之前。分層地劃分的路由環(huán)根據(jù)相應的鄰近性 準則來劃分,并且至少包含雙向鏈表的子集(可能是整個雙向鏈表)。例如, 情況可以是指定節(jié)點參與根環(huán)501以及子環(huán)511、 522、 523、 531和542。由此, 從環(huán)501和子環(huán)511、 522、 523、 531和542的每一個中為指定節(jié)點選擇一前 導者節(jié)點。
方法700包括將關(guān)于當前節(jié)點所參與的每一分層地劃分的路由環(huán)的后繼 者節(jié)點插入到路由表中的動作(動作702)。每一后繼者節(jié)點在當前節(jié)點所參 與的每一分層地劃分的路由環(huán)中在第一方向上在當前節(jié)點之后。例如,從環(huán)501 和子環(huán)511、 522、 523、 531和542的每一個中為指定節(jié)點選擇一后繼者節(jié)點。
方法700包括將關(guān)于當前節(jié)點所參與的每一分層地劃分的路由環(huán)的適當 的鄰域節(jié)點插入到路由表中的動作(動作703)。鄰域節(jié)點可以基于鄰域范圍 和鄰域大小從當前節(jié)點所參與的分層地劃分的路由環(huán)中在第一方向(例如,順 時針)和第二相反方向(例如,逆時針)兩個方向上標識。例如,從環(huán)501和 子環(huán)511、 522、 523、 531和542的每一個中為指定節(jié)點標識鄰域節(jié)點。
方法700包括將關(guān)于當前節(jié)點所參與的分層地劃分的路由環(huán)的適當?shù)穆?由節(jié)點插入到路由表中的動作(動作704)。例如,從環(huán)501和子環(huán)511、 522、 523、 531和542的每一個中為指定節(jié)點標識路由節(jié)點。
在某些實施例中,對節(jié)點Y所參與的除了葉環(huán)(或在利用別名化的實施 例中的多個葉環(huán))之外的每一鄰近環(huán)d插入適當?shù)穆酚晒?jié)點。適當?shù)穆酚晒?jié)點 可以基于以下表達式來插入
如果Y.Sd.id〈Y.id + bi〈Y.Sd仆id為真,則使用環(huán)d;或者如果Y.pd.id < Y.id - bj < Y.pd+1.id為真,則使用環(huán)d。
如果在前一步中未標識環(huán),則使用葉(例如,環(huán)501)環(huán)作為環(huán)d?,F(xiàn)在, 環(huán)d是節(jié)點Y應在其中査找最接近z的路由伙伴的鄰近環(huán)。
圖IO示出了用于將消息向著目的地節(jié)點路由的方法1000的示例流程圖。 方法1000將參考圖3中的已排序鏈表304和環(huán)306來描述。方法1000包括接 收節(jié)點接收消息以及指示目的地的數(shù)字的動作(動作1001)。例如,ID為64 的節(jié)點可接收指示目的地212的消息。
方法1000包括確定接收節(jié)點是數(shù)值上比相應的前導者節(jié)點離目的地更遠 和數(shù)值上比相應的后繼者節(jié)點離目的地更遠中的至少一種的動作(動作1002)。 例如,在方向322上,ID 64比ID50離目的地212更遠,而在方向321上,ID 64比ID 76離目的地212更遠。方法1000包括確定目的地不在對應于接收節(jié) 點的鄰域節(jié)點集內(nèi)的動作(動作1003)。例如,ID為64的節(jié)點可確定目的地 212不在鄰域集83、 76、 50和46內(nèi)。
方法IOOO包括從對應于接收節(jié)點的路由表中標識中間節(jié)點的動作(動作 1004),該中間節(jié)點數(shù)值上比相應的路由表中的其它路由節(jié)點離目的地更近。 例如,ID為64的節(jié)點可標識ID為200的路由節(jié)點在數(shù)值上比其它路由節(jié)點 離目的地212更近。方法1000包括將消息發(fā)送到中間節(jié)點的動作(動作1005)。 例如,ID為64的節(jié)點可將消息發(fā)送到ID為200的節(jié)點。
圖11示出了用于基于鄰近性準則將消息向著目的地節(jié)點路由的方法1100 的示例流程圖。方法1100將參考圖4和圖5的環(huán)來描述。方法1100包括接收 節(jié)點接收消息以及指示目的地和鄰近性準則的數(shù)字的動作(動作1101)。鄰近 性準則定義了一個或多個節(jié)點類。接收節(jié)點作為基于鄰近性準則從一個或多個 節(jié)點類所選的當前節(jié)點類的一部分接收消息。例如,ID為172的節(jié)點可接收 指示目的地201的消息以及指示目的地節(jié)點是由環(huán)401所表示的類的一部分的 鄰近性準則。ID為172的節(jié)點可以接收作為環(huán)404的一部分的消息。
方法IIOO包括確定在所選節(jié)點類的節(jié)點中,接收節(jié)點是數(shù)值上比相應的 前導者節(jié)點離目的地更遠和數(shù)值上比相應的后繼者節(jié)點離目的地更遠中的至 少一種的動作(動作1102)。例如,在環(huán)404內(nèi),ID為172的節(jié)點在順時針 方向上比ID為174的節(jié)點離目的地201更遠,且在逆時針方向上比ID為153的節(jié)點離目的地201更遠。
方法1100包括確定對由鄰近性準則定義的一個或多個節(jié)點類的任一個,
目的地不在接收節(jié)點的鄰域節(jié)點集內(nèi)的動作(動作1103)。例如,ID為172 的節(jié)點可確定目的地201不在環(huán)404或環(huán)401中相應的鄰域集內(nèi)。
方法IIOO包括從接收節(jié)點的路由表中標識中間節(jié)點的動作(動作1104), 該中間節(jié)點數(shù)值上比路由表中的其它路由節(jié)點離目的地更近。例如,ID為172 的節(jié)點可標識ID為194的節(jié)點在數(shù)值上比環(huán)404中的其它路由節(jié)點離目的地 201更近。方法1100包括將消息發(fā)送到中間節(jié)點的動作(動作1105)。例如, ID為172的節(jié)點可將所接收到的消息發(fā)送到ID為194的節(jié)點。ID為172的節(jié) 點可將所接收到的消息發(fā)送到ID為194的節(jié)點,以遵循先前定義的鄰近性準 則的部分排序的列表。
節(jié)點194可在環(huán)404內(nèi)盡可能地接近目的地201。由此,可適度足夠地放 松鄰近性以允許在下一分支中在環(huán)401內(nèi)向目的地進一步路由。即,路由從環(huán) 404轉(zhuǎn)換到環(huán)401,因為在環(huán)404上不能做出向著目的地的任何進一步進展。 或者,情況可以是ID為201的節(jié)點在環(huán)401中ID為194的節(jié)點的鄰域內(nèi),導 致沒有進一步的路由。由此,在某些實施例中,放松鄰近性準則以到達下一更 高的環(huán)足以引起進一步的路由。
然而,在其它實施例中,導致轉(zhuǎn)換到下一更高的環(huán)的鄰近性準則的增量放 松繼續(xù)直到能發(fā)生進一步的路由(或直到遇到根環(huán))。即,在可做出進一步的 路由進展之前發(fā)生向更高環(huán)的多個轉(zhuǎn)換。例如,現(xiàn)在參考圖5,當在環(huán)531上 不能做出進一步路由進展時,可足夠地放松鄰近性準則以轉(zhuǎn)換到環(huán)511或甚至 轉(zhuǎn)換到根環(huán)501。
節(jié)點階段
參與聯(lián)盟基礎(chǔ)結(jié)構(gòu)的節(jié)點可以在不同的操作階段中操作。對于節(jié)點的有效 階段值可被定義為一有序集的成員。例如,{節(jié)點1(1}.{實例ID).(階段值[階段 狀態(tài)值:插入,同步,路由,操作].[階段.未知指示:傳輸時已知的階段,傳輸時未知的 階段]}定義了表示聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的給定節(jié)點的階段空間的一種可能的有序 集。節(jié)點實例可以按序轉(zhuǎn)換(或前進)通過從插入到同步到路由到操作的節(jié)點 階段狀態(tài)。此外,在某些實施例中,節(jié)點實例可被配置成使得防止節(jié)點實例轉(zhuǎn)換回先前的節(jié)點階段狀態(tài)。在某些實施例中,在每副節(jié)點上升時,節(jié)點將其實 例ID前進。
例如,可防止節(jié)點實例從路由轉(zhuǎn)換回同步(或轉(zhuǎn)換回插入),等等。因此, 在某些實施例中,當己知給定節(jié)點實例(例如,由(節(jié)點W,實例Id)標識)前進 到特定的節(jié)點階段狀態(tài)(例如,操作),則也己知該給定節(jié)點實例不可能(且 在某些實施例中不會)回退到先前的節(jié)點階段狀態(tài)(例如,回到路由、同步或 插入)。由此,在特定節(jié)點階段狀態(tài)之前的節(jié)點階段中的任何節(jié)點實例很有可 能是該節(jié)點的新(且前面的)實例。
在某些實施例中,將階段信息和相應的實例Id(當節(jié)點上升時前進) 一起 傳輸。由此,有可能確定對于同一實例的較小的節(jié)點階段狀態(tài)較舊。此外,當 己知一較新的節(jié)點實例(在任何階段狀態(tài)值)時,關(guān)于較舊實例的任何信息被 認為是過時的。
節(jié)點經(jīng)??梢灾匦乱龑Щ蛘邅G失與彼此的通信,諸如,例如在首次啟動時、 通過優(yōu)雅離開、或作為異常終止(崩潰)的結(jié)果。由此,任何節(jié)點階段狀態(tài)中 的節(jié)點有可能重新引導或丟失與其它節(jié)點的通信。例如,崩潰可導致路由階段 狀態(tài)中的節(jié)點重新引導。在重新引導或丟失通信期間,可能沒有方法來確定一 節(jié)點在什么節(jié)點階段狀態(tài)。因此,當一節(jié)點正在重新引導或丟失與節(jié)點的通信 時,可設(shè)置[階段.未知指示]來指示該節(jié)點的階段狀態(tài)當前是未知的。然而,可 維護任何先前表達的和/或檢測到的關(guān)于該節(jié)點的階段狀態(tài)且該狀態(tài)不會丟失。
可使用[階段.未知指示]來指示在發(fā)送階段狀態(tài)值時階段狀態(tài)是否己知(例 如,未設(shè)置階段.未知的階段值),或者階段狀態(tài)是否是先前表達的階段狀態(tài)且 該階段狀態(tài)在發(fā)送該階段狀態(tài)時不是已知的(例如,設(shè)置了階段.未知的階段 值)。由此,節(jié)點的階段(其階段值)可以使用階段狀態(tài)值和階段.未知指示兩 者來表示。
加入?yún)f(xié)議
有時,節(jié)點可以加入和離開現(xiàn)有聯(lián)盟。節(jié)點可以實現(xiàn)用于加入和離開聯(lián)盟
的適當協(xié)議。例如,節(jié)點可以實現(xiàn)Join()函數(shù)以成為現(xiàn)有聯(lián)盟的一部分。實現(xiàn) Join()函數(shù)的節(jié)點在到達最終的操作階段狀態(tài)之前可以轉(zhuǎn)換通過三個有序階段 狀態(tài)插入階段狀態(tài)、同步階段狀態(tài)以及路由階段狀態(tài)。在其它實施例中,這些特定的有序階段狀態(tài)可能不存在,而可以定義其它階段狀態(tài)。圖12A示出了 節(jié)點建立聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的成員資格的示例。圖12B示出了聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的 節(jié)點交換消息的示例。插入階段節(jié)點Y通過發(fā)出加入消息來進入該階段狀態(tài),該加入消息 至少包括其節(jié)點ID并指示對聯(lián)盟的加入動作。加入消息可以是由新加入的節(jié)點(節(jié)點Y)在將其目的地特性設(shè)為新加入的節(jié)點的身份的情況下發(fā)送的路由的消息。在該階段狀態(tài)中,新加入的節(jié)點被插入在聯(lián)盟中其前導者和后繼者節(jié)點之間。插入階段狀態(tài)可以根據(jù)以下算法來實現(xiàn)(所有算術(shù)都以模b"來執(zhí)行) IP1. Y標識已經(jīng)是加入節(jié)點希望從中參與聯(lián)盟的最低環(huán)的一部分的現(xiàn)有節(jié)點。這或者可被靜態(tài)地配置,或者可使用DHCP和/或DNS和/或WS發(fā)現(xiàn)或 (可能公知的)常量來動態(tài)地發(fā)現(xiàn)。設(shè)該現(xiàn)有聯(lián)盟節(jié)點為E。IP2. Y調(diào)用E.RouteNumerically(Y, joinMsg)來確定在節(jié)點Y所參與的每一 鄰近環(huán)中其ID在數(shù)值上最接近Y.id的節(jié)點X。這可包括將加入消息路由到多 個節(jié)點。IP3.確定數(shù)值上的后繼者和前導者節(jié)點。(注意,完成以下插入所需的 數(shù)據(jù)可以在加入消息及其響應中攜帶。由此,不需要附加的往返。) 情況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響應于加入消息,節(jié)點X (處理該加入消息的節(jié)點)可以向節(jié)點Y發(fā)回 加入響應。該加入響應可以指示節(jié)點Y的前導者節(jié)點(Y.p)和后繼者節(jié)點 (Y.s)。節(jié)點Y可以接收加入響應,并處理加入響應以變得知曉其前導者和 后繼者節(jié)點。在處理了加入響應之后,節(jié)點Y可以是聯(lián)盟中的弱路由參與者。 例如,節(jié)點Y可以僅僅將發(fā)送給它的消息轉(zhuǎn)發(fā)給或者其后繼者或者其前導者節(jié) 點。由此,節(jié)點Y被插入到聯(lián)盟基礎(chǔ)結(jié)構(gòu)中,但是未填充路由和鄰域表。在到 達這一點之前,節(jié)點Y將通過向發(fā)送節(jié)點返回指示節(jié)點Y的活躍度階段是處 于插入階段狀態(tài)的狀態(tài)消息,來請求向其發(fā)送消息的其它節(jié)點通過不同的節(jié)點 重定向發(fā)送給它的消息??梢越粨Q同步請求和響應消息。同步請求和同步響 應消息可以包括從發(fā)送者的觀點來看的關(guān)于其它節(jié)點的活躍度信息(例如,首 部)。也可在同步請求和響應消息中包括鄰域狀態(tài),使得鄰域中的應用層知曉 彼此的狀態(tài)。何時交換同步請求和響應消息的一個示例是在同步加入節(jié)點的階 段狀態(tài)期間。然而,同步請求和響應消息也可以在其它可操作階段狀態(tài)(例如, 在操作階段狀態(tài)中)期間交換。圖16示出了消息模型和相關(guān)的處理模型1600的示例。如圖16所示,節(jié)點可以發(fā)送和接收同步請求消息。例如,同步請求消息1601可以在功能層1651 處從新插入的節(jié)點(例如,圖12B中ID為144的節(jié)點)接收。應用程序數(shù)據(jù) 1602 (例如,命名空間訂閱)可以承載在同步請求消息1601中。功能層1651 可以將包括在同步請求消息中的任何應用程序數(shù)據(jù)通知給應用層1652。例如, 功能層161可以向應用層1652調(diào)用包括應用程序數(shù)據(jù)1602的鄰域狀態(tài)同步事 件1603。包括應用程序數(shù)據(jù)1607的同步請求1631也可被發(fā)送到處理模型1600 中類似于對同步請求1601的處理來處理同步請求1631的另一節(jié)點。響應于某一功能層事件(例如,同步請求消息1601、同步響應消息1641、 或査驗消息1612),功能層1651可以調(diào)用應用層1652中的鄰域狀態(tài)請求功能 1604。鄰域狀態(tài)請求1604是對應用層的獲得需要在鄰域中傳播的狀態(tài)的請求。 響應于鄰域狀態(tài)請求1604,應用層1652可以向功能層1651提供包括可任選應 用程序數(shù)據(jù)1607的鄰域狀態(tài)1606。或者,應用層1652可以作為對某一應用層 事件的反應來發(fā)送包括可任選應用程序數(shù)據(jù)1607的鄰域狀態(tài)1606。使用類似 于以上的內(nèi)部機制,功能層1651可以發(fā)送包括可任選應用程序數(shù)據(jù)1607的同 步響應消息1608來傳播應用層鄰域狀態(tài)。同步階段在處理了加入響應消息之后,節(jié)點Y從插入階段狀態(tài)轉(zhuǎn)換 到同步階段狀態(tài)。在同步階段狀態(tài)中,新插入的節(jié)點Y與鄰域中的節(jié)點同步信 息。 一般而言,節(jié)點Y可以至少向在插入階段狀態(tài)中標識的其前導者和后繼者 節(jié)點發(fā)送同步消息。處理同步消息的這些節(jié)點可以返回指示這些處理節(jié)點的相 應的鄰域和路由伙伴節(jié)點的同步響應。在更具體的示例中,同步階段狀態(tài)可以 根據(jù)以下算法來實現(xiàn)(所有算術(shù)都以模bn來執(zhí)行)集來計算鄰域(Y)。該并計算可以如下完成(Sj,…,sl5 s, p, pj,…,pk),使得Sj.s.id > (Y.id + u/2), j 2 v/2-l, pk.p.id < (Y.id-u/2),且k^v/2-lSP2.簡要地參考圖16,經(jīng)由鄰域狀態(tài)請求(例如,鄰域狀態(tài)請求1604) 査詢Y的本地應用層(例如,應用層1652)來獲得可任選的應用程序?qū)S绵?域數(shù)據(jù)(例如,應用程序?qū)S脭?shù)據(jù)1607)。SP3.將至少包括從Y的觀點來看的每一鄰近鄰域和路由伙伴節(jié)點的活 躍度狀態(tài)信息的同步消息至少發(fā)送給鄰近后繼者和前導者節(jié)點。經(jīng)由SP2訪問 的任何可任選的應用程序?qū)S绵徲驍?shù)據(jù)(例如,應用程序數(shù)據(jù)1607)被包括在 同步請求1631中。SP3.Y從處理在SP2中發(fā)送的同步消息的這些節(jié)點接收回同步響應消息。 例如,節(jié)點Y可以與其計算的鄰域內(nèi)的一個或多個節(jié)點交換同步消息(請求/ 響應)。在與節(jié)點Y的至少一個以及可能所有的鄰域節(jié)點交換了同步消息之后, 計算的鄰域節(jié)點可以交換進一步的消息以傳播同步的數(shù)據(jù)。同步消息(請求或 響應)可以是由節(jié)點發(fā)送的非路由消息,以主動將其數(shù)據(jù)與例如在節(jié)點鄰域中 的目標節(jié)點同步。SP4.當接收到SP3中的同步響應消息(例如,同步響應消息1641)時, 可經(jīng)由鄰域狀態(tài)同步事件1603將這些接收到的同步響應消息中存在的任何可 任選的應用程序?qū)S绵徲驍?shù)據(jù)(例如,應用程序數(shù)據(jù)1622)提供給Y的應用 層1652。作為同步階段狀態(tài)的一部分,鄰近后繼者(例如,Y.s)和前導者(Y.p) 節(jié)點與新插入的節(jié)點(例如,Y)交換其路由表。接收同步消息的節(jié)點可以通 過發(fā)送同步響應來響應。同步響應類似于同步消息攜帶數(shù)據(jù),除了是從響應節(jié) 點的觀點來看的之外。同步消息和同步響應都可攜帶(或承載)應用程序數(shù)據(jù)。 由此,應用程序數(shù)據(jù)可在同步階段狀態(tài)期間在節(jié)點之間傳播。當同步階段狀態(tài) 完成時,節(jié)點可以處理目的地為它的消息,而非僅僅將其轉(zhuǎn)發(fā)給或者后繼者或 者前導者。然而,節(jié)點仍可被視為弱路由參與者,因為其路由表未被填充。路由階段在完成了同步階段狀態(tài)之后,節(jié)點轉(zhuǎn)換到路由階段狀態(tài)。在 路由階段狀態(tài),新同步的節(jié)點(例如,節(jié)點Y)計算其路由節(jié)點。路由階段狀態(tài)可以根據(jù)以下算法來實現(xiàn)(所有算術(shù)都以模bn來執(zhí)行)RP1.如果路由階段狀態(tài)正作為平衡過程(稍后解釋)的一部分來執(zhí)行, 則確保后繼者節(jié)點(Y.S)和前導者節(jié)點(Y.p)在節(jié)點Y所參與的每一鄰近環(huán) 中都是活躍的。如果任一個不是活躍的,則通過選擇考慮中的環(huán)中的鄰域節(jié)點 之中的下一最佳后繼者或前導者節(jié)點來確定對故障節(jié)點的替換節(jié)點。RP2. 對于l^i^n-lRP2a. 計算z二Y.id士biRP2b. 如果環(huán)d不是最具體的鄰近性,則找出節(jié)點Y所參與的且 滿足條件Y.sd.id < Y.id + b1 < Y.sd+1.id或Y.pd.id < Y.id - bj < Y.pd+1.id 的鄰近環(huán)d?;蛘撸沟铆h(huán)d成為最具體的鄰近環(huán)?,F(xiàn)在,環(huán)d是節(jié)點Y 應在其中查找最接近z的路由伙伴的鄰近環(huán)。設(shè)Q是在Y.sd.r±i和Y.pd.r±i 之間數(shù)值上最接近z的節(jié)點。如果IQ.id-zl在bi的可配置百分比(通常是 20%)內(nèi),則只需令Y.r士產(chǎn)Q。如果Q.id比(Y.Sd.id士bi)或(Y.pd.id士bi)更 接近z,則意味著節(jié)點Y是鄰近環(huán)d中比Y.Sd或Y.pd更好的對節(jié)點Q 的伙伴路由節(jié)點。因此,如果尚未發(fā)送updageMsg (更新消息),則將 其發(fā)送給節(jié)點Q,該消息提供i和節(jié)點Y作為參數(shù),使得節(jié)點Q能夠建 立節(jié)點Y為r.i處其伙伴路由節(jié)點。RP2c. 如果該階段狀態(tài)正作為平衡過程的一部分來執(zhí)行,并且如果 Y.sd.r±i.id==Y.pd.r±i.id,則在(Y.Sd.id ± bi)和(Y.pd.id ± 1^)之間的數(shù)值范圍 中僅有一個節(jié)點。該節(jié)點是后繼者(或前導者)節(jié)點的路由節(jié)點&所指 向的節(jié)點。因此,只需令Y.r+「Y.Sd.r^.i。RP2d. 否則,通過對節(jié)點Q調(diào)用RouteProximally并將鄰近性準則 設(shè)為環(huán)d的鄰近性準則來計算路由伙伴Y.r±i 。這意味著 Y.r±i=Q.RouteProximally(z, updateMsg, d)。RP3.此時,節(jié)點Y不僅能處理目的地為它的消息,而且還能路由消息。 RP4.如果尚未訂閱,則對伙伴路由節(jié)點的端點ID訂閱從應用層發(fā)送的 活躍度通知事件。并且,對于不再是伙伴路由節(jié)點的那些節(jié)點,撤消先前與應 用層建立的任何活躍度事件訂閱。例如,訂閱和/或撤消請求可向上傳遞到實現(xiàn) 用于相應的應用程序(例如,命名空間應用程序)的發(fā)布-訂閱邏輯的應用層(例如,應用層121)。當在應用層處接收到后續(xù)的應用程序?qū)S没钴S度消息 (例如,因命名空間訂閱所得的消息)時,可將通知(事件)向下推至其它較 低層(例如,其它較低層131)以供處理。圖17描繪了可在功能層1751和應用層1752之間發(fā)生的多個活躍度交互 的示例。如圖17所示,端點是例如表示各節(jié)點的發(fā)布/訂閱話題(例如,由URL 或URI表示),并且可以是例如聯(lián)盟基礎(chǔ)結(jié)構(gòu)節(jié)點。訂閱活躍度事件1701可 以從功能層1751向應用層1752調(diào)用以訂閱活躍度事件(例如,訂閱發(fā)布/訂閱 話題)。撤消活躍度訂閱1702可以從功能層1751向應用層1752調(diào)用以撤消 對活躍度事件的訂閱。端點停機1703可以從應用層1752向功能層1751發(fā)送 以指示端點可能停機并向功能層1751提供可任選的替換端點。端點停機事件 1703可以基于先前的訂閱(例如,訂閱活躍度事件1701)異步地發(fā)送。節(jié)點停機1704可以從功能層1751向應用層1752調(diào)用,以指示功能層1751 (或某一其它較低層)檢測到了故障節(jié)點并可任選地向應用層1752提供替換 節(jié)點。應用層1752可以隨后將檢測到可能的故障節(jié)點傳播到其它感興趣的各 方。節(jié)點停機事件1704可以在功能層1751或某一其它較低層檢測到可能的故 障節(jié)點的任何時刻異步地發(fā)送。發(fā)送活躍度1706可以在應用層1752檢測到一 節(jié)點停機(例如,從節(jié)點停機事件1704或從某一其它帶外機制)時從應用層 1752向功能層1751調(diào)用。發(fā)送活躍度事件1706可以使得功能層1751發(fā)送活 躍度消息。發(fā)送活躍度事件1706也可在應用層1752檢測到節(jié)點停機并且不依 賴于任何先前建立的訂閱(經(jīng)由訂閱活躍度)的任何時刻異步地調(diào)用。由此,在某些實施例中,功能層1751被遞歸地使用。例如,功能層1751 可以向應用層1752指示對指定節(jié)點(例如,是開機或停機的特定節(jié)點)的興 趣。應用層1752可以制定對涉及該指定節(jié)點的通知的應用程序?qū)S糜嗛?,?后重復使用功能層1751來將所制定的訂閱傳遞到其它聯(lián)盟節(jié)點中的適當?shù)南?應應用層1752實例。例如,如果聯(lián)盟節(jié)點內(nèi)的應用層1752實現(xiàn)命名空間發(fā)布 /訂閱行為,則功能層1751可以將該訂閱路由給管理關(guān)于指定節(jié)點的通知的發(fā) 布/訂閱管理器,該發(fā)布訂閱管理器被實現(xiàn)為至少是相關(guān)的聯(lián)盟節(jié)點中的應用程 序1752的一部分。因此,功能層1751用于路由功能層1751所引起的被生成 的訂閱。也可使用類似的遞歸機制來取消訂閱或以其它方式指示對指定節(jié)點不再感興趣。操作階段在完成了路由階段狀態(tài)之后,節(jié)點轉(zhuǎn)換到操作階段狀態(tài)。節(jié) 點可以保持在操作階段狀態(tài)中,直到其停機(例如,重新引導)。在操作階段 狀態(tài)中,節(jié)點可以不時地將更新消息發(fā)送給路由伙伴。更新消息(更新請求和 更新響應)可包括關(guān)于發(fā)送節(jié)點(例如,關(guān)于所有感興趣的鄰近鄰域)的鄰域 節(jié)點活躍度信息。該發(fā)送的活躍度信息也可包括發(fā)送者的活躍度信息。更新消 息可以是節(jié)點發(fā)起的、周期性地更新其路由伙伴節(jié)點的路由的消息。應用程序 數(shù)據(jù)可被承載在更新消息上,使得應用程序數(shù)據(jù)可以在路由伙伴更新期間傳 播。消息目的地被設(shè)為期望路由索引處的理想路由伙伴的身份。該消息的消息 ID特性被分配一應用程序序列號,以便使處理該消息的節(jié)點能確定最新消息 并且該消息被鄰近地路由。接收更新消息的節(jié)點可以用更新響應來響應。更新響應攜帶了與更新消息 相同的數(shù)據(jù),除了該數(shù)據(jù)是從響應節(jié)點的觀點來看的之外。通過交換更新消息 和更新響應,節(jié)點能夠交換路由信息。有時,可操作節(jié)點可更新路由伙伴。有時,可操作節(jié)點也可發(fā)送査驗消息(例如,查驗消息1609和1611)。 查驗消息是節(jié)點發(fā)送的單向消息,用于周期性地通告其存在并在其鄰域內(nèi)散布 關(guān)于其鄰域/路由節(jié)點的信息并復制(例如,承載)應用程序數(shù)據(jù)。原始節(jié)點可以向其一個或多個直接前導者和后繼者鄰域節(jié)點發(fā)送查驗消 息。由此,取決于査驗分發(fā)模式(即,向哪些節(jié)點發(fā)送查驗消息),與原始節(jié) 點有關(guān)的信息被傳播給該原始節(jié)點的鄰域內(nèi)的環(huán)上的其它節(jié)點。例如,原始節(jié) 點可以僅將查驗消息發(fā)送給其直接前導者和后繼者節(jié)點,并且査驗消息從原始節(jié)點的位置(節(jié)點ID)在兩個方向上沿著環(huán)向外傳播到該原點的鄰域的邊緣?;蛘撸脊?jié)點可以將查驗消息發(fā)送給其鄰域中其前導者和后繼者兩個方向上每第n個節(jié)點。接收査驗消息的每一節(jié)點檢査從鄰域范圍的觀點來看其對原始節(jié)點的興 趣。如果不感興趣,則它丟棄該査驗消息。如果感興趣,則它處理該查驗消息, 并且如果轉(zhuǎn)發(fā)被約束到始發(fā)節(jié)點的鄰域,則根據(jù)其指定的環(huán)模式來轉(zhuǎn)發(fā)該査驗 消息。例如,在處理了查驗消息之后,如果發(fā)送和原始節(jié)點在其前導者節(jié)點集 中,則接收節(jié)點可將查驗消息轉(zhuǎn)發(fā)給至少其后繼者節(jié)點,或者如果發(fā)送和原始節(jié)點在其后繼者節(jié)點集中,則至少轉(zhuǎn)發(fā)給其前導者節(jié)點。由此,査驗消息的向外傳播在該消息到達原始節(jié)點周圍的鄰域節(jié)點集的邊 緣時停止。査驗消息的消息ID特性被分配一應用程序序列號,以便使處理該 消息的節(jié)點能確定來自原始節(jié)點的最新消息并避免重復處理或另外的不需要 的轉(zhuǎn)發(fā)?;仡^參考圖16,査驗消息1609可以在功能層1651處從鄰域節(jié)點接收。 應用程序數(shù)據(jù)1612 (例如,命名空間訂閱)可以被承載在査驗消息1609中。 功能層1651可以將包括在査驗消息中的任何應用程序數(shù)據(jù)通知給應用層 1652。類似地,功能層1651可以將包括在同步請求消息中的任何應用程序數(shù) 據(jù)通知給應用層1652。這兩種傳遞情況都可經(jīng)由向應用層1652發(fā)送包括應用 程序數(shù)據(jù)1612的鄰域狀態(tài)同步事件1603來實現(xiàn)。響應于某一功能層事件(例如,接收到査驗消息1609),功能層1651可 以向應用層1652發(fā)送鄰域狀態(tài)請求1604。鄰域狀態(tài)請求1604是在應用層1652 上調(diào)用的,以獲得需要在鄰域中可任選地傳播的狀態(tài)。響應于鄰域狀態(tài)請求 1604,應用層1652可以向功能層1651返回包括可任選應用程序數(shù)據(jù)1607的 鄰域狀態(tài)1606。功能層1651可以發(fā)送包括可任選應用程序數(shù)據(jù)1607的查驗消 息1611,以向鄰域和路由伙伴節(jié)點傳播活躍度信息以及可任選的應用層鄰域狀 態(tài)。功能層1651也可發(fā)送包括可任選應用程序數(shù)據(jù)1607的同步響應1608來 傳播應用程序狀態(tài)。離開協(xié)議當對于節(jié)點而言離開聯(lián)盟是適當?shù)臅r候,節(jié)點可以實現(xiàn)Depart (離開)函 數(shù)來優(yōu)雅地從聯(lián)盟中移除。節(jié)點通過向其一個或多個直接鄰近前導者和后繼者 節(jié)點,以及可能的同一鄰近鄰域中的其它節(jié)點發(fā)送離開消息來離開現(xiàn)有聯(lián)盟。 由此,取決于離開分發(fā)模式(即,向哪些節(jié)點發(fā)送離開消息),與離開節(jié)點有 關(guān)的信息被傳播給該離開節(jié)點的鄰域內(nèi)的環(huán)上的其它節(jié)點。離開消息是優(yōu)雅地 離開的節(jié)點獲得的單向消息,用于向其至少一個鄰近鄰域內(nèi)的一個或多個其它 節(jié)點通知其即將發(fā)生的離開。離開節(jié)點以類似于查驗消息的傳播的方式來傳播 離開消息(例如,在其鄰域內(nèi))。例如,ID為30的節(jié)點可將離開消息1219 發(fā)送到ID為17和40的節(jié)點。ID為30的節(jié)點然后可從給定鄰近環(huán)的觀點來看將其自身從聯(lián)盟基礎(chǔ)結(jié)構(gòu)中移除。注意,節(jié)點有可能將其自身從一個鄰近鄰 域中移除,但不從其可能所屬的其它鄰域中移除。由于在ID為30的節(jié)點被移除之后ID為17和40的節(jié)點(即,前導者和 后繼者節(jié)點)可能是最接近ID 30的節(jié)點,因此使ID為17和40的節(jié)點知曉 ID為30的節(jié)點的離開。由此,要傳遞給ID30的將來消息可在ID為17和40 的節(jié)點處適當?shù)靥幚?。ID為17和40的節(jié)點可以將ID為30的節(jié)點的離開傳 播到環(huán)1206上的其它節(jié)點。在缺少ID為30的節(jié)點的情況下,ID為17和40 的節(jié)點也可重新計算前導者和后繼者指針,這些指針可能指向?qū)Ψ?。離開消息的消息ID特性被分配與査驗消息一樣的應用程序序列ID,以使 處理該離開消息的節(jié)點能夠確定由原始節(jié)點發(fā)送的一系列査驗和離開消息中 最新的消息。從聯(lián)盟鄰近環(huán)的優(yōu)雅離開是可任選的,但鼓勵這樣做。然而,聯(lián) 盟被設(shè)計成在節(jié)點突然離開的情況下自我復原?;钴S度在聯(lián)盟的生存期期間,節(jié)點可以交換活躍度信息來維護該聯(lián)盟。活躍度信 息可以按活躍度消息首部的形式被包括在在聯(lián)盟內(nèi)交換的實際上任何消息中。 例如,加入消息、加入響應、同步消息、同步響應、更新消息、更新響應、應 用程序?qū)S孟?、活躍度消息以及查驗消息都可包括活躍度信息首部。當聯(lián)盟 節(jié)點發(fā)送任何消息或響應時,該節(jié)點可以包括活躍度信息以供其它節(jié)點處理。 活躍度信息可被包括在活躍度消息的活躍度信息首部中。指示節(jié)點的活躍度狀態(tài)的活躍度信息可以使用以下特性來表示[節(jié)點]:標識其活躍度狀態(tài)正被表示的節(jié)點。節(jié)點可以基于進一步包括[實例ID]的[引用特性沐標識。[引用特性]:在WS尋址規(guī)范中指定的元素信息項。WS尋址定義 了包括在引用特性集中的[實例ID]引用特性。[實例ID]: 標識節(jié)點的特定實例的數(shù)字??墒褂眠f增自舉計數(shù)(boot count)作為節(jié)點的實例ID。[階段]:傳達所標識的節(jié)點的階段。[階段狀態(tài)值]傳達所指示的節(jié)點實例已知已達到的最高階段狀態(tài) (插入、同步、路由、操作)。[階段.未知指示]傳達當前階段是已知還是未知的指示符。[新鮮度]:傳達信息的新鮮度并且其值范圍從0到MaxFreshness。該值 越高,信息就越新鮮,0意味著沒有信息,而MaxFreshness是協(xié)議定義的 常量。[色彩]:標識節(jié)點所屬的鄰近性等效類。具有相同色彩值的兩個節(jié)點總 是被認為是最鄰近的,因為它們都屬于由色彩值所標識的相同的等效類。 鄰近性等效類的數(shù)量可以在更多節(jié)點加入聯(lián)盟時隨著時間而增加。[權(quán)重]:提供節(jié)點能力度量,且其值范圍從0到MaxWeight。它測量聯(lián) 盟節(jié)點的所需特性,諸如大計算能力、高網(wǎng)絡帶寬和長開機時間。該值越 高,則節(jié)點越能夠使其從伙伴關(guān)系的觀點來看合乎需要。在某些環(huán)境中,節(jié)點的[節(jié)點]和[新鮮度]特性或者隱式地或者顯式地在諸 如[原始]和[發(fā)送者]消息首部等較大范圍內(nèi)傳達,且因此,再次在活躍度首部 中包括上述特性將是重復的。例如,消息的發(fā)送者只需傳達其當前階段、色彩 和權(quán)重信息,因為其ID、實例Id在消息尋址首部中提供且其新鮮度被蘊含在 內(nèi)。活躍度狀態(tài)可以至少基于如下定義的"<"二元關(guān)系來部分排序-"LKL2"為真,如果1. "L1.[節(jié)點].[名銜二-L2.[節(jié)點].[名稱]"為真,且在執(zhí)行了測試并按照 所列出的次序短回路時以下之一為真 Ll.[節(jié)點].[引用特性].[實例ID] 〈L2.[節(jié)點].[引用特性].[實例ID] Ll.[階段.未知指示]!=真AND L2.[階段.未知指示]!=真AND Ll.[階段狀態(tài)]< L2.[階段狀態(tài)] L1.[新鮮度]〈L2.[新鮮度]2.或者,"L1.[色夠L2.[色彩]"為真,且在執(zhí)行了測試并按照所列出的次序短回路時以下之一為真 L1.[階段狀態(tài)]〈L1[階段狀態(tài)] L1.[權(quán)重]〈L2.[權(quán)重]此外,當檢測到或懷疑指定節(jié)點變得不可用(例如,停機)時,可以向 指定節(jié)點發(fā)送活躍度"停機"消息。作為一個示例,當應用層(例如,應用層 121)檢測到另一應用層(例如,應用層123)或主存另一應用層的節(jié)點停機時, 則檢測應用層可以例如根據(jù)消息模型和相關(guān)的處理模型1600和/或1700通知其 它較低層(例如,其它較低層131)該節(jié)點可能停機。這一通知可使得諸如, 例如功能層1651等其它較低層發(fā)送活躍度停機消息。這僅是對活躍度停機消 息的生成的激勵的一個示例。由于活躍度停機消息被路由且因此被傳遞給最接近被懷疑停機的那些節(jié) 點的節(jié)點,因此如果對指定節(jié)點的活躍度停機消息被傳遞回到該指定節(jié)點,則 或者該指定節(jié)點從未停機,或者該指定節(jié)點是一不同的實例(例如,具有不同 的實例ID)。另一方面,如果活躍度停機消息被傳遞到另一節(jié)點,則它指示 指定節(jié)點的確看似已停機。因此,如果接收活躍度停機消息的節(jié)點將其自身視 為在指定節(jié)點的鄰近鄰域中,則它可如所描述地將對該指定節(jié)點的離開消息發(fā) 送到該鄰近鄰域中,并向其應用層指示(例如,使用節(jié)點停機1704)指定節(jié)點 可能停機且接收節(jié)點是其替換。對指定節(jié)點的活躍度停機消息可在將其目標ID 設(shè)為可能停機的節(jié)點的ID的情況下鄰近地路由。平衡過程本發(fā)明的各實施例被設(shè)計成適應大量節(jié)點在較短的一段時間內(nèi)加入和離 開聯(lián)盟。如果在各節(jié)點處維護的對數(shù)搜索樹變得不平衡,則網(wǎng)絡中的這一改變 可導致路由延遲。即,如果在環(huán)的一側(cè)的節(jié)點要比另一側(cè)多。為促進最優(yōu)路由效率,參與聯(lián)盟的節(jié)點在滿足特定準則時執(zhí)行平衡過程。例如,當以下條件中的任一個為真時,任何節(jié)點可執(zhí)行平衡過程來確保平 衡的路由表以獲得最優(yōu)路由效率 接收到配置的數(shù)量的上述活躍度消息。 自從接收到最后一條上述活躍度消息以來已經(jīng)經(jīng)過了配置量的時 間。 鄰域在某些新節(jié)點己到來或某些現(xiàn)有節(jié)點已離開的意義上已改變。平衡路由表是簡單的過程。例如,具有未平衡的路由表的節(jié)點可以重新執(zhí) 行加入?yún)f(xié)議的同步和路由階段狀態(tài)。與l)找出對一數(shù)字的最接近的路由節(jié)點,2)節(jié)點遵循離開協(xié)議優(yōu)雅地離開聯(lián)盟,以及3)節(jié)點遵循平衡過程接收活躍度消息相組合的動作RP2b、 RP2d和 RP4在聯(lián)盟節(jié)點相當快速且大量地加入和離開網(wǎng)絡時導致更快速的復原系統(tǒng)。 狀態(tài)消息狀態(tài)消息是由接收者節(jié)點向發(fā)送者節(jié)點發(fā)送的非路由的消息,其通知發(fā)送 者節(jié)點先前轉(zhuǎn)發(fā)給接收者節(jié)點的相關(guān)消息的路由成功/失敗。圖18描繪了形成 請求-響應消息交換模式的一部分的消息如何跨環(huán)上的節(jié)點路由的示例。狀態(tài) 消息可包括標識其路由狀態(tài)正被報告的原始的相關(guān)消息的首部。由此,狀態(tài)消 息可以在節(jié)點之間用于指示消息被成功地從一個節(jié)點路由到下一節(jié)點。例如, 從節(jié)點1801到節(jié)點1806路由請求消息1811包括通過節(jié)點1802、 1803、 1804 和1805發(fā)送請求1811。對應的層疊成功狀態(tài)消息(狀態(tài)1817、 1818、 1819、 1820和1821)可分別從節(jié)點1806發(fā)送到節(jié)點1805,從節(jié)點1805發(fā)送到節(jié)點 1804,從節(jié)點1804發(fā)送到節(jié)點1803,從節(jié)點1803發(fā)送到節(jié)點1802,以及從 節(jié)點1802發(fā)送到節(jié)點1801。響應于請求1811,可從節(jié)點1807到節(jié)點1801端 對端地發(fā)送響應1816。響應1816是可任選的,并且可能不在單向消息交換模 式中存在。圖13示出了節(jié)點加入聯(lián)盟基礎(chǔ)結(jié)構(gòu)的方法1300的示例流程圖。方法1300 將參考圖12A和12B中的環(huán)1206來描述。方法1300包括向聯(lián)盟基礎(chǔ)結(jié)構(gòu)發(fā) 出加入消息的動作(動作1301)。例如,ID為144的節(jié)點可以向包括環(huán)1206的聯(lián)盟基礎(chǔ)結(jié)構(gòu)發(fā)出加入1201。方法1300包括從加入節(jié)點接收加入消息的動
作(動作1308)。例如,包括環(huán)1206的聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的現(xiàn)有節(jié)點可接收加 入1201。
方法1300包括向處理節(jié)點路由加入消息的動作(動作1309)。處理節(jié)點 可以是在路由加入消息時其ID數(shù)值上比聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的其它活動節(jié)點更接 近加入節(jié)點的ID的節(jié)點。例如,加入1201最初可在ID為64的節(jié)點處接收, 路由到ID為135的節(jié)點,并路由到ID為151的節(jié)點。
方法1300包括為加入節(jié)點計算一個或多個前導者節(jié)點和一個或多個后繼 者節(jié)點的動作(動作1310)。例如,ID為151的節(jié)點可以為ID為144的節(jié)點 計算直接前導者節(jié)點和直接后繼者節(jié)點。在環(huán)1206內(nèi),ID為151的節(jié)點可以 計算ID為135的節(jié)點是直接前導者節(jié)點,而ID為151的節(jié)點是直接后繼者節(jié) 點??蓪ζ渌徑h(huán)進行類似的計算。
方法1300包括為加入節(jié)點計算一個或多個路由節(jié)點的動作(動作1311)。 例如,ID為151的節(jié)點可以為ID為144的節(jié)點計算路由節(jié)點(從ID為151 的節(jié)點的觀點來看)。在環(huán)1206內(nèi),ID為151的節(jié)點可例如計算ID為218 和40的節(jié)點為ID為144的節(jié)點的路由節(jié)點??蓪ζ渌徑h(huán)進行類似的計算。
方法1300包括向加入節(jié)點發(fā)送加入響應的動作(動作1312)。加入響 應可以在給定其當前的聯(lián)盟基礎(chǔ)結(jié)構(gòu)視圖的情況下標識如由處理節(jié)點所計算 的加入節(jié)點的所有前導者和后繼者鄰域和路由伙伴節(jié)點。例如,加入響應1202 可以至少將ID為135的節(jié)點標識為對ID為144的節(jié)點的直接前導者節(jié)點,可 以將ID為151的節(jié)點標識為對ID為144的節(jié)點的直接后繼者節(jié)點,并可以將 標識在ID為151節(jié)點處為ID為144的節(jié)點(新加入的節(jié)點)計算的任何路由 節(jié)點(對于ID為144的節(jié)點)。
方法1300包括從處理加入消息的聯(lián)盟節(jié)點接收加入響應的動作(動作 1302)。例如,ID為144的節(jié)點可從ID為151的節(jié)點接收加入響應1202。
方法1300包括向直接鄰近前導者節(jié)點和直接鄰近后繼者節(jié)點中的至少每 一個發(fā)送同步請求的動作(動作1303)。例如,現(xiàn)在參考圖12B, ID為144 的節(jié)點可以向ID為135和151的節(jié)點發(fā)送同步請求1203。同步請求1203可 以包括ID為144的節(jié)點的任何鄰域節(jié)點的標識和/或ID為144的節(jié)點的任何路由伙伴的標識。
ID為135和151的節(jié)點可接收同步請求1203。響應于接收同步請求1203, ID為135和151的節(jié)點可以從相應的路由表中標識其鄰域和路由伙伴節(jié)點。ID 為135和151的節(jié)點可以在同步響應1204中包括其標識的鄰域和路由伙伴節(jié) 點的活躍度信息,并將同步響應1204發(fā)送給ID為144的節(jié)點。
方法1300包括從鄰近前導者和后繼者節(jié)點中的每一個接收同步響應的動 作(動作1304)。例如,ID為144的節(jié)點可從ID為135和151的節(jié)點接收同 步響應1204。同步響應1204可以包括關(guān)于環(huán)1206或聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的其它環(huán) 上的一個或多個節(jié)點的活躍度信息。同步響應1204還可標識ID為144的節(jié)點 的任何預期的路由伙伴節(jié)點。
方法1300包括計算鄰居節(jié)點的動作(動作1305)。例如,ID為144的節(jié) 點可以基于Id為135和151的節(jié)點的鄰域節(jié)點的并集來計算相應的鄰域節(jié)點。 鄰域節(jié)點可以基于加入響應消息和任何同步響應消息的概括視圖來計算。
方法1300包括計算路由節(jié)點的動作(動作1306)。例如,ID為144的節(jié) 點可以從環(huán)1206的節(jié)點中計算路由節(jié)點。路由伙伴可以基于加入響應消息和 任何同步響應消息的概括視圖來計算。
方法1300包括至少將鄰域節(jié)點信息與所計算的路由伙伴交換的動作 (1307)。例如,ID為144的節(jié)點和ID為218的節(jié)點(計算的路由伙伴)可 以交換對應于其各自的鄰域節(jié)點的狀態(tài)信息(例如,實例ID、階段狀態(tài)等)。 這些交換通過新加入的節(jié)點如在以上路由階段狀態(tài)中描述的向至少每一個唯 一計算的路由伙伴發(fā)送(路由)更新消息來實現(xiàn)。處理更新消息的節(jié)點作為對 從新加入的節(jié)點接收這些更新消息的反應,將發(fā)送相應的更新響應消息。更新 響應至少包括其本身及其鄰域節(jié)點的活躍度信息。
方法1300還包括發(fā)起向至少一個鄰域節(jié)點的路由表的初始傳播的動作。 例如,ID為144的節(jié)點可以在查驗消息中包括計算的鄰域和路由伙伴節(jié)點, 并將該查驗消息發(fā)送給ID為174的節(jié)點(例如,計算的鄰域節(jié)點之一)。ID 為174的節(jié)點可以接收該査驗消息,并用源自ID為144的節(jié)點處的活躍度信 息來更新相應的路由表。ID為174的節(jié)點可以在第二查驗消息中還包括其相 應的路由表,并將該第二查驗消息在某一將來時刻發(fā)送給ID為144的節(jié)點。收該第二查驗消息,并可用包括在該第二查驗消息中
的活躍度信息中的節(jié)點(即,ID為174的節(jié)點的路由表中的節(jié)點)來更新其 相應的路由表。ID為144的節(jié)點可以對環(huán)1206中的其它鄰域節(jié)點重復査驗消 息的發(fā)送。
應當理解,當新加入的節(jié)點加入聯(lián)盟時,該新加入的節(jié)點可能未找到現(xiàn)有 聯(lián)盟成員,且因此變?yōu)槲ㄒ坏某蓡T。由此,可能沒有為該新加入的節(jié)點分配的 前導者、后繼者或鄰居節(jié)點。因此,新加入的節(jié)點在所有情況下都作為最佳路 由伙伴來映射。
此外,盡管方法1300是參考單個環(huán)(環(huán)1206)來描述的,但是應當理解, 在某些實施例中,本來加入一個環(huán)的節(jié)點也可加入一個或多個其它環(huán)。例如, 簡要地回頭參考圖5,本來加入環(huán)551的節(jié)點也加入環(huán)543、 531、 522、 511 和501。由此,方法1300可被實現(xiàn)來加入多個環(huán)。在其它實施例中,可在加入 多個環(huán)時重復方法1300中的部分或所有動作。例如,再次參考圖5,當節(jié)點同 時加入環(huán)551和環(huán)514時(例如,別名化),可以重復1300的一個或多個動 作。在任何情況下,可訪問加入節(jié)點ID,并用其來標識已排序鏈表中的加入 節(jié)點,以及該加入節(jié)點要參與的相應的分層地劃分的子列表。從已排序鏈表和 每一劃分的子列表中標識接收節(jié)點。加入消息被路由到己排序鏈表和每一劃分 的子列表中的處理節(jié)點(例如,基于ID)。從已排序鏈表和每一劃分的子列 表中的處理節(jié)點接收加入響應。
圖14示出了節(jié)點維護聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的成員資格的方法1400的示例流程 圖。方法1400將參考環(huán)1206來描述。方法1400包括向鄰域節(jié)點發(fā)送第一查 驗消息的動作(動作1401)。第一查驗消息指示發(fā)送第一查驗消息的當前節(jié)點 是鄰域節(jié)點的鄰居。第一查驗消息還可包括當前節(jié)點的路由伙伴和鄰域節(jié)點的 狀態(tài)。例如,ID為144的節(jié)點可將查驗消息發(fā)送到ID為151的節(jié)點。在接收 到第一查驗消息之后,可以使ID為151的節(jié)點知道ID為144的節(jié)點是ID為 151的節(jié)點的鄰居。節(jié)點151還可從節(jié)點144發(fā)現(xiàn)較新的活躍度信息(關(guān)于環(huán) 1206上的其它節(jié)點的),作為該動作的副作用。
查驗消息可基于例如與査驗消息要被發(fā)送到其中的鄰近環(huán)相關(guān)聯(lián)的配置 狀態(tài)來以指定的頻率周期性地重復。該頻率可以取決于配置狀態(tài)而變化。例如,對WAN的指定查驗頻率可以與對LAN的指定頻率不同。查驗消息也可根據(jù) 査驗分發(fā)模式來發(fā)送。對于始發(fā)節(jié)點的查驗分發(fā)模式可以指示查驗消息要被發(fā) 送到環(huán)上兩個方向上的鄰域節(jié)點。例如,ID為144的節(jié)點可以在ID為135的 節(jié)點的方向和ID為151的節(jié)點的方向這兩個方向上發(fā)送查驗。査驗分發(fā)模式 和頻率可以變化。例如,每一鄰近環(huán)不同。
方法1400包括從鄰域節(jié)點接收第二查驗消息的動作(動作1402)。該第 二査驗消息向當前節(jié)點指示至少發(fā)起第二查驗消息的鄰域節(jié)點是當前節(jié)點的 鄰居。第二查驗消息還可包括始發(fā)鄰域節(jié)點的路由伙伴和鄰域節(jié)點的狀態(tài)。例 如,ID為151的節(jié)點可將第二査驗消息發(fā)送到ID為144的節(jié)點。在接收到第 二査驗消息之后,可以使ID為144的節(jié)點知道ID為151的節(jié)點是ID為144 的節(jié)點的鄰居。第二査驗消息還可包括關(guān)于環(huán)1206上的其它節(jié)點的活躍度信 息。由此, 一般而言,査驗消息可以在鄰域內(nèi)交換,并且可用于維護聯(lián)盟內(nèi)存 在的節(jié)點的鄰域成員資格(對每一鄰近成員資格)和近似的公共領(lǐng)域視圖。
接收到的查驗消息可被周期性地重復/轉(zhuǎn)發(fā)給向其中發(fā)起該查驗(由始發(fā) 節(jié)點發(fā)送)的鄰近鄰域內(nèi)的其它節(jié)點。轉(zhuǎn)發(fā)的査驗消息也可根據(jù)查驗分發(fā)模式 來發(fā)送。對于轉(zhuǎn)發(fā)節(jié)點的査驗分發(fā)模式可以指示査驗消息要被發(fā)送到遠離始發(fā) 節(jié)點的方向上的鄰域節(jié)點。例如,ID為1151的節(jié)點可以將發(fā)自ID為144的 節(jié)點的查驗在ID為174的節(jié)點的方向上轉(zhuǎn)發(fā)。査驗轉(zhuǎn)發(fā)分發(fā)模式可以例如在 每一鄰近環(huán)中變化。
節(jié)點可被配置成以相應的間隔接收查驗消息。當未接收到預期的査驗消息 時,節(jié)點可以解釋通信失敗,并對應發(fā)起該預期的、但至少晚了的査驗消息的 節(jié)點將另一節(jié)點的階段.未知指示設(shè)為真。
方法1400包括將更新請求消息鄰近地路由到理想路由節(jié)點的動作(動作 1403)。更新請求消息向接收這一路由的更新請求的路由節(jié)點指示當前節(jié)點正 作為接收路由節(jié)點的路由伙伴參與。更新請求消息還可至少包括當前節(jié)點的鄰 域節(jié)點的身份(例如,采用活躍度信息的形式)。例如,ID為144的節(jié)點可 以將更新消息1216路由到ID為208的節(jié)點(從144偏移了 64的理想路由伙 伴)。由于節(jié)點210 (先前計算的路由節(jié)點)最接近208,因此它將接收并處 理路由的更新請求。在接收到更新消息1216之后,可以使ID為210的節(jié)點知道(或得到加強)ID為144的節(jié)點是ID為210的節(jié)點的路由伙伴。
方法1400包括從處理(接收)路由節(jié)點接收更新響應消息的動作(動作 1404)。更新響應向當前節(jié)點指示處理路由節(jié)點正作為當前節(jié)點的路由伙伴來 參與。更新響應消息還可至少包括處理路由伙伴的鄰域節(jié)點的標識符。例如, ID為210的節(jié)點可將更新響應1207發(fā)送到ID為144的節(jié)點。在接收到更新 響應1207之后,可以使ID為210的節(jié)點知道ID為210的節(jié)點是ID為144的 節(jié)點的路由伙伴。
方法1400還可包括適當?shù)馗鹿?jié)點信息以指示當前節(jié)點和鄰域節(jié)點正作 為鄰居參與,且當前節(jié)點和鄰域節(jié)點正作為路由伙伴參與的動作。例如,ID 為144的節(jié)點可以更新對應于ID為151的節(jié)點的節(jié)點信息來指示ID為144和 141的節(jié)點正參與(鄰近)鄰域。類似地,ID為144的節(jié)點可以更新對應于ID 為210的節(jié)點的節(jié)點信息來指示ID為144和210的節(jié)點作為路由伙伴參與。
在某些實施例中,在指定節(jié)點X處保存的應用程序狀態(tài)使用可靠洪泛協(xié) 議在其鄰域(X)節(jié)點之中復制。應用程序狀態(tài)中的每一項都有所分配的所有者, 這可以是創(chuàng)建該項的端點。應用程序狀態(tài)中的每一項還有由其所有者給予的相 關(guān)聯(lián)的時間戳(也稱為序列號)。時間戳具有至少三個分量
o擁有實體的實例ID (例如,無符號整數(shù))。必須至少是單調(diào)(>1) 遞增的。
o標識由所有者生成的特定序列的序列ID (例如,URI)。該分量允
許同一擁有者生成多個獨立序列。 o標識所標識的應用程序序列ID內(nèi)的偏移量的序數(shù)(例如,無符號
整數(shù))。
項時間戳用于在復制期間檢測與相應的項相關(guān)聯(lián)的最新信息,因為項時間 戳至少生成具有<實例ID,序列ID,和偏移量>三元組的部分排序。與所復制的 項相關(guān)聯(lián)的時間戳與本地時間戳(如果有)進行比較以檢測最新的那一個。項 時間戳也用于支持創(chuàng)建/更新/刪除操作的冪等語義。例如,當一節(jié)點接收到更 新應用程序狀態(tài)中的現(xiàn)有項的請求時,該更新僅在與該更新請求相關(guān)聯(lián)的時間 戳要高于與本地項相關(guān)聯(lián)的時間戳的情況下才被接受??稍陧棝]有被分配單個所有者的情況下利用基于向量時間戳的沖突解決技術(shù)。應用程序狀態(tài)復制提供 了容錯并方便了跨鄰域節(jié)點的負載平衡請求。
作為一個可任選行為,(在一段時間之后)未檢測到來自(發(fā)自)其它伙
伴(路由和/或伙伴)節(jié)點的預期的更新或査驗的節(jié)點可以認為階段狀態(tài)未知, 將階段.未知指示設(shè)為真,并如此向其它第三方節(jié)點報告它。換言之,可能需要 更新和查驗的周期性生成。該要求和實際超時值可以是各個鄰近環(huán)的屬性。例 如,環(huán)對于某些子環(huán)(例如,在LAN段中)可具有更限制性的定制要求,并 且節(jié)點故障檢測/報告相當快。另一方面,環(huán)對于其它子環(huán)(例如,在因特網(wǎng)上) 可具有較不限制的定時要求(或甚至沒有定時要求),并且主動節(jié)點故障檢測 /報告相當長(或不存在)。
圖15示出了用于發(fā)現(xiàn)關(guān)于另一節(jié)點的活躍度信息的方法1500的示例流程 圖。方法1500將參考圖12A和12B中的環(huán)1206來描述。 一般而言,諸如, 例如同步1204、同步響應1204、更新1216、更新響應1207等任何消息可包括 至少一個活躍度首部。在某些實施例中,活躍度首部包括節(jié)點的<節(jié)點ID,實 例ID,階段[階段狀態(tài)值].[階段.未知指示],新鮮度值,色彩(鄰近性)值,以及 權(quán)重值>。在其它實施例中,活躍度首部包括<階段[階段狀態(tài)值].[階段.未知指 示],新鮮度值,色彩(鄰近性)值,以及權(quán)重值>。在這些其它實施例中,活躍 度首部可用于擴充已經(jīng)包括了發(fā)送者和原始節(jié)點的節(jié)點ID和實例ID的尋址首 部。由于尋址首部已經(jīng)包括了節(jié)點ID和實例ID,因此該信息可在活躍度首部 中省略。
方法1500包括接收表示關(guān)于參與聯(lián)盟基礎(chǔ)結(jié)構(gòu)的節(jié)點的狀態(tài)信息的活躍 度首部的動作(動作1501)。活躍度首部至少包括接收到的參與節(jié)點ID、接 收到的節(jié)點的實例ID、接收到的階段值、以及接收到的新鮮度值。例如,ID 為144的節(jié)點可從ID為151的節(jié)點接收同步響應1204中的第一活躍度首部。 該第一活躍度首部可包括ID為174的節(jié)點的<參與節(jié)點ID,實例ID,階段[階 段狀態(tài)值].[階段.未知指示],新鮮度值,色彩(鄰近性)值,以及權(quán)重值>。階 段狀態(tài)值(例如,插入、同步、路由、操作)標識在第一新鮮度值的時刻ID 為174的節(jié)點的所表達的階段。階段值(例如,階段狀態(tài)[插入同步,路由, 操作]和階段.未知)標識在第一新鮮度值所指示的時刻ID為174的節(jié)點的所表達的和/或檢測到的階段信息。
然而,新鮮度值可以因通信延遲而扣除。新鮮度值也可隨著時間的流逝而 衰減。對于新鮮度值的衰減曲線可以對不同階段狀態(tài)(包括未知)而不同(并 且可能不是線性和對稱的)。由此,跨不同的節(jié)點階段,新鮮度值的衰減可以 是非線性和/或非對稱的。
方法1500包括至少訪問在當前節(jié)點處維護的參與節(jié)點的當前實例ID、當
前階段值、以及當前新鮮度值的動作(動作1502)。例如,ID為144的節(jié)點 可以訪問先前接收并存儲的ID為174的節(jié)點的實例ID、階段值[階段狀態(tài) 值].[階段.未知指示]以及新鮮度值。
方法1500包括至少分別將接收到的實例ID、接收到的階段值和接收到的 新鮮度值與在當前節(jié)點處的當前實例ID、當前階段值和當前新鮮度值進行比 較的動作(動作1503)。例如,ID為144的節(jié)點可以將先前接收并存儲的ID 為174的節(jié)點的實例ID、階段值[階段狀態(tài)].[階段.未知指示]和新鮮度值與在活 躍度首部中接收到的實例ID、階段值[階段狀態(tài)].[階段.未知指示]和新鮮度值進 行比較。
ID為144的節(jié)點可基于(按序)第一實例ID大于當前存儲的ID為174 的節(jié)點的實例ID、基于第一階段狀態(tài)值比當前存儲的ID為174的節(jié)點的階段 狀態(tài)值更前、或基于第一新鮮度值是大于當前存儲的ID為174的節(jié)點的新鮮 度值的值,確定ID為174的節(jié)點的當前狀態(tài)信息(例如,從ID為151的節(jié)點 接收)是陳舊的。ID為144的節(jié)點還可確定至少一個階段.未知指示(或者是 當前存儲的,或者是在活躍度首部中接收的)指示在檢測/發(fā)送階段狀態(tài)時階段 狀態(tài)是已知的。
方法1500包括基于比較確定參與節(jié)點的狀態(tài)信息是否要在當前節(jié)點處更 新的動作(動作1504)。例如,基于ID為174的節(jié)點的值的比較,ID為144 的節(jié)點可確定ID為174的節(jié)點的狀態(tài)信息要被更新。更新ID為174的節(jié)點的 過時的狀態(tài)信息可包括用包括在活躍度首部中的值來替換當前存儲的值(例 如,對于實例ID、階段狀態(tài)值、階段.未知指示或新鮮度值)。例如,ID為144 的節(jié)點可以更新ID為174的節(jié)點的狀態(tài)信息以指示ID為174的節(jié)點己轉(zhuǎn)換到 更前面的階段狀態(tài)。在某些實施例中,可以檢測到與參與節(jié)點的通信可能已丟失。例如,ID
為144的節(jié)點可以檢測到與ID為151的節(jié)點的通信已丟失。簡要地參考圖17, 響應于對活躍度事件1701的先前的訂閱(具有ID為151的節(jié)點的端點),應 用層1752可以向功能層1751發(fā)送端點停機事件1703 (具有ID為151的節(jié)點 的端點)。在這些實施例中,這些檢測到的活躍度條件可以在階段.未知指示符 被設(shè)為真且?guī)в猩弦粋€已知的階段狀態(tài)值的活躍度信息中指示。
方法1500還可包括從聯(lián)盟基礎(chǔ)結(jié)構(gòu)中的第二個不同的節(jié)點接收包括第二 活躍度首部的消息的動作。例如,ID為144的節(jié)點可以接收包括第二活躍度 首部的狀態(tài)消息(從ID為103的節(jié)點或環(huán)1206的某一其它節(jié)點)。該第二活 躍度首部可包括ID為174的節(jié)點的<參與節(jié)點ID,第二實例ID,第二階段值 [階段狀態(tài)值].[階段.未知指示],第二新鮮度值,第二色彩(鄰近性)值,以及第 二權(quán)重值>。第二階段狀態(tài)值(例如,階段狀態(tài)[插入,同步,路由,操作]和 階段.未知指示)標識在第二新鮮度值的時刻ID為174的節(jié)點的所表達的/檢測 到的階段。
或者,在接收第一活躍度首部之后,ID為144的節(jié)點可嘗試直接與ID為 174的節(jié)點通信。如果通信成功,則ID為174的節(jié)點可以返回在尋址首部中 有節(jié)點ID和第二實例ID且具有活躍度首部的消息(例如,同步響應),該活 躍度首部包括<第二階段值,第二新鮮度值,第二色彩(鄰近性)值,以及第二 權(quán)重值>。如果檢測到故障,貝UID為144的節(jié)點生成內(nèi)部活躍度狀態(tài)改變(例 如,新鮮度=最大,且階段.未知指示=真)并如同該狀態(tài)改變是從另一節(jié)點接 收的那樣來處理該狀態(tài)改變。這一狀態(tài)改變具有最高新鮮度值。
方法1500還可包括將第二實例ID、第二階段值和第二新鮮度值分別與當 前實例ID、當前階段值和當前新鮮度值進行比較的動作(動作1506)。例如, 在從ID為103的節(jié)點接收到狀態(tài)消息之后,ID為144的節(jié)點可以基于(按序) 第二實例ID大于第一實例ID、第二階段比第一極端值更前、或第二新鮮度值 大于第一階段值,來確定ID為151的節(jié)點的當前狀態(tài)信息是陳舊的。
方法1500還可包括基于比較來確定是否要更新參與節(jié)點的狀態(tài)信息的動 作。例如,基于ID為174的節(jié)點的值的比較,ID為144的節(jié)點可確定ID為 174的節(jié)點的狀態(tài)信息要被更新。更新ID為174的節(jié)點的過時的狀態(tài)信息可包括用包括在第二活躍度首部中的值來替換當前存儲的值(例如,對于實例ID、 階段狀態(tài)值、階段.未知指示或新鮮度值)。例如,ID為144的節(jié)點可以更新
ID為174的節(jié)點的狀態(tài)信息以指示ID為174的節(jié)點已轉(zhuǎn)換到更前面的階段狀 態(tài)。
在某些實施例中,在相等的色彩值的上下文中比較階段值。如上所述,節(jié) 點可參與多個鄰近環(huán)。參與多個鄰近環(huán)可以作為對更具體的環(huán)的參與蘊含著對 更一般的環(huán)(沿著公共脊骨)的參與的結(jié)果而發(fā)生。例如,回頭參考圖5,節(jié) 點對環(huán)532的參與也蘊含著節(jié)點正參與環(huán)522、 511和501。由此,更具體的環(huán) 的色彩也表示所有父鄰近環(huán)。同樣如上所述,對多個鄰近環(huán)的參與可以在一個 環(huán)中的節(jié)點被別名化到一個或多個其它環(huán)(可能沿著不同的脊骨)時發(fā)生。例 如,仍參考圖5,參與環(huán)532的節(jié)點可以被別名化到環(huán)531 (或甚至環(huán)541,這 蘊含了對環(huán)531、 522、 511和501的參與)。由此, 一個環(huán)(例如,環(huán)531) 的色彩可被視為另一個環(huán)(例如,環(huán)532)的對等色彩(或鄰近性)。
當一節(jié)點以別名化的方式參與多個鄰近環(huán)時,該節(jié)點的階段值(例如,階 段狀態(tài)值和/或階段.未知指示)有可能在不同鄰近環(huán)之間有所不同。由此,接 收關(guān)于另一節(jié)點的狀態(tài)信息的節(jié)點在確定對該節(jié)點和色彩是否要更新當前狀 態(tài)信息之前標識關(guān)于狀態(tài)信息(色彩)的相應的鄰近環(huán)。例如,ID為144的 節(jié)點可以在將所接收到的狀態(tài)信息與當前狀態(tài)信息進行比較之前標識對于所 接收到的對應于ID為174的節(jié)點的狀態(tài)信息的相應的鄰近環(huán)。
標識適當?shù)泥徑h(huán)可以包括將接收到的色彩值與一個或多個當前色彩值 進行比較。當接收到的色彩值和當前色彩值相等時,可將諸如,例如當前實例 ID、當前階段值和當前新鮮度值等其它狀態(tài)信息與諸如,例如接收到的實例ID、 接收到的階段值和接收到的新鮮度值等相應的接收到的狀態(tài)信息進行比較。另 一方面,當接收到的色彩值和當前色彩值不同時,不發(fā)生進一步的比較。
色彩值之間的相等可以用多種方式來獲得。例如,色彩值之間的相等可以 在當前色彩值和接收到的色彩值指示相同的鄰近環(huán)(例如,環(huán)532)時獲得。 此外,色彩值之間的相等可以在將更具體的色彩值與相應的父色彩值(例如, 沿著同一脊骨的另一環(huán))比較來獲得。例如,將環(huán)532的色彩值與環(huán)511 (或 環(huán)522或501)的色彩值進行比較可得到相等。由此,子鄰近性是父鄰近性,但是更為具體。
由此, 一般而言,聯(lián)盟基礎(chǔ)結(jié)構(gòu)中當前可操作的節(jié)點可以甚至在與其它節(jié) 點的通信看似丟失時交換關(guān)于這些其它節(jié)點的所表達的和檢測到的活躍度狀 態(tài)信息。
程序引導機制
一般而言,為使節(jié)點成為聯(lián)盟的活動成員(例如,加入),節(jié)點必須與已 經(jīng)是它打算加入的葉環(huán)的活動成員的至少一個其它節(jié)點通信。為幫助確保該初 始形式的通信是可用的,聯(lián)盟可以利用程序引導機制。程序引導機制可用作當 其它類型的通信無法標識葉環(huán)的活動成員或者安全約束要求新加入的節(jié)點最 初與諸如種子節(jié)點等一組特殊節(jié)點中的至少一個節(jié)點通信時的最后手段。艮P, 當其它類型的通信失敗或者由于安全要求,可使用程序引導機制來標識葉環(huán)的 活動成員節(jié)點。
在某些實施例中,使用種子節(jié)點來程序引導與聯(lián)盟的通信。種子節(jié)點提供 了對某些類型的跨近鄰(近鄰間)的通信的公知的入口點。種子節(jié)點因基礎(chǔ)結(jié) 構(gòu)故障/恢復和一般的動態(tài)性而幫助復原環(huán)分區(qū)。每一個環(huán)可具有至少一個可操 作種子節(jié)點以便為聯(lián)盟提供基本程序引導特性。
對等種子節(jié)點可以在它們之中通信以便維護一近鄰的環(huán)結(jié)構(gòu)(例如,雙重 鏈表),該結(jié)構(gòu)至少由對于該近鄰的所有活動種子節(jié)點構(gòu)成。可使用專用種子 節(jié)點同步協(xié)議來向每一種子節(jié)點至少提供所有其它種子節(jié)點的存在(活動)狀 態(tài)的總知識?;顒臃N子節(jié)點是它所歸屬的鄰近性葉環(huán)以及該葉環(huán)的所有其它祖 先環(huán)的成員節(jié)點。由此,種子節(jié)點可以表示例如從種子節(jié)點的葉環(huán)到根環(huán)的整 個鄰近環(huán)脊骨。因此,種子節(jié)點可以作為這些鄰近環(huán)的每一個中的高度可靠且 公知的入口節(jié)點來運作。結(jié)果,關(guān)于種子節(jié)點的存在狀態(tài)可用于聯(lián)盟內(nèi)的各種 形式的通信(例如近鄰間通信)。因此,種子節(jié)點可以提供多個特殊的特性, 諸如,例如擔當對于加入節(jié)點的公知的"加入點",擔當安全環(huán)授權(quán)機構(gòu),協(xié) 助復原基礎(chǔ)結(jié)構(gòu)分區(qū),以及擔當對于其每一近鄰的穩(wěn)定"入口節(jié)點"。
為提供存在數(shù)據(jù),種子節(jié)點的到來和有序的離開可以被注冊為其每一近鄰
中的會合點處的穩(wěn)定入口點。例如,注冊消息可被路由到其目的地ID是串 "Proximity:/"的SHA-1散列的固定URI。盡管在一個實施例中擔當穩(wěn)定入口點的種子節(jié)點以此方式來注冊其自身,但是存在其中所選的非種子節(jié)點也可用 同一方式并用此處對種子節(jié)點描述的相同或相似的協(xié)議來注冊其自身的其它 實施例。當穩(wěn)定入口節(jié)點(諸如種子節(jié)點)注冊時,該穩(wěn)定入口節(jié)點可以指示 它是其成員的每一個環(huán)。由此,在由該固定URI標識的會合點處維護的信息本 質(zhì)上是穩(wěn)定入口節(jié)點及其相應的環(huán)成員的列表。因此,任何節(jié)點可以參考由該 固定URI標識的會合點來獲得可用穩(wěn)定入口節(jié)點及其環(huán)成員的列表。
在一個實施例中,穩(wěn)定入口節(jié)點直接注冊這些到達和離開事件。在另一實 施例中,穩(wěn)定入口節(jié)點直接在其直接鄰近環(huán)內(nèi)的會合點處注冊這些事件,并且 該會合點透明地幫助(直接地或間接地)更新注冊/取消注冊穩(wěn)定入口節(jié)點所屬 的每一剩余的鄰近環(huán)中的所有其它適當?shù)臅宵c。聯(lián)盟的應用程序狀態(tài)定序和 傳播特性可用于維護并傳播該穩(wěn)定入口節(jié)點注冊信息。例如,可使用可靠洪泛 協(xié)議來在節(jié)點的鄰域節(jié)點之間復制保存的應用程序狀態(tài)。
穩(wěn)定入口節(jié)點的存在數(shù)據(jù)向著根環(huán)的提升允許聯(lián)盟中的其它節(jié)點在每一 近鄰中査找至少一個入口節(jié)點。入口節(jié)點查找可通過將節(jié)點查找消息向著執(zhí)行
査找的節(jié)點的葉環(huán)和期望的鄰近環(huán)的最低公共祖先環(huán)("LCAR")中的上述 確定的會合點路由來促進。例如,參考圖5,環(huán)541中的節(jié)點可能期望與環(huán)533 中的節(jié)點通信。然而,環(huán)541中的節(jié)點可能沒有環(huán)533中的任何節(jié)點的直接知 識。由此,環(huán)541中的節(jié)點可以向環(huán)522 (環(huán)541和環(huán)533的LCAR環(huán))發(fā)送 節(jié)點査找消息。環(huán)522中處理入口節(jié)點存在信息(例如,由于該入口節(jié)點獲得 的注冊消息而導致存在于系統(tǒng)中)會合點節(jié)點可返回具有至少關(guān)于環(huán)533中的 己注冊穩(wěn)定入口節(jié)點的聯(lián)系信息的査找響應消息。
在某些實施例中,穩(wěn)定入口節(jié)點是被特別地配置為用于維護各個近鄰的存 在數(shù)據(jù)的穩(wěn)定入口節(jié)點的種子節(jié)點。在其它實施例中,其它類型的節(jié)點也可擔 當維護關(guān)于各個近鄰的存在數(shù)據(jù)的穩(wěn)定入口節(jié)點,并且還可被配置成執(zhí)行其它 操作。例如,某些其它類型的節(jié)點可被配置(例如,由管理員)為高度可用, 且因此適用作穩(wěn)定入口節(jié)點(即,如上所述地注冊)。然而,其它類型的節(jié)點 可能不包括附加種子節(jié)點功能(例如,可能不作為安全環(huán)授權(quán)機構(gòu)而被信任)。 在某些實施例中,維護關(guān)于其直接近鄰的入口節(jié)點存在狀態(tài)的會合點可以在一 個或多個祖先環(huán)中將其自身注冊為穩(wěn)定入口節(jié)點。節(jié)點監(jiān)視
圖19A示出了方便一個節(jié)點監(jiān)視另一個節(jié)點的示例環(huán)體系結(jié)構(gòu)1900。如
圖所示,環(huán)體系結(jié)構(gòu)至少包括環(huán)1901 (以及任意數(shù)量的其他較高和/或較低層 環(huán)(未示出))。環(huán)1901可類似于圖3的環(huán)306來配置。然而,監(jiān)視可在任 何節(jié)點環(huán)上發(fā)生,包括圖4、 5、 12A和12B中的環(huán)的任一個。圖19A描繪了 對象節(jié)點1902 (具有10=83)和監(jiān)視節(jié)點1903 (具有ID-2)的擴展視圖。在 所示實施例中,監(jiān)視節(jié)點l卯3要監(jiān)視對象節(jié)點1902。然而,環(huán)1901上的任何 節(jié)點可被配置成監(jiān)視環(huán)1901上的任何其他節(jié)點。
圖20示出了用于一個節(jié)點監(jiān)視另一節(jié)點的方法2000的示例流程圖。方法 2000將參考圖19A所示的數(shù)據(jù)和組件來描述。
方法2000包括對象節(jié)點生成用于監(jiān)視對象節(jié)點的對象側(cè)生存時間 (time-to-live)持續(xù)時間值的動作。例如,對象節(jié)點1902可建立生存時間(TTL) 持續(xù)時間值1913。 TTL持續(xù)時間值1913指示對象節(jié)點1902能將與監(jiān)視節(jié)點 1903的監(jiān)視關(guān)系認為是活動的持續(xù)時間。
方法2000包括對象節(jié)點向監(jiān)視節(jié)點發(fā)送建立請求的動作,該建立請求指 示對象節(jié)點請求監(jiān)視節(jié)點監(jiān)視對象節(jié)點,該建立請求包括對象側(cè)生存時間持續(xù) 時間值(動作2002)。例如,對象節(jié)點1902可向監(jiān)視節(jié)點1903發(fā)送包括TTL 持續(xù)時間值1913的建立請求1922。
方法2000包括對象節(jié)點基于對象側(cè)生存時間持續(xù)時間值和發(fā)送建立請求 的時間來建立現(xiàn)有對象側(cè)死亡時間(time-to-die)時間的動作,其中對象節(jié)點 時鐘在從監(jiān)視節(jié)點接收建立授權(quán)之前到達現(xiàn)有的對象側(cè)死亡時間時間是對象 節(jié)點必須轉(zhuǎn)換到故障狀態(tài)的指示(動作2003)。例如,對象節(jié)點1902可基于 TTL持續(xù)時間值1913和向監(jiān)視節(jié)點1903發(fā)送建立請求1922的時間來建立對 象側(cè)死亡時間時間1917。對象側(cè)死亡時間時間1917可以是相對于對象節(jié)點 1902的時間。如果對象節(jié)點1902的時鐘在從監(jiān)視節(jié)點1903接收到建立授權(quán)之 前到達對象側(cè)死亡時間時間1917,則對象節(jié)點1902要轉(zhuǎn)換到故障狀態(tài)。在某 些實施例中,當對象節(jié)點1902的時鐘在從監(jiān)視節(jié)點1903接收到建立授權(quán)之前 到達對象側(cè)死亡時間時間1917,則導致故障狀態(tài)。在其他實施例中,發(fā)生其他 活動以使對象節(jié)點1902轉(zhuǎn)換到故障狀態(tài)。象節(jié)點接收建立請求的動作,該建立請求指 示對象節(jié)點請求監(jiān)視節(jié)點監(jiān)視對象節(jié)點,該建立請求至少包括對象側(cè)生存時間 持續(xù)時間值,該對象側(cè)生存時間持續(xù)時間值用于確定對象節(jié)點處的對象側(cè)死亡 時間時間,其中對象節(jié)點時鐘在從監(jiān)視節(jié)點接收到建立授權(quán)之前到達對象側(cè)死
亡時間時間是對象節(jié)點必須轉(zhuǎn)換到故障狀態(tài)的指示(動作2004)。例如,監(jiān)視 節(jié)點1903可從對象節(jié)點1902接收包括TTL持續(xù)時間值1913的建立請求1922。 TTL持續(xù)時間值1913在對象節(jié)點1902處用于建立對象側(cè)死亡時間時間1917。
方法2000包括監(jiān)視節(jié)點從對象側(cè)生存時間持續(xù)時間值中導出監(jiān)視側(cè)生存 時間持續(xù)時間值的動作(動作2005)。例如,監(jiān)視節(jié)點1902可使用TTL持續(xù) 時間值1913來導出TTL持續(xù)時間值1919。在某些實施例中,監(jiān)視節(jié)點1903 復制TTL持續(xù)時間值1913以導出TTL持續(xù)時間值1919。在這些實施例中, TTL持續(xù)時間值1913和TTL持續(xù)時間值1919是相等的。在其他實施例中, 監(jiān)視節(jié)點1903修改TTL持續(xù)時間值1913以導出TTL持續(xù)時間值1919。在這 些其他實施例中,TTL持續(xù)時間值1913和TTL持續(xù)時間值1919是不同的。 例如,監(jiān)視節(jié)點1903可以增加TTL持續(xù)時間值1913的值以導出TTL持續(xù)時 間值1919,使得TTL持續(xù)時間值1919大于TTL持續(xù)時間值1913。
方法2000包括監(jiān)視節(jié)點基于監(jiān)視側(cè)生存時間持續(xù)時間值和接收到建立請 求的時間來建立監(jiān)視側(cè)死亡時間時間的動作,監(jiān)視節(jié)點時鐘在從對象節(jié)點接收 到續(xù)訂請求之前到達監(jiān)視側(cè)死亡時間時間指示懷疑的對象節(jié)點故障(動作 2006)。例如,監(jiān)視節(jié)點l卯3基于TTL持續(xù)時間值1919和接收到建立請求 1922的時間來建立監(jiān)視側(cè)死亡時間時間1914。監(jiān)視側(cè)死亡時間時間1914可以 是相對于監(jiān)視節(jié)點1903的時間。如果監(jiān)視節(jié)點1903的時鐘在從對象節(jié)點1902 接收到續(xù)訂請求之前到達監(jiān)視側(cè)死亡時間時間1914,則監(jiān)視節(jié)點1903懷疑對 象節(jié)點1902發(fā)生故障。
方法2000包括監(jiān)視節(jié)點向?qū)ο蠊?jié)點發(fā)送建立授權(quán)以向?qū)ο蠊?jié)點指示監(jiān)視 節(jié)點同意監(jiān)視對象節(jié)點的動作(動作2007)。例如,監(jiān)視節(jié)點1903可向?qū)ο?節(jié)點1902發(fā)送建立授權(quán)1923。方法2000包括對象節(jié)點從監(jiān)視節(jié)點接收建立授 權(quán)的動作,該建立授權(quán)指示監(jiān)視節(jié)點監(jiān)視對象節(jié)點(動作2008)。例如,對象 節(jié)點1902可從監(jiān)視節(jié)點1903接收建立授權(quán)1923。 一般而言,建立授權(quán)1923指示監(jiān)視節(jié)點1903同意監(jiān)視對象節(jié)點1902。在某些實施例中,建立授權(quán)消息 可包括監(jiān)視側(cè)TTL持續(xù)時間值。例如,監(jiān)視授權(quán)1923可以包括TTL持續(xù)時間 值1919。
或者,監(jiān)視節(jié)點可向?qū)ο蠊?jié)點發(fā)送建立拒絕以向?qū)ο蠊?jié)點指示監(jiān)視節(jié)點不 同意監(jiān)視對象節(jié)點。例如,響應于接收到建立請求1922,監(jiān)視節(jié)點1903可替 換地(如由虛線所指示的)向?qū)ο蠊?jié)點1902發(fā)送建立拒絕1931。對象節(jié)點可 接收從監(jiān)視節(jié)點發(fā)送的建立拒絕。例如,對象節(jié)點1902可從監(jiān)視節(jié)點1903接 收建立拒絕1931。建立拒絕1931 —般向?qū)ο蠊?jié)點1902指示監(jiān)視節(jié)點1903不 同意監(jiān)視對象節(jié)點1902。
有時(并且在環(huán)體系結(jié)構(gòu)1990內(nèi)的其他操作的執(zhí)行之間是混合的),對 象節(jié)點可續(xù)訂與所建立的監(jiān)視節(jié)點的監(jiān)視協(xié)定。 一般而言,對象節(jié)點在有效期 內(nèi)(當前監(jiān)視側(cè)時間到死亡時間)離開現(xiàn)有協(xié)定,直到接收到新的授權(quán)。然而, 對象節(jié)點可以生成新的TTL持續(xù)時間值并推導經(jīng)更新的死亡時間時間將是什 么。對象節(jié)點然后向監(jiān)視節(jié)點發(fā)送該新的TTL持續(xù)時間值。監(jiān)視節(jié)點接收該 新的TTL持續(xù)時間值。當適當時,監(jiān)視節(jié)點對續(xù)訂請求授權(quán),并向?qū)ο蟀l(fā)回 續(xù)訂授權(quán)。對象節(jié)點接收該續(xù)訂授權(quán)。響應于接收到續(xù)訂授權(quán),對象使用經(jīng)更 新的死亡時間時間作為新的當前死亡時間時間來實現(xiàn)續(xù)訂的協(xié)定。續(xù)訂已建立 的監(jiān)視協(xié)定的一個示例在方法2000的其余動作中描述。
方法2000包括對象節(jié)點在對象節(jié)點時鐘到達對象側(cè)死亡時間時間之前向 監(jiān)視節(jié)點發(fā)送續(xù)訂請求的動作(動作2009)。例如,對象節(jié)點1902可在對象 節(jié)點1902的時鐘到達對象側(cè)死亡時間時間1917之前向監(jiān)視節(jié)點1903發(fā)送包 括TTL持續(xù)時間值1913的續(xù)訂請求1915。在某些實施例中,續(xù)訂請求1915 不包括對象側(cè)TTL持續(xù)時間值。在這些實施例中,可推導對TTL持續(xù)時間值 1913的繼續(xù)使用。在其他實施例中,TTL持續(xù)時間值1913被明確地包括在續(xù) 訂請求1915中。在又一些實施例中,在續(xù)訂請求1915中包括不同的對象側(cè) TTL持續(xù)時間值。響應于對象節(jié)點1902的配置改變和/或響應于環(huán)1901中別 處的配置改變(例如,改變的網(wǎng)絡條件),對象節(jié)點1902可生成并使用新的 對象側(cè)TTL持續(xù)時間值。
節(jié)點1902還可計算如果接收到響應于續(xù)訂請求1915的相應的續(xù)訂授權(quán)則經(jīng)更新的對象側(cè)死亡時間時間將是什么。該計算可以至少基于發(fā)送續(xù)訂請求
1915的時間以及與續(xù)訂請求1915相關(guān)或相關(guān)聯(lián)的對象側(cè)TTL持續(xù)時間。
方法2000包括監(jiān)視節(jié)點在發(fā)送了建立授權(quán)消息之后并在監(jiān)視節(jié)點時鐘到 達監(jiān)視側(cè)死亡時間時間之前從對象節(jié)點接收續(xù)訂請求的動作,該續(xù)訂請求指示 對象節(jié)點未發(fā)生故障(動作2010)。例如,監(jiān)視節(jié)點1903可在發(fā)送建立授權(quán) 1923之后并在監(jiān)視節(jié)點1903的時鐘到達監(jiān)視側(cè)死亡時間時間1914之前接收續(xù) 訂請求1915。對續(xù)訂請求1915的接收可向監(jiān)視節(jié)點1903指示對象節(jié)點1902 未發(fā)生故障。
方法2000還可包括監(jiān)視節(jié)點向?qū)ο蠊?jié)點授權(quán)續(xù)訂請求的動作。例如,監(jiān) 視節(jié)點1903可對續(xù)訂請求1915授權(quán)。
方法2000包括監(jiān)視節(jié)點響應于并至少基于接收到續(xù)訂請求的時間來建立 經(jīng)更新的監(jiān)視側(cè)死亡時間時間的動作,監(jiān)視節(jié)點時鐘在從對象節(jié)點接收到另一 續(xù)訂請求之前到達經(jīng)更新的監(jiān)視側(cè)死亡時間時間指示懷疑的對象節(jié)點故障(動 作2012)。例如,監(jiān)視節(jié)點1903可以響應于并基于接收到續(xù)訂請求1915的時 間以及所蘊含或指示的與續(xù)訂請求1915有關(guān)或可能包含在其中的監(jiān)視TTL持 續(xù)時間值來建立經(jīng)更新的監(jiān)視側(cè)死亡時間時間1921。經(jīng)更新的監(jiān)視側(cè)死亡時間 時間1921可以是相對于監(jiān)視節(jié)點1903的時間。經(jīng)更新的監(jiān)視側(cè)死亡時間時間 1921可以是在監(jiān)視側(cè)死亡時間時間1914之后。然而,并不要求監(jiān)視側(cè)死亡時 間時間1914出現(xiàn)在建立經(jīng)更新的監(jiān)視側(cè)死亡時間時間1921之前。由此,有可 能經(jīng)更新的監(jiān)視側(cè)死亡時間時間1921實際上在監(jiān)視側(cè)死亡時間時間1914之前 (或與其相同)。如果監(jiān)視節(jié)點1903的時鐘在從對象節(jié)點1902接收到另一續(xù) 訂請求之前到達經(jīng)更新的監(jiān)視側(cè)死亡時間時間1921,則監(jiān)視節(jié)點1903懷疑對 象節(jié)點l卯2發(fā)生故障。
如果在續(xù)訂請求1915中沒有包括對象側(cè)TTL持續(xù)時間值(且因此推導了 TTL持續(xù)時間值1913),或者如果續(xù)訂請求明確地包括TTL持續(xù)時間值1913, 則監(jiān)視節(jié)點1903也可使用TTL持續(xù)時間值1919來建立經(jīng)更新的監(jiān)視側(cè)死亡 時間時間1921。另一方面,如果在續(xù)訂請求1915中包括除TTL持續(xù)時間值 1913之外的對象側(cè)TTL持續(xù)時間值,則監(jiān)視節(jié)點1903可使用其他明確地包括 的對象側(cè)TTL持續(xù)時間值來導出新的監(jiān)視側(cè)TTL持續(xù)時間值。從該新的監(jiān)視側(cè)TTL持續(xù)時間值,監(jiān)視節(jié)點1903然后可建立經(jīng)更新的監(jiān)視側(cè)死亡時間時間 1921。
方法2000包括監(jiān)視節(jié)點向?qū)ο蠊?jié)點發(fā)送續(xù)訂授權(quán)以向?qū)ο蠊?jié)點指示監(jiān)視 節(jié)點同意繼續(xù)監(jiān)視對象節(jié)點的動作(動作2013)。例如,監(jiān)視節(jié)點1903可向 對象節(jié)點1902發(fā)送續(xù)訂授權(quán)1927。方法2000包括對象節(jié)點在發(fā)送了對應的續(xù) 訂請求之后并在對象節(jié)點時鐘到達對象側(cè)死亡時間時間之前從監(jiān)視節(jié)點接收 續(xù)訂授權(quán)的動作,該續(xù)訂授權(quán)消息指示監(jiān)視節(jié)點繼續(xù)監(jiān)視對象節(jié)點(動作 2014)。例如,對象節(jié)點1902可在發(fā)送了續(xù)訂請求1915之后并在對象節(jié)點1902 處的時鐘到達對象側(cè)死亡時間時間1917之前從監(jiān)視節(jié)點1903接收續(xù)訂授權(quán) 1927。 一般而言,續(xù)訂授權(quán)1927指示監(jiān)視節(jié)點1903同意繼續(xù)監(jiān)視對象節(jié)點 1902。
或者,監(jiān)視節(jié)點可向?qū)ο蠊?jié)點發(fā)送續(xù)訂拒絕以向?qū)ο蠊?jié)點指示監(jiān)視節(jié)點不 再同意監(jiān)視對象節(jié)點。例如,響應于接收到續(xù)訂請求1915,監(jiān)視節(jié)點1903可 替換地(如由虛線所指示的)向?qū)ο蠊?jié)點1902發(fā)送續(xù)訂拒絕1933。對象節(jié)點 可接收從監(jiān)視節(jié)點發(fā)送的續(xù)訂拒絕。例如,對象節(jié)點1902可從監(jiān)視節(jié)點l卯3 接收續(xù)訂拒絕1933。續(xù)訂拒絕1931 —般向?qū)ο蠊?jié)點1902指示監(jiān)視節(jié)點1903 不再同意監(jiān)視對象節(jié)點1902。
方法2000包括對象節(jié)點響應于接收到續(xù)訂授權(quán)轉(zhuǎn)換到先前計算的經(jīng)更新 的對象側(cè)死亡時間時間,其中對象節(jié)點時鐘在從監(jiān)視節(jié)點接收到另一續(xù)訂授權(quán) 之前到達經(jīng)更新的對象側(cè)死亡時間時間是對象節(jié)點必須轉(zhuǎn)換到故障狀態(tài)的指 示(動作2015)。例如,對象節(jié)點1902可在接收到相應的續(xù)訂授權(quán)消息時轉(zhuǎn) 換到經(jīng)更新的對象側(cè)死亡時間時間1952。經(jīng)更新的對象側(cè)死亡時間時間1952 可在續(xù)訂請求1915被發(fā)送到監(jiān)視節(jié)點1903的時間附近計算。經(jīng)更新的對象側(cè) 死亡時間時間1952可基于發(fā)送相應的續(xù)訂請求1915的時間并基于與續(xù)訂請求 1915相關(guān)或相關(guān)聯(lián)的TTL來計算。經(jīng)更新的對象側(cè)死亡時間時間1952可以是 相對于對象節(jié)點1902的時間(例如,在對象側(cè)死亡時間時間1917之后、之前 或與其相等)。
如果TTL值1913仍是適當?shù)腡TL值,則對象節(jié)點1902也可使用TTL持 續(xù)時間值1913來建立經(jīng)更新的對象側(cè)死亡時間時間1952。如果已經(jīng)生成了另一 TTL持續(xù)時間值,則對象節(jié)點1902也可使用其他所生成的TTL持續(xù)時間值 來建立經(jīng)更新的對象側(cè)死亡時間時間1952。
在建立當前對象側(cè)死亡時間時間(或者是1917,或者是1952)之后,對 象節(jié)點1902處的時鐘可以在從監(jiān)視節(jié)點1903接收到另一續(xù)訂授權(quán)之前到達當 前對象側(cè)死亡時間時間。這可因?qū)ο蠊?jié)點1902和監(jiān)視節(jié)點1903之間的通信出 錯引起。例如,對象節(jié)點1902可在接收到續(xù)訂授權(quán)1927之后并在對象節(jié)點1卯2 的時鐘到達經(jīng)更新的對象側(cè)死亡時間時間1952之前發(fā)送另一續(xù)訂請求。然而, 由于通信故障,其他續(xù)訂請求未到達監(jiān)視節(jié)點1903。或者,其他續(xù)訂請求可在 監(jiān)視節(jié)點l卯3處接收到,但是來自監(jiān)視節(jié)點1903的相應的續(xù)訂授權(quán)由于通信 出錯而未到達對象節(jié)點1902。在任一情況下,對象節(jié)點1902處的時鐘可在接 收到響應于其他續(xù)訂請求的相應續(xù)訂授權(quán)之前到達當前對象側(cè)死亡時間時間。
或者,在對象節(jié)點1902處的時鐘到達經(jīng)更新的對象側(cè)死亡時間時間1952 之前,對象節(jié)點1902可能誤工作,使得對象節(jié)點1902被阻止向監(jiān)視節(jié)點1903 發(fā)送另一續(xù)訂請求。
然而,不論是否發(fā)送了續(xù)訂請求,如果在對象節(jié)點1902處的時鐘到達當 前對象側(cè)死亡時間時間1952之前未接收到續(xù)訂授權(quán),對象節(jié)點1902就轉(zhuǎn)換到 故障狀態(tài)。
回頭參看監(jiān)視節(jié)點1903,監(jiān)視節(jié)點1903處的時鐘可能在從對象節(jié)點1902 接收到另一續(xù)訂請求之前到達監(jiān)視側(cè)死亡時間時間(或者是1914,或者是1921) (由于對象節(jié)點1902處的誤工作或由于環(huán)1901中的通信出錯)。結(jié)果,監(jiān)視 節(jié)點1903懷疑對象節(jié)點1902發(fā)生故障。監(jiān)視節(jié)點1903可轉(zhuǎn)換到指示檢測到 另一節(jié)點處的懷疑的故障的超時狀態(tài)。
在其他實施例中, 一對節(jié)點可彼此監(jiān)視。由此,第一節(jié)點可監(jiān)視第二節(jié)點, 而第二節(jié)點也可監(jiān)視第一節(jié)點。例如,每一節(jié)點可通過與另一節(jié)點的通信來實 現(xiàn)對象節(jié)點側(cè)和監(jiān)視節(jié)點側(cè)方法2000。
圖19B示出了方便兩個節(jié)點彼此監(jiān)視的示例環(huán)體系結(jié)構(gòu)1900。
節(jié)點1971可生成用于監(jiān)視節(jié)點1971的TTL持續(xù)時間值1929。節(jié)點1971 可以向節(jié)點1972發(fā)送包括TTL持續(xù)時間值1929的建立請求1962。節(jié)點1971 還可基于TTL持續(xù)時間值1929來建立對象側(cè)死亡時間時間1973。節(jié)點1972可以從節(jié)點1971接收包括TTL持續(xù)時間值1929的建立請求1962。節(jié)點1972 可以從TTL持續(xù)時間值1929中導出TTL持續(xù)時間值1949。節(jié)點1972可基于 TTL持續(xù)時間值1949來建立監(jiān)視側(cè)死亡時間時間1939。節(jié)點1972可以向節(jié) 點1971發(fā)送建立授權(quán)1974。節(jié)點1971可以從節(jié)點1972接收建立授權(quán)1974。 并行地,節(jié)點1972可生成用于監(jiān)視節(jié)點1971的TTL持續(xù)時間值1975。 節(jié)點1972可以向節(jié)點1971發(fā)送包括TTL持續(xù)時間值1975的建立請求1926。 節(jié)點1972還可基于TTL持續(xù)時間值1975來建立對象側(cè)死亡時間時間1935。 節(jié)點1971可以從節(jié)點1972接收包括TTL持續(xù)時間值1975的建立請求1926。 節(jié)點1971可以從TTL持續(xù)時間值1933中導出TTL持續(xù)時間值1953。節(jié)點1971 可基于TTL持續(xù)時間值1953來建立監(jiān)視側(cè)死亡時間時間1937。節(jié)點1971可 以向節(jié)點1972發(fā)送授權(quán)消息1976。節(jié)點1972可以從節(jié)點1971接收授權(quán)消息 1976。
或者,節(jié)點1971和1972的任一個拒絕來自另一節(jié)點的建立請求。例如, 節(jié)點1971可以拒絕建立請求1962。同樣,節(jié)點1972可以拒絕建立請求1926。 當任一節(jié)點拒絕建立請求時,它可向另一節(jié)點發(fā)送建立拒絕(例如,類似于建 立拒絕1931)。這向另一節(jié)點指示沒有建立監(jiān)視協(xié)定。
節(jié)點1971和1972然后可以如上所述地交換續(xù)訂請求和續(xù)訂授權(quán)(以及類 似于續(xù)訂拒絕1933的續(xù)訂拒絕)。因此,節(jié)點1971和1972的每一個都既是 對象節(jié)點又是監(jiān)視節(jié)點?;趫D19B所描繪的TTL持續(xù)時間值和死亡時間時 間,在建立監(jiān)視關(guān)系期間和/或之后可發(fā)生各種事件。
如果節(jié)點1971處的時鐘在從節(jié)點1972接收到續(xù)訂授權(quán)之前到達對象側(cè)死 亡時間時間1973,則節(jié)點1971轉(zhuǎn)換到故障狀態(tài)。如果節(jié)點1972處的時鐘在從 節(jié)點1971接收到續(xù)訂請求之前到達監(jiān)視側(cè)死亡時間時間1939,則節(jié)點1972 懷疑節(jié)點1971發(fā)生故障。
如果節(jié)點1972處的時鐘在從節(jié)點1971接收到續(xù)訂授權(quán)之前到達對象側(cè)死 亡時間時間1935,則節(jié)點1972轉(zhuǎn)換到故障狀態(tài)。如果節(jié)點1971處的時鐘在從 節(jié)點1972接收到續(xù)訂請求之前到達監(jiān)視側(cè)死亡時間時間1937,則節(jié)點1971 懷疑節(jié)點1972發(fā)生故障。
節(jié)點故障的仲裁由于各種不同類型的通信出錯和節(jié)點誤工作,存在一對節(jié)點中的每一節(jié)點 懷疑另一節(jié)點發(fā)生故障的某種可能性。此外,每一節(jié)點可認為其正在正確工作。
在某些環(huán)體系結(jié)構(gòu)中,資源的各部分被配置成使得在給定時刻單個節(jié)點控 制資源。此外,所需的某些資源的可用性也可能很高,使得需要節(jié)點的實際上 恒定的控制。由此,當一節(jié)點發(fā)生故障時,對各種資源的控制可能需要被轉(zhuǎn)移 到另一節(jié)點。因此,當一對節(jié)點中的一個節(jié)點懷疑另一節(jié)點發(fā)生故障時,可使 用仲裁機制來確定至少哪一節(jié)點已經(jīng)或?qū)⒁l(fā)生故障。
例如,當一對節(jié)點中的每一節(jié)點懷疑另一節(jié)點發(fā)生故障時,每一節(jié)點可轉(zhuǎn) 換到超時狀態(tài)并向仲裁設(shè)施報告其懷疑。當在超時狀態(tài)中時,可掛起每一節(jié)點 處的某些其他操作,直到接收到仲裁結(jié)果。仲裁設(shè)施可以回過來向節(jié)點報告, 指示其是否要保持活動。例如,仲裁設(shè)施可以向報告節(jié)點發(fā)送要保持活動的認 可消息。仲裁設(shè)施可以向報告節(jié)點發(fā)送要轉(zhuǎn)換到故障狀態(tài)的否認消息。接收到 認可消息的節(jié)點可保持活動。未接收到認可消息(例如,由于網(wǎng)絡條件)或接 收到否認消息的節(jié)點轉(zhuǎn)換到故障狀態(tài)。
圖19C示出了在互相監(jiān)視節(jié)點各自能夠報告另一節(jié)點被懷疑發(fā)生故障時
方便仲裁的示例環(huán)體系結(jié)構(gòu)1900。圖19C描繪了節(jié)點1981 (具有10=98)、 監(jiān)視節(jié)點1982 (具有10=64)以及仲裁者1983的擴展視圖。
在某些實施例中,仲裁者1983也是環(huán)1901的成員。在其他實施例中,仲 裁者1983是環(huán)1901的祖先環(huán)的成員,但不是環(huán)1901的成員。在另外一些實 施例中,仲裁者1983在包括環(huán)1901的環(huán)分層結(jié)構(gòu)的外部。例如,仲裁者1983 可被包括在單獨的仲裁聯(lián)盟節(jié)點環(huán)中。仲裁聯(lián)盟中的節(jié)點可被配置為用于環(huán) 1901及其祖先的節(jié)點的仲裁者。
在某些實施例中,仲裁者1983被節(jié)點1971和節(jié)點1982相互同意以便對 節(jié)點1981和1982進行仲裁。在其他實施例中,仲裁者1983由另一實體分配 來對節(jié)點1981和1982進行仲裁。該另一實體可以是包括環(huán)1901的環(huán)分層結(jié) 構(gòu)內(nèi)部的節(jié)點(例如,種子節(jié)點),或是例如人類管理員。例如,該另一節(jié)點 可以是環(huán)1901的成員,或是環(huán)1901的祖先環(huán)的成員但不是環(huán)1901的成員。 或者,該另一實體可以在包括環(huán)1901的環(huán)分層結(jié)構(gòu)的外部。例如,該另一實 體可以是作為單獨的仲裁聯(lián)盟環(huán)的成員的節(jié)點。仲裁者1983可具有關(guān)于包括環(huán)1901的環(huán)分層結(jié)構(gòu)的變化的知識。例如, 仲裁者1983可具有關(guān)于包括環(huán)1901的環(huán)分層結(jié)構(gòu)的全局知識?;蛘?,仲裁者 1983可以具有關(guān)于包括在包括環(huán)1901的環(huán)分層結(jié)構(gòu)中的環(huán)的某一子集的知 識。在其他實施例中,仲裁者1983具有關(guān)于包括(且可能僅有)節(jié)點1981和 1982的環(huán)1901中的節(jié)點子集的知識。
仲裁者1983可被配置成對包括但不限于節(jié)點1981和1982在內(nèi)的任意數(shù) 量的節(jié)點對進行仲裁。在某些實施例中,仲裁機制在接收到被懷疑的節(jié)點故障 的報告之前沒有關(guān)于它要仲裁的節(jié)點的知識。由此,盡管一對節(jié)點同意使用仲 裁者1983或仲裁者1983被分配來對一對節(jié)點進行仲裁,但仲裁者1983在接 收到關(guān)于該對節(jié)點中的一節(jié)點的被懷疑的節(jié)點故障的報告之前仍可能不了解 任何協(xié)定或分配。
仲裁可包括提出沖突故障報告的節(jié)點之間的仲裁。例如,當?shù)谝还?jié)點正在 監(jiān)視第二節(jié)點且第二節(jié)點也正在監(jiān)視第一節(jié)點時,情況可能是每一節(jié)點都報告 懷疑另一節(jié)點發(fā)生故障。被懷疑的故障可使用實際上任何故障檢測機制,包括 本文中先前描述的那些機制來檢測。
故障節(jié)點列表1947可以包括被報告為被懷疑的故障節(jié)點的節(jié)點的列表。 節(jié)點可以向仲裁者1983將其他節(jié)點報告為被懷疑的故障節(jié)點,且在適當時, 仲裁者1983可以在故障節(jié)點列表1947中包括所報告的節(jié)點。仲裁者1983在 適當?shù)臅r間段之后(例如,在繼續(xù)沖突的可能性已經(jīng)不太可能的將來時刻)可 以從故障節(jié)點列表1947中移除故障節(jié)點。例如,故障節(jié)點列表1947中的條目 可在其被插入到故障節(jié)點列表1947之后的恢復時間間隔被移除?;謴蜁r間間 隔1942可以足夠長以確保被告知發(fā)生故障的節(jié)點的確發(fā)生故障。
圖21示出了用于在被懷疑的節(jié)點故障的沖突報告之間進行仲裁的方法 2100的示例流程圖。方法2100將參考圖19C所示的組件和數(shù)據(jù)來描述。
方法2100包括第一節(jié)點向仲裁設(shè)施發(fā)送第二節(jié)點被懷疑發(fā)生故障的報告 的動作(動作2101)。例如,節(jié)點1981可以向仲裁者1983發(fā)送報告1934。 方法2100包括仲裁者從第一節(jié)點接收第二節(jié)點被懷疑發(fā)生故障的報告的動作 (動作2102)。例如,向仲裁者1983可以從節(jié)點1981接收報告1934。
方法2100包括仲裁者確定在從第一節(jié)點接收報告之前在指定的恢復時間間隔內(nèi)沒有其他節(jié)點懷疑第一節(jié)點發(fā)生故障的動作(動作2103)。例如,仲裁
者1983可以確定在恢復時間間隔1942內(nèi)沒有其他節(jié)點懷疑節(jié)點1981發(fā)生故 障(在該時間間隔之后,仲裁者1983無論如何將從故障節(jié)點列表1947中移除 節(jié)點1981)。
方法2100包括仲裁者在列表中記錄第二節(jié)點處于故障狀態(tài)的動作(動作 2105)。例如,仲裁者1983可以在故障節(jié)點列表1947中記錄節(jié)點1982(ID=64) 處于故障狀態(tài)。
方法2100包括仲裁者在最大響應時間間隔內(nèi)向第一節(jié)點發(fā)送認可消息的 動作,該認可消息包括指示在其之后第二節(jié)點保證轉(zhuǎn)換到故障狀態(tài)的時間段的 故障時間值(動作2104)。例如,仲裁者1983可在接收報告1934的最大響應 時間間隔1943內(nèi)向節(jié)點1981發(fā)送認可消息1984。認可消息1984包括指示節(jié) 點1982保證轉(zhuǎn)換到故障狀態(tài)的時間的故障時間間隔1936。 一般而言,最大響 應時間間隔表示在其之后請求者(例如,節(jié)點1981或1982)假設(shè)仲裁設(shè)施(仲 裁者1983)不會回答對仲裁的請求(例如,報告1934或1938)的時間點。當 在發(fā)送了仲裁請求之后在請求者處最大響應時間間隔到期時,請求者執(zhí)行類似 于(可能相同)在接收到明確的否認消息的情況下將執(zhí)行的那些操作的操作。
方法2100包括第一節(jié)點在最大響應時間間隔內(nèi)從仲裁設(shè)施接收認可消息 的動作,該認可消息包括指示在其之后第二節(jié)點保證轉(zhuǎn)換到故障狀態(tài)的時間段 的時間值(動作2106)。例如,節(jié)點1981可從仲裁者1983接收包括故障時間 間隔1936的認可消息1984。故障時間間隔1936指示節(jié)點1982保證轉(zhuǎn)換到故 障狀態(tài)的時間。由此,在故障時間間隔1936到期之后,節(jié)點1981可以試圖要 求對先前由節(jié)點1982控制的一個或多個環(huán)資源的控制。
方法2100包括在時間段到期之后第一節(jié)點要求對先前由第二節(jié)點控制的 一個或多個環(huán)資源的控制的動作(動作2107)。例如,節(jié)點1981可以在故障 時間間隔1936到期之后要求對先前由節(jié)點1982控制的環(huán)1901內(nèi)的一個或多 個環(huán)資源的控制。
所要求的環(huán)資源可以取決于節(jié)點1982在轉(zhuǎn)換到故障狀態(tài)之前所控制的環(huán) 資源而變化。例如,節(jié)點1981可以承擔節(jié)點1982的消息路由責任(例如,接 收定向到環(huán)1901上的標識符范圍的消息的責任)、節(jié)點1982的任何種子節(jié)點責任、節(jié)點1982的任何仲裁責任,等等。
在第一節(jié)點報告第二節(jié)點的某一時刻或在這之后,第二節(jié)點也可懷疑第一
節(jié)點發(fā)生故障。例如,節(jié)點1982也可懷疑節(jié)點1981發(fā)生故障。
方法2100包括第二節(jié)點向仲裁設(shè)施發(fā)送第一節(jié)點被懷疑發(fā)生故障的報告 的動作(動作2108)。例如,節(jié)點1982可以向仲裁者1938發(fā)送節(jié)點1981被 懷疑發(fā)生故障的報告1938。方法2100包括仲裁者從第二節(jié)點接收第一節(jié)點被 懷疑發(fā)生故障的報告的動作,來自第二節(jié)點的報告在從第一節(jié)點接收報告之后 的指定恢復時間間隔內(nèi)接收(動作2109)。例如,仲裁者1983可以在接收報 告1934的恢復時間間隔1942內(nèi)從節(jié)點1982接收節(jié)點1981被懷疑發(fā)生故障的 報告1938。
方法2100包括仲裁者參考列表以確定第二節(jié)點要轉(zhuǎn)換到故障狀態(tài)的動作 (動作2110)。例如,仲裁者1983可以參考故障節(jié)點列表1947以確定節(jié)點 1982 (ID=64)要轉(zhuǎn)換到故障狀態(tài)。
方法2100包括向第二節(jié)點發(fā)送否認消息以使得第二節(jié)點轉(zhuǎn)換到故障狀態(tài) 的動作(動作2111)。例如,仲裁者1983可以向節(jié)點1982發(fā)送否認消息1985 以使得節(jié)點1982轉(zhuǎn)換到故障狀態(tài)。方法2100包括第二節(jié)點從仲裁設(shè)施接收否 認消息的動作(動作2112)。例如,節(jié)點1982可從仲裁者1983接收否認消息 1985。
方法2100包括第二節(jié)點轉(zhuǎn)換到故障狀態(tài)的動作(動作2113)。例如,節(jié) 點1982可響應于接收到否認消息1985而轉(zhuǎn)換到故障狀態(tài)。在發(fā)生故障之后, 節(jié)點1982隨后可試圖重新加入環(huán)1901。
根據(jù)高速緩存的協(xié)定的路由
在某些實施例中,消息是根據(jù)高速緩存的路由協(xié)定來路由的。例如,環(huán)的 相鄰節(jié)點可同意對相鄰節(jié)點之間未占用標識符范圍的責任的劃分。標識符可處 于任意數(shù)量的原因而未被占用。例如,標識符可由于該標識符未被分配(即, 未被分配給節(jié)點的標識符)而未被占用。對于已分配的標識符(即,已分配給 節(jié)點的標識符),標識符可由于相應節(jié)點故意關(guān)閉或該節(jié)點出于某一原因,諸 如,例如由于通信或節(jié)點故障而不可達到,而未被占用。
在準許節(jié)點接受關(guān)于要成為相鄰節(jié)點的責任的任一未占用標識符的消息并傳送該消息之前,可建立并高速緩存節(jié)點之間的路由協(xié)定。對高速緩存的路由協(xié)定的參考顯著地減少了 (可能的)相鄰節(jié)點之間本來會發(fā)生以確定哪一節(jié)點負責特定的未占用標識符的任何通信。
高速緩存的路由協(xié)定可以按任意方式、根據(jù)可配置規(guī)則、或根據(jù)固定方法來劃分未占用標識符范圍。在某些實施例中,環(huán)上的相鄰節(jié)點之間的標識符范圍基本上對半劃分。這減小了未占用標識符遠離負責該未占用標識符的節(jié)點的可能性。
當在相鄰節(jié)點之間存在偶數(shù)個未占用標識符時,相鄰節(jié)點之間的中點在未占用標識符之間。由此,對于未占用標識符的責任可在該中點處在相鄰節(jié)點之間劃分。因此,每一相鄰節(jié)點可被分配對于相等數(shù)量的未占用標識符的責任。
另一方面,當相鄰節(jié)點之間存在奇數(shù)個未占用標識符時,相鄰節(jié)點之間的中點在一未占用標識符上。由此,對這些未占用標識符的責任可在位于該中點上的未占用標識符的一側(cè)或另一側(cè)劃分。因此, 一個相鄰節(jié)點可被分配對比另一相鄰節(jié)點多一個未占用標識符的責任。
例如,現(xiàn)在參考圖22A,圖22A示出了方便根據(jù)節(jié)點之間的高速緩存的雙向協(xié)定來路由消息的示例環(huán)體系結(jié)構(gòu)2200。如圖所示,包括(但不限于)節(jié)點2201、 2202、 2203、 2261、 2262和2263的各節(jié)點(示為環(huán)2250上的方塊)被包括在環(huán)2250上。每一節(jié)點具有指示其在環(huán)2250上的位置的相應ID (在括號內(nèi)示出)。例如,節(jié)點2201具有10=64,而節(jié)點2202具有ID:30。
在所描繪的節(jié)點存在各未占用標識符范圍。例如,未占用標識符范圍2211表示節(jié)點2202和2201之間未占用標識符31到63。
如圖所示,節(jié)點2201和2202已經(jīng)建立并高速緩存了雙向協(xié)定2223。例如,通過先前的通信,節(jié)點2201和2202可確定在ID=64和ID=30之間當前未散布有任何其他節(jié)點。由此,節(jié)點2201和2202可進一步確定它們在環(huán)2250上彼此相鄰。因此,節(jié)點2201和2202可劃分對于未占用標識符范圍2211 (即,未占用標識符31到63)的責任,使得節(jié)點2202負責未占用標識符范圍2211的一部分,而節(jié)點2201負責未占用標識符范圍2211的其余部分。每一節(jié)點也負責其分配的ID。 B卩,節(jié)點2202負責10=30,而節(jié)點2201負責ID=64。
因此,如由責任邊界2213 (在未占用標識符47和未占用標識符48之間)所描繪的,節(jié)點2202 (ID=30)負責其自身以及未占用標識符31到47,而節(jié)點2201 (ID=64)負責其自身以及未占用標識符48到63。盡管節(jié)點2201和2202之間的中點在未占用標識符47上,但節(jié)點2202被分配對未占用標識符47的責任,使得每一未占用標識符負責單個節(jié)點。由此,如上所述,當責任邊界落在未占用標識符上時,相鄰節(jié)點之一可被分配對該未占用標識符的單獨的責任。
圖24示出了用于根據(jù)高速緩存的雙向協(xié)定來路由消息的方法2400的示例流程圖。方法2400將參考圖22A的環(huán)體系結(jié)構(gòu)2200中所描繪的節(jié)點和消息來
描述°
方法2400包括接收節(jié)點接收消息以及指示節(jié)點環(huán)上的目的地的目的地標識符的動作,該目的地標識符位于接收節(jié)點和直接相鄰節(jié)點之一之間(動作2401)。例如,節(jié)點2201可接收指示要傳送到ID二55的消息2251?;蛘?,節(jié)點2201可接收指示要傳送到ID=39的消息2252。消息2251和2252可從環(huán)2250中的另一節(jié)點接收(環(huán)內(nèi)通信)、從環(huán)體系結(jié)構(gòu)2200的另一環(huán)中的節(jié)點接收(環(huán)間通信)、或通過非環(huán)通信來接收。
方法2400包括接收節(jié)點參考接收節(jié)點和直接相鄰節(jié)點之間的高速緩存的雙向協(xié)定來確定要接收該消息的下一適當節(jié)點的動作(動作2402)。該雙向協(xié)定至少暗示接收節(jié)點和直接相鄰節(jié)點之間對于標識符空間的責任的劃分。例如,節(jié)點2201可參考高速緩存的雙向協(xié)定2223來確定要處理消息2251的下一適當節(jié)點。由于高速緩存的雙向協(xié)定2223指示節(jié)點2201 (ID=64)負責未占用標識符55,則節(jié)點2201確定它是處理消息2251的適當節(jié)點。同樣,節(jié)點2201可參考高速緩存的雙向協(xié)定2223來確定要處理消息2252的下一適當節(jié)點。由于高速緩存的雙向協(xié)定2223指示節(jié)點2202 (ID=30)負責未占用標識符39,則節(jié)點2201確定節(jié)點2202是處理消息2252的下一適當節(jié)點。
方法2400包括基于對下一適當節(jié)點的確定將消息發(fā)送到下一適當組件的動作(動作2403)。例如,節(jié)點2201可將消息2251提供給其對應于未占用標識符55的資源處理程序?qū)嵗?,因為高速緩存的雙向協(xié)定2223指示節(jié)點2201負責未占用標識符55?;蛘?,節(jié)點2201可將消息2252提供給節(jié)點2202,因為高速緩存的雙向協(xié)定2223指示節(jié)點2202負責未占用標識符39。隨后,節(jié)點2202可將消息2252提供給其對應于未占用標識符39的資源處理程序?qū)嵗?當一標識符未被包括在高速緩存的雙向協(xié)定中時,節(jié)點可參考路由表(例
如,如圖3所描繪的)以便向著目的地前進。例如,節(jié)點2201可向節(jié)點2261 (ID=200)發(fā)送指示要傳送到ID=203的消息2253。節(jié)點2261可參考與其相
鄰節(jié)點的任何高速緩存的雙向協(xié)定以確定負責標識符203的節(jié)點。
在某些實施例中,從給定節(jié)點的觀點來看,多個雙向協(xié)定可本質(zhì)上表示給
定節(jié)點、給定節(jié)點的直接前導者節(jié)點、和給定節(jié)點的直接后繼者節(jié)點之間的三
向協(xié)定。圖22B示出了方便根據(jù)多個高速緩存的雙向協(xié)定來路由消息的示例環(huán)
體系結(jié)構(gòu)2200。如先前所描述的,節(jié)點2201和2202已經(jīng)建立并高速緩存了雙向協(xié)定 2223。類似地,節(jié)點2201和2203可建立高速緩存的雙向協(xié)定2224,以劃分對 未占用標識符范圍2212 (即,未占用標識符65到101)的責任。由此,通過 先前的通信,節(jié)點2201和2203可確定在ID=65和ID=101之間當前未散布有 任何其他節(jié)點。由此,節(jié)點2201和2203可進一步確定它們在環(huán)2250上彼此 相鄰。因此,節(jié)點2201和2203可劃分未占用標識符范圍2212,使得節(jié)點2202 負責未占用標識符范圍2212的一部分,而節(jié)點2201負責未占用標識符范圍 2212的其余部分。因此,如在雙向協(xié)定2224內(nèi)所描繪的,節(jié)點2201 (ID=64) 負責其自身以及未占用標識符65到82,而節(jié)點2202 (ID=101)負責其自身以 及未占用標識符范圍83到100。
從節(jié)點2201的觀點來看,高速緩存的雙向協(xié)定2223和高速緩存的雙向協(xié) 定2224的組合本質(zhì)上表示三向協(xié)定2273。g卩,節(jié)點2201負責節(jié)點2201和2202 之間的標識符空間的一部分,且負責節(jié)點2201和節(jié)點2203之間的標識符空間 的一部分。括號中的標識符范圍指示形成節(jié)點2201的任一側(cè)上的高速緩存的 雙向協(xié)定2223和2224的責任范圍(即,47到64和64到82)。
圖25示出了用于根據(jù)多個高速緩存的雙向協(xié)定來路由消息的方法2500 的示例流程圖。方法2500將參考圖22B的環(huán)體系結(jié)構(gòu)2200中所描繪的節(jié)點和 消息來描述。
方法2500包括接收節(jié)點接收消息以及指示節(jié)點環(huán)上的目的地的目的地標 識符的動作(動作2501 )。例如,節(jié)點2201可接收指示要分別傳送到節(jié)點IE=55、ID=39、 ID=203、 10=74和10=94的消息2251、 2252、 2253、 2254和2256中 的任一個。消息2251、 2252、 2253、 2254和2256可從環(huán)2250中的另一節(jié)點 接收(環(huán)內(nèi)通信)、或從環(huán)體系結(jié)構(gòu)2200的另一環(huán)中的節(jié)點接收(環(huán)間通信)、 或通過非環(huán)通信來接收。
方法2500包括接收節(jié)點參考與前導者節(jié)點的第一高速緩存的雙向協(xié)定以 及與后繼者節(jié)點的第二高速緩存的雙向協(xié)定來確定要接收該消息的下一適當 節(jié)點的動作(動作2502)。第一和第二高速緩存的雙向協(xié)定至少暗示前導者節(jié) 點和后繼者節(jié)點之間關(guān)于標識符空間的責任的劃分。例如,節(jié)點2201可參考 高速緩存的三向協(xié)定2223和2224來確定要接收消息2251、 2252、 2253、 2254 和2256中的任一個的下一適當節(jié)點。
由于高速緩存的雙向協(xié)定2223指示節(jié)點2202 (ID=30)負責未占用標識 符39,則節(jié)點2201確定節(jié)點2202是處理消息2252的下一適當節(jié)點。由于高 速緩存的雙向協(xié)定2223指示節(jié)點2201 (ID=64)負責未占用標識符55,則節(jié) 點2201確定它是處理消息2252的適當節(jié)點。由于高速緩存的雙向協(xié)定2224 指示節(jié)點2201 (ID=64)負責未占用標識符74,則節(jié)點2201確定它是處理消 息2254的適當節(jié)點。由于高速緩存的雙向協(xié)定2224指示節(jié)點2203 (ID=101) 負責未占用標識符94,則節(jié)點2201確定節(jié)點2203是處理消息2254的下一適 當節(jié)點。
方法2500包括基于對下一適當節(jié)點的確定將消息發(fā)送到下一適當組件的 動作(動作2503)。例如,節(jié)點2201可基于對要處理消息2251、 2252、 2253、 2254和2256的下一適當節(jié)點的確定將消息2251、 2252、 2253、 2254和2256 發(fā)送到環(huán)2250上的下一適當組件。
例如,節(jié)點2201可將消息2252提供給節(jié)點2202,因為高速緩存的雙向 協(xié)定2223指示節(jié)點2202負責未占用標識符39。隨后,節(jié)點2202可將消息2252 提供給其對應于未占用標識符39的資源處理程序?qū)嵗?。?jié)點2201可將消息 2251提供給其對應于未占用標識符55的資源處理程序?qū)嵗?,因為高速緩存?雙向協(xié)定2223指示節(jié)點2201負責未占用標識符55。節(jié)點2201可將消息2254 提供給其對應于未占用標識符74的資源處理程序?qū)嵗?,因為高速緩存的雙向 協(xié)定2224指示節(jié)點2201負責未占用標識符74。節(jié)點2201可將消息2256提供給節(jié)點2203,因為高速緩存的雙向協(xié)定2224指示節(jié)點2203負責未占用標識符 94。隨后,節(jié)點2203可將消息2256提供給其對應于未占用標識符94的資源 處理程序?qū)嵗?br> 當一標識符未被包括在高速緩存的多個高速緩存的雙向協(xié)定的任一個中 時,節(jié)點可參考路由表(例如,如圖3所描繪的)以便向著目的地前進。例如, 節(jié)點2201可向節(jié)點2261 (ID=200)發(fā)送指示要傳送到ID=203的消息2256。 節(jié)點2261然后可參考與其前導者節(jié)點和/或其后繼者節(jié)點的任何高速緩存雙向 協(xié)定來確定要接收消息2253的下一適當組件。
制定高速緩存的協(xié)定
環(huán)可不時地重新配置,諸如,例如當新節(jié)點加入環(huán)時或當現(xiàn)有節(jié)點離開環(huán) 時(例如,通過優(yōu)雅移除、作為節(jié)點監(jiān)視的結(jié)果、通過參考仲裁者等等)。當 一節(jié)點檢測到環(huán)的配置已改變時,該節(jié)點可重新制定與任何相鄰節(jié)點的高速緩 存的路由協(xié)定。在協(xié)定重新制定期間,節(jié)點可將任何接收到的消息排隊,除了 用于制定協(xié)定的那些消息之外。在協(xié)定制定完成之后,該節(jié)點然后可根據(jù)該協(xié) 定來處理消息。
環(huán)的重新配置可導致多個路由協(xié)定被重新制定。例如,當一節(jié)點離開環(huán)時, 該離開節(jié)點的任一側(cè)上的直接相鄰節(jié)點可制定對于先前是離開節(jié)點的責任的 未占用標識符范圍的協(xié)定(由此可能獲得對另外的未占用標識符的責任)。該 重新制定將來自離開節(jié)點的未占用標識符范圍的一部分與每一直接相鄰節(jié)點 的未占用標識符范圍的責任相聯(lián)接。即,每一直接相鄰節(jié)點獲得對離開節(jié)點的 未占用標識符范圍的一部分以及該離開節(jié)點的標識符的責任。
圖23A到23D示出了方便制定高速緩存的雙向協(xié)定的示例環(huán)體系結(jié)構(gòu) 2300。如圖23A中所示,節(jié)點2301和2302制定了劃分在責任邊界2313 (在 未占用標識符47和未占用標識符48之間)處對未占用標識符范圍2312 (即, 未占用標識符31到63)的責任的高速緩存的雙向協(xié)定2323。類似地,節(jié)點2302 和2362制定了劃分在責任邊界2333 (在未占用標識符14和15之間)處對未 占用標識符范圍2311 (即,未占用標識符255到29)的責任的高速緩存的雙 向協(xié)定2343。
在高速緩存的雙向協(xié)定2323和2343的制定之后的某一時刻,節(jié)點2302可離開環(huán)2350 (例如,通過優(yōu)雅移除、作為節(jié)點監(jiān)視的結(jié)果、基于來自仲裁者
的指令等等)。現(xiàn)在參考圖23B,在節(jié)點2302離開環(huán)2350之后,沒有節(jié)點負 責先前是節(jié)點2302的責任的未占用標識符。未占用標識符范圍2313 (未占用 標識符15到47,包括現(xiàn)在未占用的標識符30)表示節(jié)點2302在離開環(huán)2350 之前負責的未占用標識符范圍。
響應于節(jié)點2302離開環(huán)2350,節(jié)點2301和2362試圖標識新的直接相鄰 節(jié)點。節(jié)點2362試圖表示新的直接后繼者節(jié)點(即,在與節(jié)點2302相同的相 對于節(jié)點2362的方向上的直接相鄰節(jié)點)。節(jié)點2301試圖標識新的直接前導 者節(jié)點(S卩,在與節(jié)點2302相同的相對于節(jié)點2301的方向上的直接相鄰節(jié)點)。 在圖23B中,節(jié)點2362將節(jié)點2301標識為其新的直接后繼者,而節(jié)點2301 將節(jié)點2362標識為其新的直接前導者。
在標識了新的直接相鄰節(jié)點之后,節(jié)點2362和2301制定劃分對未占用標 識符范圍2314 (未占用標識符255到63,包括現(xiàn)在未占用的標識符30)的責 任的高速緩存的雙向協(xié)定2363。未占用標識符范圍2313包括先前是節(jié)點2302 的責任的未占用標識符范圍2314。由此,在節(jié)點2302離開環(huán)2350之后,未占 用標識符范圍2313的各部分可變?yōu)楣?jié)點2362或節(jié)點2301的責任。
因此,如由責任邊界2353 (在未占用標識符31和未占用標識符32之間) 所描繪的,節(jié)點2362 (ID=254)和節(jié)點2301 (ID=30)制定高速緩存的雙向協(xié) 定2363。根據(jù)高速緩存的雙向協(xié)定2363,節(jié)點2362 (ID=64)負責其自身以 及未占用標識符255到31,而節(jié)點2301 (ID=64)負責其自身以及未占用標識 符范圍32到63。盡管節(jié)點2201和2202之間的中點在未占用標識符31上,但 節(jié)點2362被分配對未占用標識符31的責任,使得每一未占用標識符負責單個 節(jié)點。
在節(jié)點2302的離開與高速緩存的雙向協(xié)定2363的制定之間的時間期間, 節(jié)點2301和2362不處理指示要傳送到255和63之間的范圍內(nèi)的標識符的消 息。取而代之的是,節(jié)點2301和2362將任何消息排隊,除了用于制定高速緩 存的雙向協(xié)定2363的那些消息之外。在高速緩存的雙向協(xié)定2363的制定完成 之后,節(jié)點2301和2362然后根據(jù)高速緩存的雙向協(xié)定2363來處理消息。
當一新的節(jié)點在兩個現(xiàn)有節(jié)點之間加入環(huán),每一現(xiàn)有節(jié)點可制定與該新節(jié)點的路由協(xié)定(且由此可能放棄對未占用標識符的一部分的責任)。該制定可 基本上在加入節(jié)點和現(xiàn)有節(jié)點之間拆分現(xiàn)有節(jié)點所負責的未占用標識符范圍。 即,每一現(xiàn)有節(jié)點可能將對現(xiàn)有節(jié)點的未占用標識符的一部分的責任放棄給加 入節(jié)點。
現(xiàn)在參考圖23C,在制定高速緩存的雙向協(xié)定2363之后的某一時刻,節(jié) 點2304 (ID=44)可加入環(huán)2350。在節(jié)點2304加入環(huán)2350之后,節(jié)點2362 可檢測到節(jié)點2304作為其直接后繼者。同樣,節(jié)點2301可檢測到節(jié)點2304 作為其直接前導者。響應于每一檢測,未占用標識符范圍2314基本上被拆分 成未占用標識符范圍2315(未占用標識符255到43)和未占用標識符范圍2316 (未占用標識符45到63)。然后可制定新的高速緩存的雙向協(xié)定以劃分對未 占用標識符范圍2315和2316的責任。
現(xiàn)在參考圖23D,在將節(jié)點2304標識為新的直接后繼者節(jié)點之后,節(jié)點 2362和2304制定劃分對未占用標識符范圍2315 (未占用標識符255到43)的 責任的高速緩存的雙向協(xié)定2394。未占用標識符范圍2315包括未占用標識符 范圍2314的部分,該部分先前是節(jié)點2362的責任且在該情況下該部分的某一 些先前是節(jié)點2301的責任。由此,未占用標識符范圍2314中曾是節(jié)點2362 或節(jié)點2301的任一個的責任的部分在節(jié)點2304加入環(huán)2350時可成為節(jié)點 2304的責任。
因此,如由責任邊界2393 (在未占用標識符23和未占用標識符24之間) 所描繪的,節(jié)點2362 (ID=254)和節(jié)點2304 (ID=44)制定高速緩存的雙向協(xié) 定2394。根據(jù)高速緩存的雙向協(xié)定2394,節(jié)點2362 (ID=254)負責其自身以 及未占用標識符255到23,而節(jié)點2304 (ID=44)負責其自身以及未占用標識 符范圍24到43。盡管節(jié)點2201和2202之間的中點在未占用標識符23上,但 節(jié)點2362被分配對未占用標識符23的責任,使得每一未占用標識符負責單個 節(jié)點。
類似地,在將節(jié)點2304標識為新的直接前導者節(jié)點之后,節(jié)點2301和 2304制定劃分對未占用標識符范圍2316 (未占用標識符45到64)的責任的高 速緩存的雙向協(xié)定2383。未占用標識符范圍2316包括未占用標識符范圍2314 中先前是節(jié)點2302的責任的部分。由此,未占用標識符范圍2314中曾是節(jié)點2301的責任的部分在節(jié)點2304加入環(huán)2350時可成為節(jié)點2304的責任。
因此,如由責任邊界2373 (在未占用標識符54和未占用標識符55之間) 所描繪的,節(jié)點2304 (ID=44)和節(jié)點2301 (ID=64)制定高速緩存的雙向協(xié) 定2383。根據(jù)高速緩存的雙向協(xié)定2383,節(jié)點2304 (ID=44)負責其自身以 及未占用標識符45到54,而節(jié)點2301 (ID=64)負責其自身以及標識符范圍 55到63。盡管節(jié)點2201和2202之間的中點在未占用標識符54上,但節(jié)點2304 被分配對未占用標識符54的責任,使得每一未占用標識符負責單個節(jié)點。
在節(jié)點2304的加入與高速緩存的雙向協(xié)定2394的制定之間的時間期間, 節(jié)點2304和2362不處理指示要傳送到255和43之間的范圍內(nèi)的標識符的消 息。取而代之的是,節(jié)點2362和2304將任何消息排隊,除了用于制定高速緩 存的雙向協(xié)定2394的那些消息之外。在高速緩存的雙向協(xié)定2394的制定完成 之后,節(jié)點2362和2304然后根據(jù)高速緩存的雙向協(xié)定2394來處理消息。
類似地,在節(jié)點2304的加入與高速緩存的雙向協(xié)定2383的制定之間的時 間期間,節(jié)點2304和2301不處理指示要傳送到45和63之間的范圍內(nèi)的標識 符的消息。取而代之的是,節(jié)點2304和2301將任何消息排隊,除了用于制定 高速緩存的雙向協(xié)定2383的那些消息之外。在高速緩存的雙向協(xié)定2383的制 定完成之后,節(jié)點2304和2301然后根據(jù)高速緩存的雙向協(xié)定2383來處理消 息。
從節(jié)點2304的觀點來看,高速緩存的雙向協(xié)定2394和高速緩存的雙向協(xié) 定2383的組合本質(zhì)上表示節(jié)點2304、節(jié)點2362和2301之間的三向協(xié)定(未 示出)。從節(jié)點2304的觀點來看,相應的所表示的三向協(xié)定定義了對從ID=254 (包括254)到03=64 (包括64)的(己分配的和未占用的)標識符的責任。
圖26示出了用于加入雙向協(xié)定的方法2600的示例流程圖。方法2600將 參考圖23A到23D中的節(jié)點和協(xié)定來討論。
方法2600包括當前節(jié)點訪問節(jié)點環(huán)的配置已改變的指示的動作,該指示 表明需要制定在當前節(jié)點和直接相鄰節(jié)點之間劃分對至少環(huán)上的未占用標識 符的責任的雙向協(xié)定(動作2601)。例如,參考圖23A和23B,節(jié)點2301和 /或節(jié)點2362可例如通過對節(jié)點2302的監(jiān)視從節(jié)點2302或從仲裁者訪問節(jié)點 2302離開環(huán)2350的指示。節(jié)點2302離開環(huán)2350的指示向節(jié)點2301和/或節(jié)點2362表明需要制定劃分對未占用標識符范圍2314(未占用標識符255到63) 的責任的雙向協(xié)定。
或者,參考圖23C和23D,節(jié)點2301可訪問節(jié)點2304已加入環(huán)2350的 指示(例如,作為節(jié)點2304的加入過程的一部分發(fā)送)。節(jié)點2304加入環(huán)2350 的指示向節(jié)點2301表明需要制定劃分對未占用標識符范圍2316 (未占用標識 符45到63)的責任的雙向協(xié)定。類似地,節(jié)點2362可訪問節(jié)點2304已加入 環(huán)2350的指示(例如,作為節(jié)點2304的加入過程的一部分發(fā)送)。節(jié)點2304 加入環(huán)2350的指示向節(jié)點2362表明需要制定劃分對未占用標識符范圍2315 (未占用標識符255到43)的責任的雙向協(xié)定。
方法2600包括當前節(jié)點和直接相鄰節(jié)點同意當前節(jié)點和直接相鄰節(jié)點之 間的責任邊界的動作,該責任邊界要在當前節(jié)點和直接相鄰節(jié)點之間劃分對未 占用標識符的責任(動作2602)。當前節(jié)點和責任邊界之間的未占用標識符是 當前節(jié)點的責任而責任邊界和直接相鄰節(jié)點之間的未占用標識符是直接相鄰 節(jié)點的責任。
例如,參考圖23B,節(jié)點2301和節(jié)點2362可同意責任邊界2353,其基 本上在未占用標識符31和32之間。由此,節(jié)點2301和責任邊界2353之間的 未占用標識符(即,未占用標識符32到63)是節(jié)點2301的責任。同樣,責任 邊界2353和節(jié)點2362之間的未占用標識符(即,未占用標識符255到31)是 節(jié)點2362的責任。
參考圖23D,節(jié)點2301和節(jié)點2304可同意責任邊界2373,其基本上在 未占用標識符54和55之間。由此,節(jié)點2301和責任邊界2373之間的未占用 標識符(即,標識符55到63)是節(jié)點2301的責任。同樣,責任邊界2373和 節(jié)點2304之間的未占用標識符(即,未占用標識符45到54)是節(jié)點2304的 責任。
仍參考圖23D,節(jié)點2304和節(jié)點2362可同意責任邊界2393,其基本上 在未占用標識符23和24之間。由此,節(jié)點2304和責任邊界2393之間的標識 符(即,未占用標識符24到43)是節(jié)點2304的責任。同樣,責任邊界2393 和節(jié)點2362之間的未占用標識符(即,未占用標識符255到23)是節(jié)點2362 的責任。圖6和以下討論旨在提供其中可實現(xiàn)本發(fā)明的合適計算環(huán)境的簡要概括 描述。雖然未作要求,但是本發(fā)明將在諸如程序模塊等正由計算機系統(tǒng)執(zhí)行的 計算機可執(zhí)行指令的一般上下文中描述。 一般而言,程序模塊包括執(zhí)行特定任 務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。計算機 可執(zhí)行指令、相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)和程序模塊表示用于執(zhí)行此處所公開的方法的 動作的程序代碼裝置的示例。
參照圖6,用于實現(xiàn)本發(fā)明的示例系統(tǒng)包括計算機系統(tǒng)620形式的通用計 算設(shè)備,包括處理單元621、系統(tǒng)存儲器622、以及將包括系統(tǒng)存儲器622的 各種系統(tǒng)組件耦合到處理單元621的系統(tǒng)總線623。處理單元621可以執(zhí)行被 設(shè)計成實現(xiàn)計算機系統(tǒng)620的特征(包括本發(fā)明的特征)的計算機可執(zhí)行指令。 系統(tǒng)總線623可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲器總線或存 儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總線。系 統(tǒng)存儲器包括只讀存儲器("ROM" ) 624和隨機存取存儲器("RAM") 625?;据斎?輸出系統(tǒng)("BIOS" ) 626可以被存儲在ROM 624中,它包 含有助于例如在啟動期間在計算機系統(tǒng)620內(nèi)的各個元件之間傳送信息的基本 例程。
計算機系統(tǒng)620還可包括用于對磁硬盤639進行讀寫的磁硬盤驅(qū)動器 627,用于對可移動磁盤629進行讀寫的磁盤驅(qū)動器628,以及用于對諸如 CD-ROM或其它光介質(zhì)等可移動光盤631進行讀寫的光盤驅(qū)動器630。磁硬盤 驅(qū)動器627、磁盤驅(qū)動器628和光盤驅(qū)動器630分別通過硬盤驅(qū)動器接口 632、 磁盤驅(qū)動器接口 633和光驅(qū)接口 634連接到系統(tǒng)總線623。驅(qū)動器及其相關(guān)聯(lián) 的計算機可讀介質(zhì)為計算機系統(tǒng)620提供計算機可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序 模塊和其他數(shù)據(jù)的非易失性存儲。雖然這里所描述的示例環(huán)境使用磁硬盤639、
可移動磁盤629和可移動光盤631,但是可以使用用于存儲數(shù)據(jù)的其他類型的 計算機可讀介質(zhì),包括盒式磁帶、閃存卡、數(shù)字多功能盤、伯努里盒式磁帶、 RAM、 ROM等。
包括一個或多個程序模塊的程序代碼裝置可以被存儲在硬盤639、磁盤 629、光盤631、 ROM 624或RAM 625上,包括操作系統(tǒng)635、 一個或多個應 用程序636、其他程序模塊637和程序數(shù)據(jù)638。用戶可以通過鍵盤640、定點設(shè)備642或其他輸入設(shè)備(未示出)(例如,話筒、操縱桿、游戲手柄、掃描
儀或等)來將命令和信息輸入到計算機系統(tǒng)620中。這些和其他輸入設(shè)備可以 通過耦合到系統(tǒng)總線623的輸入/輸出接口 646連接到處理單元621。輸入/輸 出接口 646邏輯上表示各種各樣不同的接口中的任一個,例如,串行端口接口、 PS/2接口、并行端口接口、通用串行總線("USB")接口、或電氣和電子工 程師協(xié)會("IEEE" ) 1394接口 (即火線接口),或者甚至可以邏輯上表示 不同接口的組合。
監(jiān)視器647或其他顯示設(shè)備也經(jīng)由視頻接口 648連接到系統(tǒng)總線623。揚 聲器669或其它音頻輸出設(shè)備也通過音頻接口 649連接到系統(tǒng)總線623。諸如 打印機等其它外圍輸出設(shè)備(未示出)也可連接到計算機系統(tǒng)620。
計算機系統(tǒng)620可以連接到諸如辦公室范圍或企業(yè)范圍的計算機網(wǎng)絡、家 庭網(wǎng)絡、內(nèi)聯(lián)網(wǎng)和/或因特網(wǎng)等網(wǎng)絡。計算機系統(tǒng)620可以通過這類網(wǎng)絡與諸如 遠程計算機系統(tǒng)、遠程應用程序、和/或遠程數(shù)據(jù)庫等外部源交換數(shù)據(jù)。
計算機系統(tǒng)620包括網(wǎng)絡接口 653,通過網(wǎng)絡接口 653,計算機系統(tǒng)620 從外部源接收數(shù)據(jù)和/或?qū)?shù)據(jù)發(fā)送到外部源。如圖6中所描繪的,網(wǎng)絡接口 653便于經(jīng)由鏈路651與遠程計算機系統(tǒng)683交換數(shù)據(jù)。網(wǎng)絡接口 653可以邏 輯上表示一個或多個軟件和/或硬件模塊,例如,網(wǎng)絡接口卡和對應的網(wǎng)絡驅(qū)動 程序接口規(guī)范("NDIS")棧。鏈路651表示網(wǎng)絡的一部分(例如,以太網(wǎng) 段),并且,遠程計算機系統(tǒng)683表示該網(wǎng)絡的節(jié)點。
同樣,計算機系統(tǒng)620包括輸入/輸出接口 646,通過輸入/輸出接口 646, 計算機系統(tǒng)620從外部源接收數(shù)據(jù)和/或?qū)?shù)據(jù)發(fā)送到外部源。輸入/輸出接口 646經(jīng)由鏈路659耦合到調(diào)制解調(diào)器654 (例如,標準調(diào)制解調(diào)器、電纜調(diào)制 解調(diào)器、或數(shù)字用戶線("DSL")調(diào)制解調(diào)器),通過調(diào)制解調(diào)器,計算機 系統(tǒng)620從外部源接收數(shù)據(jù)和/或?qū)?shù)據(jù)發(fā)送到外部源。如圖6中所描繪的,輸 入/輸出接口 646和調(diào)制解調(diào)器654便于經(jīng)由鏈路652與遠程計算機系統(tǒng)693 交換數(shù)據(jù)。鏈路652表示網(wǎng)絡的一部分,并且,遠程計算機系統(tǒng)693表示該網(wǎng) 絡的節(jié)點。
盡管圖6表示用于本發(fā)明的合適的操作環(huán)境,但本發(fā)明的原理可以被用于 能夠(如果必要的話,具有合適的修改)實現(xiàn)本發(fā)明的原理的任何系統(tǒng)中。圖6中所展示的環(huán)境只起說明的作用,決不表示其中可以實現(xiàn)本發(fā)明的原理的各 種各樣環(huán)境的甚至一小部分。
根據(jù)本發(fā)明,節(jié)點、應用層、以及其它較低層,以及相關(guān)聯(lián)的數(shù)據(jù),包括 路由表和節(jié)點ID可從與計算機系統(tǒng)620相關(guān)聯(lián)的任何計算機可讀介質(zhì)存儲和 訪問。例如,這類模塊的各個部分和相關(guān)聯(lián)的程序數(shù)據(jù)的各個部分可以被包括
在操作系統(tǒng)635、應用程序636、程序模塊637和/或程序數(shù)據(jù)638中,用于存 儲在系統(tǒng)存儲器622中。
當諸如磁硬盤639等大容量存儲設(shè)備被耦合到計算機系統(tǒng)620時,這類模 塊和相關(guān)聯(lián)的程序數(shù)據(jù)也可以被存儲在該大容量存儲設(shè)備中。在網(wǎng)絡化環(huán)境 中,相對于計算機系統(tǒng)620或其各個部分而描繪的程序模塊可以被存儲在諸如 與遠程計算機系統(tǒng)683和/或遠程計算機系統(tǒng)693相關(guān)聯(lián)的系統(tǒng)存儲器和/或大 容量存儲設(shè)備等遠程存儲器存儲設(shè)備中??梢栽谌缜八龅姆植际江h(huán)境中實現(xiàn) 這類模塊的執(zhí)行。
加入和離開節(jié)點環(huán)
圖27示出了其中可利用本發(fā)明的原理的體系結(jié)構(gòu)2700。環(huán)體系結(jié)構(gòu)2700 包括節(jié)點環(huán)2705。在某些實施例中,節(jié)點環(huán)2705可類似于如上所述的圖23C 中的環(huán)2350或與其相同。節(jié)點環(huán)2705可包括加入節(jié)點2710,其可以正試圖在 直接相鄰節(jié)點1 (2720)和直接相鄰節(jié)點2 (2730)之間加入環(huán)。在某些實施 例中,加入節(jié)點2710可按類似于圖23C中所描述的方式加入節(jié)點環(huán)2710,其 中加入節(jié)點基于節(jié)點2301和1362之間的高速緩存的協(xié)定來確定標識符范圍。 用于在節(jié)點加入期間維護環(huán)一致性的方法在下文中參考圖27的節(jié)點和數(shù)據(jù)項 來更詳細描述。
圖28示出了用于在加入節(jié)點加入節(jié)點環(huán)時維護環(huán)一致性的方法2800的流 程圖。在某些實施例中,方法2800合并多個子方法,每一子方法都出于一不 同節(jié)點的觀點。方法2800現(xiàn)在將頻繁地參考環(huán)境2700的組件和數(shù)據(jù)以及圖30 的狀態(tài)圖3000來描述。
方法2800包括加入節(jié)點檢測環(huán)上的多個其他節(jié)點的鄰域的動作,該鄰域 至少包括直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點(動作2805)。在某些情 況下,加入節(jié)點2710可檢測和/或建立環(huán)2705上的多個其他節(jié)點的鄰域,其中該鄰域包括直接相鄰節(jié)點2720和其他直接相鄰節(jié)點2730。在某些實施例中, 諸如在狀態(tài)圖3000中,加入節(jié)點3005可通過在步驟1中發(fā)送介紹消息(例如, 介紹3006)來建立鄰域。接收這一介紹消息的每一節(jié)點可在該狀態(tài)圖的步驟2 中用確認(ACK)消息(例如,ACK3007)來響應。介紹3006可包括用于標 識加入節(jié)點的信息的一個或多個部分,并指示加入節(jié)點3005打算加入環(huán)2705。
根據(jù)加入節(jié)點3005接收回來的ACK消息,加入節(jié)點可被配置成確定哪一 節(jié)點在環(huán)上最靠近它。例如,每一 ACK消息可包括指示環(huán)上的節(jié)點位置以及 該節(jié)點負責的范圍的標識符范圍和/或位置標識符。由此,在狀態(tài)圖3000中, 加入節(jié)點3005可確定直接相鄰節(jié)點3 (3010)是加入節(jié)點的直接相鄰前導者節(jié) 點,而直接相鄰節(jié)點5 (3015)是加入節(jié)點的直接相鄰后繼者節(jié)點。此外,加 入節(jié)點3005可確定相鄰節(jié)點1 (3020)和相鄰節(jié)點2 (3025)與加入節(jié)點在同 一環(huán)上,但不一定是加入節(jié)點的直接最近節(jié)點。由此,鄰域建立3050可以根 據(jù)示例性狀態(tài)圖3000來實現(xiàn)。
方法2800包括加入節(jié)點向選自直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié) 點的直接相鄰節(jié)點之一指示加入節(jié)點要獲得對于加入節(jié)點和所選直接相鄰節(jié) 點之間的id空間的一部分的id空間所有權(quán)的意圖的動作(動作2810)。例如, 加入節(jié)點2710可以向選自直接相鄰節(jié)點1 (2720)和直接相鄰節(jié)點2 (2730) 的直接相鄰節(jié)點1指示加入節(jié)點2710要獲得對加入節(jié)點2710和所選直接相鄰 節(jié)點2720之間的id空間的一部分的id空間所有權(quán)的意圖。如上所述,id空間 可包括給定節(jié)點所負責的標識符范圍(未占用的或其他)。例如,id空間可包 括給定節(jié)點負責的節(jié)點標識符的數(shù)值范圍。
在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié)點3005向選自直接相鄰 前導者節(jié)點和直接相鄰后繼者節(jié)點的直接相鄰節(jié)點之一指示加入節(jié)點要獲得 對加入節(jié)點3005和所選直接相鄰節(jié)點3010之間的id空間的一部分的id空間 所有權(quán)的意圖的動作包括向選自直接相鄰前導者節(jié)點3010和直接相鄰后繼者 節(jié)點3015的直接相鄰節(jié)點3010發(fā)送令牌請求3031的動作,該令牌請求包括 一節(jié)點標識符,使得只有具有該節(jié)點標識符的節(jié)點才能夠回復,并且還包括第 一生存時間持續(xù)時間值3031,該第一生存時間持續(xù)時間值指示加入節(jié)點3005 能將與所選直接相鄰節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間。在某些情況下,令牌請求消息3031包括指示加入節(jié)點3005期望的所有權(quán) 范圍的經(jīng)更新的狀態(tài)的標記。生存時間值(TTL)和關(guān)系監(jiān)視可以基本上與圖 20的方法2000中所描述的相同。
方法2800包括加入節(jié)點指示要監(jiān)視所選直接相鄰節(jié)點的意圖的動作(動 作2815)。例如,加入節(jié)點2710可指示要如在監(jiān)視指示2712中所指示地監(jiān)視 直接相鄰節(jié)點1 (2720)的意圖。在這一監(jiān)視關(guān)系中,加入節(jié)點2710可同意監(jiān) 視某一節(jié)點標識符范圍。在某些情況下,范圍可包括直接相鄰節(jié)點2720的標 識符和直接相鄰節(jié)點2730的標識符之間的標識符。盡管未在圖27中示出,但 在某些實施例中,監(jiān)視指示2712和id空間所有權(quán)指示可被組合在單個消息中。
方法2800包括第一所選直接相鄰節(jié)點從加入節(jié)點接收指示加入節(jié)點要獲 得加入節(jié)點和第一所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán) 的意圖的指示的動作(動作2820)。例如,直接相鄰節(jié)點l (2720)可從加入 節(jié)點2710接收指示加入節(jié)點2710要獲得加入節(jié)點和節(jié)點2720之間的id空間 的一部分的id空間所有權(quán)的意圖的指示(例如,id空間所有權(quán)指示2711)。
方法2800包括第一所選直接相鄰節(jié)點從加入節(jié)點接收加入節(jié)點要監(jiān)視所 選直接相鄰節(jié)點的意圖的指示的動作(動作2825)。例如,直接相鄰節(jié)點1(2720) 可從加入節(jié)點2710接收加入節(jié)點要監(jiān)視直接相鄰節(jié)點2720的意圖的指示(例 如,監(jiān)視指示2712)。
方法2800包括第一所選直接相鄰節(jié)點向加入節(jié)點發(fā)送指示接受加入節(jié)點 要獲得加入節(jié)點和第一所選直接相鄰節(jié)點之間的id空間的一部分的id空間所 有權(quán)的意圖的指示的動作(動作2830)。例如,直接相鄰節(jié)點l (2720)可發(fā) 送指示接受加入節(jié)點要獲得對加入節(jié)點2710和直接相鄰節(jié)點2720之間的id 空間的一部分的id空間所有權(quán)的意圖的id空間所有權(quán)接受2773 (例如,id空 間所有權(quán)接受2773)。
方法2800包括第一所選直接相鄰節(jié)點向加入節(jié)點發(fā)送指示接受加入節(jié)點 要監(jiān)視所選直接相鄰節(jié)點的意圖的第二指示的動作(動作2831)。例如,直接 相鄰節(jié)點1 (2720)可發(fā)送指示接受加入節(jié)點2710要監(jiān)視所選直接相鄰節(jié)點 2720的意圖的監(jiān)視接受2783。
方法2800包括第一所選直接相鄰節(jié)點向加入節(jié)點發(fā)送指示第一所選直接相鄰節(jié)點要監(jiān)視加入的意圖的第三指示的動作(動作2832)。例如,直接相鄰
節(jié)點l (2720)可向加入節(jié)點2710發(fā)送指示第一所選直接相鄰節(jié)點2720要監(jiān) 視加入節(jié)點2710的意圖的監(jiān)視指示2793。在某些實施例中,第一、第二和第 三指示可以被組合在單個指示中。另外地或另選地,第一、第二和第三指示的 任意組合可被組合在單個組合中(例如,第一和第三或第二和第三)。
方法2800包括加入節(jié)點從所選直接相鄰節(jié)點接受指示接受加入節(jié)點要獲 得加入節(jié)點和所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意 圖的第一指示的動作(動作2835)。例如,加入節(jié)點2710可從直接相鄰節(jié)點 1 (2720)接收指示接受加入節(jié)點要獲得加入節(jié)點2710和直接相鄰節(jié)點2720 之間的id空間的一部分的id空間所有權(quán)的意圖的id空間所有權(quán)接受2773。
方法2800包括加入節(jié)點從所選直接相鄰節(jié)點接受指示接受加入節(jié)點要監(jiān) 視所選直接相鄰節(jié)點的意圖的第二指示的動作(動作2836)。例如,加入節(jié)點 2710可從所選直接相鄰節(jié)點2720接收指示接受加入節(jié)點要監(jiān)視所選直接相鄰 節(jié)點2720的意圖的監(jiān)視接受2783。
方法2800包括加入節(jié)點從所選直接相鄰節(jié)點接收指示第一所選直接相鄰 節(jié)點要監(jiān)視加入節(jié)點的意圖的第三指示的動作(動作2837)。例如,加入節(jié)點 2710可從所選直接相鄰節(jié)點2710接收指示所選直接相鄰節(jié)點要監(jiān)視加入節(jié)點 2710的意圖的監(jiān)視指示2793。在某些情況中,第一、第二和第三指示可以被 組合在單個指示中。另外地或另選地,第一、第二和第三指示的任意組合可被 組合在單個組合中。
在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié)點3005從所選直接相鄰 節(jié)點3010接收指示接受加入節(jié)點要獲得對加入節(jié)點和所選直接相鄰節(jié)點之間 的id空間的一部分的id空間所有權(quán)的意圖并指示所選直接相鄰節(jié)點3010要監(jiān) 視加入節(jié)點3005的意圖的指示的動作包括從所選直接相鄰節(jié)點3010接收第一 令牌傳輸3032的動作,該第一令牌傳輸包括加入節(jié)點對節(jié)點環(huán)中在加入節(jié) 點3005和所選直接相鄰節(jié)點3010之間的未占用節(jié)點標識符的所有權(quán)范圍;第 二生存時間持續(xù)時間值3032,其指示所選直接相鄰節(jié)點能將與加入節(jié)點3005 的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及指示所選直接相鄰節(jié)點3010監(jiān)視加 入節(jié)點的第一建立授權(quán)。方法2800包括加入節(jié)點指示接受所選直接相鄰節(jié)點要監(jiān)視加入節(jié)點的意
圖的動作(動作2840)。例如,加入節(jié)點2710可在監(jiān)視協(xié)定2714中指示接受 第一所選直接相鄰節(jié)點1 (2720)要監(jiān)視加入節(jié)點2710的意圖。在某些實施例 中,諸如在狀態(tài)圖3000中,加入節(jié)點3005指示接受所選直接相鄰節(jié)點3010 要監(jiān)視加入節(jié)點3005的意圖的動作包括向所選直接相鄰節(jié)點3010發(fā)送確認所 選直接相鄰節(jié)點要監(jiān)視加入節(jié)點3005的意圖的確認消息3033的動作。
再次參考圖27和28,方法2800包括第一所選直接相鄰節(jié)點從加入節(jié)點 2710接收指示接受第一所選直接相鄰節(jié)點要監(jiān)視加入節(jié)點2710的意圖的指示 的動作(動作2845)。例如,直接相鄰節(jié)點2720可從加入節(jié)點2710接收同意 參與與直接相鄰節(jié)點2720的單向監(jiān)視關(guān)系的協(xié)定(例如,監(jiān)視關(guān)系協(xié)定2714)。
在某些實施例中,所選直接相鄰節(jié)點2720可另外地或另選地執(zhí)行向第二 所選直接相鄰節(jié)點指示第一節(jié)點要終止與該第二所選直接相鄰節(jié)點的任何監(jiān) 視關(guān)系的意圖、從第二所選直接相鄰節(jié)點接收指示第二節(jié)點要終止與第一所選 直接相鄰節(jié)點的任何監(jiān)視關(guān)系的指示、以及確認第二節(jié)點要終止的意圖的動 作。例如,直接相鄰節(jié)點1 (2720)可向直接相鄰節(jié)點2 (2730)指示節(jié)點1 要終止與節(jié)點2 (2730)的任何監(jiān)視關(guān)系的意圖。直接相鄰節(jié)點1 (2720)還 可從節(jié)點2 (2730)接收指示節(jié)點2要終止與節(jié)點1的任何監(jiān)視關(guān)系的意圖的 指示。直接相鄰節(jié)點l (2720)還可確認節(jié)點2的終止意圖。
在某些情況下,諸如在狀態(tài)圖3000中,直接相鄰節(jié)點3 (3010)可被配 置成在該狀態(tài)圖的步驟5 (3034)中向直接相鄰節(jié)點5 (3015)指示節(jié)點3要 終止與節(jié)點5 (3015)的任何監(jiān)視關(guān)系的意圖。直接相鄰節(jié)點3 (3010)還可 在該狀態(tài)圖的步驟6 (3035)中從節(jié)點5 (3015)接收指示節(jié)點5要終止與節(jié) 點3的任何監(jiān)視關(guān)系的意圖的指示。這在某些實施例中也可用于確認3034。直 接相鄰節(jié)點3 (3010)還可在該狀態(tài)圖的步驟7 (3036)中確認節(jié)點5的終止 意圖。應當注意,狀態(tài)圖3000的步驟(1-8)可串行或并行地發(fā)生。由此,在 某些實施例中,例如標為(5)的所有步驟可同時發(fā)生,而其他步驟可串行發(fā) 生。串行或并行執(zhí)行的步驟的任意組合是可能的。
在某些實施例中,方法2800還包括以下可任選動作從加入節(jié)點接收介 紹消息,該介紹消息包括所指示的為加入節(jié)點所擁有的節(jié)點標識符期望的所有權(quán)范圍;以及向加入節(jié)點發(fā)送確認消息,該確認消息包括加入節(jié)點所標識的節(jié) 點標識符范圍與所選直接相鄰節(jié)點的節(jié)點標識符范圍相一致的指示。在某些情 況下,節(jié)點標識符范圍可能不被包括在介紹消息或確認消息的任一個中。取而 代之的是,節(jié)點標識符范圍可在發(fā)送或接收消息的節(jié)點接收或發(fā)送時計算。
方法2800包括選自直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點的另一直
接相鄰節(jié)點向加入節(jié)點指示對于加入節(jié)點和第一所選直接相鄰節(jié)點之間的id 空間的一部分的id空間所有權(quán)的動作(動作2850)。例如,選自直接相鄰節(jié) 點1 (2720)和直接相鄰節(jié)點2 (2730)的直接相鄰節(jié)點2 (2730)可向加入節(jié) 點2710指示對加入節(jié)點2710和直接相鄰節(jié)點2730之間的id空間的一部分的 id空間所有權(quán)。
方法2800包括該另一直接相鄰節(jié)點指示該另一直接相鄰節(jié)點要監(jiān)視加入 節(jié)點的意圖的動作(動作2851)。例如,直接相鄰節(jié)點2 (2730)可指示節(jié)點 2要監(jiān)視加入節(jié)點2710的意圖(2794)。
方法2800包括加入節(jié)點從該另一直接相鄰節(jié)點接收指示對加入節(jié)點和該 另一直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的指示的動作(動 作2855)。例如,加入節(jié)點2710可從直接相鄰節(jié)點2 (2730)接收指示對加 入節(jié)點2710和直接相鄰節(jié)點2730之間的id空間的一部分的id空間所有權(quán)的 id空間所有權(quán)指示2784。
方法2800包括加入節(jié)點從該另一直接相鄰節(jié)點接收指示該另一直接相鄰 節(jié)點要監(jiān)視加入節(jié)點的意圖的指示的動作(動作2856)。例如,加入節(jié)點2710 可從該另一直接相鄰節(jié)點2730接收指示該另一直接相鄰節(jié)點要監(jiān)視加入節(jié)點 2710的意圖的監(jiān)視指示2794。
在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié)點3005從另一直接相鄰 節(jié)點3015接收指示對加入節(jié)點3005和另一直接相鄰節(jié)點3015之間的id空間 的一部分的id空間所有權(quán)的指示以及另一直接相鄰節(jié)點3015指示該另一直接 相鄰節(jié)點要監(jiān)視加入節(jié)點的意圖的動作包括接收第三生存時間持續(xù)時間值 3037的動作,該第三生存時間持續(xù)時間值指示另一直接相鄰節(jié)點3015能將與 加入節(jié)點3005的監(jiān)視關(guān)系認為是活動的持續(xù)時間。在某些實施例中,加入節(jié) 點可在步驟6中從另一直接相鄰節(jié)點3015接收第二令牌傳輸3037,該第二令牌傳輸包括加入節(jié)點對加入節(jié)點3005和另一直接相鄰節(jié)點3015之間的未占用
節(jié)點標識符的所有權(quán)范圍。在其他情況下,所有權(quán)范圍可由加入節(jié)點和另一直 接相鄰節(jié)點中的任一個或兩者來計算。
再次參考圖27和28,方法2800包括加入節(jié)點向另一直接相鄰節(jié)點指示 加入節(jié)點要建立對加入節(jié)點和另一直接相鄰節(jié)點之間的id空間的一部分的id 空間所有權(quán)的意圖的動作(動作2860)。例如,加入節(jié)點2710可向直接相鄰 節(jié)點2 (2730)指示(例如,在id空間所有權(quán)指示2721中)加入節(jié)點2710要 建立對加入節(jié)點2710和直接相鄰節(jié)點2730之間的id空間的一部分的id空間 所有權(quán)的意圖。
在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié)點3005向另一直接相鄰 節(jié)點3015指示加入節(jié)點要建立對加入節(jié)點3005和另一直接相鄰節(jié)點3015之 間的id空間的一部分的id空間所有權(quán)的意圖的動作包括發(fā)送建立加入節(jié)點 3005和另一直接相鄰節(jié)點3015之間的第二所有權(quán)范圍的建立請求(步驟7中 的3038)的動作,該建立請求3038包括第四生存時間持續(xù)時間3038,該第四 生存時間持續(xù)時間指示加入節(jié)點3005能將與另一直接相鄰節(jié)點3015的監(jiān)視關(guān) 系認為是活動的持續(xù)時間;以及發(fā)送指示加入節(jié)點監(jiān)視另一直接相鄰節(jié)點3015 的第三建立授權(quán)。在某些實施例中,建立請求3038還可表示加入節(jié)點3005和 另一直接相鄰節(jié)點3015之間的第二所有權(quán)范圍的指示。在其他情況下,如上 所述,該范圍可由節(jié)點環(huán)2705上的任意直接相鄰節(jié)點對來計算。
方法2800包括加入節(jié)點發(fā)起監(jiān)視另一直接相鄰節(jié)點的意圖的動作(動作 2865)。例如,加入節(jié)點2710可發(fā)起(例如,經(jīng)由監(jiān)視指示2722)監(jiān)視直接 相鄰節(jié)點2 (2730)的意圖。在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié) 點3005向另一直接相鄰節(jié)點3015指示加入節(jié)點要建立對加入節(jié)點3005和另 一直接相鄰節(jié)點3015之間的id空間的一部分的id空間所有權(quán)的意圖的動作包 括發(fā)送建立加入節(jié)點3005和另一直接相鄰節(jié)點3015之間的第二所有權(quán)范圍的 建立請求3038的動作,該建立請求3038包括加入節(jié)點和另一直接相鄰節(jié)點之 間的第二所有權(quán)范圍;第四生存時間持續(xù)時間3038,該第四生存時間持續(xù)時間 指示加入節(jié)點3038能將與另一直接相鄰節(jié)點3015的監(jiān)視關(guān)系認為是活動的持 續(xù)時間;以及指示加入節(jié)點監(jiān)視另一直接相鄰節(jié)點的第三建立授權(quán)3038。
89方法2800包括另一直接相鄰節(jié)點接收加入節(jié)點要建立對加入節(jié)點和第一 所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的指示的動
作(動作2870)。例如,直接相鄰節(jié)點2 (2730)可接收指示加入節(jié)點要建立 對加入節(jié)點2710和直接相鄰節(jié)點2730之間的id空間的一部分的id空間所有 權(quán)的意圖的id空間所有權(quán)指示2721。
方法2800包括另一直接相鄰節(jié)點接收加入節(jié)點要監(jiān)視第一所選直接相鄰 節(jié)點的意圖的指示的動作(動作2875)。例如,直接相鄰節(jié)點2 (2730)可接 收指示加入節(jié)點要監(jiān)視直接相鄰節(jié)點2370的意圖的指示2722。
方法2800包括該另一直接相鄰節(jié)點向加入節(jié)點指示該另一節(jié)點要監(jiān)視加 入節(jié)點的意圖的動作(動作2880)。例如,直接相鄰節(jié)點2 (2730)可向加入 節(jié)點2710指示(例如,經(jīng)由監(jiān)視指示2794)該直接相鄰節(jié)點要監(jiān)視加入節(jié)點 2710的意圖。
在某些情況中,直接相鄰節(jié)點2 (2730)可另外地或另選地執(zhí)行從第二所 選直接相鄰節(jié)點接收指示第二節(jié)點要終止與第一所選直接相鄰節(jié)點的任何監(jiān) 視關(guān)系的意圖的指示、向第二所選直接相鄰節(jié)點指示第一節(jié)點要終止與第二所 選直接相鄰節(jié)點的任何監(jiān)視關(guān)系的意圖、以及接收確認第一節(jié)點的終止意圖的 確認的動作。該另一直接相鄰節(jié)點還可確認來自第二所選直接相鄰節(jié)點的指 示。例如,直接相鄰節(jié)點2 (2730)可從直接相鄰節(jié)點1 (2720)接收指示節(jié) 點l要終止與節(jié)點2的任何監(jiān)視關(guān)系的意圖的指示。節(jié)點2 (2730)還可接收 確認節(jié)點2的終止意圖的確認(狀態(tài)圖3000中的3036)。節(jié)點2 (2730)還 可確認來自節(jié)點1的指示(2720)。
方法2800包括加入節(jié)點從該另一直接相鄰節(jié)點接收指示該另一直接相鄰 節(jié)點要監(jiān)視加入節(jié)點的意圖的指示的動作(動作2885)。例如,加入節(jié)點2710 可從直接相鄰節(jié)點2(2730)接收指示該另一直接相鄰節(jié)點要監(jiān)視加入節(jié)點2710 的意圖的監(jiān)視指示2794。在某些實施例中,諸如在狀態(tài)圖3000中,加入節(jié)點 從另一直接相鄰節(jié)點接收指示該另一直接相鄰節(jié)點要監(jiān)視加入節(jié)點的意圖的 指示的動作包括接收對建立請求的第四建立授權(quán)(例如,步驟8中的3039)的 動作,該第四建立授權(quán)指示另一相鄰節(jié)點3015監(jiān)視加入節(jié)點3005。
此外,加入節(jié)點2710可從環(huán)上節(jié)點的至少一個(例如,直接相鄰節(jié)點1(2720))接收否定確認(NAK)消息,其中NAK消息包括NAK發(fā)送者的 環(huán)視圖的指示。使用NAK發(fā)送者的鄰域視圖,加入節(jié)點2710可以基于NAK 發(fā)送者的環(huán)視圖來更新其鄰域視圖。
圖29示出了用于在離開節(jié)點離開節(jié)點環(huán)時維護環(huán)一致性的方法2900的流 程圖。方法2900現(xiàn)在將頻繁地參考環(huán)境2700的組件和數(shù)據(jù)以及圖31的狀態(tài) 圖3100來描述。
方法2900包括第一所選直接相鄰節(jié)點接收離開節(jié)點離開節(jié)點環(huán)的動作的 指示的動作(動作2910)。例如,直接相鄰節(jié)點3 (3110)可從環(huán)上的任一節(jié) 點(例如,從離開節(jié)點4 (3105))接收指示離開節(jié)點3105離開節(jié)點環(huán)的動作 的指示。在某些情況下,在接收到指示時,離開節(jié)點3105可能已經(jīng)離開了節(jié) 點環(huán)?;蛘撸x開節(jié)點3105可能正在離開的過程中或正在計劃離開節(jié)點環(huán)。 在某些實施例中,第一所選直接相鄰節(jié)點3110接收離開節(jié)點3105正在離開節(jié) 點環(huán)的指示的動作包括第一所選直接相鄰節(jié)點3110從離開節(jié)點3105接收離開 消息3121 (狀態(tài)圖3100中的步驟1),該離開消息可包括所指示的為離開節(jié) 點3105所擁有的節(jié)點標識符的所有權(quán)范圍。在其他實施例中,直接相鄰節(jié)點 3110可從節(jié)點環(huán)之外的節(jié)點,諸如從低層總線和/或網(wǎng)絡接收指示(例如,離 開指示3121)。
方法2900包括第一所選直接相鄰節(jié)點向第二所選直接相鄰節(jié)點發(fā)送指示 要承擔離開節(jié)點對離開節(jié)點和第一所選直接相鄰節(jié)點之間的id空間的一部分 的id空間所有權(quán)的意圖的指示的動作(動作2920)。例如,直接相鄰節(jié)點3 (3110)可向直接相鄰節(jié)點5(3115)發(fā)送指示要承擔離開節(jié)點對離開節(jié)點3105 和直接相鄰節(jié)點3110之間的id空間的一部分的id空間所有權(quán)的意圖的指示 (例如,建立和TTL3122)。
方法2900包括第一所選直接相鄰節(jié)點向第二所選直接相鄰節(jié)點發(fā)送指示 第一所選直接相鄰節(jié)點和第二所選直接相鄰節(jié)點之間的至少單向監(jiān)視關(guān)系的 建立的指示的動作(動作2925)。例如,直接相鄰節(jié)點3 (3110)可向直接相 鄰節(jié)點5 (3115)發(fā)送指示直接相鄰節(jié)點3 (3110)和直接相鄰節(jié)點5 (3115) 之間的至少單向監(jiān)視關(guān)系的建立的指示(例如,建立和TTL3122)。
在某些實施例中,諸如在狀態(tài)圖3100中,第一所選直接相鄰節(jié)點向第二所選直接相鄰節(jié)點發(fā)送指示要承擔離開節(jié)點對離開節(jié)點和第一所選直接相鄰 節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的指示的動作包括第一所 選直接相鄰節(jié)點3110向第二所選直接相鄰節(jié)點3115發(fā)送建立第一所選直接相
鄰節(jié)點3110和第二所選直接相鄰節(jié)點3115之間的所有權(quán)范圍的第一建立請求 3122的動作(例如,在狀態(tài)圖3100的步驟2中),該第一建立請求包括第一 生存時間持續(xù)時間3122,該第一生存時間持續(xù)時間指示第一所選直接相鄰節(jié)點 3110能將與第二所選直接相鄰節(jié)點3115的監(jiān)視關(guān)系認為是活動的持續(xù)時間; 以及第一相鄰節(jié)點3110接收對第一建立請求3122的第一建立授權(quán)3123的動 作(例如,在狀態(tài)圖3100的步驟3中),該第一建立授權(quán)3123指示第二相鄰 節(jié)點3115監(jiān)視第一所選直接相鄰節(jié)點3110。
方法2900包括第一所選直接相鄰節(jié)點從第二所選直接相鄰節(jié)點接收指示 接受第一節(jié)點要承擔對離開節(jié)點之間的id空間的一部分的id空間所有權(quán)的意 圖的指示的動作(動作2930)。例如,直接相鄰節(jié)點3 (3110)可從直接相鄰 節(jié)點5 (3115)接收指示接受直接相鄰節(jié)點5要承擔對離開節(jié)點3105和第一所 選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的指示(例如, 建立和TTL3124)。
方法2900包括第一所選直接相鄰節(jié)點從第二所選直接相鄰節(jié)點接收指示 第二所選直接相鄰節(jié)點和第一所選直接相鄰節(jié)點之間的單向監(jiān)視關(guān)系的建立 的指示的動作(動作2935)。例如,直接相鄰節(jié)點3110指示直接相鄰節(jié)點3115 和直接相鄰節(jié)點3110之間的單向監(jiān)視關(guān)系的建立。
在某些實施例中,諸如在狀態(tài)圖3100中,其中第一所選直接相鄰節(jié)點從 第二所選直接相鄰節(jié)點接收指示接受第一節(jié)點要承擔對離開節(jié)點和第一所選 直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖、并指示第二所 選直接相鄰節(jié)點和第一所選直接相鄰節(jié)點之間的單向監(jiān)視關(guān)系的建立的指示 的動作包括第一相鄰節(jié)點3110從第二相鄰節(jié)點3115接收建立第一相鄰節(jié)點 3110和第二相鄰節(jié)點3115之間的所有權(quán)范圍的第二建立請求(例如,在狀態(tài) 圖3100的步驟2中)的動作,該第二建立請求包括第二生存時間持續(xù)時間之 內(nèi)3124,該第二生存時間持續(xù)時間指示第二相鄰節(jié)點3115能將與第一相鄰節(jié) 點3110的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及第一相鄰節(jié)點3110發(fā)送對第二建立請求的第二建立授權(quán)3123 (例如,在狀態(tài)圖3100的步驟3中)的動作, 該第二建立授權(quán)指示第一相鄰節(jié)點3110監(jiān)視第二相鄰節(jié)點3115。
數(shù)據(jù)一致性
圖32示出了其中可利用本發(fā)明的原理的環(huán)體系結(jié)構(gòu)3200。環(huán)體系結(jié)構(gòu) 3200包括節(jié)點環(huán)3205。在某些實施例中,節(jié)點環(huán)3205可類似于如上所述的圖 23C中的環(huán)2350和/或圖27中的環(huán)2705或與其相同。用于維護數(shù)據(jù)一致性的 方法在下文參考圖32的節(jié)點和數(shù)據(jù)項來更詳細地描述。
圖33示出了用于在聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的副本集內(nèi)執(zhí)行數(shù)據(jù)訪問事務的方法 3300的流程圖。方法3300現(xiàn)在將頻繁地參考環(huán)境3200的組件和數(shù)據(jù)來描述。
在某些實施例中,方法3300包括從節(jié)點的副本集中的多個節(jié)點之中選擇 一主節(jié)點的動作(動作3310)。例如,主節(jié)點3211可選自節(jié)點的副本集3210 中的多個節(jié)點。為幫助維護數(shù)據(jù)一致性,可創(chuàng)建副本集以復制或重復數(shù)據(jù)的一 個或多個部分。由此,當節(jié)點離開環(huán)(或者由于故障或者通過平滑離開)時, 其他節(jié)點還將包含離開節(jié)點所持有的信息。在某些情況下,副本集中的每一節(jié) 點可包括1)副本集的身份,2)配置序列號(CSN) , 3)副本集的成員資格 以及主節(jié)點是誰,4)最后使用的序列號(LSN),以及5)存儲在副本集中的 數(shù)據(jù)。1-3中表示的狀態(tài)信息可被稱為副本集的"配置狀態(tài)",而4-5中表示 的狀態(tài)信息可被稱為副本集中"存儲的數(shù)據(jù)"。
應當注意,以上提供的關(guān)于路由一致性和環(huán)一致性的原理、描述和解釋適 用于領(lǐng)導者選擇(即,選擇主節(jié)點)。例如,維護環(huán)內(nèi)的id空間所有權(quán)的原理 可應用于此處討論的主和副節(jié)點。 一般而言,主和副節(jié)點的特性與在以上各節(jié) 中描述的任何或所有其他節(jié)點相一致。
在某些實施例中,副本集3210可用擔當其主節(jié)點(主節(jié)點3211)的單個 節(jié)點來創(chuàng)建。主節(jié)點3211可將其LSN和CSN初始化為0并初始化副本成員 資格,該成員資格僅包括其自身作為成員。副本集3210然后可通過使用各種 重配置算法向該副本集添加節(jié)點來擴展為所需大小,如將在以下更詳細描述 的。在某些情況下,副本集中不是主節(jié)點的任一節(jié)點被稱為副節(jié)點??蛇f增 LSN以創(chuàng)建寫和重配置操作中的全序。CSN可指向副本集中的最后一次配置 改變。由此,在這一情況中,CSN共享LSN序列。LSN序列中的間隙通常指示數(shù)據(jù)丟失,且應被避免。
方法3300包括確定已從節(jié)點的副本集中的多個節(jié)點之中選擇了主節(jié)點的 動作,該主節(jié)點被配置成接受和處理客戶機數(shù)據(jù)訪問請求,該副本集包括所選
主節(jié)點和一個或多個副節(jié)點(動作3320)。例如,主節(jié)點3211可確定它已從 節(jié)點的副本集3210中的多個節(jié)點之中選出,其中主節(jié)點3211被配置成接受和 處理客戶機數(shù)據(jù)訪問請求3215,并且其中副本集3210包括主節(jié)點3211和副節(jié) 點3212。
在某些情況下,可能期望增加多個副節(jié)點以增大容錯(即,更多副節(jié)點存 儲相同的數(shù)據(jù))。要添加的副節(jié)點的數(shù)量可基于最大可容許同時故障數(shù)量來確 定。由此,如果最大可容許同時故障數(shù)量是例如3,則期望至少有4個副節(jié)點, 使得即使在三個其他節(jié)點發(fā)生故障之后至少一個節(jié)點仍是該副本集的一部分。 在某些情況下,要成為副本集的成員的副節(jié)點的數(shù)量對應于主節(jié)點的鄰域中的 成員的數(shù)量。
在某些情況下,該最大可容許同時故障數(shù)量可以與副節(jié)點閾值數(shù)量相關(guān)。 這一閾值數(shù)量的副節(jié)點可被稱為選出成員(quorum)。當數(shù)據(jù)訪問請求3215 是數(shù)據(jù)寫請求時,閾值數(shù)量的副節(jié)點可被稱為寫選出成員。類似地,當數(shù)據(jù)訪 問請求3215是數(shù)據(jù)讀請求時,閾值數(shù)量的副節(jié)點可被稱為讀選出成員。由此, 讀和寫選出成員可表示為給定數(shù)量的可容許同時故障提供完整的容錯所必需 的最小閾值數(shù)量的節(jié)點。
方法3300包括主節(jié)點接收一個或多個客戶機數(shù)據(jù)訪問請求的動作,每一 數(shù)據(jù)訪問請求指示要在副本集中的至少一個副節(jié)點上訪問的數(shù)據(jù)的至少一部 分(動作3330)。例如,主節(jié)點3211可從客戶機3250接收客戶機數(shù)據(jù)訪問請 求3215,其中請求3215指示要在副本集3210中的副節(jié)點3212上訪問的數(shù)據(jù) 的至少一部分。數(shù)據(jù)訪問請求3215可以例如包括要被寫入副本集中的至少一 個節(jié)點的文件。另外地或另選地,數(shù)據(jù)訪問請求3215可包括要從副本集中的 至少一個節(jié)點讀取和檢索的文件的名稱。主節(jié)點3211管理傳入數(shù)據(jù)請求,并 向副節(jié)點3212發(fā)送包括對應于副本集的配置狀態(tài)信息的適當信息。該數(shù)據(jù)部 分還可包括關(guān)于副本集本身的一組控制信息,包括節(jié)點的數(shù)據(jù)序列號(DSN)、 LSN、 CSN、主節(jié)點身份或副節(jié)點身份。
94方法3300包括主節(jié)點以接收到客戶機數(shù)據(jù)訪問請求的順序向改變狀態(tài)的
每一客戶機數(shù)據(jù)訪問請求分配數(shù)據(jù)序列號(DSN),該數(shù)據(jù)序列號包括副本集 中的每一節(jié)點要遵循的線性化處理順序(動作3340)。例如,主節(jié)點3211可 按照接收到請求的順序向改變狀態(tài)的每一客戶機數(shù)據(jù)訪問請求3215分配 DSN。該DSN可包括副本集3210中的每一節(jié)點要遵循的線性化處理順序。在 某些情況下,該線性化處理順序可被稱為操作序列3501,如圖35所示。在請 求不改變狀態(tài)的情況下,主節(jié)點3211可省略向客戶機數(shù)據(jù)訪問請求分配數(shù)據(jù) 序列號。
根據(jù)數(shù)據(jù)序列號(DSN 3505),操作序列3501可包括以接收的順序排列 的多個操作。例如,主節(jié)點3211可分配OP,來表示第一操作,分配0P2來表 示第二操作,并如OPn所表示地沿著該線向下。OPnw可表示最后使用的序列 號(LSN3515)。如上所述,可遞增LSN3515以創(chuàng)建寫和重配置操作中的全 序。CSN 3510可指向副本集3210中的最后一次配置改變。在某些情況下,CSN 3510可共享LSN序列。LSN序列中的間隙通常指示未遵循操作序列3501,這 通常會導致數(shù)據(jù)丟失。
方法3300包括主節(jié)點向至少一個副節(jié)點發(fā)送包括任何對應的數(shù)據(jù)序列號 的至少一個客戶機數(shù)據(jù)訪問請求的動作(動作3350)。例如,主節(jié)點3211可 向副節(jié)點3212發(fā)送包括任何分配的DSN 3216的客戶機數(shù)據(jù)訪問請求3215。 在某些情況下,客戶機數(shù)據(jù)訪問請求可被發(fā)送到諸如寫選出成員或讀選出成員 等選出成員。選出成員可用預期信息來響應,并另外地用主節(jié)點不知道的其他 數(shù)據(jù)訪問請求的指示來響應。例如,在主節(jié)點3211被選出之前副節(jié)點可能已 處理了其他事務,或者可能已經(jīng)被分配了主節(jié)點不知道的某些事務。由此,該 信息可被發(fā)送到主節(jié)點3211,其可用于更新主節(jié)點的操作序列3501。在某些 情況下,該過程僅在副本集重配置期間發(fā)生,如將在下文中更詳細解釋的。
方法3300包括主節(jié)點從至少閾值數(shù)量的副節(jié)點接收指示客戶機數(shù)據(jù)訪問 請求的接收的確認的動作(動作3360)。例如,主節(jié)點3211可從閾值數(shù)量的 副節(jié)點(例如,讀或?qū)戇x出成員)接收確認客戶機數(shù)據(jù)訪問請求3215的接收 的確認消息3220。確認3220還可指示發(fā)送消息的副節(jié)點已將客戶機數(shù)據(jù)訪問 請求3215插入到其數(shù)據(jù)訪問隊列(即,操作序列3501)中。在某些情況下,主節(jié)點3211可從副本集中的所有節(jié)點或從其選出成員接收確認消息。確認可 以另外地或另選地指示客戶機數(shù)據(jù)訪問請求的接受或拒絕。
方法3300包括主節(jié)點提交數(shù)據(jù)訪問請求的動作,該提交包括根據(jù)客戶機 數(shù)據(jù)訪問請求來訪問數(shù)據(jù)(動作3370)。例如,主節(jié)點3211可在單個階段中 提交數(shù)據(jù)訪問請求3215,其中提交包括根據(jù)客戶機數(shù)據(jù)訪問請求3215來訪問 數(shù)據(jù)。由此,在數(shù)據(jù)訪問請求是寫訪問的情況下,主節(jié)點3211可在單個階段 中提交寫請求。在單個階段中提交可以在不與每一副節(jié)點發(fā)送和接收提交査詢 的情況下完成。在單個階段中提交可被稱為未分塊(non-blocking)事務。如 上所述,由于副本集中的故障檢測是完美的,因此主節(jié)點不需要從每一副節(jié)點 發(fā)送和接收提交查詢。
在某些實施例中,主節(jié)點3211可向第二副本集發(fā)送客戶機數(shù)據(jù)訪問請求 3215。第二副本集可以在與主節(jié)點的鄰域不同的鄰域中。在某些情況下,主節(jié) 點的鄰域包括與副本集中的節(jié)點相同的節(jié)點。主節(jié)點3211可請求副本集3210 處理客戶機數(shù)據(jù)訪問請求3215的第一部分,并請求第二副本處理數(shù)據(jù)訪問請 求的第二不同部分。然而,這些實施例將使用二階段提交過程。例如,該過程 可包括從副本集3210接收對應于客戶機數(shù)據(jù)訪問請求3215的第一部分的回 復。該過程還可包括從第二副本集接收對應于數(shù)據(jù)訪問請求的第二不同部分的 回復?;貜涂杀唤M合,且基于所組合的回復,可生成最新的數(shù)據(jù)訪問響應。
在一示例性實施例中,主節(jié)點3211可如下響應客戶機數(shù)據(jù)寫請求1)主 節(jié)點3211對照應用程序一致性約束來確認請求。如果主節(jié)點3211確認違反, 則它用應用程序一致性違反的失敗狀態(tài)來響應于客戶機3250,并跳至以下步驟 (7)。 2)主節(jié)點3211向?qū)懖僮鞣峙淇赏ㄟ^原子地遞增主節(jié)點的LSN而獲得的 序列號。在該示例中,與給定寫操作相關(guān)聯(lián)的序列號被稱為其DSN。 3)主節(jié) 點3211將DSN、 CSN和要寫入的數(shù)據(jù)傳送到所有副節(jié)點,并等待副節(jié)點的寫 選出成員響應(一種變型方法可以是主節(jié)點僅將要寫入的數(shù)據(jù)發(fā)送到寫選出成 員)。
4)在聽到來自副節(jié)點的寫選出成員的確認之后,主節(jié)點3211本地地執(zhí)行 寫操作,并且這是考慮提交寫操作的點。主節(jié)點3211回過來用成功狀態(tài)向客 戶機響應,并跳至以下步驟(7)。 5)如果主節(jié)點3211無法從副節(jié)點的寫選出成員得到確認,則它啟動重配置操作以消除失敗的副節(jié)點。6)如果主節(jié)點3211 無法本地地執(zhí)行寫操作,則它啟動重配置操作以轉(zhuǎn)換到新的主節(jié)點,將其自身
從副本集3210中移除,并跳至步驟(7)。 7)主節(jié)點3211等待下一傳入客戶機 數(shù)據(jù)訪問請求。應當注意,如上所述,其他實施例是可能的,并且可包括更多 或更少的步驟。
在一示例性實施例中, 一個或多個副節(jié)點3212可按照以下方式來處理數(shù) 據(jù)寫請求l)副節(jié)點將傳入寫操作中指定的CSN與其CSN進行比較。如果指 定的CSN小于其CSN,則副節(jié)點忽略該請求并跳至以下步驟(4)。副節(jié)點3212 斷言所制定的CSN不能大于其CSN是因為這一條件暗示重配置是用不完美的 故障檢測器來完成的。2)副節(jié)點3212將傳入寫數(shù)據(jù)請求的DSN與其LSN進 行比較。如果該DSN小于其(LSN+1),則副節(jié)點3212忽略該寫數(shù)據(jù)請求。如 果該DSN大于其(LSN+1),則副節(jié)點3212緩存該數(shù)據(jù)寫請求并跳至以下步驟 (4)。否則,副節(jié)點3212原子地遞增其LSN并接受數(shù)據(jù)寫請求,且發(fā)回確認 3220。如果副節(jié)點3212由于本地故障而無法接受該請求,則它請求主節(jié)點啟 動重配置以將其作為副節(jié)點從副本集中移除。3)副節(jié)點3212檢查當前緩存的 操作并處理它們,直到其檢査了它們中的每一個,從而接受其DSN在此處描 述的副節(jié)點的LSN值的范圍內(nèi)的任何請求,由此保存了主節(jié)點建立的全序。 4)副節(jié)點3212等待來自主節(jié)點3211的下一數(shù)據(jù)訪問請求。處理動作可包括 將相關(guān)數(shù)據(jù)寫入穩(wěn)定存儲設(shè)施中。
在數(shù)據(jù)庫設(shè)置中,用于執(zhí)行寫事務的一種示例性方法如下1)對于在"提 交"之前的包括"中止"之內(nèi)的操作,主節(jié)點3211只需本地地執(zhí)行操作并跳 至以下步驟(6)。 2)對于"提交",主節(jié)點3211通過本地地準備事務來確定事 務順序。該步驟還對照數(shù)據(jù)庫一致性約束來確認事務。如果本地準備失敗,則 它用失敗狀態(tài)回過頭向客戶機3250響應,并跳至以下步驟(6)。 3)如在前一示 例中的步驟(2)-(3)中所指定地,主節(jié)點3211將帶有"提交"請求的事務轉(zhuǎn)發(fā)給 副節(jié)點3212。 4)在主節(jié)點3211從副節(jié)點的寫選出成員得到確認之后,它本地 地提交事務并向客戶機3235報告成功。5)如果主節(jié)點3211無法從副節(jié)點的 寫選出成員得到確認,則它中止本地地準備的事務并啟動重配置操作以消除失 敗的副節(jié)點。6)主節(jié)點3211等待下一傳入客戶機數(shù)據(jù)訪問請求3215。
97圖34示出了用于建立和維護聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的一致副本集的方法3400 的流程圖。方法3400現(xiàn)在將頻繁地參考環(huán)境3200的組件和數(shù)據(jù)來描述。
方法3400包括從節(jié)點環(huán)中的多個節(jié)點之中建立副本集的動作,該副本集 包括主節(jié)點和一個或多個副節(jié)點作為成員(動作3410)。例如,副本集3210 可從節(jié)點3211、 3212和節(jié)點環(huán)3205上的其他節(jié)點之中建立。副本集3210可 包括主節(jié)點3211和副節(jié)點3212作為成員。在某些情況下,副本集3210的邊 界可以與主節(jié)點的、副節(jié)點也是其成員的鄰域相同。
方法3400還包括接收指示影響副本集成員的至少一個的副本集配置事件 發(fā)生的的指示(動作3420)。例如,副本集3210中的節(jié)點3211和3212中的 任一個可接收影響主節(jié)點3211和副節(jié)點3212的至少一個的副本集配置事件發(fā) 生的指示。副本集配置事件可包括副本集內(nèi)的節(jié)點故障、節(jié)點離開副本集或節(jié) 點加入副本集。將導致重配置的影響副本集的節(jié)點的其他事件也是可能的。在 某些情況下,這一配置事件可在客戶機數(shù)據(jù)訪問請求期間發(fā)生。
方法3400包括基于所接收到的指示確定副本集要被重配置的動作,基于 副本集配置事件的發(fā)生,該重配置包括從副本集中移除現(xiàn)有副節(jié)點、向副本集 添加新的副節(jié)點、突然轉(zhuǎn)換到新的主節(jié)點以及平滑地轉(zhuǎn)換到新的主節(jié)點中的至 少一個(動作3430)。例如,基于所接收到的指示,副本集3210中的節(jié)點之 一可確定副本集3210要被重配置。取決于發(fā)生了哪一配置事件,重配置可包 括從副本集中移除現(xiàn)有副節(jié)點、向副本集添加新的副節(jié)點、突然轉(zhuǎn)換到新的主 節(jié)點或平滑地轉(zhuǎn)換到新的主節(jié)點。
用于重配置副本集以及轉(zhuǎn)換到新的主節(jié)點的示例方法和算法包括在下文 中。副本集重配置的示例一般覆蓋四種情況,包括l)突然轉(zhuǎn)換到新的主節(jié)點, 2)平滑地轉(zhuǎn)換到新的主節(jié)點,3)移除副節(jié)點,以及4)添加副節(jié)點。這四個一 般的示例中的每一個可獨立地發(fā)生,并且至少在某些實施例中,不涉及現(xiàn)有主 節(jié)點的更換。
方法3400包括根據(jù)對應于副本集配置事件的重配置來重配置副本集的動 作(動作3440)。例如,副本集3210可根據(jù)對應于副本集配置事件的重配置 來重配置。由此,在副本集配置事件是節(jié)點故障的情況下,副本集3210可通 過添加副節(jié)點、移除副節(jié)點或轉(zhuǎn)換到新的主節(jié)點來重配置。類似地,當副本集配置事件是節(jié)點加入時,副本集3210可根據(jù)以上方法的任一種來重配置。在 某些情況下,特定重配置方法可對應于特定重配置事件。該對應性可由用戶來 配置或者可以是自動的。
在某些情況下,主節(jié)點3211可基于配置狀態(tài)信息來檢測正在進行中的一 個或多個副本集重配置。如上所述,在重配置過程期間,可對副本集選擇新的
主節(jié)點。根據(jù)上述實施例,環(huán)3205中的節(jié)點可以與該新的主節(jié)點通信以確保
該新的主節(jié)點的信息相對于環(huán)上的其他節(jié)點是最新的。
在某些實施例中,可使用與以上參考圖34所描述的副本集相似或相同的 一致副本集來訪問和存儲數(shù)據(jù)。例如,副本集3210可被配置成維護一個或多 個副本集節(jié)點上的數(shù)據(jù)存儲的一部分(例如,在副節(jié)點3212上)。主節(jié)點3211 可接收客戶機數(shù)據(jù)訪問請求3215。請求3215可包括要在節(jié)點的副本集3210 內(nèi)的至少一個節(jié)點上訪問的信息的指示。主節(jié)點可或者直接處理該請求,或者 將其傳遞給副節(jié)點。在主節(jié)點3211檢測到它無法訪問所接收到的客戶機數(shù)據(jù) 訪問請求3215中所指示的信息的至少一部分的情況下,主節(jié)點3211可從副本 集中移除其自身,使得防止存儲在主節(jié)點3211上的信息響應于客戶機數(shù)據(jù)訪 問請求而被訪問。這消除了返回陳舊或過時信息的可能性,并確保響應于客戶 機數(shù)據(jù)訪問請求3215返回的任何信息是最新的。
根據(jù)某些實施例,突然轉(zhuǎn)換到新的主節(jié)點可按以下方式發(fā)生。當現(xiàn)有主節(jié) 點發(fā)生故障時,使用可靠領(lǐng)導者選擇算法按照上述方法選擇一新的主節(jié)點。在 接受任何客戶機操作之前,該新的主節(jié)點可以執(zhí)行以下配置改變來從副本集中 移除舊的主節(jié)點1)新的主節(jié)點檢査以査看其是否知道副本集狀態(tài)。如果新 的主節(jié)點沒有該知識,則它含蓄地確定副本集的所有成員都發(fā)生故障并跳至以 下步驟(9)。 2)新的主節(jié)點聯(lián)系副本集的每一節(jié)點以確定其CSN和LSN,直到 它在聯(lián)系了所有現(xiàn)有副節(jié)點方面命中一固定點。使用在該步驟中收集的信息, 新的主節(jié)點確定最早的CSN、最晚的CSN和最晚的LSN。注意,最早的CSN 和最晚的CSN在某些(或大多數(shù))情況下可以相同。當最早和最晚CSN不同 時,指示在重配置操作的中間主節(jié)點發(fā)生故障。然后,具有大于最早CSN的 CSN的任何副本當然具有最晚的數(shù)據(jù)。由此,在該步驟的最后,當最早CSN 和最晚CSN不同時,新的主節(jié)點已經(jīng)具有最晚的數(shù)據(jù)。否則,該新的主節(jié)點只有在最晚CSN之前寫入的數(shù)據(jù),并且步驟(3)中的檢查確保它也具有在最晚 CSN過去之后寫入的數(shù)據(jù)。
3) 如果最早CSN和最晚CSN相同且新的主節(jié)點無法聯(lián)系副節(jié)點的讀選出 成員,則可能有數(shù)據(jù)丟失且新的主節(jié)點跳至以下步驟(9)。在某些情況下,讀選 出成員與其寫選出成員相交是高度有利的(或甚至是必要的)。對于基于大小 的選出成員,讀選出成員是大于(n-w)的任何集合,其中n是在CSN中指定的 副本節(jié)點的數(shù)量,而w是寫選出成員。
4) 新的主節(jié)點試圖通過向副節(jié)點發(fā)送在以上步驟(2)中確定的其報告的 LSN和最晚LSN之間的操作,使得在其配置中將副節(jié)點變?yōu)殛P(guān)于數(shù)據(jù)是最新 的。最早CSN之后并直到最晚CSN的不完整的重配置操作可在該步驟中作為 縮寫的空重配置操作來發(fā)送。5)新的主節(jié)點在從具有最晚CSN的配置中移 除了故障的主節(jié)點(例如,主節(jié)點3211)和副節(jié)點(例如,副節(jié)點3212)之 后本地地構(gòu)建新的副本配置,使最晚LSN成為其LSN,并向新的配置分配通 過遞增LSN獲得的CSN。 6)新的主節(jié)點將新的副本配置傳送到所有副節(jié)點。
7)如果新的主節(jié)點響應于在以上步驟(6)中發(fā)送的重配置操作無法從所有 副節(jié)點得到成功狀態(tài)或聽到來自任何副節(jié)點的失敗狀態(tài),則新的主節(jié)點重新執(zhí) 行上述步驟(2)-(6)。 8)在聽到來自至少某些(或全部)副節(jié)點的成功狀態(tài)之后, 則新的主節(jié)點跳至以下步驟(IO)。 9)新的主節(jié)點采取執(zhí)行諸如在數(shù)據(jù)中心響 鈴、發(fā)送尋呼消息等災難恢復的步驟。在某些情況下,副本集只能使用手動干 預來還原。10)新的主節(jié)點在此時繼續(xù)進行客戶機操作的處理。在以上步驟(2) 中,當舊的主節(jié)點發(fā)生故障時,新的主節(jié)點可能發(fā)現(xiàn)正在被添加到副本集的過 程中的新的副節(jié)點。該固定點是要捕捉新的主節(jié)點認為是新配置的一部分的陳 舊的副節(jié)點集。如果消除同樣處理新的副節(jié)點的突然主節(jié)點轉(zhuǎn)換的優(yōu)化,則可 消除該固定點計算。
根據(jù)某些實施例,平滑地轉(zhuǎn)換到新的主節(jié)點可按以下方式發(fā)生。從現(xiàn)有主 節(jié)點轉(zhuǎn)換到新的主節(jié)點與向副本集添加新的副節(jié)點(將在下文中解釋)非常相 似。注意,該新的主節(jié)點可以是或不是副本集中的當前副節(jié)點。在該示例中, 潛在的新主節(jié)點遵循該算法來成為副本集的一部分1)新的主節(jié)點聯(lián)系副本 集中的一個或多個現(xiàn)有副節(jié)點以向其傳輸數(shù)據(jù),2)新的主節(jié)點同時聯(lián)系現(xiàn)有
100主節(jié)點(例如,主節(jié)點3211)以向其轉(zhuǎn)發(fā)新操作。
3)如果從新的主節(jié)點接收到的新操作的DSN大于從副節(jié)點接收到的數(shù)
據(jù),則其將新的主節(jié)點發(fā)送的新的寫操作與從副節(jié)點接收到的數(shù)據(jù)進行合并。
4)在新的主節(jié)點在以上步驟(l)中所聯(lián)系的所有副節(jié)點都報告數(shù)據(jù)傳輸完成之 后,該新的主節(jié)點聯(lián)系現(xiàn)有主節(jié)點3211以啟動配置改變來使得該新的主節(jié)點 成為副本集的當前主節(jié)點。5)在從現(xiàn)有主節(jié)點接收到作為對在步驟(4)發(fā)送的 重配置請求的響應的成功狀態(tài)之后,新的主節(jié)點承擔副本集的主節(jié)點的角色, 并且6)直到步驟(5)中的重配置請求,新的主節(jié)點將它接收到的任何客戶機操 作轉(zhuǎn)發(fā)給現(xiàn)有主節(jié)點。
根據(jù)某些實施例,移除副節(jié)點的過程可按以下方式發(fā)生。當完美的故障檢 測器(如上參考圖14和19所述的)向環(huán)節(jié)點之一 (例如,主節(jié)點3211)報告 現(xiàn)有副節(jié)點3212發(fā)生故障時或當現(xiàn)有副節(jié)點聯(lián)系其他節(jié)點之一 (例如,主節(jié) 點)以主動將其自身從副本集3210中移除時,節(jié)點之一 (例如,主節(jié)點)可 實行以下算法來從副本集中移除副節(jié)點。在該示例中,1)主節(jié)點阻斷對傳入 客戶機操作(例如,3215)的處理,并且或者緩存它們或者要求客戶機(例如, 3250)稍后重試,2)主節(jié)點通過從副本集成員資格中移除發(fā)生故障的副節(jié)點 來本地地安裝新的副本配置,并通過原子地遞增其LSN來向新的配置分配 CSN。在某些情況下,這意味著重配置操作采用與數(shù)據(jù)操作相同的序列流。3)主 節(jié)點將新配置傳送到所有副節(jié)點,以及4)在從至少某些(或全部)副節(jié)點聽 到成功狀態(tài)之后,主節(jié)點繼續(xù)進行客戶機操作的處理。
在這一重配置過程中,被重配置的副節(jié)點可如下行動1)副節(jié)點將重配 置操作的CSN與其LSN進行比較。如果CSN小于(LSN+1),則副節(jié)點向主節(jié) 點發(fā)送失敗狀態(tài)并跳至以下步驟(3)。如果CSN等于(LSN+1),則副節(jié)點原子地 遞增其LSN并接受重新配置操作,且發(fā)回成功狀態(tài)。否則,副節(jié)點緩存重配 置操作,并跳至以下步驟(3), 2)副節(jié)點檢查當前緩存的操作并處理它們,直 到它檢査了它們中的至少某些(或全部),以及3)副節(jié)點等待來自主節(jié)點的 下一操作請求。
故障檢測器的完美性確保舊的和新的重配置不同時存在。在某些實施例 中,總體假設(shè)是存在能用于檢測故障停止(fail-st叩)故障的完美故障檢測器。該句中對"完美"的使用捕捉了故障檢測器從不報告一節(jié)點實例變?yōu)椴豢捎茫?除非它(該節(jié)點的實例的存在)的確變得永久不可用的假設(shè)。如上所述,故障 檢測可以與上述環(huán)一致性和路由一致性特性的概念聯(lián)合起來,并且可依賴于這 些概念。由于舊和新重配置不同時存在,這意味著副本集狀態(tài)不存在于副本集 成員之外,因為副本集節(jié)點僅在其發(fā)生故障或主動移除自身之后才從副本集中 移除。特性在標識副本集的所有成員都發(fā)生故障的條件時是有用的,因為新選 出的主節(jié)點將意識到它在該條件下無需訪問副本集狀態(tài)。
在該示例中,由于主節(jié)點阻斷對傳入操作的處理直到重配置操作完成,因 此其允許操作者忽略變得不可見的重配置操作。當啟動重配置操作的主節(jié)點在 重配置過程本身中發(fā)生故障并且發(fā)生故障的主節(jié)點曾經(jīng)聯(lián)系的副節(jié)點隨后也 發(fā)生故障時,重配置操作可變得不可見。該特性允許向在副本集的現(xiàn)有副節(jié)點 中尋找單個CSN的新選出的主節(jié)點確保要么其找到的CSN實際上從觀察整個
系統(tǒng)的諭示觀點來看是最晚的CSN,要么在曾經(jīng)變得不可見的稍后的重配置操
作之后不啟動任何數(shù)據(jù)操作。由此,新選出的主節(jié)點可安全地基于它在現(xiàn)有副
節(jié)點中找到的最晚CSN來確定數(shù)據(jù)丟失,如在關(guān)于突然轉(zhuǎn)換到新的主節(jié)點的 示例中所解釋的。
假定重配置操作可以采用與數(shù)據(jù)操作相同的序列,在重配置操作的最后, 至少某些(或全部)副節(jié)點變?yōu)橄鄬τ跀?shù)據(jù)是最新的(意味著它們都具有相同 的LSN)。在存在寫選出成員時,該特性使得新選出的主節(jié)點能夠安全地基于 它在現(xiàn)有副節(jié)點中找到的最晚CSN來確定數(shù)據(jù)丟失。
根據(jù)某些實施例,添加副節(jié)點的過程可按以下方式發(fā)生。在該示例中,新 的副節(jié)點遵循以下算法來成為副本集的一部分1)副節(jié)點聯(lián)系副本集中的一 個或多個現(xiàn)有副節(jié)點以向其傳輸數(shù)據(jù),2)副節(jié)點同時聯(lián)系主節(jié)點(例如,3211) 以向其轉(zhuǎn)發(fā)新操作,3)如果從主節(jié)點接受到的新操作的DSN大于從副節(jié)點接 受到的數(shù)據(jù),則副節(jié)點將主節(jié)點發(fā)送的新的寫操作與從副節(jié)點接受到的數(shù)據(jù)進 行合并,以及4)在其在以上步驟(l)中聯(lián)系的至少某些(或全部)副節(jié)點報告 數(shù)據(jù)傳輸完成之后,副節(jié)點聯(lián)系主節(jié)點以啟動配置改變來將其自身添加到副本 集。
繼續(xù)該示例,主節(jié)點所遵循的向副本集添加新的副節(jié)點的算法如下1)響應于來自新的副節(jié)點的第一請求,主節(jié)點開始向即將的新的副節(jié)點轉(zhuǎn)發(fā)新操 作,盡管它還不是副本集的一部分,以及2)響應于來自新的副節(jié)點的后續(xù)重 配置請求,主節(jié)點可使用實際上與上述在"移除副節(jié)點"示例中所述的相同的 步驟來啟動重配置操作,不同之處在于新配置添加新的副節(jié)點而非移除現(xiàn)有副 節(jié)點。
圖36示出了用于從聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)的副本集訪問數(shù)據(jù)的環(huán)境3600。環(huán)境 3600包括數(shù)據(jù)訪問系統(tǒng)3610,其包括多個模塊。 一般而言,以下描述的每一 模塊都存在于環(huán)實現(xiàn)(例如,節(jié)點環(huán)3205)中,并且可被實現(xiàn)為跨構(gòu)成鄰域和 /或副本集的節(jié)點、更一般地跨構(gòu)成節(jié)點環(huán)排列的節(jié)點以及試圖成為這一節(jié)點環(huán) 排列中的活動節(jié)點的設(shè)備的分布式算法。該系統(tǒng)包括被配置成建立環(huán)上的多個 節(jié)點的鄰域的鄰域建立模塊3620,該鄰域至少包括直接相鄰前導者節(jié)點和直接 相鄰后繼者節(jié)點。節(jié)點環(huán)3205可包括加入節(jié)點3606,其可以正試圖在直接相 鄰節(jié)點1 (3608)和直接相鄰節(jié)點2 (3609)之間加入環(huán)。在某些實施例中, 加入節(jié)點3606可按類似于圖23C中所描述的方式加入節(jié)點環(huán)3605,其中加入 節(jié)點基于節(jié)點2301和1362之間的高速緩存的協(xié)定來確定標識符范圍。
該系統(tǒng)還包括被配置成確定所建立的鄰域外的加入節(jié)點指示了加入節(jié)點 環(huán)中所建立的鄰域的意圖的意圖確定模塊3625。意圖確定模塊3625可以從鄰 域建立模塊3620接收指示節(jié)點鄰域的建立的鄰域指示3621。該鄰域可包括直 接相鄰節(jié)點l (3608)、加入節(jié)點3606和直接相鄰節(jié)點2 (3609)。意圖確定 模塊3625可向一致性維護模塊3630發(fā)送加入節(jié)點的加入意圖3626。
一致性維護模塊3630可被配置成維護所建立的鄰域內(nèi)的一致性,使得多 個節(jié)點中的每一節(jié)點取得對該鄰域中的id空間的一部分的id空間所有權(quán)。如 上在標題"加入和離開節(jié)點環(huán)"中所述,鄰域內(nèi)的一致性可在加入節(jié)點3606 加入節(jié)點環(huán)3605時維護。 一致性維護模塊3630可向選擇確定模塊3635發(fā)送 一致性指示3631。應當注意,在某些實施例中,對于在環(huán)的id空間中的給定 id處一致地維護的所有狀態(tài),存在為該狀態(tài)單元形成的副本集,其主節(jié)點是在 任何給定時刻擁有該id的環(huán)節(jié)點。當id空間所有權(quán)對于節(jié)點之間的給定id( — 致地)轉(zhuǎn)移時,存儲在該擁有節(jié)點處(或由其控制)的任何服務狀態(tài)單元的相 應主度(primary-ness)也轉(zhuǎn)移。在該實施例中,id空間所有權(quán)和主度以同時的方式來轉(zhuǎn)移。
選擇確定模塊可被配置成確定多個節(jié)點中的一個節(jié)點已被選為主節(jié)點,該 主節(jié)點具有對于被配置成如主節(jié)點所指示地響應客戶機數(shù)據(jù)訪問請求的節(jié)點 副本集的責任。如上關(guān)于主節(jié)點選擇所解釋的,選擇確定模塊可確定已經(jīng)對副 本集(可包括所建立的鄰域中的所有節(jié)點)選出了主節(jié)點,并向請求接收模塊
發(fā)送哪一節(jié)點被選為主節(jié)點的指示(3636)。如上所述,這一領(lǐng)導者選擇可以 遵循如本文早先定義的環(huán)一致性和路由一致性(包括至少部分地形成完美故障 檢測器機制的監(jiān)視協(xié)定)的原理。
請求接收模塊3640可被配置成從客戶機3615接收一個或多個fe戶機數(shù)據(jù) 訪問請求,其中每一數(shù)據(jù)訪問請求3641指示要在副本集中的至少一個節(jié)點上 訪問的數(shù)據(jù)的至少一部分。請求接收模塊3640還可接收主節(jié)點指示3636。主 節(jié)點指示3636和數(shù)據(jù)訪問請求3641可以對數(shù)據(jù)訪問模塊3645組合3641A和 3636A (或可以各自單獨地發(fā)送(未示出))。數(shù)據(jù)訪問模塊3645可被配置成 經(jīng)由通信3607與節(jié)點環(huán)3605中的一個或多個節(jié)點通信,并訪問在客戶機數(shù)據(jù) 訪問請求3641中指示的數(shù)據(jù)。由此,整個系統(tǒng)可被實例化,其中節(jié)點可加入 和離開節(jié)點環(huán)3605, 一致性可被維護,主節(jié)點被選出且數(shù)據(jù)被可靠地訪問。該 系統(tǒng)中所描述的每一模塊可以執(zhí)行這些功能以及在以上各節(jié)中詳細描述的對 應于每一模塊的其他功能。
在某些實施例中,要被訪問的數(shù)據(jù)包括服務。例如,加入節(jié)點3606可提 供客戶機3615期望訪問的服務。例如,服務可以是電子郵件應用程序??蛻?機3615可以指示要被訪問的數(shù)據(jù),并且數(shù)據(jù)訪問系統(tǒng)3610可被配置成訪問該 數(shù)據(jù),而不論加入節(jié)點是否由于數(shù)據(jù)訪問系統(tǒng)所維護的環(huán)和數(shù)據(jù)一致性而離開 該環(huán)。在其他情況下,所提供的服務可以是鎖管理器、數(shù)據(jù)存儲系統(tǒng)、生產(chǎn)者 -消費者隊列或任何其他服務。在該系統(tǒng)用于訪問諸如數(shù)據(jù)庫等數(shù)據(jù)的情況下, 系統(tǒng)3610可被配置成為副本集中的數(shù)據(jù)維護原子性、 一致性、隔離和耐久性 (ACID)特性的每一個。由此,提出了這樣一種系統(tǒng),其可被配置成提供一 致的、可靠的數(shù)據(jù)訪問,而不論哪一節(jié)點實際包含數(shù)據(jù)、哪些節(jié)點正在加入或 離開節(jié)點環(huán)、或是否有大量包含該數(shù)據(jù)的節(jié)點發(fā)生故障。
在某些情況下,服務所指示的操作可被劃分成改變狀態(tài)的操作和不改變狀態(tài)的操作。在存儲服務的情況下,改變狀態(tài)的操作可被稱為"寫",而不改變 狀態(tài)的操作可被稱為"讀"。在鎖管理器服務的情況下,改變狀態(tài)的操作被稱 為"獲取"和"釋放",而不改變狀態(tài)的操作被稱為"查詢"。在生產(chǎn)者-消 費者隊列(有時用于分布式計算)的情況下,改變狀態(tài)的操作稱為"入隊"和
"出隊",而不改變狀態(tài)的操作稱為"領(lǐng)取(peek)"。由此,在此處的某些
實施例中,術(shù)語"寫"捕捉了改變狀態(tài)的任何操作,而術(shù)語"讀"捕捉了不改 變狀態(tài)的任何操作。
在某些情況下,讀操作由主節(jié)點3211本地地處理。如果在即將的主節(jié)點 處由于客戶機請求的狀態(tài)不在那里存在而無法滿足讀,則該狀態(tài)將(保證)不 會存在于任一副節(jié)點處。在某些實施例中,寫操作可通過主節(jié)點3211來排序。 在這些情況下,主節(jié)點3211可以實際上不本地地寫入客戶機提供的狀態(tài),直 到至少副節(jié)點的寫選出成員確認了它們已經(jīng)寫入了這些狀態(tài)本身。然后,主節(jié) 點3211實際本地地寫入(或嘗試寫入)該狀態(tài)。在某些實施例中,重配置可 以在副本集成員(主或副節(jié)點)不能寫入所請求的狀態(tài)的任何時刻發(fā)生。在這 些情況下,節(jié)點可以通過從副本集中移除其自身來在副本集中啟動重配置。此 外,任何不響應的副節(jié)點將發(fā)生故障(由于完美故障檢測器,這是有保證的), 并且主節(jié)點將通過從副本集中移除該副節(jié)點來觸發(fā)重配置。在某些情況下,這 將不會導致主節(jié)點停止成為副本集的主節(jié)點。
數(shù)據(jù)訪問系統(tǒng)3610可被配置成根據(jù)客戶機數(shù)據(jù)寫請求來寫入數(shù)據(jù)。由此, 在數(shù)據(jù)訪問請求3641 (或數(shù)據(jù)訪問請求3215)是或包括寫請求的情況下,主 節(jié)點3211可指示副節(jié)點3212將客戶機數(shù)據(jù)寫請求中指示的數(shù)據(jù)寫入副節(jié)點中 的數(shù)據(jù)存儲中。在某些情況下,主節(jié)點在兩個階段中將寫請求復制到一個或多 個副節(jié)點3212。該變型的優(yōu)點在于如果寫選出成員是由副本集3210中的所有 副節(jié)點組成,則其允許讀操作由副節(jié)點來服務。在某些情況下,在副節(jié)點處接 受寫操作,且主節(jié)點可以觸發(fā)附加邏輯,如將數(shù)據(jù)個別地寫入每一節(jié)點可用的 穩(wěn)定存儲。
數(shù)據(jù)訪問系統(tǒng)3610可被配置成根據(jù)客戶機數(shù)據(jù)讀請求來讀取數(shù)據(jù)。由此, 在數(shù)據(jù)訪問請求3641 (或數(shù)據(jù)訪問請求3215)是或包括讀請求的情況下,主 節(jié)點3211或副節(jié)點3212可被配置成直接處理讀請求。在某些情況下,主節(jié)點
1053211不必號召副節(jié)點來讀取請求中指示的數(shù)據(jù)。在其他情況下,副節(jié)點能夠自 主地讀取數(shù)據(jù)并響應客戶機數(shù)據(jù)讀請求。
本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所述實施例 在所有方面都應被認為僅是說明性而非限制性的。從而,本發(fā)明的范圍由所附 權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方式的含義和范圍內(nèi)的 所有改變應被權(quán)利要求書的范圍涵蓋。
權(quán)利要求
1. 一種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)在加入節(jié)點加入所述節(jié)點環(huán)時維護環(huán)一致性的方法,所述方法包括加入節(jié)點檢測所述環(huán)上的多個其他節(jié)點的鄰域的動作,所述鄰域至少包括直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點;所述加入節(jié)點向選自所述直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點的直接相鄰節(jié)點中的一個指示所述加入節(jié)點要獲得對于所述加入節(jié)點和所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的動作;所述加入節(jié)點指示要監(jiān)視所選直接相鄰節(jié)點的意圖的動作;所述加入節(jié)點從所選直接相鄰節(jié)點接收指示接受所述加入節(jié)點要獲得對所述加入節(jié)點和所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的第一指示的動作;所述加入節(jié)點從所選直接相鄰節(jié)點接收指示接受所述加入節(jié)點要監(jiān)視所選直接相鄰節(jié)點的意圖的第二指示的動作;所述加入節(jié)點從所選直接相鄰節(jié)點接收指示第一所選直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的第三指示的動作;以及所述加入節(jié)點指示接受所選直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的動作。
2. 如權(quán)利要求1所述的方法,其特征在于,還包括所述加入節(jié)點從另一直接相鄰節(jié)點接收指示對所述加入節(jié)點和所述另一 直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的指示的動作;所述加入節(jié)點從所述另一直接相鄰節(jié)點接收指示所述另一直接相鄰節(jié)點 要監(jiān)視所述加入節(jié)點的意圖的指示的動作;所述加入節(jié)點從所述另一直接相鄰節(jié)點指示所述加入節(jié)點要建立對所述 加入節(jié)點和所述另一直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的 意圖的動作;所述加入節(jié)點指示要監(jiān)視所述另一直接相鄰節(jié)點的意圖的動作;以及 所述加入節(jié)點從所述另一直接相鄰節(jié)點接收指示所述另一直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的指示的動作。
3. 如權(quán)利要求1所述的方法,其特征在于,所述加入節(jié)點向選自所述直接 相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點的直接相鄰節(jié)點中的一個指示所述加 入節(jié)點要獲得對所述加入節(jié)點和所選直接相鄰節(jié)點之間的id空間的一部分的 id空間所有權(quán)的意圖的動作包括,向選自所述直接相鄰前導者節(jié)點和直接相鄰 后繼者節(jié)點的直接相鄰節(jié)點發(fā)送令牌請求的動作,所述令牌請求包括節(jié)點標識符,使得只有具有所述節(jié)點標識符的節(jié)點才能回復;以及第一生存時間持續(xù)時間值,所述第一生存時間持續(xù)時間值指示所述加入節(jié) 點能將與所選直接相鄰節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間。
4. 如權(quán)利要求1所述的方法,其特征在于,所述第一、第二和第三指示被組合在單個指示中。
5. 如權(quán)利要求4所述的方法,其特征在于,接收所述單個指示包括從所選直接相鄰節(jié)點接收第一令牌傳輸?shù)膭幼?,所述第一令牌傳輸包括所述加入?jié)點對所述節(jié)點環(huán)上在所述加入節(jié)點和所選直接相鄰節(jié)點之間的未占用節(jié)點標識符的所有權(quán)范圍;第二生存時間持續(xù)時間值,所述第二生存時間持續(xù)時間值指示所選直接相 鄰節(jié)點能將與所選加入節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及指示所選直接相鄰節(jié)點監(jiān)視所述加入節(jié)點的第一建立授權(quán)。
6. 如權(quán)利要求l所述的方法,其特征在于,所述加入節(jié)點指示接受所 選直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的動作包括向所選直接相鄰節(jié)點 發(fā)送確認消息的動作,所述確認消息包括-所述加入節(jié)點和所選直接相鄰節(jié)點之間的第一所有權(quán)范圍;以及 指示所述加入節(jié)點監(jiān)視所選直接相鄰節(jié)點的第二建立授權(quán)。
7. 如權(quán)利要求2所述的方法,其特征在于,所述加入節(jié)點從所述另一直接 相鄰節(jié)點接收指示對所述加入節(jié)點和所述另一直接相鄰節(jié)點之間的id空間的 一部分的id空間所有權(quán)、以及指示所述另一直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點 的意圖的指示的動作,包括從所述另一直接相鄰節(jié)點接收第二令牌傳輸?shù)膭?作,所述第二令牌傳輸包括第三生存時間持續(xù)時間值,所述第三生存時間持續(xù)時間值指示所述另一直接相鄰節(jié)點能將與所述加入節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間。
8. 如權(quán)利要求7所述的方法,其特征在于,所述加入節(jié)點向所述另一直接 相鄰節(jié)點指示所述加入節(jié)點要建立對所述加入節(jié)點和所述另一直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的動作包括,發(fā)送建立所述加入節(jié)點和所述另一直接相鄰節(jié)點之間的第二所有權(quán)范圍的建立請求的動作,所述建立請求包括第四生存時間持續(xù)時間,所述第四生存時間持續(xù)時間指示所述加入節(jié)點能將與所述另一直接相鄰節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及指示所述加入節(jié)點監(jiān)視所述另一直接相鄰節(jié)點的第三建立授權(quán)。
9. 如權(quán)利要求7所述的方法,其特征在于,所述加入節(jié)點從所述另一直接 相鄰節(jié)點接收指示所述另一直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的指示 的動作包括,接收對所述建立請求的第四建立授權(quán)的動作,所述第四建立授權(quán) 指示所述另一相鄰節(jié)點監(jiān)視所述加入節(jié)點。
10. 如權(quán)利要求l所述的方法,其特征在于,還包括所述加入節(jié)點從所述環(huán)上的至少一個節(jié)點接收否定確認(NAK)消息的 動作,所述NAK消息包括所述NAk發(fā)送者的環(huán)視圖的指示;以及基于所述NAK發(fā)送者的環(huán)視圖更新所述加入節(jié)點的鄰域視圖的動作。
11. 一種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)中用于在 加入節(jié)點在第一和第二直接相鄰節(jié)點之間加入所述節(jié)點環(huán)時維護環(huán)一致性的 方法,所述節(jié)點環(huán)包括第一所選直接相鄰節(jié)點和第二所選直接相鄰節(jié)點,所述 方法包括第一所選直接相鄰節(jié)點從所述加入節(jié)點接收指示所述加入節(jié)點要獲得對 所述加入節(jié)點和所述第一所選直接相鄰節(jié)點之間的id空間的一部分的id空間 所有權(quán)的意圖的指示的動作;所述第一所選直接相鄰節(jié)點從所述加入節(jié)點接收所述加入節(jié)點要監(jiān)視所 選直接相鄰節(jié)點的意圖的指示的動作;所述第一所選直接相鄰節(jié)點向所述加入節(jié)點發(fā)送指示接受所述加入節(jié)點 要獲得對所述加入節(jié)點和所述第一所選直接相鄰節(jié)點之間的id空間的一部分 的id空間所有權(quán)的意圖的第一指示的動作;所述第一所選直接相鄰節(jié)點向所述加入節(jié)點發(fā)送指示接受所述加入節(jié)點 要監(jiān)視所選直接相鄰節(jié)點的意圖的第二指示的動作;所述第一所選直接相鄰節(jié)點向所述加入節(jié)點發(fā)送指示所述第一所選直接相鄰節(jié)點要監(jiān)視所述加入的意圖的第三指示的動作;以及所述第一所選直接相鄰節(jié)點從所述加入節(jié)點接收指示接受所述第一所選 直接相鄰節(jié)點要監(jiān)視所述加入節(jié)點的意圖的指示的動作。
12. 如權(quán)利要求ll所述的方法,其特征在于,還包括所述第一所選直接相鄰節(jié)點向第二所選直接相鄰節(jié)點指示所述第一節(jié)點要終止與所述第二所選直接相鄰節(jié)點的任何監(jiān)視關(guān)系的意圖的動作;所述第一所選直接相鄰節(jié)點從所述第二所選直接相鄰節(jié)點接收指示所述 第二節(jié)點要終止與所述第一所選直接相鄰節(jié)點的任何監(jiān)視關(guān)系的意圖的指示 的動作;以及所述第一所選直接相鄰節(jié)點確認所述第二節(jié)點的終止意圖的動作。
13. 如權(quán)利要求ll所述的方法,其特征在于,還包括 從所述加入節(jié)點接收介紹消息的動作,所述介紹消息包括所指示的為所述加入節(jié)點所擁有的預期的節(jié)點標識符所有權(quán)范圍;以及向所述加入節(jié)點發(fā)送確認消息的動作,所述確認消息包括由所述加入節(jié)點 所標識的節(jié)點標識符范圍與所選直接相鄰節(jié)點的節(jié)點標識符范圍相一致的指 示。
14. 一種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)中用于在 加入節(jié)點在第一和第二直接相鄰節(jié)點之間加入所述節(jié)點環(huán)時維護環(huán)一致性的 方法,所述節(jié)點環(huán)包括第一所選直接相鄰節(jié)點和第二所選直接相鄰節(jié)點,所述方法包括選自直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點的第一所選直接相鄰節(jié) 點向所述加入節(jié)點指示對于所述加入節(jié)點和所述第一所選直接相鄰節(jié)點之間 的id空間的一部分的id空間所有權(quán)的動作;所述第一所選直接相鄰節(jié)點指示所述第一所選直接相鄰節(jié)點要監(jiān)視所述 加入節(jié)點的意圖的動作;所述第一所選直接相鄰節(jié)點接收所述加入節(jié)點要建立對所述加入節(jié)點和所述第一所選直接相鄰節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的 指示的動作;所述第一所選直接相鄰節(jié)點接收所述加入節(jié)點要監(jiān)視所述第一所選直接 相鄰節(jié)點的意圖的指示的動作;以及所述第一所選直接相鄰節(jié)點向所述加入節(jié)點指示所述第一所選節(jié)點要監(jiān) 視所述加入節(jié)點的意圖的動作。
15. 如權(quán)利要求14所述的方法,其特征在于,還包括 所述第一所選直接相鄰節(jié)點從第二所選直接相鄰節(jié)點接收指示所述第二節(jié)點要終止與所述第一所選直接相鄰節(jié)點的任何監(jiān)視關(guān)系的意圖的指示的動 作;所述第一所選直接相鄰節(jié)點向第二所選直接相鄰節(jié)點指示所述第一節(jié)點 要終止與所述第二所選直接相鄰節(jié)點的任何監(jiān)視關(guān)系的意圖的動作;所述第一所選直接相鄰節(jié)點接收確認所述第一節(jié)點的終止意圖的確認的 動作。
16. —種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)中用于在 離開節(jié)點離開所述節(jié)點環(huán)時維護環(huán)一致性的方法,所述節(jié)點環(huán)包括離開節(jié)點、 第一所選直接相鄰節(jié)點和第二所選直接相鄰節(jié)點,所述第一和第二節(jié)點在所述 環(huán)上與所述離開節(jié)點直接相鄰,所述方法包括所述第一所選直接相鄰節(jié)點接收所述離開節(jié)點離開所述節(jié)點環(huán)的動作的 指示的動作;所述第一所選直接相鄰節(jié)點向所述第二所選直接相鄰節(jié)點發(fā)送指示要承 擔所述離開節(jié)點對所述離開節(jié)點和所述第一所選直接相鄰節(jié)點之間的id空間 的一部分的id空間所有權(quán)的意圖的指示的動作;所述第一所選直接相鄰節(jié)點向所述第二所選直接相鄰節(jié)點發(fā)送指示所述 第一所選直接相鄰節(jié)點和所述第二所選直接相鄰節(jié)點之間的至少單向監(jiān)視關(guān) 系的建立的指示的動作;所述第一所選直接相鄰節(jié)點從所述第二所選直接相鄰節(jié)點接收指示接受 所述第一節(jié)點要承擔對所述離開節(jié)點和所述第一所選直接相鄰節(jié)點之間的id 空間的一部分的id空間所有權(quán)的意圖的指示的動作;以及所述第一所選直接相鄰節(jié)點從所述第二所選直接相鄰節(jié)點接收指示所述 第二所選直接相鄰節(jié)點和所述第一所選直接相鄰節(jié)點之間的至少單向監(jiān)視關(guān) 系的建立的指示的動作。
17. 如權(quán)利要求16所述的方法,其特征在于,所述第一所選直接相鄰 節(jié)點接收所述離開節(jié)點離開所述節(jié)點環(huán)的動作的指示的動作包括,所述第一所 選直接相鄰節(jié)點從所述節(jié)點環(huán)上的至少一個節(jié)點接收離開消息,所述離開消息 包括所指示的為所述離開節(jié)點所擁有的節(jié)點標識符所有權(quán)范圍。
18. 如權(quán)利要求17所述的方法,其特征在于,所述第一所選直接相鄰 節(jié)點向所述第二所選直接相鄰節(jié)點發(fā)送指示要承擔所述離開節(jié)點對所述離開節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的指示的動作包括-所述第一所選直接相鄰節(jié)點向所述第二所選直接相鄰節(jié)點發(fā)送建立所述 第一所選直接相鄰節(jié)點和所述第二所選直接相鄰節(jié)點之間的所有權(quán)范圍的第 一建立請求的動作,所述第一建立請求包括第一生存時間持續(xù)時間,所述第一 生存時間持續(xù)時間指示所述第一所選直接相鄰節(jié)點能將與所述第二所選直接相鄰節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及所述第一相鄰節(jié)點接收對所述第一建立請求的第一建立授權(quán)的動作,所述 第一建立授權(quán)指示所述第二相鄰節(jié)點監(jiān)視所述第一所選直接相鄰節(jié)點。
19. 如權(quán)利要求18所述的方法,其特征在于,所述第一所選直接相鄰 節(jié)點從所述第二所選直接相鄰節(jié)點接收指示接受所述第一節(jié)點要承擔對所述 離開節(jié)點之間的id空間的一部分的id空間所有權(quán)的意圖的指示的動作包括所述第一相鄰節(jié)點從所述第二相鄰節(jié)點接收建立所述第一相鄰節(jié)點和所 述第二相鄰節(jié)點之間的所有權(quán)范圍的第二建立請求的動作,所述第二建立請求 包括第二生存時間持續(xù)時間,所述第二生存時間持續(xù)時間指示所述第二相鄰節(jié) 點能將與所述第一相鄰節(jié)點的監(jiān)視關(guān)系認為是活動的持續(xù)時間;以及所述第一相鄰節(jié)點發(fā)送對所述第二建立請求的第二建立授權(quán)的動作,所述 第二建立授權(quán)指示所述第一相鄰節(jié)點監(jiān)視所述第二相鄰節(jié)點。
20. —種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)用于在 聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)維護的副本集內(nèi)執(zhí)行數(shù)據(jù)訪問事務的方法,所述方法包括確定已從節(jié)點的副本集中的多個節(jié)點之中選擇了主節(jié)點的動作,所述主節(jié)點被配置成接受和處理客戶機數(shù)據(jù)訪問請求,所述副本集包括所述主節(jié)點和一 個或多個副節(jié)點;所述主節(jié)點接收一個或多個客戶機數(shù)據(jù)訪問請求的動作,每一數(shù)據(jù)訪問請 求指示至少要在所述副本集中的所述主節(jié)點上訪問的數(shù)據(jù)的至少一部分;所述主節(jié)點以接收到所述客戶機數(shù)據(jù)訪問請求的順序向改變狀態(tài)的每一 客戶機數(shù)據(jù)訪問請求分配數(shù)據(jù)序列號的動作,所述數(shù)據(jù)序列號包括所述副本集 中的每一節(jié)點要遵循的線性化處理順序;所述主節(jié)點向至少一個所述副節(jié)點發(fā)送包括任何對應的數(shù)據(jù)序列號的至 少一個所述客戶機數(shù)據(jù)訪問請求的動作;所述主節(jié)點從至少閾值數(shù)量的副節(jié)點接收指示所述客戶機數(shù)據(jù)訪問請求 的接收的確認的動作;以及所述主節(jié)點提交所述數(shù)據(jù)訪問請求的動作,所述提交包括根據(jù)所述客戶機 數(shù)據(jù)訪問請求來訪問所述數(shù)據(jù)。
21. 如權(quán)利要求20所述的方法,其特征在于,所述主節(jié)點在單個階段 中提交所述數(shù)據(jù)訪問請求。
22. 如權(quán)利要求20所述的方法,其特征在于,還包括從所述節(jié)點的副 本集中的多個節(jié)點之中選擇一主節(jié)點的動作。
23. 如權(quán)利要求20所述的方法,其特征在于,還包括基于最大容許同 時故障數(shù)量確定要成為所述副本集的成員的副節(jié)點的數(shù)量的動作。
24. 如權(quán)利要求20所述的方法,其特征在于,所述確認指示對所述客 戶機數(shù)據(jù)訪問請求的接受或拒絕中的至少一個。
25. 如權(quán)利要求20所述的方法,其特征在于,所述閾值數(shù)量的副節(jié)點 代表選出成員。
26. 如權(quán)利要求25所述的方法,其特征在于,還包括即將的主節(jié)點向 所述副節(jié)點的選出成員發(fā)送確定所述即將的主節(jié)點不知道的任何事務的請求 的動作。
27. 如權(quán)利要求25所述的方法,其特征在于,還包括從所述選出成員 中的每一成員接收所述選出成員中的每一成員至少將所述客戶機數(shù)據(jù)訪問請求插入到按照LSN排序的每一成員的數(shù)據(jù)訪問請求隊列中的指示。
28. 如權(quán)利要求20所述的方法,其特征在于,所述數(shù)據(jù)的部分包括關(guān)于所述副本集本身的一組控制信息,包括LSN、 CSN、 DSN、主節(jié)點身份和副 節(jié)點身份中的至少一個。
29. 如權(quán)利要求20所述的方法,其特征在于,在單個階段中提交所述 數(shù)據(jù)訪問請求包括在不與任一所述副節(jié)點發(fā)送和接收提交查詢的情況下訪問 所述數(shù)據(jù)。
30. 如權(quán)利要求20所述的方法,其特征在于,還包括向第二副本集發(fā) 送所述客戶機數(shù)據(jù)訪問請求的動作,所述第二副本集在與所述主節(jié)點的鄰域不 同的鄰域中。
31. 如權(quán)利要求30所述的方法,其特征在于,所述副本集被請求處理 所述客戶機數(shù)據(jù)訪問請求的第一部分,而所述第二副本集被請求處理所述數(shù)據(jù) 訪問請求的第二不同部分。
32. 如權(quán)利要求31所述的方法,其特征在于,還包括 從所述副本集接收對應于所述客戶機數(shù)據(jù)訪問請求的第一部分的回復的動作;從所述第二副本集接收對應于所述數(shù)據(jù)訪問請求的第二不同部分的回復 的動作;組合所述回復的動作;以及基于所組合的回復生成最新的數(shù)據(jù)訪問響應的動作。
33. —種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)用于在 聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)從副本集訪問數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括被配置成建立所述環(huán)上的多個節(jié)點的鄰域的鄰域建立模塊,所述鄰域至少 包括直接相鄰前導者節(jié)點和直接相鄰后繼者節(jié)點;被配置成確定所建立的鄰域外的加入節(jié)點指示了加入所述節(jié)點環(huán)中所建 立的鄰域的意圖的意圖確定模塊;被配置成維護所建立的鄰域內(nèi)的一致性,使得所述多個節(jié)點中的每一節(jié)點 取得對所述鄰域中的id空間的一部分的id空間所有權(quán)的一致性維護模塊;被配置成確定所述多個節(jié)點中的一個節(jié)點已被選為主節(jié)點的選擇確定模 塊,所述主節(jié)點具有對于被配置成如所述主節(jié)點所指示地響應客戶機數(shù)據(jù)訪問請求的節(jié)點副本集的責任;被配置成接收一個或多個客戶機數(shù)據(jù)訪問請求的請求接收模塊,每一數(shù)據(jù) 訪問請求指示要在所述副本集中的至少一個節(jié)點上訪問的數(shù)據(jù)的至少一部分; 以及被配置成訪問在所述客戶機數(shù)據(jù)訪問請求中指示的數(shù)據(jù)的數(shù)據(jù)訪問模塊。
34. 如權(quán)利要求33所述的系統(tǒng),其特征在于,所述數(shù)據(jù)訪問模塊被配置成根據(jù)客戶機數(shù)據(jù)寫請求來寫入數(shù)據(jù)。
35. 如權(quán)利要求34所述的系統(tǒng),其特征在于,所述主節(jié)點指示副節(jié)點 將所述客戶機數(shù)據(jù)寫請求中指示的數(shù)據(jù)寫入所述副節(jié)點管理的數(shù)據(jù)存儲中。
36. 如權(quán)利要求34所述的系統(tǒng),其特征在于,所述主節(jié)點在兩個階段 中將所述寫請求復制到一個或多個副節(jié)點。
37. 如權(quán)利要求33所述的系統(tǒng),其特征在于,所述數(shù)據(jù)訪問模塊被配 置成根據(jù)客戶機數(shù)據(jù)讀請求來讀取數(shù)據(jù)。
38. 如權(quán)利要求37所述的系統(tǒng),其特征在于,所述客戶機數(shù)據(jù)讀請求 直接由副節(jié)點來處理。
39. 如權(quán)利要求33所述的系統(tǒng),其特征在于,所建立的主節(jié)點的鄰域 是所述主節(jié)點的副本集的副節(jié)點的集合。
40. —種在被配置成進行雙向路由的節(jié)點環(huán)的聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)用于在 聯(lián)盟基礎(chǔ)結(jié)構(gòu)內(nèi)建立和維護一致的副本集的方法,所述方法包括從節(jié)點環(huán)中的多個節(jié)點之中建立副本集的動作,所述副本集包括主節(jié)點和 一個或多個副節(jié)點作為成員;接收指示影響所述副本集成員的至少一個的副本集配置事件發(fā)生的指示 的動作;基于所接收到的指示,確定所述副本集要被重配置的動作,基于所述副本集配置事件的發(fā)生,所述重配置包括從所述副本集中移除現(xiàn)有副節(jié)點、向所述副本集添加新的副節(jié)點、突然轉(zhuǎn)換到新的主節(jié)點以及平滑地轉(zhuǎn)換到新的主節(jié)點 中的至少一個;根據(jù)對應于所述副本集配置事件的重配置來重配置所述副本集的動作。
41. 如權(quán)利要求40所述的方法,其特征在于,所述副本集配置事件包括所述副本集內(nèi)的節(jié)點故障、節(jié)點離開所述副本集和節(jié)點加入所述副本集中的 至少一個。
42. 如權(quán)利要求40所述的方法,其特征在于,還包括維護由一個或多個所述副本集節(jié)點控制的數(shù)據(jù)存儲的一部分的動作。
43. 如權(quán)利要求42所述的方法,其特征在于,還包括所述主節(jié)點接收客戶機數(shù)據(jù)訪問請求的動作,所述客戶機數(shù)據(jù)訪問請求包括要在節(jié)點的副本集內(nèi)的至少一個節(jié)點上訪問的信息的指示;檢測到所述主節(jié)點無法訪問在所接收到的客戶機數(shù)據(jù)訪問請求中指示的信息的至少一部分的動作;所述主節(jié)點將其自身從所述副本集中移除,使得防止存儲在所述主節(jié)點上的信息響應于所述客戶機數(shù)據(jù)訪問請求而被訪問的動作。
44. 如權(quán)利要求40所述的方法,其特征在于,還包括基于所述配置狀 態(tài)信息檢測正在進行中的一個或多個副本集重新配置的動作。
45. 如權(quán)利要求40所述的方法,其特征在于,還包括為所述副本集選 擇一新的主節(jié)點的動作。
全文摘要
在某些實施例中,確定主節(jié)點已從節(jié)點的副本集中的多個節(jié)點中選擇出來。主節(jié)點接收并處理客戶機數(shù)據(jù)訪問請求。該副本集包括該主節(jié)點和其它副節(jié)點。主節(jié)點接收客戶機數(shù)據(jù)訪問請求。主節(jié)點按照接收客戶機數(shù)據(jù)訪問請求的順序向改變狀態(tài)的每一客戶機數(shù)據(jù)訪問請求分配一數(shù)據(jù)序列號。該數(shù)據(jù)序列號包括副本集中的每一節(jié)點要遵循的線性化處理順序。主節(jié)點向副節(jié)點發(fā)送包括任何對應的數(shù)據(jù)序列號的改變的客戶機數(shù)據(jù)訪問請求。主節(jié)點從閾值數(shù)量的副節(jié)點接收指示客戶機數(shù)據(jù)訪問請求的接收的確認。主節(jié)點提交數(shù)據(jù)改變訪問請求。
文檔編號G06F15/16GK101535977SQ200780041759
公開日2009年9月16日 申請日期2007年11月8日 優(yōu)先權(quán)日2006年11月9日
發(fā)明者D·馬爾克, G·K·R·卡基法亞, L·周, L·迅, R·L·哈薩 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
方山县| 邵东县| 都安| 陵川县| 高阳县| 三门县| 阿瓦提县| 吉林省| 定陶县| 广平县| 图们市| 安陆市| 喀什市| 武穴市| 交口县| 沧州市| 临泽县| 金秀| 潮安县| 古田县| 广饶县| 嵊泗县| 乐昌市| 通化县| 天祝| 遂川县| 东乌珠穆沁旗| 太和县| 西充县| 贵阳市| 长宁区| 陆川县| 林口县| 泸西县| 勐海县| 平邑县| 长沙县| 麟游县| 贵南县| 丽江市| 丹江口市|